2017-07-29 85 views
1

我在w3schools上找到以下示例。XSD complexContent限制

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

我正在寻找通过许多单证,但仍然不明白这一点:当一个复杂内容没有“混”属性的元素没有任何文本节点,因此不需要任何数据类型。但为什么<xs:restriction base="xs:integer">?据我了解,这绝对没有?

回答

2

根据XML Schema规范,我不认为上述复杂的内容片段(或链接页面上的内容片段)是正确的,因此您的担忧是有道理的。如果您尝试使用XML Schema验证引擎,它应该会引发错误。复杂内容(仅限元素或混合)的复杂类型不能通过简单类型的限制来派生。

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

只是为了完整性::也技术上是可行的以导出复杂类型,必须有“空内容”(介意

复杂类型与空内容和属性可以被定义如下引号),但是,这必须通过扩展来完成,并且简单类型必须是包含空字符串的单例空间,以便不允许任何内容。然后获得的复合类型将具有简单的内容,必须是空字符串 - 所以它实际上不是空的内容,但它在确认实例时的确如此。

<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>