[
Lists Home |
Date Index |
Thread Index
]
Dan,
In schema I think there is more than one possible way to accomplish this. The one way that I have used is abstract comlex types and type substitution. The schema might look something like this:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="foo" type="fooType">
</xs:element>
<xs:complexType name="fooType" abstract="true"/>
<xs:element name="data1" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="data2" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="data3" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="data4" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:attribute name="mode" type="xs:string"/>
<xs:complexType name="fooOne" >
<xs:complexContent>
<xs:extension base="fooType">
<xs:sequence>
<xs:element name="data1" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="data2" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="mode" type="xs:string" fixed="one"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="fooTwo" >
<xs:complexContent>
<xs:extension base="fooType">
<xs:sequence>
<xs:element name="data3" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="data4" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="mode" type="xs:string" fixed="two"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
and both of the following instance documents validate.
<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="foo.xsd" xsi:type="fooOne" mode="one">
<data1>abc</data1>
<data2>xyz</data2>
</foo>
<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="foo.xsd" xsi:type="fooTwo" mode="two">
<data3>abc</data3>
<data4>xyz</data4>
</foo>
Regards
John McCarthy
Dan White
<ygor@comcast.net To: xml-dev@lists.xml.org
> cc:
Subject: [xml-dev] Schema Question
07/07/04 11:32 AM
I need a pointer or two about creating a schema.
I have a situation where the incoming XML will have an element/attribute
specifying one of four enumerated choices. Depending on the value of that
choice, the elements that follow will be different.
Like this:
<foo>
<mode>one</mode>
<data1>aaa</data1>
<data2>bbb</data2>
</foo
<foo>
<mode>two</mode>
<data3>ccc</data3>
<data4>ddd</data4>
</foo>
or
<foo mode="one">
<data1>aaa</data1>
<data2>bbb</data2>
</foo
<foo mode="two">
<data3>ccc</data3>
<data4>ddd</data4>
</foo>
How does one set up the schema to validate the appropriate sequence of
elements based on the value of the "controlling" element/attribute ?
Thanks in advance.
-----------------------------------------------------------------
The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>
The list archives are at http://lists.xml.org/archives/xml-dev/
To subscribe or unsubscribe from this list use the subscription
manager: <http://www.oasis-open.org/mlmanage/index.php>
--
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
|