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

Re: Problem designing complexType accepting a specified element a nd a llowing any others

From: Mik Lernout <mik@futurestreet.org>
Date: Thu, 11 Mar 2004 23:11:31 +0100
Message-ID: <4050E413.90709@futurestreet.org>
Cc: xmlschema-dev@w3.org

<all> definitly does not allow for <any> children, it can only contain 
<element>'s. The only solution I could think of would look like this:

<xs:element name="metadata">
  <xs:complexType>
     <xs:sequence>
        <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="identifier" type="xs:string"/>
        <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

I have not tested this but am fairly confident that it should work... I 
have made the <any>'s 'lax', because it was in your original mail, but 
are you sure you want to do that? Making them 'skip' would speed up 
validation a lot...

Hope that helps,

Mik


Markus Seibold wrote:

>I don't know how <all> handles the <any> element??? I only know that
><all> allows instance documents to mix the element order.
>
>Sorry! 
>
>
>  
>
>>-----Original Message-----
>>From: xmlschema-dev-request@w3.org 
>>[mailto:xmlschema-dev-request@w3.org] On Behalf Of Hess Yvan
>>Sent: Donnerstag, 11. März 2004 22:54
>>To: 'Markus Seibold '
>>Cc: 'xmlschema-dev@w3.org '
>>Subject: RE: Problem designing complexType accepting a 
>>specified element a nd a llowing any others
>>
>>
>>
>>Do you mean I have to change the schema like that ?
>>
>><xs:element name="metadata">
>>  <xs:complexType>
>>     <xs:all>
>>        <xs:element name="identifier" type="xs:string"/>
>>        <xs:any processContents="lax"/>
>>      </xs:all>
>>   </xs:complexType>
>></xs:element>
>>
>>If yes, I can say that I get an error saying that the xml 
>>schema is not valid.
>>
>>Regards. Yvan
>>
>>-----Original Message-----
>>From: Markus Seibold
>>To: 'Hess Yvan'; xmlschema-dev@w3.org
>>Sent: 11.03.04 22:33
>>Subject: RE: Problem designing complexType accepting a 
>>specified element and
>>a 	llowing any others
>>
>>
>>Hi Yvan,
>>try <all> instead of <sequence>. This element allows the 
>>elements to appear in random order but element declarations 
>>within the all container cannot contain maxOccurs="unbounded" 
>>but only maxOccurs="1".
>>
>>Markus
>>
>>    
>>
>>>-----Original Message-----
>>>From: xmlschema-dev-request@w3.org
>>>[mailto:xmlschema-dev-request@w3.org] On Behalf Of Hess Yvan
>>>Sent: Donnerstag, 11. März 2004 20:45
>>>To: 'xmlschema-dev@w3.org'
>>>Subject: Problem designing complexType accepting a specified 
>>>element and a llowing any others
>>>
>>>
>>>
>>>I want to design a complexType named "metadata" that forces
>>>the presence of an "identifier" element and allows any others 
>>>elements not predefined. Moreover the "identifier" and the 
>>>others elements can appear in any order into the "metadata" 
>>>element. Here are examples of valid xml instances:
>>>
>>><metadata xmlns="http://www.imtf.com/test">
>>>  <identifier>urn:hsc:1234</identifier>
>>>  <name>Hess Yvan</name>
>>></metadata>
>>>
>>><metadata xmlns="http://www.imtf.com/test">
>>>  <subject>This is the subject</subject>
>>>  <identifier>urn:hsc:1234</identifier>
>>></metadata>
>>>
>>>I implemented the following xml schema but it doesn't work:
>>>
>>><xs:element name="metadata">
>>>  <xs:complexType>
>>>    <xs:choice minOccurs="0" maxOccurs="unbounded">
>>>      <xs:element name="identifier" type="xs:string"/>
>>>      <xs:any processContents="lax" minOccurs="0"
>>>maxOccurs="unbounded"/>
>>>    </xs:choice>
>>>  </xs:complexType>
>>></xs:element>
>>>
>>>
>>>I get the following error with Xerces validation and a
>>>similar one with XSV (I violated the "Unique Particle 
>>>      
>>>
>>Attribution"). 
>>    
>>
>>>[Error] choice.xsd:4:23: cos-nonambig:
>>>"http://www.imtf.com/test":identifier
>>>and
>>> WC[##any] (or elements from their substitution group) 
>>>violate "Unique Particle Attribution". During validation 
>>>against this schema, ambiguity would be created for those two 
>>>particles.
>>>choice.xml: 571 ms (3 elems, 1 attrs, 0 spaces, 30 chars)
>>>
>>>If I change my xml schema using sequence instead of choice 
>>>      
>>>
>>as follow:
>>    
>>
>>><xs:element name="metadata">
>>>  <xs:complexType>
>>>    <xs:sequence>
>>>      <xs:element name="identifier" type="xs:string"/>
>>>      <xs:any processContents="lax" minOccurs="0"
>>>maxOccurs="unbounded"/>
>>>    </xs:sequence>
>>>  </xs:complexType>
>>></xs:element>
>>>
>>>it works but in this case the "identifier" element must be at
>>>the FIRST position and I don't want that !!! 
>>>
>>>Please can you help me to solve this problem. I have no idea
>>>how to solve it !!!
>>>
>>>Regards. Yvan Hess
>>>
>>>--------------------------------------------------------
>>>XML file:
>>>
>>><?xml version="1.0" encoding="UTF-8"?>
>>><metadata xmlns="http://www.imtf.com/test"
>>>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>xsi:schemaLocation="http://www.imtf.com/test choice.xsd">
>>>   <identifier>urn:hsc:1234</identifier>
>>>   <name>Hess Yvan</name>
>>></metadata>
>>>
>>>--------------------------------------------------------
>>>XML schema file:
>>>
>>><?xml version="1.0" encoding="UTF-8"?>
>>><xs:schema targetNamespace="http://www.imtf.com/test"
>>>xmlns="http://www.imtf.com/test"
>>>xmlns:xs="http://www.w3.org/2001/XMLSchema"
>>>elementFormDefault="qualified" attributeFormDefault="unqualified">
>>>   <xs:element name="metadata">
>>>      <xs:complexType>
>>>         <xs:choice minOccurs="0" maxOccurs="unbounded">
>>>            <xs:element name="identifier" type="xs:string"/>
>>>            <xs:any processContents="lax" minOccurs="0" 
>>>maxOccurs="unbounded"/>
>>>         </xs:choice>
>>>      </xs:complexType>
>>>   </xs:element>
>>></xs:schema>
>>>
>>>
>>>
>>>
>>>      
>>>
>>    
>>
>
>.
>
>  
>
Received on Thursday, 11 March 2004 17:12:34 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 5 February 2014 23:40:23 UTC