2016-04-15 41 views
2

我不知道爲什麼不必編寫爲什麼xsd:complexType不是屬性?

<xs:element name="elementName"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="subElementName" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

我不能指定爲元素的屬性,它是xs:complexType?或者是否有xs:superSecretThingIdontKnowAbout,它結合了xs:elementxs:complexType?雖然我們在這裏有什麼結合也xs:sequence。我期望的是,上面的代碼可以用下面的方式編寫。

<xs:superSecretThingIdontKnowAbout name="elementName" sequence="true"> 
    <xs:element name="subElementName" type="xs:string"/> 
<xs:superSecretThingIdontKnowAbout> 

語境

因爲XSD是XML,可以在心願延長,我想補充一點,我正在寫一個字段的架構在MySQL數據庫中。我不知道這是否會限制這種可能性。任何對此不起作用的答案都是受歡迎的,因爲這可以證實我並不是唯一受此影響的人。

回答

1

您唯一缺少的superSecretThingIdontKnowAbout是屬性更適合表示簡單的無結構值;元素更適合表示結構。見XML Elements vs XML Attributes

複雜類型有結構;這不是一個標量。從一個元素移動到一個屬性阻礙了結構的表達。例如,在您的替代設計中,您將如何表示序列中的發生指標?更多屬性?啊。如何在子序列中混合選擇組成的序列?等等。

大多數人都感嘆XSD中缺乏正交性。你的建議會讓事情變得更糟。

待辦事項,但是,您可以定義複雜的類型,並通過屬性引用它們:

<xs:element name="a" type="aType"/> 

這是能夠分享複雜類型定義是非常有用的。

+0

感謝您的靈感答案。如果我可以進一步問你,一個'element'包含哪個元素,在這個元素旁邊包含'complextype'? – YannickSSE

+0

'xs:element'聲明可能由'xs:simpleType'而不是'xs:complexType'組成。它可能還包括一個'xs:annotation'或一些'xs:unique','xs:key'或'xs:keyref'子元素。 – kjhughes

+1

我現在明白你的觀點,實際上它幫助我理解了我已經閱讀過的東西。我想我現在已經理解了這個概念。再次感謝。 – YannickSSE