Можно ли определить xs:any с обязательными элементами внутри?
Я заинтересован в XML-файлах со структурой:
<resource>
<type>STRING</type>
<metadata>
<ANY_EXTERNAL_ELEMENT1>
<value>STRING</value>
</ANY_EXTERNAL_ELEMENT1>
<ANY_EXTERNAL_ELEMENT2>
<reference>STRING</reference>
</ANY_EXTERNAL_ELEMENT2>
<ANY_EXTERNAL_ELEMENT3>
<value>STRING</value>
</ANY_EXTERNAL_ELEMENT3>
</metadata>
</resource>
Элемент метаданных должен иметь по крайней мере один дочерний элемент ANY_EXTERNAL_ELEMENT, у которого должен быть только один дочерний элемент с именем в множестве {"reference", "value"}.
Можно ли добиться этого в XMLSchema?
Что я пробовал:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="resource">
<xs:complexType>
<xs:all>
<xs:element name="type" type="xs:string"/>
<xs:element name="metadata">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element name="reference"/>
<xs:element name="value"/>
</xs:choice>
</xs:complexType>
</xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
Но это не верно. Мне нужна помощь.
Заранее спасибо.
2 ответа
Решение
Нет, вы не можете ограничить такой "внешний" элемент. Модель содержимого для
<resource>
<type>STRING</type>
<metadata>
<external value="STRING">
<ANY-EXTERNAL-ELEMENT-1/>
</external>
<external ref="STRING">
<ANY-EXTERNAL-ELEMENT-2/>
</external>
</metadata>
</resource>
Но, конечно, я понятия не имею, каков ваш вариант использования.
Я думаю, что вы должны перечислить возможные элементы (ANY-EXTERNAL-ELEMENT-1 и т. Д.) Либо в xs:choice, либо с помощью группы подстановки, если вы хотите указать их тип.