如何在同一名称空间中使用相同的属性名称引用两种不同的类型?

时间:2012-06-28 18:42:05

标签: xml xsd schema

我的所有XML属性都在不同的命名空间中,因此我的XSD从其他XSD引用它们。我有两个不同的元素,其属性具有相同的名称,但类型不同。

<integer ons:name="10" />
<string ons:name="string"/>

因此integer元素的ons:name属性为integer,而string元素的ons:name属性为string }。

如何在XSD中定义?目前我有:

<xs:element name="integer">
    <xs:complexType>
        <xs:attribute ref="ons:name" use="required"/>
    </xs:complexType>
</xs:element>

然后在ons命名空间的第二个XSD中,我有以下内容:

然后问题是第二个元素的属性没有办法用type指定ref,如果ref引用了不同的属性,那么它会得到一个不同的名称

1 个答案:

答案 0 :(得分:2)

在名称空间ons的架构文档中,定义两个单例属性组:

<xs:attributeGroup name="name-int">
  <xs:attribute name="name" type="xs:integer" use="required" form="qualified"/>
</xs:attribute-group>

<xs:attributeGroup name="name-str">
  <xs:attribute name="name" type="xs:string" form="qualified"/>
</xs:attribute-group>

然后从复杂类型中引用属性组:

<xs:complexType>
    <xs:attributeGroup ref="ons:name-int"/>
</xs:complexType>