1

私は次のようなXMLドキュメントのスキーマを書いています:

<workbook>
  <worksheet>
    <column/>
  </worksheet>
</workbook>

各ノードをenv要素にラップできる場所(例)

<workbook>
 <env>
  <worksheet>
   <column/>
  </worksheet>
 </env>
</workbook>

また

<workbook>
 <worksheet>
  <env>
   <column/>
  </env>  
 </worksheet>
</workbook>

したがって、env要素の場所に応じて、異なる子を持つことができます(ワークブックのenv-childにはワークシートの子が必要であり、worksheetのenv-childには列の子が必要です)

env要素をネストされたものとして宣言すると、複数定義された要素エラーが発生します。

そのようなドキュメントのxsdをどのように書くことができますか、それとも可能ですか?

前もって感謝します!

4

1 に答える 1

0

はい、可能です。同じ名前envで、異なる場所に異なるタイプ(構造)の要素を含めることができるためです。これをリンクするものは次のとおりです。

<xs:element name="workbook">
  <xs:complexType>
    <xs:choice>
      <xs:element name="env">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="worksheet"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="worksheet"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

<xs:element name="worksheet">
  <xs:complexType>
    <xs:choice>
      <xs:element name="env">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="column"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="column"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

<xs:element name="column" type="xs:string">
</xs:element>
于 2012-11-07T00:13:35.143 に答える