我具有以下XSD结构:
<xs:schema xmlns:ns="http://abc/">
...
<xs:element name="abc">
<xs:complexType>
<xs:sequence>
<xs:element ref="map"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...
<xs:element name="map">
<xs:complexType>
<xs:sequence>
<xs:element name="entry" type="ns:MapEntryType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="entry">
<xs:selector xpath="entry"/>
<xs:field xpath="key"/>
</xs:unique>
</xs:element>
<xs:complexType name="MapEntryType">
<xs:sequence>
<xs:element name="key" type="xs:string"/>
<xs:element name="value" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
这是在做它的工作。
现在必须根据包装器中的任何一个将
map
元素称为不同的名称,因此名称有时为
map
,有时为
properties
,有时为
options
等。
因此,我想泛化
map
元素。
我尝试执行以下操作:
map
设置为xs:complexType
并将ref
更改为type
。xs:unique
不被接受,并且map
设置为xs:complexType
,将ref
更改为type
,并将xs:unique
约束移至元素定义。xs:unique
。 难道没有一种方法可以简单地告诉我我想要一个特定的结构并且它包含唯一的元素,而不必到处重复唯一的约束吗?
请您参考如下方法:
简短的回答,这是不可能的。 XSD 1.0和1.1都将身份约束放在一个元素下。一个约束不能被全局定义,因此除了封闭元素之外,本身没有“重用”。给定您的方案(针对不同需求的不同元素名称),就无法重用。