[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] <xs:all> with different elements in any order
- From: "G. Ken Holman" <gkholman@CraneSoftwrights.com>
- To: xml-dev@lists.xml.org
- Date: Wed, 19 Sep 2007 09:12:29 -0400
At 2007-09-19 18:13 +0530, Mukul Gandhi wrote:
> I want to validate an XML instance like following with W3C XML Schema.
>
><OBJECTS>
> <!-- A & Bs in any order and unbounded. B can be before A also. -->
> <A>ddjhfj</A>
> <B>hghgh</B>
> <!-- more A & Bs -->
></OBJECTS>
Sounds like a simple alternation.
>I want a Schema like (which is invalid) following.
>
><xs:element name="OBJECTS">
> <xs:complexType>
> <xs:all>
> <xs:element name="A" type="xs:string" maxOccurs="unbounded" />
> <xs:element name="B" type="xs:string" maxOccurs="unbounded" />
> </xs:all>
> </xs:complexType>
></xs:element>
>
>But this is wrong, because in this Schema maxOccurs can be 0 or 1.
I'm not sure what you mean by that.
Do you mean by trying <xs:all> that it is a requirement to have at
least one of each?
>Could somebody please suggest a Schema for this requirement.
Since you are looking for an unbounded quantity, a simple alternation
should work if either is optional in the whole:
T:\ftemp2>type mukul.xml
<OBJECTS>
<!-- A & Bs in any order and unbounded. B can be before A also. -->
<A>ddjhfj</A>
<B>hghgh</B>
<!-- more A & Bs -->
</OBJECTS>
T:\ftemp2>type mukul.xsd
<?xml version="1.0" encoding="US-ASCII"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="OBJECTS">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="A" type="xsd:string"/>
<xsd:element name="B" type="xsd:string"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
T:\ftemp2>w3cschema mukul.xsd mukul.xml
Xerces...
No validation errors.
Altova...
The XML data is valid
T:\ftemp2>
If, however, you have a requirement that at least one of each are
required and can be in any order, then things get a bit more complex:
( A+, B, (A | B)* ) | ( B+, A, (B | A)* )
T:\ftemp2>type mukul.xml
<OBJECTS>
<!-- A & Bs in any order and unbounded. B can be before A also. -->
<B>hghgh</B>
<A>ddjhfj</A>
<B>hghgh</B>
<A>ddjhfj</A>
<A>ddjhfj</A>
<B>hghgh</B>
<B>hghgh</B>
<!-- more A & Bs -->
</OBJECTS>
T:\ftemp2>type mukul.xsd
<?xml version="1.0" encoding="US-ASCII"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="OBJECTS">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="A" maxOccurs="unbounded"/>
<xsd:element ref="B"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="A"/>
<xsd:element ref="B"/>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="B" maxOccurs="unbounded"/>
<xsd:element ref="A"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="B"/>
<xsd:element ref="A"/>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="A" type="xsd:string"/>
<xsd:element name="B" type="xsd:string"/>
</xsd:schema>
T:\ftemp2>w3cschema mukul.xsd mukul.xml
Xerces...
No validation errors.
Altova...
The XML data is valid
T:\ftemp2>
The interleave concept in RELAX-NG would be really helpful here:
( A+ & B+ )
I hope this helps.
. . . . . . . . . . .Ken
--
Upcoming public training: UBL and code lists Oct 1/5; Madrid Spain
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds: publicly-available developer resources and training
G. Ken Holman mailto:gkholman@CraneSoftwrights.com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/x/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Cancer Awareness Jul'07 http://www.CraneSoftwrights.com/x/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]