首页 > 解决方案 > XSD:使用互斥标签

问题描述

我正在编写一个 .xsd 文件并在 .xml 中有一个类似于以下内容的部分

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

-或者-

<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 时,我收到错误消息“属性 'start' 不允许出现在元素 'time' 中。

知道我哪里出错了吗?

编辑:显然我使用 1.0 很重要,因为这意味着我无法访问断言。

标签: xmlxsdxsd-validation

解决方案


在您的实例文档中,startend是属性,但您已在架构中将它们声明为元素。它们需要使用xs:attribute.

在 XSD 1.0 中,您可以声明两个可选属性,但不能声明它们是互斥的。为此,您需要 XSD 1.1 和xs:assert.


推荐阅读