Как выбрать один и только один элемент в определении схемы XML - PullRequest
2 голосов
/ 19 марта 2011

извиняюсь, если об этом уже спрашивали, но я искал сайт ...

В любом случае, я пытался решить, как обеспечить выбор одного и только одного элемента в XML-схеме.

Например, скажем, вам нужно выбирать между одним яблочным, апельсиновым или банановым элементом, но у вас НЕТ яблок, апельсинов или банановых элементов.

Теперь я попробовал это:

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://tempuri.org/Fruit"
            xmlns="http://tempuri.org/Fruit"
            elementFormDefault="qualified">

      <xsd:complexType mixed="true">
        <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="1">
              <xsd:element name="banana" type="xsd:string"/>
              <xsd:element name="apple" type="xsd:string"/>
              <xsd:element name="orange" type="xsd:string"/>
            </xsd:choice>
        </xsd:sequence>
      </xsd:complexType mixed="true">

</xsd:schema>

Теперь это здорово, однако <choice> не один и только один , но на самом деле ноль или только один . Как бы я обеспечил, чтобы количество элементов в файле определения схемы XML было единичным?

Ответы [ 2 ]

2 голосов
/ 19 марта 2011

Таким образом:

<xsd:choice minOccurs="1" maxOccurs="1">

Модифицированная схема: я добавил Fruit - root и изменил xsd на xs

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="Fruit">
      <xs:complexType  mixed="true">
        <xs:sequence>
            <xs:choice minOccurs="1" maxOccurs="1">
              <xs:element name="banana" type="xs:string"/>
              <xs:element name="apple" type="xs:string"/>
              <xs:element name="orange" type="xs:string"/>
            </xs:choice>
        </xs:sequence>
      </xs:complexType>
</xs:element>
</xs:schema>
0 голосов
/ 20 марта 2019

@ smas ответ правильный. Однако атрибуты minOccurs и maxOccurs по умолчанию равны 1, если они явно не объявлены в xs: choice ( source ). Так что вы можете просто избавиться от атрибутов в xs: choice и получить желаемое поведение.

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