开发者

Question about xsd. Elements inside complex type must be allowed in any order

开发者 https://www.devze.com 2023-01-31 23:53 出处:网络
If you look at the following xsd fragment you can conclude that the corresponding xml will first contain cars followed by busses eg:

If you look at the following xsd fragment you can conclude that the corresponding xml will first contain cars followed by busses eg:

car,car,bus,bus

HOWEVER I want the xml to be able to contain

car,bus,car,bus

What change do I need to make in the xsd below in order to achieve this?

<xs:element name="body">
   <xs:complexType>
      <xs:sequence>
         <xs:element name="session" type="tns:session" />
         <xs:element minOccurs="0" maxOccurs="unbounded" 开发者_StackOverflow社区name="car" type="tns:car" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="bus" type="tns:bus" />
      </xs:sequence>
   </xs:complexType>
</xs:element>


It's a bit cumbersome, but you might achieve what you're looking for like this:

  • create a <xs:choice> element with your car and bus elements inside; this defines that one of the contained elements can be used

  • make sure to have the attribtues minOccurs=1 and maxOccurs=unbounded on that <xs:choice> - this gives you any number of either car or bus elements - any number, any combination

So your XML schema would look something like this (I added some stuff just to be able to generate a sample XML and verify it works - tweak as needed):

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="body">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element minOccurs="0" maxOccurs="unbounded" name="car" type="CarType" />
            <xs:element minOccurs="0" maxOccurs="unbounded" name="bus" type="BusType" />
        </xs:choice>
      </xs:complexType>
    </xs:element>
    <xs:complexType name="CarType">
        <xs:sequence>
            <xs:element name="Maker" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="BusType">
        <xs:sequence>
            <xs:element name="Maker" type="xs:string" />
            <xs:element name="Capacity" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>


use <xs:any> insted of <xs:sequence>

0

精彩评论

暂无评论...
验证码 换一张
取 消