2011-09-14 6 views
1

最初のn個の要素の後に、何らかの順序で並べ替えることができるいくつかの要素が必要です。私はそれが2つの最初の要素を持っており、その3つの要素が続いている正確な順序で 、 でなければならない必要とする必要がxsd:sequenceとxsd:allとの混合方法

<root> 
    <person> 
     <fn>First name</fn> 
     <ln>Last Name</ln> 
     <gender>F</gender> 
     <age>33</age> 
     <middleName>Middle</middleName> 
    </person> 
</root> 

、およびこれら:

たとえば、することができます私はこのXMLを持っていると言います3の順序は任意です。

私はこれを試してみましたが、それは、スキーマのための有効なXMLだようにそれはいないようです:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="person"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="fn" minOccurs = "1" maxOccurs="1" type="xsd:string"/> 
       <xsd:element name="ln" minOccurs = "1" maxOccurs="1" type="xsd:string"/> 
      </xsd:sequence> 

      <xsd:all> 
       <xsd:element name="gender" minOccurs = "1" maxOccurs="1"/> 
       <xsd:element name="age" minOccurs = "1" maxOccurs="1"/> 
       <xsd:element name="middleName" minOccurs = "1" maxOccurs="1"/> 
      </xsd:all> 

     </xsd:complexType> 
    </xsd:element> 

</xsd:schema> 

答えて

2

を直接実行することはできません。

xsd:allをxsd:choiceに置き換えることで、3つの要素の8つの順列を可能にします.3つの要素の順列はちょうど3つですが、かなり扱いにくいものになります。

XSD 1.1では、xsd:allコンテンツモデルを使用し、それをアサーションで制限することをお勧めします。

しかし、なぜあなたはこの方法でドキュメントを設計したいと思いますか? XSDでは何かをすることができませんが、XSDのデザイナーはそれが非常に賢いことだとは思わなかったためです。

+1

私は文書をデザインしません。これはほんの一例でした。実際の文書はSAPソフトウェアによって作成されたEDIファイルであり、その後私はそれをXMLに変換します。 EDIにおけるセグメントの順序は必ずしも厳密なものではなく、一部のセグメントが必要です。 EDIは複雑です –

関連する問題