[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] An element with more than one possible type
I am trying to code a XML Schema (XSD file) for a web service in such a way: <items> <item name = "water" volume ="22"> <item name = "meat" weight = "10" > </items> It is to say, if name is "water" , then use the "volume" attribute. When name is "meat" then use "weight" attribute. What I have done is to define a simple type for name attribute <xs:simpleType name="nameType"> <xs:restriction base="xs:string"> <xs:enumeration value="water"/> <xs:enumeration value="meat"/> </xs:restriction> </xs:simpleType> Then I defined an abstract complex type for "item" element: <xs:complexType name="itemType" abstract = "true"> <xs:attribute name = "name" type = "nameType"/> </xs:complexType> I restricted the "name" attribute to "meat": <xs:complexType name="itemTypeMeat"> <xs:complexContent> <xs:restriction base="itemType"> <xs:attribute name = "name" type = "nameType" fixed="meat"/> </xs:restriction> </xs:complexContent> </xs:complexType> ... and finally I added an attribute "weight": <xs:complexType name="itemTypeMeatWeight"> <xs:complexContent> <xs:extension base="itemTypeMeat"> <xs:attribute name = "weight" type = "xs:int"/> </xs:extension> </xs:complexContent> </xs:complexType> For the "water" is the same as "meat". First I restricted the "name" attribute to "water": <xs:complexType name="itemTypeWater"> <xs:complexContent> <xs:restriction base="itemType"> <xs:attribute name = "name" type = "nameType" fixed="water"/> </xs:restriction> </xs:complexContent> </xs:complexType> ... and finally I added the "volume" attribute <xs:complexType name="itemTypeWaterVolume"> <xs:complexContent> <xs:extension base="itemTypeWater"> <xs:attribute name = "volume" type = "xs:int"/> </xs:extension> </xs:complexContent> </xs:complexType> The problem is to define the type for "item" element. If I use "itemType" as type it the XML does not validated because "itemType" is abstract. I I use: <xs:element name="items"> <xs:complexType> <xs:sequence> <xs:choice> <xs:element name="item" type="itemTypeWaterVolume"/> <xs:element name="item" type="itemTypeMeatWeight"/> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> the XML does not validate because the validator assumes that the "item" type is the first defined (itemTypeWaterVolume). If I change the declaration of "item" element then the validator assumes that the type of "item" is "itemTypeMeatWeight". Do you know how to solve this problem? Thanks in advance. Pau
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] |
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|