2009-06-03 18 views
11

我收到一個帶有未知變量名稱元素的xml消息...也就是說,它們沒有被預定義...如何定義允許未知(通配符)元素的xsd文件?

我只知道可以有0個或更多的那些元素,與其他一些元素強制性...

例如

<root> 
    <service>my service</service> 
    <resource>my resource</resource> 
    <action>update</action> 
    <parameters> 
     <field1>value1</field1> 
     <field2>value2</field2> 
     <field3>value3</field3> 
    </parameters> 
</root> 

就是,我不知道什麼會「參數」傳遞,我只知道會出現0或多種元素的值,不得更深標籤嵌套允許....

我在想是這樣

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="root"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="service" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> 
     <xs:element name="resource" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> 
     <xs:element name="action" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> 
     <xs:element name="parameters"> 
     <xs:complexType> 
      <xs:element name="*" maxOccurs="unbounded"> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

</xs:schema> 
當然

,難的是

<xs:element name="*" maxOccurs="unbounded"> 

是有可能做蘇哈的事?

如何定義驗證此類消息的xsd文件?

-

我在

http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#NCName

檢查W3C參考,並說:

「的詞彙··NCName來的空間是一組中的所有字符串,其·賽·[名稱空間的XML]的NCName生成。「

那麼這是什麼意思?

此外...你能推薦一些簡單的方法來測試遵從xsd定義嗎?

回答

19

你想要的是一個通配符顆粒,詳見 http://www.w3.org/TR/xmlschema-1/#Wildcards

要做到這一點,你可以使用的xs:任何。請注意,xs:element和xs:any不能直接放置在xs:complexType中。你需要一個像序列或選擇的容器。

,處理通配符的有效模式如下:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="service" type="xs:string"/> 
     <xs:element name="resource" type="xs:string"/> 
     <xs:element name="action" type="xs:string"/> 
     <xs:element name="parameters"> 
      <xs:complexType> 
      <xs:sequence maxOccurs="unbounded"> 
       <xs:any processContents="lax"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 
1

試試這個:

<xs:element name="parameters"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:any processContents="lax"></xs:any> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
相關問題