- From: Nathan Potter <ndp@coas.oregonstate.edu>
- Date: Thu, 15 Jan 2009 18:48:00 -0800
- To: xmlschema-dev@w3.org
- Cc: Nathan Potter <ndp@coas.oregonstate.edu>
Greetings,
I am trying to express the semantics of our content model in an XML
schema. I have a type whose allowed content is function of the values
of an attribute. Here's a simplified "sketch" of the problem:
An element <A> has a required attribute "type", if A@type=="xml" then
<A> may contain any (other namespace) XML:
<A type="xml">
<foo:B />
<bar:C />
</A>
If A@type=="Container" then <A> may any number of other <A> elements:
<A type="Container">
<A type="xml">
<foo:B />
</A>
<A type="Container">
<A type="xml">
<bar:C />
</A>
</A>
</A>
If A@type=="values" then <A> must contain one or more <value> elements:
<A type="values">
<value>1234</value>
</A>
This pair of complexType and attributeGroup definitions:
<xs:complexType name="A_Type">
<xs:choice>
<xs:sequence>
<xs:element name="value" type="xs:string"
minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Attribute" type="A_Type"
minOccurs="0"
maxOccurs="unbounded"/>
<xs:element ref="Alias" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:any namespace="##other" minOccurs="0"
maxOccurs="unbounded"
processContents="strict"/>
</xs:sequence>
</xs:choice>
<xs:attributeGroup ref="A_attributes_Group"/>
</xs:complexType>
<xs:attributeGroup name="A_attributes_Group">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="values"/>
<xs:enumeration value="xml"/>
<xs:enumeration value="Container"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
Captures the structural requirements, but fails to enforce the
relationship between the value of A@type and correct associated
content of <A>
I can make a complexType for each of these cases, but I don't see how
to combine them into a single type definition that enforces the 3
content/structure rules based on the value of the A@type attribute.
Is it possible to enforce this kind of semantic/structural dependancy
using a schema?
Is there an example of something like this that someone could point me
to?
Thanks in advance!
Nathan
============================================================
Nathan Potter Oregon State University, COAS
ndp at coas.oregonstate.edu 104 Ocean. Admin. Bldg.
541 737 2293 voice Corvallis, OR 97331-5503
541 737 2064 fax
Received on Sunday, 18 January 2009 15:10:04 UTC