Re: XSchema question

Hi Sandra,

This is not supported by XML Schema. What you can do is to define a more 
relaxed content model (for instance a zero or more choice of all the 
possible elements) and add Schematron embedded rules to check the 
occurrences constraints for each child element.

You can find an example schema below. This allows any number of BBB and 
CCC elements to be interleaved with zero or one EEE elements and with 
one or more DDD elements.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="AAA">
     <xsd:annotation>
       <xsd:appinfo>
         <pattern xmlns="http://www.ascc.net/xml/schematron" 
name="testOccurences">
           <rule context="AAA">
             <assert test="count(DDD)>0">DDD should appear one or more 
times</assert>
             <assert test="count(EEE)&lt;2">EEE should appear at most 
once</assert>
           </rule>
         </pattern>
       </xsd:appinfo>
     </xsd:annotation>
     <xsd:complexType mixed="false">
       <xsd:choice minOccurs="0" maxOccurs="unbounded">
         <xsd:element name="BBB" type="xsd:string"/>
         <xsd:element name="CCC" type="xsd:string"/>
         <xsd:element name="DDD" type="xsd:string"/>
         <xsd:element name="EEE" type="xsd:string"/>
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
</xsd:schema>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


Sandra Martinez wrote:
> 
> Could someone provide any ideas or work-around on the following issue:
> 
> I am trying to design a Xschema that allows an unordered list of 
> elements where some of the elements are unbounded, have occurrences of 0 
> or 1,  or 1 to unbounded.  Based on the  XSchema constraint that 
> <xsd:all> does not allowed 0..unbounded elements, I decided to used the 
> following work-around which works for an unordered list of unbounded 
> elements but it does not work for the other two cases. The question is: 
> How can I modified this XSxhema to allow an additional  element child 
> <AAA> whose occurrence is 0 or 1 and that could also be placed in any 
> order (unordered) and also allow for an additional elemen <DDD> whose 
> occurance is one to unbounded and that could also be placed in any order 
> (unordered):
> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>         <xsd:element name="AAA">
>                 <xsd:complexType mixed="false">
>                                 <xsd:sequence minOccurs="0" 
> maxOccurs="unbounded">
>                                         <xsd:element name="BBB" 
> type="xsd:string" minOccurs="0"/>
>                                         <xsd:element name="CCC" 
> type="xsd:string" minOccurs="0"/>
>                                 </xsd:sequence>
>                 </xsd:complexType>
>         </xsd:element>
> </xsd:schema>
> 
> 
> 
>  valid XML instance 1:
> 
> <AAA>
>         <BBB>222</BBB>
>         <CCC>ZZZ</CCC>
> </AAA>
> 
> valid XML instance 2:
> 
> <AAA>
>         <CCC>ZZZ</CCC>
>         <BBB>222</BBB>
> </AAA>
> 
> valid XML instance 3:
> 
> <AAA>
>         <BBB>222</BBB>
>         <CCC>ZZZ</CCC>
>         <BBB>222</BBB>
> </AAA>
> 
> valid XML instance 4:
> 
> <AAA>
>         <BBB>222</BBB>
> </AAA>
> 
> 
> Thank you in advanced,
> 
> Sandra
> 
> 
> Sandra I. Martinez
> National Institute of Standards and Technology
> 100 Bureau Drive, Stop 8970,
> Gaithersburg, Md. 20899
> 
> (301) 975-3579
> sandra.martinez@nist.gov
> 
> 
> 

Received on Monday, 7 August 2006 13:46:45 UTC