2009-06-03 8 views
11

Je reçois un message XML avec des éléments de nom variable inconnue ... qui est, ils ne sont pas prédéfinies ...comment puis-je définir un fichier xsd qui accepte des éléments inconnus (jokers)?

Je sais seulement il peut y avoir 0 ou plusieurs de ces éléments, allong avec d'autres qui sont obligatoire ...

par exemple

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

qui est, je ne sais pas ce qui sera passé comme « paramètres », je sais seulement qu'il y aura 0 éléments ou plus d'une valeur, pas plus profonde l'imbrication des étiquettes est autorisée ....

Je pensais à quelque chose comme

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

bien sûr, le plus dur est

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

est-il possible de faire Sucha une chose?

Comment puis-je définir un fichier xsd qui valide un tel message?

-

j'ai vérifié la référence w3c à

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

et il dit:

« L'espace lexical · · de NCName est l'ensemble de toutes les chaînes qui · Confrontations · La production NCName de [Namespaces in XML]. "

alors qu'est-ce que cela signifie? En outre ... pourriez-vous me recommander un moyen facile de tester la conformité à une définition de xsd?

Répondre

19

Ce que vous voulez est une particule générique, pour plus de détails voir http://www.w3.org/TR/xmlschema-1/#Wildcards

Pour ce faire, vous pouvez utiliser xs: any. Notez que xs: element et xs: any ne peuvent pas être placés directement dans un xs: complexType. Vous avez besoin d'un conteneur comme une séquence ou un choix.

Un schéma valide qui traite des caractères génériques est ci-dessous:

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

Essayez ceci:

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