XSD:相同的元素,不同的属性

时间:2010-11-22 15:38:08

标签: xml validation xsd schema

我需要做的是验证这段xml:

<token type="email">qwqe12e12e1</token>
<token type="mobile">12e12313121w</token>

我知道如何使用属性和内容验证此元素,但我的问题是如何防止类型的标记,例如电子邮件不止一次出现?我需要两个令牌,但每个令牌只能出现一次。

2 个答案:

答案 0 :(得分:0)

<xsd:unique>元素是你的朋友。

请参阅 http://msdn.microsoft.com/en-us/library/ms256146.aspx

答案 1 :(得分:0)

给出以下XML示例:

<tokens>
  <token type="email">qwqe12e12e1</token>
  <token type="mobile">12e12313121w</token>
  <token type="mobile">1234</token>
</tokens>

以及以下XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="tokens">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="token" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
    <!-- token[type] to only occur once -->
    <xs:unique name="type">
      <xs:selector xpath="token" />
      <xs:field xpath="@type" />
    </xs:unique>
  </xs:element>

  <xs:element name="token">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="type" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="email"/>
                <xs:enumeration value="mobile"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

验证将在第二个“移动”令牌类型上失败。

当从输入XML中删除第二个“移动”令牌类型时,验证将成功。