XSD complexContent限制

时间:2017-07-29 13:40:03

标签: xml xsd

我在w3schools上找到了以下示例。

<xs:complexContent>
  <xs:restriction base="xs:integer">
    <xs:attribute name="prodid" type="xs:positiveInteger"/>
  </xs:restriction>
</xs:complexContent>

我正在搜索许多文档,但仍然没有得到它:当complexContent没有“mixed”属性时,该元素没有任何文本节点,因此不需要任何数据类型。但为什么<xs:restriction base="xs:integer">?据我所知,这绝对没有什么用?

1 个答案:

答案 0 :(得分:2)

根据XML Schema规范,我不认为上述复杂的内容片段(或链接页面上的内容片段)是正确的,因此您的关注点是有意义的。如果您使用XML Schema验证引擎进行尝试,则应该抛出错误。具有复杂内容(仅元素或混合)的复杂类型不能通过简单类型的限制来派生。

具有空内容和属性的复杂类型可以定义如下:

<xs:complexType>
    <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>

仅仅为了完整性:在技术上可行的是,派生出一个必须具有&#34;空内容的复杂类型&#34; (请注意引号)来自简单类型,但是,这必须通过扩展来完成,而简单类型必须是包含空字符串的单例空格,以便不允许任何内容。然后,获得的复杂类型将具有必须为空字符串的简单内容 - 因此严格来说,它实际上不是空内容,但在验证实例时它确实如此。

<xs:simpleType name="empty">
    <xs:restriction base="xs:string">
        <xs:length value="0"/>
    </xs:restriction>
</xs:simpleType>

<xs:complexType>
    <xs:simpleContent>
        <xs:extension base="empty">
            <xs:attribute name="prodid" type="xs:positiveInteger"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>