1

我有以下问题:

我有两个 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>

为了减少冗余,我想将 foobar 声明为 complexType,它在fooand中都被引用bar,如下所示:

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

但这似乎不是正确的方法。这在 XML Schema 中真的可能吗?

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 回答