2016-04-15 8 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:elementxs:complexTypeを組み合わせたxs:superSecretThingIdontKnowAboutがありますか?私たちはそこにいる間にも何かを組み合わせているものもあります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

あなたの不思議な答えに感謝します。私があなたにさらに尋ねることができるなら、あなたはこの要素の隣に 'complextype'を含んでいる' element '要素をどのような要素に入れますか? – YannickSSE

+0

'xs:element'宣言は' xs:complexType'ではなく 'xs:simpleType'で構成されています。 'xs:annotation'やいくつかの' xs:unique'、 'xs:key'、' xs:keyref'子も含まれます。 – kjhughes

+1

私は今あなたの意見を見て、私がすでに読んだことを理解するのを助けました。私は今、そのコンセプトを把握したと思う。再度、感謝します。 – YannickSSE

関連する問題