- From: Eric van der Vlist <vdv@dyomedea.com>
- Date: 12 May 2002 00:02:22 +0200
- To: Emer Magnani <Emer.Magnani@di3.co.uk>
- Cc: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>
Hi, On Wed, 2002-05-08 at 11:41, Emer Magnani wrote: > Hi, > > I have an xml schema that defines elements using the "sequence" content > model. I am trying to modify the schema so that it allows child elements to > appear in any order. Here is sample element: > code snipped. > > Looking at the definition of the "all" content model, it appears to me that > the "all" content model cannot be used to express such a hierarchical > structure. Is there any work around? Yes, there are *some* workarounds which are not generic but may help is some cases. First, if you can (and accept to) change the structure of your markup, you can add a container to make your structure fit into the xs:all mold: <myNode> <propertyA/> <propertyB/> <subNodes> <myNode>... </subNodes> </myNode> would do the trick. Alternatively, in your case, transforming propertyA and propertyB into attributes would also allow to specify your content model with a xs:choice. Now, if you can't (or don't want to) change the structure of the instance documents, the closest you can get to your document is through using xs:choice: <xs:element name="myNode> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="0"> <xs:element ref="propertyA"/> <xs:element ref="propertyB"/> <xs:element ref="myNode"/> </xs:choice> </xs:complexType> </xs:element> By doing so, you loose the constraint on propertyA and B occuring at most one time. You can express this adding a constraint using a rule based schema language such as schematron, but you may also have a workaround hacking a xs:unique constraint and if you write: <xs:element name="myNode> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="0"> <xs:element ref="propertyA"/> <xs:element ref="propertyB"/> <xs:element ref="myNode"/> </xs:choice> </xs:complexType> <xs:unique name="checkPropertyA"> <xs:selector xpath="."> <xs:field xpath="propertyA"> </xs:unique> </xs:element> There would be a violation of the xs:unique rule if the path identified by xs:field had more than one occurrence for an occurrence of the path identified by the xs:selector (ie in clear if there was more than one propertyA element. Note that the error messsage in this case will probably be very confusing for a end user :-) ... Hope this helps. Eric -- See you in Barcelona. http://www.xmleurope.com/2002/schedule.asp ------------------------------------------------------------------------ Eric van der Vlist http://xmlfr.org http://dyomedea.com http://xsltunit.org http://4xt.org http://examplotron.org ------------------------------------------------------------------------
Received on Saturday, 11 May 2002 18:02:25 UTC