[Home] [By Thread] [By Date] [Recent Entries]
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@C...
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] |

Cart



