這是XSD Schema的限制。我將引用自:http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/然後評論:
存在着對一組約束元素第三種選擇:該組中的所有元素可能出現一次或根本沒有,他們可以以任何順序出現。所有組(提供SGML &連接器的簡化版本)僅限於任何內容模型的頂層。此外,該小組的所有孩子都必須是單個元素(無組),並且內容模型中沒有元素可能會出現超過一次,即minOccurs和maxOccurs的允許值分別爲0和1.例如,要允許子元素purchaseOrder的出現在任何順序,我們可以重新定義PurchaseOrderType爲: 的「所有」組
<xsd:complexType name="PurchaseOrderType">
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
根據這一定義,一個comment元素可以選擇地出現內purchaseOrder中,它可能之前或任何SHIPTO,收單方後出現和項目元素,但它只能出現一次。此外,所有團體的規定都不允許我們在團體之外宣佈諸如評論之類的要素,作爲使其不止一次出現的手段。 XML模式規定所有組必須作爲內容模型頂部的唯一子項出現。換句話說,下面是非法的: 用非法的例子「所有」集團
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:sequence>
<xsd:element ref="comment" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
我在當時的討論中回憶了那個xsd:all
將是過於複雜的模型,如果它是比這更少受限制。它很快擴展到非確定性解析模型。所以限制是0或1,並且沒有兄弟姐妹。
SGML有一個使用&
連接器的更強大的模型,但並不是所有的系統都實現了它。
編輯如果你想在這個水平,你可以使用的Schematron作爲模式之後的第二次驗證驗證XML。它基於XSLT,這種約束更容易表達。
正確。這個內容模型可以通過分解FILM元素來簡化,所以你有一個外部序列,其中包含一個選擇,然後是對'FILM'的引用。 – 2012-08-21 01:56:56