[英]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.