2015-11-03 89 views
2

我從XMPP核心XML:XSD:檢查特定值元素呈現

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

,我要檢查它包含一個元素平原(也可以是其他的,但平原是必需的)。我試圖用限制來做到這一點,但我無法制定正確的規則。我的嘗試:

<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> 

有人能幫助我嗎?

回答

1

它取決於您有權訪問的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>