W3C home > Mailing lists > Public > xmlschema-dev@w3.org > March 2008

RE: defining elements with patterns and childelements

From: Michael Kay <mike@saxonica.com>
Date: Wed, 12 Mar 2008 00:15:02 -0000
To: <info@minimag.de>, "'XML Schema List'" <xmlschema-dev@w3.org>
Message-ID: <00e401c883d6$1dde0a30$6401a8c0@turtle>

> 
> I spent the whole day with tinking and trying and now my head 
> is totally empty. I have the following complexType which 
> describes a listType for unordered and ordered lists:

It actually consists of a type which allows 1 to many unorderedlist elements
followed by 1 to many orderedlist elements. That seems a bit odd to me.

But more relevant to your question, in your instance the content of the
orderedlist elements is mixed (that is, it contains child text nodes as well
as child elements), and there is no way in XML Schema 1.0 to constrain the
text that appears in elements with mixed content. It can be done with
assertions in XML Schema 1.1 (still a draft spec, but implemented in Saxon
9.0, if you want to give it a try).

Michael Kay
http://www.saxonica.com/

> 
>     <xs:complexType name="listType">
>         <xs:sequence>
>             <xs:element name="unorderedlist" maxOccurs="unbounded">
>                 <xs:simpleType>
>                     <xs:restriction base="xs:string">
>                         <xs:pattern value="&#x02DC;.*"/>
>                         <xs:pattern value="&#x2013;.*"/>
>                         <xs:pattern value="&#x2022;.*"/>
>                     </xs:restriction>
>                 </xs:simpleType>
>             </xs:element>
>             <xs:element name="orderedlist" maxOccurs="unbounded">
>                 <xs:simpleType>
>                     <xs:restriction base="xs:string">
>                         <xs:pattern value="[0-9].*"/>
>                         <xs:pattern value="[a-z].*"/>
>                         <xs:pattern value="[i-iiii]{1,4}.*"/>
>                     </xs:restriction>
>                 </xs:simpleType>
>             </xs:element>
>         </xs:sequence>
>     </xs:complexType>
> 
> 
> My aim: the element unorderedlist or orderedlist should start 
> with an special pattern (see above) and after the pattern it 
> should be possible to use text or other elelemts. 
> 
> Example:
> <orderedlist>1. This is an orderedlist with a 
> special<specchar> character</specchar> and again 
> text.</orderedlist> <orderedlist>2. This is an orderedlist 
> again with a special<specchar> character</specchar>.</orderedlist>
> 
> Does anyone out there have an idea how to realise such an 
> approach? I hope the question is understandable so far :-)
> 
> Thanks sooo much to everyone.
> Andreas
> 
Received on Wednesday, 12 March 2008 00:15:12 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:15:02 GMT