XSD: один и тот же элемент, разные атрибуты - PullRequest
1 голос
/ 22 ноября 2010

Что мне нужно сделать, это проверить этот фрагмент XML:

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

Я знаю, как проверить такой элемент с атрибутом и содержимым, но мой вопрос заключается в том, как предотвратить токен типа, например, электронная почта возникаетчем один раз?Мне нужны оба жетона, но каждый жетон может появиться только один раз.

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

Учитывая следующий пример 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, проверка будет успешной.

0 голосов
/ 22 ноября 2010

Элемент <xsd:unique> - ваш друг.

См. http://msdn.microsoft.com/en-us/library/ms256146.aspx

...