根據this page(和我的做法),xs:group
元素不能是xs:all
的子元素。 因此,像XML架構,爲什麼xs:group不能成爲xs:all的孩子?
<xs:group name="g">
<xs:element name="first" type="xs:string"/>
<xs:element name="last" type="xs:string"/>
</xs:group>
<xs:all>
<xs:group ref="g" minOccurs="0" maxOccurs="1"/>
<xs:element name="id" type="xs:string"/>
</xs:all>
是無效的,因爲組不能在裏面xs:all
。但我想定義一個模式,其中存在兩個元素(上例中的first
和last
)或者兩者都不存在,因此我將它們組成一個組。然後我想讓組的一部分爲xs:all
,因爲該組可以以任何順序與其他元素(例如,上面的id元素)一起出現。換句話說,我想要將幾個元素作爲一個整體來選擇。如果沒有xs:group
可以成爲xs:all
的孩子,我該如何實現這一目標?
我不認爲您可以在XSD 1.0中同時表達「既不兼容」也不含「任何順序」部分。你可以在1.1中通過對父進行斷言來完成。或者有一個明確的''元素來包含'first'和'last'當然,這可能會更清楚。 –
另外XSD 1.1 http://www.w3.org/TR/xmlschema11-1/#element-all允許你在'all'中引用'group',所以首先檢查你是否不能移動到一個解析器,支持XSD 1.1。 –