繁体   English   中英

XSD:检查具有特定值的元素是否存在

[英]XSD: Check that element with specific value presents

我有来自 XMPP 核心的 xml:

 <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
   <mechanism>X-OAUTH2</mechanism>
   <mechanism>X-GOOGLE-TOKEN</mechanism>
   <mechanism>PLAIN</mechanism>
 </mechanisms

我想检查它是否包含一个元素 PLAIN (也可能是其他元素,但 PLAIN 是必需的)。 我试图在限制下做到这一点,但我无法制定正确的规则。 我的尝试:

<xs:schema
       xmlns:xs='http://www.w3.org/2001/XMLSchema'
       targetNamespace='urn:ietf:params:xml:ns:xmpp-sasl'
       xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
       elementFormDefault='qualified'>
  <xs:element name='mechanisms'>
    <xs:complexType>
      <xs:all>
        <xs:element ref='mechanism' minOccurs='1' maxOccurs='1'/>
      </xs:all>
    </xs:complexType>
  </xs:element>
  <xs:element name="mechanism">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="PLAIN" />
    </xs:restriction>
  </xs:simpleType>
  </xs:element>
</xs:schema>

有谁能够帮助我?

这取决于您可以访问的 XSD 版本; XSD 1.1 可以开箱即用,而单独的 XSD 1.0 无法完成这项工作。

以下是适用于您的案例的 XSD 1.1 架构示例:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ietf:params:xml:ns:xmpp-sasl" xmlns="urn:ietf:params:xml:ns:xmpp-sasl" xmlns:tns="urn:ietf:params:xml:ns:xmpp-sasl" elementFormDefault="qualified">
    <xs:element name="mechanisms">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="mechanism" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:assert test="tns:mechanism[. eq 'PLAIN']" />
        </xs:complexType>
    </xs:element>
    <xs:element name="mechanism">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>
</xs:schema>

如果机制的值是已知的,并且您希望显式验证它们,那么此外,您可以使用枚举:

    <xs:element name="mechanism">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="X-OAUTH2"/>
                <xs:enumeration value="X-GOOGLE-TOKEN"/>
                <xs:enumeration value="PLAIN"/>                 
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM