2011-01-17 10 views
1

ist es möglich, ein Schema zu erstellen, in dem die Kinder eines Elements teilweise in einer Sequenz und partiali nicht? etwas wie dieses:verschiedene Sammlungen von Kindelementen

<xs:element name="rootElement"> 
<xs:complexType> 
    <xs:all> 
    <xs:element name="value1" type="xs:string"/> 
    <xs:element name="value2" type="xs:string"/> 
    </xs:all> 
    <xs:sequence> 
    <xs:element name="value3" type="xs:string"/> 
    <xs:element name="value4" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

Vielen Dank im Voraus!

+0

Bitte posten Sie weitere Informationen. Die Antwort ist "Ja", aber Ihre Frage ist zu vage, um mehr zu sagen. Wenn Sie etwas XML veröffentlichen könnten, würde es helfen. –

+0

ok Ich möchte eine XML-Validierung, die wie das irgendwie aussieht: \t aaa \t bbb \t \t \t Küche \t \t Wohnzimmer \t \t \t \t \t \t \t Das Kind Elemente des Zimmers immer in dieser Reihenfolge apper werden, aber der Name und Nachname in beliebiger Reihenfolge angezeigt werden. Also wollte ich die Kindelemente von Räumen in einer Sequenz auflisten und die Namenselemente in einem All-Tag. – AirPoland

Antwort

0

OK. Ich denke, ich verstehe, dass du es weißt. Ihre XML wie folgt aussieht:

<?xml version="1.0"?> 
<house> 
    <ownerName>aaa</ownerName> 
    <ownerLastName>bbb</ownerLastName> 
    <rooms> 
     <room1>kitchen</room1> 
     <room2>living room</room2> 
     <room3></room3> 
     <room4></room4> 
     <room5></room5> 
    </rooms> 
</house> 

Sie wollen, dass die ownerName und ownerLastName Elemente in beliebiger Reihenfolge auftreten, obwohl sie beide vorhanden sein müssen. Aus Ihrer Beschreibung ist nicht klar, dass die Position des Elements rooms wichtig ist. Ich habe angenommen, dass es so ist. Es ist der Import, dass die Kindelemente von rooms in Reihenfolge bleiben.

Splitting dies, können wir eine complexType für die Räume (so das Modell fertig ist)

<xs:complexType name="RoomType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"/> 
    </xs:simpleContent> 
</xs:complexType> 

<xs:element name="RoomsType"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="room1" type="RoomType"/> 
      <xs:element name="room2" type="RoomType"/> 
      <xs:element name="room3" type="RoomType"/> 
      <xs:element name="room4" type="RoomType"/> 
      <xs:element name="room5" type="RoomType"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Dies gibt uns die Abfolge von Räumen, um definieren.

Es gibt einige Einschränkungen bei der Verwendung von xs:all, also habe ich es hier vermieden (Sie können nicht in einer Sequenz zum Beispiel verwenden). Damit die Eigennamen in beliebiger Reihenfolge vorkommen können, habe ich zwei Sequenzen gewählt. Die Auswahl ist in eine andere Sequenz eingebettet, um sicherzustellen, dass das rooms Element die letzte ist.

<xs:complexType name="HouseType"> 
    <xs:sequence> 
     <xs:choice> 
      <xs:sequence> 
       <xs:element ref="ownerName"/> 
       <xs:element ref="ownerLastName"/> 
      </xs:sequence> 
      <xs:sequence> 
       <xs:element ref="ownerLastName"/> 
       <xs:element ref="ownerName"/> 
      </xs:sequence> 
     </xs:choice> 
     <xs:element name="rooms" type="HouseType"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:element name="house" type="HouseType"/> 

Nun, wenn Sie tatsächlich nicht über die Bestellung oder ownerLastName egal, ownerNameundhouse dann können Sie xs:all ohne Probleme verwenden:

<xs:complexType name="HouseType"> 
    <xs:all> 
     <xs:element ref="ownerName"/> 
     <xs:element ref="ownerLastName"/> 
     <xs:element name="rooms" type="HouseType"/> 
    </xs:all> 
</xs:complexType> 

, die erfordert, dass Sie alle drei haben Elemente in beliebiger Reihenfolge vorhanden.

+0

sehr gut erklärt! Tahnk dich so sehr um die Hilfe. Mit freundlichen Grüßen, Jarek – AirPoland

Verwandte Themen