2009-06-03 4 views
11

Bilinmeyen değişken ad öğelerine sahip bir xml iletisi alıyorum ... öntanımlı değiller ...Bilinmeyen (joker) elemanlara izin veren bir xsd dosyasını nasıl tanımlayabilirim?

Sadece bu elemanlardan 0 veya daha fazlası olabileceğini biliyorum. zorunlu ... örneğin

, ben sadece bir değerle 0 veya daha fazla öğe, hiçbir derin olacak biliyorum "parametreleri" olarak geçirilecek bilmiyorum olduğunu

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

etiket iç içe geçirme izni ....

.210 Tabii

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

gibi bir şey düşünüyordum, zor kısmı

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

sucha bir şey yapmak mümkün bunun mi?

Böyle bir mesajı doğrulayan bir xsd dosyasını nasıl tanımlayabilirim?

-

Ben

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

de W3C başvuru kontrol edilip şöyle der: · dizgeciğin ait

"· sözcük boşluk bütün dizeleri · maç kümesidir · [XML'de Ad Alanları] 'nın NCName üretimi. ”

Yani ne anlama geliyor?

Ayrıca, xsd tanımına uygunluğu test etmenin kolay bir yolunu tavsiye edebilir misiniz?

cevap

19

Ne istiyorsun, bir joker parçacıktır. Xs: element ve xs: herhangi bir xs: complexType içine doğrudan yerleştirilemez. Bir sıra veya seçim gibi bir konteynere ihtiyacınız var. joker kolları

Geçerli bir şema aşağıdaki gibidir:

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

bu deneyin: Herhangi: ayrıntıları http://www.w3.org/TR/xmlschema-1/#Wildcards

xs kullanabilirsiniz bunu yapmak için bkz için

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