- From: Anne van Rossum <anne4theweb@yahoo.com>
- Date: Fri, 06 Oct 2006 19:44:38 +0200
- To: <xmlschema-dev@w3.org>
- Message-Id: <7.0.1.0.0.20061006194143.02181d38@yahoo.com>
Hi Fermín,
This should be okay:
----------
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--
Schema where title/chapter/author are all
optionally, indicated by brackets [] and where
chapter can occur multiple times, indicates by asterisk *.
-->
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:group ref="chapters"/>
<xs:choice>
<xs:group ref="chapters"/> <!-- no title/author -->
<xs:group ref="titlefirst"/>
<xs:group ref="authorfirst"/>
</xs:choice>
<xs:group ref="chapters"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- [chapter]* -->
<xs:group name="chapters">
<xs:sequence>
<xs:element ref="chapter" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<!-- title [chapter]* [author] -->
<xs:group name="titlefirst">
<xs:sequence>
<xs:element ref="title"/>
<xs:group ref="chapters"/>
<xs:element ref="author" minOccurs="0"/>
</xs:sequence>
</xs:group>
<!-- author [chapter]* [title] -->
<xs:group name="authorfirst">
<xs:sequence>
<xs:element ref="author"/>
<xs:group ref="chapters"/>
<xs:element ref="title" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:element name="title">
<xs:complexType mixed="true"/>
</xs:element>
<xs:element name="author">
<xs:complexType mixed="true"/>
</xs:element>
<xs:element name="chapter">
<xs:complexType mixed="true"/>
</xs:element>
</xs:schema>
----------
I checked it at http://www.xmlme.com/Validator.aspx with
<?xml version="1.0"?>
<book>
<chapter>...</chapter>
<author>...</author>
<chapter>...</chapter>
<chapter>...</chapter>
<chapter>...</chapter>
<title>...</title>
<chapter>...</chapter>
</book>
And your examples are okay too.
This is of course a workaround, but it works. :-)
Kind regards,
Anne
At 11:54 6-10-2006, Fermín Galán Márquez wrote:
>Hi,
>
>I'm trying to define using XML Schema a element which content mixes several
>elements, some of then multiple, that can come in any order and I wonder if
>even this is possible.
>
>Let me clarify with a example. Consider a <book> element whose content can
>be up to one <title> (minOccurs=0, maxOccurs=1), up to one <author>
>(minOccurs=0, maxOccurs=1) and many <chapter> (minOccurs=0,
>maxOccurs=unbounded) that comes together, but combining child tags in any
>order.
>
>Examples:
>
><book>
> <title>...</title>
> <chapter>...</chapter>
> <chapter>...</chapter>
> <chapter>...</chapter>
> <author>...</autor>
></book>
>
><book>
> <title>...</title>
> <author>...</autor>
> <chapter>...</chapter>
> <chapter>...</chapter>
> <chapter>...</chapter>
></book>
>
>How would be the XML Schema definition for such <book> element, please?
>Firstly, I though using <xs:all>, but the problem is that it only allows
>elements with maxOccurs=1, so it doesn't fit with <chapter> (that has
>maxOccurs=unbounded).
>
>Anybody knows a solution or workaround, please? I'm getting crazy reviewing
>the XML Schema reference for some solution, but I'm not finding anything ..
>Please, any help is very welcome!
>
>Regards,
>
>--------------------
>Fermín Galán Márquez
>CTTC - Centre Tecnològic de Telecomunicacions de Catalunya
>Parc Mediterrani de la Tecnologia, Av. del Canal Olímpic s/n, 08860
>Castelldefels, Spain
>Room 1.02
>Tel : +34 93 645 29 12
>Fax : +34 93 645 29 01
>Email address: fermin.galan@cttc.es
>
>PD. Of course I could do something like:
>
><book>
> <title>...</title>
> <author>...</autor>
> <chapters>
> <chapter>...</chapter>
> <chapter>...</chapter>
> <chapter>...</chapter>
> </chapters>
></book>
>
>and define <book> as a <xs:all> of <title>, <author> and <chapters>, but I
>would like to solve the problem without adding the <chapters> "grouping"
>element.
Received on Friday, 6 October 2006 17:45:57 UTC