XSD: несколько типов с одинаковым именем элемента - PullRequest
6 голосов
/ 24 мая 2011

Я использую xsd для проверки XML. Мне нужно описать один элемент с двумя типами.

   <xsd:choice>
                            <xsd:element name="num" minOccurs="1" type="xsd:integer" fixed="0"/>
                            <xsd:element name="num" minOccurs="1" type="xsd:positiveInteger"/>
</xsd:choice>

Когда я проверяю xml с num = 0, проверка успешна, но когда я проверяю xml с num value = 1 или более, проверка завершается ошибкой Как правильно описать этот случай?

Ответы [ 2 ]

6 голосов
/ 24 мая 2011

Я бы использовал xs: nonNegativeInteger для этого варианта использования:

<xs:element name="num" type="xs:nonNegativeInteger">

Если вы хотите, чтобы элемент поддерживал несколько типов, вы можете использовать объединение:

<xs:element name="num" default="0">
  <xs:simpleType>
    <xs:union memberTypes="xs:integer xs:positiveInteger" />
  </xs:simpleType>
</xs:element>
3 голосов
/ 25 мая 2011

У вас не может быть двух элементных частиц в одном и том же сложном типе с одним и тем же именем и разными типами (это правило называется «Согласование объявлений элементов», если вы хотите найти его). Частично причина в том, что XSD используется не только для проверки, но и для типизации данных, например, в привязке данных Java.

Но я думаю, что то, что вы ищете здесь, является типом объединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...