Re: schema design for one element, multiple types

Hi Kevin,

The best you can do is to make the element optional and the complex type 
mixed. That will give you a relaxed model that will cover both cases:

<xs:complexType name="foo2" mixed="true">
   <xs:sequence>
     <xs:element name="bar" type="xs:string" minOccurs="0"/>
   </xs:sequence>
</xs:complexType>

Additional constraints can be enforced then either at application level 
or embedding Schematron rules in your XML Schema.

There is also the option of using xsi:type to specify the type for foo 
in the instance document, see Michael Kay's answer two days ago on this 
list.
Then you will have something like:

<some_xml>
   <foo xsi:type="foo1">some_value</foo>
   <foo xsi:type="foo2">
     <bar>another_value</bar>
   </foo>
   <foo xsi:type="foo1">third_value</foo>
</some_xml>

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


Kevin Y. Kim (Lists) wrote:
> 
> Hi,
> 
> I'm trying to define a schema that will support the following:
> 
> 1    <some_xml>
> 2        <foo>some_value</foo>
> 3        <foo>
> 4            <bar>another_value</bar>
> 5        <foo>
> 6        <foo>third_value</foo>
> 7    </some_xml>
> 
> Now, I know how to defined the schema for each case:
>     For 2 & 6:
>         <xsd:complexType name="foo1">
>             <xsd:simpleContent>
>                 <xsd:extension type="xsd:string"/>
>             </xsd:simpleContent>
>         </xsd:complexType>
> 
>     For 3 - 5:
>         <xsd:complexType name="foo2">
>             <xsd:sequence>
>                 <xsd:element name="bar" type="xsd:string"/>
>             </xsd:sequence>
>         </xsd:complexType>
> 
> But how would I defined a schema to encompass both?
> 
> Thanks,
> -kevin
> 
> 
> 

Received on Wednesday, 9 November 2005 07:55:12 UTC