Другой вопрос XSD - как я могу добиться того, чтобы следующие элементы XML были действительными:
<some-element>
<type>1</type>
<a>...</a>
</some-element>
<some-element>
<type>2</type>
<b>...</b>
</some-element>
Подэлементы (либо <a>
, или <b>
) должны зависеть от содержимого <type>
(также может быть атрибутом). В RelaxNG это было бы так просто, но RelaxNG не поддерживает целостность ключей :(
Есть ли способ реализовать это в XSD?
Примечание. XML-схема версии 1.1 поддерживает <xs:alternative>
, что может быть решением, но на самом деле никакая эталонная реализация (например, libxml2) пока не поддерживает это. Поэтому ищу обходные пути. Единственный способ, который я придумал, это:
<type>1</type>
<some-element type="1">
<!-- simple <xs:choice> between <a> and <b> goes here -->
<a>...</a>
</some-element>
<!-- and now create a keyref between <type> and @type -->