XSD-ключ с несколькими полями - PullRequest
1 голос
/ 26 апреля 2011

У меня есть такая структура:

<parent>
    <name>p1</name>
    <child>
        <name>c3</name>
        <name>c1</name>
    </child>
</parent>
<parent>
    <name>p2</name>
    <child>
        <name>c1</name>
        <name>c2</name>
    </child>
</parent>

Я хочу иметь другой раздел, значения которого должны быть проверены снова в первом разделе.Так что

<parent name="p1"> 
    <child name="c3" /> 
</parent>

или

<parent name="p2">
    <child name="c2" />
</parent>

должны быть действительными, но ни

 <parent name="p1"> 
    <child name="c2" /> 
 </parent>

, ни

<parent name="p2">
    <child name="c4" />
</parent>

я думал оиспользуя ключ с несколькими полями

<xs:key name="k">
    <xs:selector xpath="tns:parent" />
    <xs:field xpath="tns:name" />
    <xs:field xpath="tns:child/tns:name" />
</xs:key>

, но похоже, что этот подход никогда не сработает, поскольку ключевые поля должны быть уникальными.

Возможно ли это сделать с помощью XML Schema 1.0?

1 Ответ

1 голос
/ 27 апреля 2011

Правильно, проблема заключается в нескольких элементах child/name в определениях parent.Жаль, что XML Schema не разрешает родительские шаги XPath , так как вы можете выбрать дочернее имя:

<xs:key name="pcdef">
  <xs:selector xpath=".//tns:parent/tns:child/tns:name"/>
  <xs:field xpath="../../tns:name" />
  <xs:field xpath="." />
</xs:key>
...