XSD使属性值唯一

时间:2014-04-05 17:31:21

标签: xml xsd

我想在xml中生成这样的输出

<categories>
    <bio></bio>
    <math></math>
</categories>

所以我尝试使用元素

<xsd:any> 

这可能很好。但我怎么能保证个人

<bio>
</bio>
<math>
</math> 

是唯一的

<bio></bio><bio></bio>

是不可能的

1 个答案:

答案 0 :(得分:1)

我认为您不能在纯XML Schema 1.0中执行此操作 - 该语言允许对元素或属性进行唯一性检查,但不允许对其名称进行检查。

但是你建议的XML结构并不是特别惯用,如果你有几个元素都用于相同的目的(命名一个类别),那么它们应该具有相同的名称。像

这样的结构
<categories>
  <category>bio</category>
  <category>math</category>
<categories>

会更典型(并且可能更容易处理机器),允许类别名称不是有效的元素名称(例如以数字开头或包含空格),并且可以使用具有唯一性约束:

<xs:element name="categories">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="category" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:unique name="uniqueCats">
    <xs:selector xpath="category"/>
    <xs:field xpath="."/>
  </xs:unique>
</xs:element>