2016-05-10 12 views
0

XMLのスキーマを定義したいところです。ここでは、矢印を定義することができます。限られた数の内部アイテムでシーケンスを作成し、同時に各アイテムタイプの最大発生数を制限するにはどうすればよいですか?矢印の定義は、任意の要素が含まれていない場合に 私の実際のバージョンが検出されない:1つまたは2つの内部要素を持つXMLシーケンス

<xs:element name="Arrow"> 
<xs:annotation> 
    <xs:documentation>Arrow with fletching, head or both.</xs:documentation> 
</xs:annotation>  
<xs:complexType> 
    <xs:sequence minOccurs="1" maxOccurs="2"> 
     <xs:element minOccurs="0" name="Fletching" maxOccurs="1"> 
     </xs:element> 
     <xs:element minOccurs="0" name="Head" maxOccurs="1"> 
     </xs:element> 
    </xs:sequence> 
[...] 

このスキーマを使用して、私が検証することを期待:

<Arrow> 
    <Head/> 
</Arrow> 

<Arrow> 
    <Fletching/> 
</Arrow> 

<Arrow> 
    <Head/> 
    <Fletching/> 
</Arrow> 

OKとして。 OKではないとして

そして

<Arrow/> 

または

<Arror> 
</Arrow> 

答えて

1

あなたはセットで二つ以上の要素がある場合には

<choice> 
    <sequence> 
    <element ref="Fletching"/> 
    <element ref="Head" minOccurs="0"/> 
    </sequence> 
    <sequence> 
    <element ref="Head"/> 
    <element ref="Fletching" minOccurs="0"/> 
    </sequence> 
</choice> 

で欲しいものを得ることができます(順序は、いくつかの情報を伝達されていない限り)、順序を処方することは通常簡単です:

<choice> 
    <sequence> 
    <element ref="Fletching"/> 
    <element ref="Head" minOccurs="0"/> 
    </sequence> 
    <sequence> 
    <element ref="Head"/> 
    </sequence> 
</choice> 

XSD 1.1では、親に少なくとも1つの子があるという主張を持つxsd:allを使用することもできます。

関連する問題