1

次の問題があります。

私は2つのcomplexTypesを持ってfooおりbar、両方のメンバーがありfoobarます:

<xs:complexType name="foo">
  <xs:sequence>
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="bar">
  <xs:sequence>
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

冗長性を減らすために、次のようにfooとの両方で参照される foobar を complexType として宣言したいと思います。bar

<xs:complexType name="foobar">
  <xs:sequence>
    <xs:element type="xs:string />
  </xs:sequence>
</xs:complexType>

しかし、これは正しい方法ではないようです。これは実際に XML スキーマで可能ですか?

4

2 に答える 2

4

xs:group複雑なタイプではなく、要素を使用する方がおそらく良いでしょう:

<xs:complexType name="foo">
    <xs:group ref="foobarGroup"/>
</xs:complexType>

<xs:complexType name="bar">
    <xs:group ref="foobarGroup"/>
</xs:complexType>

<xs:group name='foobarGroup'>
    <xs:sequence>
        <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
    </xs:sequence>        
</xs:group>

の一部としてシーケンスを直接表現することはできませんxs:complexType

于 2011-08-05T09:59:41.353 に答える
1

以下の正確性をまだ確認していませんが、次のようにできると思います。

  <xs:complexType name="hasFoobar" abstract="true">
    <xs:sequence>
      <xs:element name="foobar" … />
    </xs:sequence>
  </xs:complexType>

そして、この抽象型を「拡張」します。

  <xs:complexType name="foo">
    <xs:complexContent>
      <xs:extension base="hasFoobar">
        …
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="bar">
    <xs:complexContent>
      <xs:extension base="hasFoobar">
        …
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
于 2011-08-05T08:20:46.793 に答える