/ / xsd - чи можу я обмежити атрибут ключовим чи АБО перерахуванням? - xml, валідація, xsd, об'єднання, keyref

xsd - Чи можу я обмежити атрибут ключем або переліком OR? - xml, перевірка, xsd, union, keyref

Я хочу дозволити example.xml

<defs>
<def n="a"/>
<def n="b"/>
</defs>

<refer-to-def n="a"/>
<refer-to-def n="b"/>
<refer-to-def n="predefined"/>
<refer-to-def n="also-predefined"/>

с.т. єдино можливі значення //refer-to-def/@n ті, які дав //def/@n АБО "попередньо визначені" АБО "також попередньо визначені. Зокрема, якщо я додав <refer-to-def n="never-defined"/> він більше не повинен підтверджувати.

Я можу зробити перше обмеження, використовуючи

<xs:keyref name="defRef" refer="def">
<xs:selector xpath=".//refer-to-def" />
<xs:field xpath="@n" />
</xs:keyref>
<xs:key name="def">
<xs:selector xpath="./defs/def" />
<xs:field xpath="@n" />
</xs:key>

але це, звичайно, не вдається, якщо є .xml <refer-to-def n="predefined"/>.

Друге обмеження я можу зробити, визначившись <def>с n атрибут з

  <xs:attribute name="n" use="required">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="predefined"/>
<xs:enumeration value="also-predefined"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>

але, звичайно, це не включає динамічний перелік n-значень defs.

Як я комбіную ці два, щоб n може бути або з динамічного списку, або з попередньо визначеного набору, і мій example.xml підтверджує?

Відповіді:

1 для відповіді № 1

Неможливо зробити це в XSD 1.0.

У XSD 1.1 ви можете робити що завгодно із твердженнями.