OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Schemas and namespaces



"Fabrice DESRE - FT.BD/FTRD/DMI/GRI" <fabrice.desre@francetelecom.com> writes:

>   Hello,
> 
>  I need some clarification about the use of 
> namespaces in schemas.
>  Consider the following situation : my first
> schema is a type library; it looks like :
> 
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
>             targetNamespace="http://foobar.com/UTIL/"
> 	    elementFormDefault="qualified" 
> 	    attributeFormDefault="unqualified">
> <xsd:complexType name="choice.Type">
>    <xsd:simpleContent>
>       <xsd:restriction base="xsd:string">
>          <xsd:attribute name="name" type="xsd:string" use="required"/>
>       </xsd:restriction>
>    </xsd:simpleContent>
> </xsd:complexType>
> </xsd:schema>
> 
> Now I whant to use this type in another schema :
> 
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
>             targetNamespace="http://foobar.com/APP/"
> 	    elementFormDefault="qualified" 
> 	    attributeFormDefault="unqualified"
>             xmlns:util="http://foobar.com/UTIL/">
> <xsd:import namespace="http://foobar.com/UTIL/"
>             schemaLocation="util.xsd"/>
> <xsd:element name="root">
>    <xsd:complexType>
>       <xsd:sequence>
>          <xsd:element name="info" type="xsd:string"/>
>          <xsd:element name="choice" type="util:choice.Type"/>
>       <xsd:sequence>
>    </xsd:complexType>
> </xsd:element>
> </xsd:schema>
> 
> What is the correct instance document ?
> 
> This one :
> 
> <?xml version="1.0" ?>
> <app:root xmlns:app="http://foobar.com/APP/"
>           xmlns:util="http://foobar.com/UTIL/">
>     <app:info>Info element</app:info>
>     <app:choice name="foo"/>
> </root>

That one.

> Or this one :
> 
> <?xml version="1.0" ?>
> <app:root xmlns:app="http://foobar.com/APP/"
>           xmlns:util="http://foobar.com/UTIL/">
>     <app:info>Info element</app:info>
>     <util:choice name="foo"/>
> </root>
> 
>  What i need is to write a schema that allows the second instance
> to be valid, but I didn't find a clear answer on this subject in
> the spec.

If you want the element in the util namespace, declare it there and
reference it from the content model of app:root, as follows:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://foobar.com/UTIL/"
            xmlns:u="http://foobar.com/UTIL/"
	    elementFormDefault="qualified" 
	    attributeFormDefault="unqualified">
<xsd:complexType name="choice.Type">
   <xsd:simpleContent>
      <xsd:restriction base="xsd:string">
         <xsd:attribute name="name" type="xsd:string" use="required"/>
      </xsd:restriction>
   </xsd:simpleContent>
</xsd:complexType>

<xsd:element name="choice" type="u:choice.Type"/>

</xsd:schema>

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://foobar.com/APP/"
	    elementFormDefault="qualified" 
	    attributeFormDefault="unqualified"
            xmlns:util="http://foobar.com/UTIL/">
<xsd:import namespace="http://foobar.com/UTIL/"
            schemaLocation="util.xsd"/>
<xsd:element name="root">
   <xsd:complexType>
      <xsd:sequence>
         <xsd:element name="info" type="xsd:string"/>
         <xsd:element ref="util:choice"/>
      <xsd:sequence>
   </xsd:complexType>
</xsd:element>
</xsd:schema>

ht
-- 
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2001, part-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/