Можно ли сделать тег перечисления xsd: обязательным / обязательным? - PullRequest
2 голосов
/ 24 июня 2011

Краткий вопрос: может ли тег перечисления xsd: enumeration иметь обязательный атрибут, как и в любом теге, использующем это перечисление, ДОЛЖНЫ использовать конкретное значение перечисления хотя бы один раз?

Подробности: например, допустим, что я уже определил тег xml fruit в моем xsd. У тега fruit есть атрибут, значением которого является перечисление FruitType. Это определить как таковое:

<xsd:simpleType name="FruitType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Apple" />
<xsd:enumeration value="Banana" />
<xsd:enumeration value="Peach" />
<xsd:enumeration value="Orange" />
</xsd:restriction>
</xsd:simpleType>

Я хочу сделать так, чтобы значение перечисления Apple было таким, чтобы у пользователя был хотя бы один тег фруктов с атрибутом Apple. Можно ли использовать такой тег в перечислении xsd? Я подумал, что, возможно, мы можем поставить use = "required" или minOccurs = "1" в теге перечисления xsd:. Пожалуйста, дайте мне знать.

Спасибо!

1 Ответ

2 голосов
/ 25 июня 2011

Что вы подразумеваете под "пользователем должен быть хотя бы один фруктовый тег с атрибутом Apple". Вы имеете в виду, что это значение должно появляться где-то в каждом экземпляре документа, если документ должен быть действительным? Или в какой-то более узкой области (скажем, внутри элемента FruitBasket)? В обоих случаях это не свойство типа перечисления, это ограничение для рассматриваемого элемента или документа.

Я не думаю, что есть какой-либо способ сделать это в XSD 1.0. В XSD 1.1, как и в большинстве случаев, это можно сделать с помощью утверждений. Например

<xs:element name="FruitBasket">
  ...
  <xs:assert test=".//Fruit = 'Apple'"/>
</xs:element>

XSD 1.1 в настоящее время реализован в Xerces и Saxon.

...