Как сделать так, чтобы атрибут use (обязательный / необязательный) зависел от другого значения? - PullRequest
2 голосов
/ 04 февраля 2009

Я пытаюсь сделать что-то конкретное в XML-схеме XSD. Я хочу установить элемент как use="required", только если есть определенное значение для атрибута другого элемента.

Пример:

<udi att1="all">
   <name att2="dsd"/>
   <phone att3="dsd"/>
</udi>

Я хочу, чтобы элемент phone был обязательным, только если значение att1 равно all.

Мне сказали, что XPath может работать для этого - или есть лучший способ?

Ответы [ 2 ]

8 голосов
/ 04 февраля 2009

XML не реляционный, он иерархический. Схемы предназначены для обеспечения соблюдения правил вложения, а не правил между братьями и сестрами. Это просто не то, что вы можете сделать с XSD.

Однако вы можете сделать это при разборе или создании документов, соответствующих формату. В этом случае, анализируя XML-документ, вы применяете ограничения, подобные тем, которые вы указали в своем вопросе.

0 голосов
/ 12 августа 2016

Для потомков: это требование может быть достигнуто:

(a) с использованием новых функций в XSD 1.1 (утверждения, условное присвоение типа)

(b) с использованием Schematron для проверки вместе с XSD.

...