2009-05-19 8 views
5

XMLスキーマでは、「オカレンスインジケータ」(maxOccurrence、minOccurrence)が指定されています。これらの指標を使用すべき要素(xsd:element、xsd:sequenceまたはxsd:all)の「ベストプラクティス」はありますか?XSDオカレンスインジケータの使用

例:私が到着したい

いずれか

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="X" type="xsd:token" minOccurs="1" maxOccurs="unbounded" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

または

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded"> 
      <xsd:element name="X" type="xsd:token" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

:あなたのシーケンスは一つだけの子供が含まれている場合

 

<XList> 
    <X>First</X> 
    <X>Second</X> 
    <X>Third</X> 
    <X>Fourth</X> 
    <X>Fifth</X> 
... 
</XList> 
 

答えて

6

私は自分自身を見つけました。

私の例の違いは最初の一見ではあまり明らかではありませんが、例が少し複雑であれば意味をなさないでしょう。

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

 

<XList> 
    <X>First X</X> 
    <X>Second X</X> 
    <X>Third X</X> 
    ... 
    <Y>First Y</Y> 
    <Y>Second Y</Y> 
    ... 
</XList> 
 
につながる

 

<XList> 
    <X>Only X</X> 
    <Y>Only Y</Y> 
</XList> 
 

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

一方につながる:

次の拡張は、違いを明確に3210

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded" > 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="2" maxOccurs="2"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

 

<XList> 
    <X>First X</X> 
    <X>Second X</X> 
    <Y>First Y</Y> 
    <X>Third X</X> 
    <X>Fourth X</X> 
    <Y>Second Y</Y> 
    ... 
</XList> 
 

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded" > 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

につながる

 

<XList> 
    <X>First X</X> 
    <X>Second X</X> 
    <X>Third X</X> 
    ... 
    <Y>First Y</Y> 
    <Y>Second Y</Y> 
    ... 
    <X>Fourth X</X> 
    <X>Fifth X</X> 
    <X>Sixth X</X> 
    ... 
    <Y>Third Y</Y> 
    <Y>Fourth Y</Y> 
    ... 
</XList> 
 
につながります
0

、私はそれを想定あまり気にしない実効差。私はそれをxsd:要素に置いていますが、それはシーケンス内に複数の要素があった場合、通常はそれらを置く場所です。

関連する問題