XSD-ключ с несколькими полями
У меня есть такая структура:
<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 ответ
Верно, кратный child/name
элементы внутри parent
определения являются проблемой. Жаль, что XML-схема не разрешает родительские шаги XPath, так как вы можете выбрать дочернее имя:
<xs:key name="pcdef">
<xs:selector xpath=".//tns:parent/tns:child/tns:name"/>
<xs:field xpath="../../tns:name" />
<xs:field xpath="." />
</xs:key>