$)CRe: Import Vs. Include.

$)C                                                                                                               
                                                                                                               
                                                                                                               


Sunil,

Generally speaking, if some elements, attributes and types are being
defined by one organization (in this case IMS), and other elements,
attributes and types are being defined by your organization (in this case
CISCO), or your organization is subclassing the type definitions of the
other organization, you should use <import>.

Think about this over a period of time.  If you use <include> and at a
later date receive a revised schema document from IMS in which they happen
to have chosen as a component name a name that you have already used, you
are in big trouble!  If you use <import> and at a later date you receive a
revised schema document from IMS in which they happen to have chosen as a
component name, there is no problem because your component is in your
targetNamespace, while there component is in their targetNamespace.

What you need to add to your fragment shown below is this namespace
declaration:
            xmlns:prefix="http://www.imsglobal.org/xsd/imsmd_rootv1p2p2"

so that you can use "prefix" followed by a colon just before the name of
any component that is defined in the IMS namespace.
You might as well add this to your schema element.

I think this is one point that some of the commercial XML Schema books make
pretty clear.  You probably want to get a hold of one of them.

Bob Schloss
IBM Watson Research
Hawthorne, NY USA






"sunil" <supadhye@cisco.com>@w3.org on 06/18/2002 08:42:53 AM

Please respond to <supadhye@cisco.com>

Sent by:    xmlschema-dev-request@w3.org


To:    <xmlschema-dev@w3.org>
cc:
Subject:    Import Vs. Include.







Hi
In my current csco_md_... xmlschema I have referenced another schema (the
ims schema) in the following way

   <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema
            targetNamespace=!1
http://www.cisco.com/elearning/xsd/ciscomd_v001!1
            xmlns=http://www.cisco.com/elearning/xsd/ciscomd_v001
            elementFormDefault=!1qualified!1 version="csco_elearning Version
0.0.1">

            <xsd:import
namespace="http://www.imsglobal.org/xsd/imsmd_rootv1p2p2"
                                schemaLocation="imsmd_rootv1p2p2.xsd"/>


However, I read in documentation that I am supposed to do it differently.
That document says:
?       The include element allows you to access components in other
schemas
-    All the schemas you include must have the same namespace as your
schema
(i.e., the schema that is doing the include)
-   The net effect of include is as though you had typed all the
definitions
directly into the containing schema

and gives the following example:
<xsd:schema !&>
    <xsd:include schemaLocation="LibraryBook.xsd"/>
    <xsd:include schemaLocation="LibraryEmployee.xsd"/>
    !&
</xsd:schema>


Which is right?  How should I include/import the ims schema, and what's the
difference between the way I did it and they did it?
Thanks.
Sunil

Received on Tuesday, 18 June 2002 16:00:59 UTC