2009-07-23 3 views
2

<xs:group><xs:all>の内部に表示されない理由はありますか?<xs:sequence>"xs:groupはxs:allの内部に配置できません"という制限を回避するには?

例を見てみましょう。タグのリスト(<a><d><e><f> - 下の例を参照)は、特定の順序では表示されませんが、常に別のオブジェクト(<foo>または<bar>)にラップされています。 <foo> = {<a>,<b>,<c>,<d>}; <bar> = {<e><b><c><f>}

<foo> 
    <a>a1</a> 
    <b>b1</b> 
    <c>c1</c> 
    <d>d1</d> 
</foo> 

<foo> 
    <d>d2</d> 
    <b>b2</b> 
    <c>c2</c> 
    <a>a2</a> 
</foo> 

<bar> 
    <e>e3</e> 
    <b>b3</b> 
    <c>c3</c> 
    <f>f3</f> 
</bar> 

Iはxs:groupにタグ<b><c>を抽出し、XSDで<foo><bar>のcomplexTypeを定義する際<xs:group ref="...">を使用します。しかし、上記の制約のため、これは不可能です。

この問題の回避策として何をお勧めしますか?チャンスは、私は何か愚かなことをしていますが、なぜこれは間違っているのでしょうか?

+1

なぜ今私はw3cが嫌いなのか分かります。 – Will

+1

このような単純な要件はw3cでは提供されていませんか?悪い!! – Archana

答えて

0
私はあなたがおそらく既に作ってみたものを提案します回避策として

決定的なコンテンツルールが制限の理由です。完全な理解を望むなら、van der Vlistの本またはthe standardを読んでください。

1

この制限が存在する理由私は別の<all>内部(入れ子になった<choice><all>付き)フル機能<group>の可能な組み合わせは、開発者(だけでなく、私には少し混乱するかもしれないことを見ることができますが、私は、言うことができませんとにかく)、特にユーザーに。つまり、<b><c>のための別の<complexType>を宣言すると、あなたの<foo><bar>ことを使用する:

<xs:complexType name="bcType"> 
    <xs:all> 
     <xs:element name="b" type="xs:string" /> 
     <xs:element name="c" type="xs:string" /> 
    </xs:all> 
    </xs:complexType> 

    <xs:complexType name="foo"> 
    <xs:all> 
     <xs:element name="d" type="xs:string" /> 
     <xs:element name="a" type="xs:string" /> 
     <xs:element name="bc" type="bcType" /> 
    </xs:all> 
    </xs:complexType> 

    <xs:complexType name="bar"> 
    <xs:all> 
     <xs:element name="f" type="xs:string" /> 
     <xs:element name="e" type="xs:string" /> 
     <xs:element name="bc" type="bcType" /> 
    </xs:all> 
    </xs:complexType> 
+0

私は間違いなくこのアプローチを使用しますが、 "b"と "c"要素の名前を "bc"に変更する必要があります。これは従来の理由により適切な解決策ではありません。私はそれらの名前を "b"と "c"にする必要があり、それがxs:groupを使う理由です。 – mindas

+1

それでは、残念ながらを使用しないでください。 –

関連する問題