2017-07-29 127 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>