xml架构检查限制枚举值是否只有一次

时间:2010-11-24 12:26:53

标签: xml validation xsd

我正在创建一个xsd架构来验证某些xml

我想限制xml,因此无法输入相同的项目两次:

<branches>
   <branche>Bank</branche>
   <branche>Bank</branche>
</branches>

但是使用2个不同的项目必须是可行的:

<branches>
   <branche>Bank</branche>
   <branche>Insurance</branche>
</branches>

所以我有以下代码:

<!-- definition of simple elements -->
    <xs:simpleType name="branche">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Bank" maxOccurs="1"/>
            <xs:enumeration value="Insurance" maxOccurs="1"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="branches" minOccurs="0"> <!-- minOccurs becouse i want it to be posible to leave out the whole <branches> tag -->
        <xs:complexType>
            <xs:sequence>
                <xs:element name="branche" type="branche" minOccurs="0" maxOccurs="2" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

使用maxOccurs="1"不会将其限制为只有一个值,因为'branche'标记可以出现两次。

我希望值(<branche>value</branche>)是唯一的。

日Thnx!

2 个答案:

答案 0 :(得分:4)

请参阅有关身份限制的示例here。类似的东西:

<xs:element name="branches" ...>
  <xs:unique name="...">
    <xs:selector xpath="branche"/>
    <xs:field xpath="."/>
  </xs:key>
</xs:element>

不太确定语法,但你明白了。

答案 1 :(得分:3)

使用以下代码修复它:

<xs:element name="branches" minOccurs="0">
   <xs:complexType>
      <xs:sequence>
         <xs:element name="branche" type="branche" minOccurs="0" maxOccurs="2" />
      </xs:sequence>
   </xs:complexType>
   <xs:unique name="brancheUnique">
      <xs:selector xpath="branche"/>
      <xs:field xpath="."/>
   </xs:unique>
</xs:element>
thnx lexicore指出我正确的方向