2010-12-08 18 views
0

J'ai le code XML suivant:XSD avec des éléments nécessaires et des éléments inconnus

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

Je dois valider cette xml pour assurer l'élément racine est produit et il contient le nom des éléments requis et la catégorie. Le hic est que ce n'est pas toujours structuré comme l'exemple ci-dessus. Ça pourrait être comme ça.

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

Si la structure na pas le changement, je pourrais utiliser les éléments suivants:

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

mais que le travail ne marche pas évidemment lorsque la séquence d'élément est inconnu. Toute aide à ce sujet est appréciée.

Répondre

0

Voici un exemple de schéma qui validera contre les deux fichiers XML par exemple vous avez fourni:

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

espoir qui aide !!

+1

mais l'élément all n'accepte pas l'élément any qui est nécessaire en raison des éléments inconnus. – jeslas

+0

C'est compliqué, mais vous pouvez ajouter des éléments '' entre chaque élément connu. – pmartin

+0

Je ne pense pas que cela fonctionnerait non plus. Parfois, l'élément name vient avant l'élément category et parfois l'inverse. Pouvez-vous donner un exemple qui fonctionne avec les 2 exemples XML dans la question? – jeslas