- From: Roger L. Costello <costello@mitre.org>
- Date: Sat, 24 Feb 2001 06:33:31 -0500
- To: xmlschema-dev@w3.org, costello@mitre.org
Hi Folks,
XSV is generating an error when a no-namespace schema (containing
components that reference one another) is <include>d into a schema with
a targetNamespace.
Consider this no-namespace schema:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
elementFormDefault="qualified">
<xsd:complexType name="CardCatalogueEntry">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
<xsd:element name="Date" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="Publisher" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Book" type="CardCatalogueEntry"/>
</xsd:schema>
This schema has two components - a complexType CardCatalogueEntry
component and an element Book component. The Book component references
the CardCatalogueEntry component.
Consider what happens when these components are included in a schema
with a namespace.
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.library.org"
xmlns="http://www.library.org"
elementFormDefault="qualified">
<xsd:include schemaLocation="BookCatalogue.xsd"/>
<xsd:element name="Library">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="BookCatalogue">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Book"/>
</xsd:sequence>
</xsd:complexType>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Note that the targetNamespace is the default namespace. When the
no-namespace components (Book and CardCatalogueEntry) are included in
this schema they take on the targetNamespace. Consequently, this
element declaration in the no-namespace schema:
<xsd:element name="Book" type="CardCatalogueEntry"/>
should be referencing a CardCatalogueEntry component in the
targetNamespace. [Or, is Book still referencing CardCatalogueEntry in
no-namespace? Do only the components take on the namespace of the
<include>ing schema, or do the references also take on the namespace? I
am not clear on this.]
When I ran this example in XSV I got this error message:
Undefined type {None}:CardCatalogueEntry referenced as type definition
of Book
This would seem to suggest that:
<xsd:element name="Book" type="CardCatalogueEntry"/>
is still referencing the CardCatalogueEntry in no-namespace (as opposed
to a reference to CardCatalogueEntry in the default namespace).
There are two possibilities:
{1} XSV has a bug and type="CardCatalogueEntry" is a reference to the
CardCatalogueEntry in the default namespace (which in my schema is the
targetNamespace)
{2} There is no bug in XSV and type="CardCatalogueEntry" is a reference
to the CardCatalogueEntry in no-namespace, and XSV's error message is
valid.
Can you please enlighten me as to the true nature of <include>ing
coupled no-namespace components - when no-namespace components are
<include>d in a schema do the no-namespace component references become
references to the <include>ing schema's default namespace, or do they
continue as references to no-namespace? /Roger
Received on Saturday, 24 February 2001 06:32:18 UTC