Altova Mailing List Archives>Archive Index >xmlschema-dev Archive Home >Recent entries >Thread Prev - xml schema question >Thread Next - Re: xml schema question Re: xml schema questionTo: Peter Menzel <peter.menzel@-----.-----------.--> Date: 7/23/2004 6:33:00 PM
Hi Peter,
The following schema will do it.
The model is:
(
(aa, ((bb, (cc | dd)*) | ((cc | dd)+, bb, (cc | dd)*))) |
(bb, ((aa, (cc | dd)*) | ((cc | dd)+, aa, (cc | dd)*))) |
(
(cc | dd)+,
(
(aa, ((bb, (cc | dd)*) | ((cc | dd)+, bb, (cc | dd)*))) |
(bb, ((aa, (cc | dd)*) | ((cc | dd)+, aa, (cc | dd)*)))
)
)
)
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="element">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="aa"/>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="bb"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:choice minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
<xsd:element ref="bb"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="bb"/>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="aa"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:choice minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
<xsd:element ref="aa"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="aa"/>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="bb"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:choice minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
<xsd:element ref="bb"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="bb"/>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="aa"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
<xsd:sequence>
<xsd:choice minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
<xsd:element ref="aa"/>
<xsd:choice minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="cc"/>
<xsd:element ref="dd"/>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="aa"/>
<xsd:element name="bb"/>
<xsd:element name="cc"/>
<xsd:element name="dd"/>
</xsd:schema>
Hope that helps,
George
-----------------------------------------------
George Cristian Bina
<oXygen/> XML Editor & XSLT Editor/Debugger
www.---.com
Peter Menzel wrote:
>
> Hi all,
>
> i am working on a xml schema and have the following problem, maybe
> somebody can help me.
>
> I would like to have the follwoing element with content:
>
> <element>
> <aa/>
> <cc/>
> <bb/>
> </element>
>
> The elements aa and bb are required to be there and they have to occur
> exactly once.
> Other sub elements of element can occur many times. Especially the order
> of the elements is random, so i may not use xsd:sequence.
>
> My xml schema snippet for this element:
>
> <xsd:element name='element'>
> <xsd:complexType>
> <xsd:choice>
> <xsd:element ref='dd' minOccurs='0' maxOccurs='unbounded'/>
> <xsd:element ref='cc' minOccurs='0' maxOccurs='unbounded'/>
> <xsd:element ref='aa' minOccurs='1' maxOccurs="1"/>
> <xsd:element ref='bb' minOccurs='1' maxOccurs="1"/>
> </xsd:choice>
> </xsd:complexType>
> </xsd:element>
>
> Unfortunately this wont work.
> xmllint says that the above xml document is not valid with this schema.
>
> Has anybody any idea concerning this problem? Is it generally possible
> to mix elements in a complexType with different minOccurs/maxOccurs ?
>
> Greetings, Peter
>
From jeni@jeni | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
