0

XMLファイルの検証に使用するXSDスキーマがあります。

XSDスキーマでは、属性グループと選択肢を含む複合型を作成しました。それ自体には、繰り返し要素である「_output」が含まれています。

私の複雑なタイプ:

<xs:complexType name="base_action">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="_output" minOccurs="0" maxOccurs="unbounded"/>
    </xs:choice>
    <xs:attributeGroup ref="action"/>
</xs:complexType>

その複合型から継承する他の要素(独自の子要素を持つ)もあります。

そのような継承要素の例:

<xs:element name="ex_elem" minOccurs="0">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="cockpit_base_action">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="to" minOccurs="0"/>
                    <xs:element name="from" minOccurs="0"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>

さて、XMLでは、これは機能します:

<ex_elem>
    <_output/>
    <from>0</from>
    <to>1</to>
</ex_elem>

しかし、これではありません:

<ex_elem>
    <from>0</from>
    <_output/>
    <to>1</to>
</ex_elem>

またはこれ:

<ex_elem>
    <from>0</from>
    <to>1</to>
    <_output/>
</ex_elem>

私が理解していることから、複合型からの選択は、継承要素の選択と混同することはできません。これは私にとって問題です。なぜなら、_outputを上部以外の場所に配置したい場所があるからです。

シーケンスを気にせずに要素を使えるようにしたいと思います。そうする方法はありますか?

4

1 に答える 1

0

XSD 1.0 では、基本型の拡張により、最初のメンバーが古いコンテンツ モデルであり、2 番目のメンバーがコンテンツ モデルへの拡張の追加の最上位であるシーケンスが作成されます。したがって、cockpit_base_action の拡張機能の効果的なコンテンツ モデルは次のとおりです。

<xs:sequence>
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="_output" 
                minOccurs="0" 
                maxOccurs="unbounded"/>
  </xs:choice> 
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="to" minOccurs="0"/>
    <xs:element name="from" minOccurs="0"/>
  </xs:choice>
</xs:sequence>

XSD 1.1 では、ベース タイプを変更して xs:all を使用し、拡張子で xs:all を使用して、必要な効果を得ることができます。

または (1.0 または 1.1 のいずれかで)、必要な言語を受け入れるように拡張子を変更できます。このようなものには、あなたが望むと思われる効果があるはずです:

<xs:extension base="cockpit_base_action">
  <xs:sequence minOccurs="0">
    <xs:choice>
      <xs:element name="to">
      <xs:element name="from"/>
    </xs:choice>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="_output"/>
      <xs:element name="to">
      <xs:element name="from"/>
    </xs:choice>
  </xs:sequence>
</xs:extension>

選択要素の子のオカレンス インジケーターは、受け入れられる言語に影響を与えないため省略しました。含まれている選択肢 (またはそれを含むシーケンス) がオプションの場合、それらは必然的にオプションです。含まれる選択肢がそうできる場合、それらは必然的に際限なく繰り返すことができます。

于 2013-02-20T22:50:34.123 に答える