Re: Import/Include/Redefine

Hi Niko,

> 1. Includes referencing each other: can an included document refer
> to things in the including document, or in other included documents?
> I assume the answer is yes, because including should be equivalent
> to cutting and pasting the document into that point in the schema.

The answer is yes (though it's not *exactly* the same as cutting and
pasting - it's a namespace-aware operation).

The relevant description is in Section 4.2.1 of the XML Schema
Structures Rec (http://www.w3.org/TR/xmlschema-1/#compound-schema). In
the third paragraph of that section, it says:

 "The ·XML Schema· corresponding to <schema> contains not only the
  components corresponding to its definition and declaration
  [children], but also all the components of all the ·XML Schemas·
  corresponding to any <include>d schema documents."

Any references between structures in XML Schema are done between
*schema components* rather than XML elements (if you see what I mean),
so the fact that the resulting schema contains these schema components
means that they can refer to each other, across document boundaries,
without any problems.

> 2. Imports referencing each other: can an imported document refer to
> things in the importer? The example is the same as above, only with
> schema 1 importing schema 2 and the appropriate targetNamespace
> transformations.

This is a little more tricky, but I think that the answer is yes.
Right near the bottom of Section 4.2.3 of the XML Schema Structures
Rec (http://www.w3.org/TR/xmlschema-1/#composition-schemaImport),
there's a paragraph that says:

 "The ·schema components· (that is {type definitions}, {attribute
  declarations}, {element declarations}, {attribute group
  definitions}, {model group definitions}, {notation declarations}) of
  a schema corresponding to a <schema> element information item with
  one or more <import> element information items must include not only
  definitions or declarations corresponding to the appropriate members
  of its [children], but also, for each of those <import> element
  information items for which clause 2 above is satisfied, a set of
  ·schema components· identical to all the ·schema components· of I."

The 'clause 2' that's referred to is a clause that tests whether the
schema validator actually retrieves a schema from the xs:import, which
it might not do if, for example, you don't give a schemaLocation and
the namespace doesn't point to a schema or some resource from which
the validator can gain a pointer to the schema.

So the imported schema components are available in just the same way
as the embedded schema components, and they can reference each other
as much as you want.

(As a matter of design, if the imported schema had references to
components from another namespace, I think I'd include an xs:import,
preferably with a schemaLocation, anyway.)

> 3. Imports and xsi:namespaceLocation. If schema 1 imports schema 2
> for namespace XXX, but then the document being validated has an
> xsi:namespaceLocation="XXX schema-3.xsd" (or the user specifies such
> a thing), which schema takes precedence when?

It's up to the validator. The important reference here is Schema
Representation Constraint: Schema Document Location Strategy
(http://www.w3.org/TR/xmlschema-1/#schema_reference), which states:

 "Given a namespace name (or none) and (optionally) a URI reference from
  xsi:schemaLocation or xsi:noNamespaceSchemaLocation, schema-aware
  processors may implement any combination of the following strategies,
  in any order:

  1 Do nothing, for instance because a schema containing components
    for the given namespace name is already known to be available, or
    because it is known in advance that no efforts to locate schema
    documents will be successful (for example in embedded systems);

  2 Based on the location URI, identify an existing schema document,
    either as a resource which is an XML document or a <schema>
    element information item, in some local schema repository;

  3 Based on the namespace name, identify an existing schema
    document, either as a resource which is an XML document or a
    <schema> element information item, in some local schema
    repository;

  4 Attempt to resolve the location URI, to locate a resource on the
    web which is or contains or references a <schema> element;

  5 Attempt to resolve the namespace name to locate such a resource.

  Whenever possible configuration and/or invocation options for
  selecting and/or ordering the implemented strategies should be
  provided."

> 4. Imports and top elements: if schema 1 imports schema 2, can a
> global element from schema 2 kick off a document?

Hmm... interesting point. I think that the answer is yes, because the
physical schema documents are all merged into one logical schema (as
above), so there is no distinction between the schema actually
referenced from an instance document and one imported into that
referenced schema.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Received on Saturday, 12 January 2002 07:55:33 UTC