2009-03-27 5 views
2

XSDスキーマでattributeGroupが定義されています。私は読んで(属性のすべてが指定されていない、または何もされているいずれかのように)私は、グループ全体の利用の選択性を指定することができる方法はありません、試してきたものから、のようなもの:XSD attributeGroupはオプションですか?

<xs:attributeGroup name="NameDesc"> 
    <xs:attribute name="n" type="xs:string" use="required"/> 
    <xs:attribute name="d" type="xs:string" use="required"/> 
    <xs:attribute name="uinf" type="xs:string" use="required"/> 
    </xs:attributeGroup> 

    <xs:complexType name="g"> 
    <xs:attributeGroup ref="tns:NameDesc" use="optional" /> 
    </xs:complexType> 

use = "required"、attributeGroup参照に追加しましたが、これは許可されていません)。私はそうですか、これを達成する方法はありますか?

私はHow to make "use" attribute (required/optional) depend on another value?を読んだことがありますが、これは私の場合に当てはまりません。

答えて

4

私が知っている限り(誰かが間違っていると私を修正してください)、そのような属性を依存させることは不可能です。

attributeGroupを実際の要素にすることを検討できますか?そうすれば、要素全体が子要素として存在してもいなくてもよい。

これは、スキーマをオブジェクトにマッピングする場合には、より良い設計になります。

+0

はい、これはおそらく良いオプションです。ありがとう、私はそれにもかかわらず。 –

+1

同じ名前の要素に異なる型を適用することでシミュレーションできますか?その型の1つだけに属性グループがありますか? のようなXML多型。私はそれが実用的であると言っているわけではありません:-) – 13ren

-1

attributeGroupを使用せずにこれを行う方法は他にもあります。 のminOccurs =「0」のmaxOccurs =「1」

<xs:complexType name="g"> 
<xs:sequence> 
    <xs:attribute name="type"/> 
    <xs:sequence minOccurs="0" maxOccurs="1"> 
    <xs:attribute name="n" type="xs:string" use="required"/> 
    <xs:attribute name="d" type="xs:string" use="required"/> 
    <xs:attribute name="uinf" type="xs:string" use="required"/> 
    </xs:sequence> 
</xs:sequence> 
</xs:complexType> 

3要素の属性グループをオプションにし、1が使用されている場合は、すべてが必要:あなたのようなものを使用することができます。

参考:W3 Wiki

+3

あなたが引用したページは事実上、この問題を解決するための希望リストです。有効なXSD文法は使用しません。 Co-constraintユースケースのいくつかのページでは、このスタイルのサンプルソリューションが提供されていますが、標準のXSD表記が使用されていますが、コンテンツモデル内とその後ろに 'xsd:attribute'宣言は無条件です)。 - [W3 Wiki](http://www.w3.org/wiki/Grammaticalization) – dcsohl