2009-06-03 7 views
11

Sto ricevendo un messaggio xml con gli elementi dei nomi delle variabili sconosciute ... cioè non sono predefiniti ...come posso definire un file xsd che consente di elementi (caratteri jolly) sconosciuti?

So solo che possono esserci 0 o più di questi elementi, a parte altri che sono obbligatoria ...

ad esempio

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

Cioè, non so cosa sarà passato come "parametri", so solo ci saranno 0 o più elementi con un valore, non più profondo tag nidificazione consentito ....

Stavo pensando a qualcosa di simile

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

naturalmente, la parte più difficile è

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

è possibile fare Sucha una cosa?

come è possibile definire un file xsd che convalida tale messaggio?

-

ho controllato il riferimento W3C presso

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

e dice:

"Il · spazio lessicale · del NCName è l'insieme di tutte le stringhe che · partita · La produzione NCName di [Namespace in XML]. "

quindi cosa significa?

inoltre ... potresti consigliarmi un modo semplice per verificare la conformità con una definizione xsd?

risposta

19

quello che vuoi è una particella jolly, per i dettagli vedere http://www.w3.org/TR/xmlschema-1/#Wildcards

Per farlo è possibile utilizzare xs: qualsiasi. Si noti che xs: element e xs: any non può essere posizionato direttamente all'interno di xs: complexType. Hai bisogno di un contenitore come una sequenza o una scelta.

Uno schema valido che gestisce i caratteri jolly è qui sotto:

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

Prova questo:

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