XSD: использование взаимоисключающих тегов - PullRequest
0 голосов
/ 04 февраля 2020

Я пишу .xsd файл и у меня есть раздел в. xml, подобный следующему

<time start="2006-10-02T09:15:26.43Z" />

-OR-

<time end="2006-10-02T09:15:26.43Z" />

Мои первые исследования привели использовать теги в XSD, например:

<xs:element name="time">
     <xs:complexType>
          <xs:choice>
               <xs:element name="start">
                    <xs:simpleType>
                         <xs:restriction base="xs:dateTime">
                              <xs:pattern value=".*Z" />
                         </xs:restriction>
                    </xs:simpleType>
               </xs:element>
               <xs:element name="end">
                    <xs:simpleType>
                         <xs:restriction base="xs:dateTime">
                              <xs:pattern value=".*Z" />
                         </xs:restriction>
                    </xs:simpleType>
               </xs:element>
          </xs:choice>
     </xs:complexType>
</xs:element>

Когда я проверяю свой XSD на наличие известного товара, я получаю ошибку, что «атрибут« начало »не может появляться в элементе« время »».

Есть идеи, где я ошибся?

Редактировать: Очевидно, имеет значение, что я использую 1.0, поскольку это означало бы, что у меня нет доступа к утверждению.

1 Ответ

0 голосов
/ 05 февраля 2020

В вашем экземпляре документа start и end являются атрибутами, но вы объявили их в схеме как элементы. Они должны быть объявлены с использованием xs:attribute.

. В XSD 1.0 вы можете объявить два необязательных атрибута, но вы не можете объявить, что они являются взаимоисключающими. Для этого вам нужны XSD 1.1 и xs:assert.

...