XSD

2010-12-08 13 views
0

私は次のXMLがありますXSD

<product> 
<name>beef</name> 
<category>food</category> 
<unknownfield1>..</unknownfield1> 
<unknownfield2>..</unknownfield2> 
</product> 

を私はルート要素が製品であり、それは必要な要素名やカテゴリが含まれていることを確認するために、このXMLを検証する必要があります。キャッチとは、上記の例のようにすべてが構成されているわけではないということです。それはこのようなものかもしれない。

<xs:element name="product"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="name" type="xs:string" /> 
<xs:element name="category" type="xs:string" /> 
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"></xs:any> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 

が、要素の順序が不明であることを明らかにdoesntの仕事:

<product> 
<category>food</category> 
<unknownfield4>..</unknownfield4> 
<name>beef</name> 
<unknownfield4>..</unknownfield4> 
</product> 

構造のdidntの変化が、私は次のように使用することができれば

。 これについての助けに感謝します。ここで

答えて

0

は、あなたが提供した例のXMLファイルの両方に対して検証されます例スキーマです:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="unknownfield4"/> 
<xs:element name="unknownfield2"/> 
<xs:element name="unknownfield1"/> 
<xs:element name="product"> 
    <xs:complexType> 
     <xs:choice> 
      <xs:sequence> 
       <xs:element ref="name"/> 
       <xs:element ref="category"/> 
       <xs:any maxOccurs="unbounded"/> 
      </xs:sequence> 
      <xs:sequence> 
       <xs:element ref="category"/> 
       <xs:any/> 
       <xs:element ref="name"/> 
       <xs:any/> 
      </xs:sequence> 
     </xs:choice> 
    </xs:complexType> 
</xs:element> 
<xs:element name="name"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"/> 
    </xs:simpleType> 
</xs:element> 
<xs:element name="category"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"/> 
    </xs:simpleType> 
</xs:element> 

役に立てば幸い!

+1

しかし、すべての要素は、未知の要素のために必要とされるany要素を受け入れません。 – jeslas

+0

これは面倒ですが、既知の各要素の間に ''要素を追加することができます。 – pmartin

+0

私はどちらもうまくいくとは思わない。時にはname要素がcategory要素の前に来ることもあります。あなたは、質問の2つのXMLの例で動作する例を与えることができますか? – jeslas