W3C home > Mailing lists > Public > xmlschema-dev@w3.org > May 2001

Re: Question about combination of xsi:type and import

From: Eddie Robertsson <eddie@allette.com.au>
Date: Thu, 17 May 2001 16:21:14 +1000
Message-ID: <3B036DD9.A63A733C@allette.com.au>
To: O.Geisser@ceyoniq.com
CC: xmlschema-dev@w3.org
Hi Oliver,


> <?xml version="1.0" encoding="UTF-8"?>
> <tree:tree xmlns:tree="urn:tree"
> xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
>         <tree:leaf xsi:type="tree:extendedLeafType">
>                 <tree:name>eins</tree:name>
>                 <tree:info>Test</tree:info>
>         </tree:leaf>
> </tree:tree>
>
> Up until here there is no problem.

You'll need to give XML Spy an indication of where to locate your schema as
well. You do this with the xsi:schemaLocation attribute. So, the above example
would be:

<?xml version="1.0" encoding="UTF-8"?>
<tree:tree xmlns:tree="urn:tree"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="urn:tree leafSchema.xsd">
        <tree:leaf xsi:type="tree:extendedLeafType">
                <tree:name>eins</tree:name>
                <tree:info>Test</tree:info>
        </tree:leaf>
</tree:tree>

> Now I want to do the following, but I don't know if it is possible. And if it
> is possible I don't know how
> to do it:
>
> The definition of the derived "extendedLeafType" should be in another
> namespace and therefor in another schema. Let's call the schema custom.xsd.
> The custom.xsd needs to import the tree.xsd schema.
> The tree.xsd should not know anything about the custom.xsd, because the
> custom.xsd is defined later (by some third party).
>
> But I want to write instance documents that use the derived type. So I tried
> the following:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <tree:tree xmlns:tree="urn:tree" xmlns:custom="urn:custom"
> xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
>         <tree:leaf xsi:type="custom:extendedLeafType">
>                 <tree:name>eins</tree:name>
>                 <custom:info>Test</tree:info>
>         </tree:leaf>
> </tree:tree>
>
> This does not work!
> I've tried to validate this with XML Spy and get the error: "Unknown type
> custom:extendedLeafType" (or something similiar).

Sure it will. You just have to add the xsi:schemaLocation attribute so your
instance will be:

<?xml version="1.0" encoding="UTF-8"?>
<tree:tree xmlns:tree="urn:tree" xmlns:custom="urn:custom"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="urn:custom custom.xsd">
        <tree:leaf xsi:type="custom:extendedLeafType">
                <tree:name>eins</tree:name>
                <custom:info>Test</custom:info>
        </tree:leaf>
</tree:tree>

At the end you'll also find the two schemas.

Hope this helps
/Eddie

leafType.xsd
-------------
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:tree"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:tns="urn:tree"
elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xsd:element name="tree" type="tns:branchType"/>
       <xsd:complexType name="leafType">
               <xsd:sequence>
                       <xsd:element name="name" type="xsd:string"/>
               </xsd:sequence>
       </xsd:complexType>
       <xsd:complexType name="branchType">
               <xsd:choice maxOccurs="unbounded">
                       <xsd:element name="leaf" type="tns:leafType"/>
                       <xsd:element name="branch" type="tns:branchType"/>
               </xsd:choice>
       </xsd:complexType>
</xsd:schema>

custom.xsd
-----------
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
elementFormDefault="qualified" xmlns:custom="urn:custom"
targetNamespace="urn:custom" xmlns:tns="urn:tree">
 <xsd:import namespace="urn:tree" schemaLocation="leafType.xsd"/>
       <xsd:complexType name="extendedLeafType">
               <xsd:complexContent>
                       <xsd:extension base="tns:leafType">
                               <xsd:sequence>
                                       <xsd:element name="info"
type="xsd:string"/>
                               </xsd:sequence>
                       </xsd:extension>
               </xsd:complexContent>
       </xsd:complexType>
</xsd:schema>
Received on Thursday, 17 May 2001 02:23:35 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:20 GMT