Re: importing elements from multiple namespaces and defining their sc hemaLocations in a corresponding XML data file

Hi Chuck,

You would do it like this;

<twoFoos xmlns='http://www.foo.com'
         xmlns:ns1='http://www.foo.com/ns1'
         xmlns:ns2='http://www.foo.com/ns2'
         xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance'
         xsi:schemaLocation='http://www.foo.com
                             http://www.foo.com/foo.xsd
                             http://www.foo.com/ns1
                             http://www.foo.com/ns1.xsd
                             http://www.foo.com/ns2
                             http://www.foo.com/ns2.xsd' >

  <ns1:foo/>
  <ns2:foo/>
</twoFoos>


It would also be legal to do this;

<twoFoos xmlns='http://www.foo.com'
         xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance'
         xsi:schemaLocation='http://www.foo.com
                             http://www.foo.com/foo.xsd' >
  <ns1:foo xmlns:ns1='http://www.foo.com/ns1'
           xsi:schemaLocation='http://www.foo.com/ns1
                               http://www.foo.com/ns1.xsd' />

  <ns2:foo xmlns:ns2='http://www.foo.com/ns2'
           xsi:schemaLocation='http://www.foo.com/ns2
                               http://www.foo.com/ns2.xsd' />
</twoFoos>


Other combinations with respect to placement of namespace declarations and
xsi:schemaLocation attributes are also possible.

Note that as per[1] bullet 4, the schemaLocation for a particular nsuri must
*not* appear after the first occurence of an element or attribute in that
namespace. So the following would be illegal;

<twoFoos xmlns='http://www.foo.com'
         xmlns:ns1='http://www.foo.com/ns1'
         xmlns:ns2='http://www.foo.com/ns2'
         xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance' >
  <ns1:foo/>
  <ns2:foo xsi:schemaLocation='http://www.foo.com
                               http://www.foo.com/foo.xsd
                               http://www.foo.com/ns1
                               http://www.foo.com/ns1.xsd
                               http://www.foo.com/ns2
                               http://www.foo.com/ns2.xsd' />
</twoFoos>

because the schemeLocations for http://www.foo.com and
http://www.foo.com/ns1 appear after the first occurence of elements in those
namespaces.

Hope this helps,

Martin Gudgin


[1] http://www.w3.org/TR/xmlschema-1/#schema-loc


----- Original Message -----
From: <chuck.han@autodesk.com>
To: <www-xml-schema-comments@w3.org>
Sent: Thursday, September 28, 2000 11:14 PM
Subject: importing elements from multiple namespaces and defining their sc
hemaLocations in a corresponding XML data file


> Let's say I have a complexType "twoFoosType" made up of two elements
> named "foo" from different namespaces and a global element "twoFoos"
> that uses this complexType:
>
>     <xsd:element name="twoFoos" type="twoFoosType"/>
>     <xsd:complexType name="twoFoosType">
>         <xsd:element ref="ns1:foo"/>
>         <xsd:element ref="ns2:foo"/>
>     </xsd:complexType>
>
> How do I use "twoFoos" in an XML data file and give the schemaLocation
> of "twoFoos" and the two "foo" elements?  I assume that this structure
> is partially correct...
>
>     <twoFoos xmlns="http://www.foo.com"
> xmlns:ns1="http://www.foo.com/ns1" xmlns:ns2="http://www.foo.com/ns2">
>         <ns1:foo/>
>         <ns2:foo/>
>     </twoFoos>
>
> ...but I am not clear how to define the schemaLocation for all three
> namespaces.
>
> thanks in advance, Chuck
>
> Chuck Han, Data Architect
> Autodesk, Inc.
> +1.415.507.8742
>
>

Received on Friday, 29 September 2000 03:48:22 UTC