2015-11-13 48 views
1

根據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。但我想定義一個模式,其中存在兩個元素(上例中的firstlast)或者兩者都不存在,因此我將它們組成一個組。然後我想讓組的一部分爲xs:all,因爲該組可以以任何順序與其他元素(例如,上面的id元素)一起出現。換句話說,我想要將幾個元素作爲一個整體來選擇。如果沒有xs:group可以成爲xs:all的孩子,我該如何實現這一目標?

+0

我不認爲您可以在XSD 1.0中同時表達「既不兼容」也不含「任何順序」部分。你可以在1.1中通過對父進行斷言來完成。或者有一個明確的''元素來包含'first'和'last'當然,這可能會更清楚。 –

+0

另外XSD 1.1 http://www.w3.org/TR/xmlschema11-1/#element-all允許你在'all'中引用'group',所以首先檢查你是否不能移動到一個解析器,支持XSD 1.1。 –

回答

2

XML Schema 1.0 only permitsxs:element(和xs:annotation)根據xs:all

<all 
    id = ID 
    maxOccurs = 1 : 1 
    minOccurs = (0 | 1) : 1 
    {any attributes with non-schema namespace . . .}> 
    Content: (annotation?, element*) 
</all> 

它不允許xs:groupxs:sequencexs:choice

XML Schema 1.1 permitsxs:elementxs:any,或xs:groupxs:all

<all 
    id = ID 
    maxOccurs = (0 | 1) : 1 
    minOccurs = (0 | 1) : 1 
    {any attributes with non-schema namespace . . .}> 
    Content: (annotation?, (element | any | group)*) 
</all> 

注意:允許無序的元素聽起來理想,但很少真正需要。在實踐中通常xs:sequence就足夠了。

如果你願意放棄無序的要求,你可以(甚至在XSD 1.0)要求firstlast爲「都存在或兩者都不存在」如下:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="a"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:sequence minOccurs="0"> 
      <xs:element name="first" type="xs:string"/> 
      <xs:element name="last" type="xs:string"/> 
     </xs:sequence> 
     <xs:element name="id" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

你說得對。但是我必須使用XML Schema。 – mattsun

+0

*你說得對。但是我必須使用XML Schema *:你是說你必須使用XML Schema ** 1.0 **嗎? – kjhughes

+0

對,我的意思是1.0 ... – mattsun

相關問題