2011-01-17 13 views
1

要素の子がシーケンス内で部分的で部分的でないスキーマを作成することは可能ですか?次のようなもの:子要素の異なるコレクション

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

ありがとうございます!

+0

さらに詳しい情報を記入してください。答えは「はい」ですが、あなたの質問はあまりにも漠然としています。いくつかのXMLを投稿すれば助けになるでしょう。 –

+0

は大丈夫、私はこのように何とかなXML検証する: \t AAAを \t BBB \t \t \t キッチン \t \t リビングルーム \t \t \t \t \t \t \t 部屋の子要素は常にその順序でapperますが、名前と姓は、任意の順序で表示されます。だから私はシーケンスの中の部屋の子要素とすべてのタグの中の名前要素をリストしたいと思っていました。 – AirPoland

答えて

0

OK。私はあなたが理解していると思う。

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

あなたは、彼らが両方存在している必要がありますが、ownerNameownerLastName要素は任意の順序で発生します:あなたのXMLは次のようになります。あなたの記述から、rooms要素の位置が重要であることは明らかではありません。私はそれを前提としています。 roomsの子要素がそのまま残ります。

分割これまで、我々はこれがために私たちの部屋のシーケンスを与える

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

(そのモデルが完了した)部屋のためのcomplexTypeを定義することができます。

xs:allの使用にはかなりの制限がありますので、ここでは避けています(たとえば、シーケンスで使用することはできません)。オーナネームを任意の順序で出現させるために、私は2つのシーケンスの中から選択しました。この選択は、rooms要素が最後に来るように別のシーケンスに埋め込まれています。

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

、あなたが実際にオーダーまたはownerLastNameを気にしない場合は、ownerNamehouseその後は問題なくxs:allを使用することができます。

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

あなたはすべての3つを持っていることを必要とします要素は任意の順序で存在します。

+0

非常によく説明されています! Tahnkあなたのために助けてください。よろしくお願いします、Jarek – AirPoland

関連する問題