2013-10-07 56 views
3

當使用XML Schema來聲明一個complexType只有一個子元素,所有下面三種方式實現這一目標:如何聲明一個complexType只有一個子元素?

<xs:complexType> <xs:sequence> <xs:element ref="somevalue"/> </xs:sequence> </xs:comlexType> 
<xs:complexType> <xs:choice> <xs:element ref="somevalue"/> </xs:choice> </xs:comlexType> 
<xs:complexType> <xs:all>  <xs:element ref="somevalue"/> </xs:all>  </xs:comlexType> 

顯然,sequencechoiceall沒有必要爲一個單一的元素,因爲它們應該用來指示多個元素的順序。 是否有更簡明的方法來聲明只有一個子元素的complexType(即一個,消除了使用sequenceallchoice,不知何故)

+2

[架構規範的早期工作草案](http://www.w3.org/TR/2000/WD-xmlschema-1-20000407/#declare-type)假設嵌套'元素「聲明直接在'complexType'內部,但是在規範達到其最終形式之前將其刪除,以便總是需要顯式的'sequence','choice'或'all'。 –

+0

好吧,我會選擇順序:) – MengT

回答

5

就消除xs:sequencexs:choice,或xs:all,是不是一種選擇:

<xs:complexType name="cType"> 
    <xs:element name="e"/> 
    </xs:complexType> 

無效。

XML Representation of Complex Type Definitions參見其中complexType的內容模型定義如下:

(註釋?,(simpleContent的|複雜內容|((組|所有 |選擇|序列)+,((屬性| attributeGroup )*, anyAttribute?))))

沒有規定element是的complexType直接孩子。

+1

你的解釋和URL使一切都清楚,謝謝!所以它看起來像XML Schema沒有提供一種簡潔的方式來聲明單個元素complexType,我必須始終將一個元素放入所有|選擇|序列|組。 – MengT

相關問題