A
Alan Johnson
I am trying to specify that an element may contain simple content (an
integer), or complex content (a sequence of two other elements), but not
both. The listMember element in the following XML fragment demonstrates
what I'm trying to accomplish:
<list>
<listMember>
<ident>1</ident>
<name>Name1</name>
</listMember>
<listMember>
<ident>2</ident>
<name>Name2</name>
</listMember>
</list>
<list>
<listMember>1</listMember>
<listMember>2</listMember>
</list>
I cannot, however, figure out any way to create such a restriction. The
following (invalid) schema sort of shows what it is I would like, but of
course it is invalid because listMember is redeclared.
<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="exampleSchema"
targetNamespace="exampleSchema"
elementFormDefault="qualified">
<xs:element name="list" type="List"/>
<xs:complexType name="List">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:choice>
<xs:element name="listMember" type="ListMember"/>
<xs:element name="listMember" type="xs:integer"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListMember">
<xs:sequence>
<xs:element name="indent" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Do any of you know how I could accomplish this?
integer), or complex content (a sequence of two other elements), but not
both. The listMember element in the following XML fragment demonstrates
what I'm trying to accomplish:
<list>
<listMember>
<ident>1</ident>
<name>Name1</name>
</listMember>
<listMember>
<ident>2</ident>
<name>Name2</name>
</listMember>
</list>
<list>
<listMember>1</listMember>
<listMember>2</listMember>
</list>
I cannot, however, figure out any way to create such a restriction. The
following (invalid) schema sort of shows what it is I would like, but of
course it is invalid because listMember is redeclared.
<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="exampleSchema"
targetNamespace="exampleSchema"
elementFormDefault="qualified">
<xs:element name="list" type="List"/>
<xs:complexType name="List">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:choice>
<xs:element name="listMember" type="ListMember"/>
<xs:element name="listMember" type="xs:integer"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListMember">
<xs:sequence>
<xs:element name="indent" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Do any of you know how I could accomplish this?