Re: Redefining redefines

> There are situations in which the redefinition of a type, and the
subsequent
> redefinition of the redefined type, are desirable. One such case is where
a
> schema user would like to extend a type, not just from the original
source
> but based on the extension of another schema user's extension (Company C
> extends type T from Company B, who picked it up from Company A and
redefined
> it).
>
> I notice in the Rec that this is discouraged:
>
> In all cases there must be a top-level definition item of the appropriate
> name and kind in the <redefine> <http://www.w3.org/TR/xmlschema-1/> d
schema
> document.
>           NOTE: The above is carefully worded so that multiple
> equivalent <redefine> <http://www.w3.org/TR/xmlschema-1/> ing of the same
> schema document will not constitute a violation of clause 2
> <http://www.w3.org/TR/xmlschema-1/>  of Schema Properties Correct
(§3.15.6)
> <http://www.w3.org/TR/xmlschema-1/> , but applications are allowed,
indeed
> encouraged, to avoid <redefine> <http://www.w3.org/TR/xmlschema-1/> ing
the
> same schema document in the same way more than once to forestall the
> necessity of establishing identity component by component (although this
> will have to be done for the individual redefinitions themselves).
> Indeed, XML Spy requires that the redefined schema contain a type
definition
> for a type that is to be redefined - that a redefinition is not
sufficient.
> So it is not possible to redefine a redefined type.
>
> So the question is, is this something that is likely to change, or will
> validators vary on whether or not they support cascading redefines?

Sorry for the long delay in replying to your question.

The schema working group believes that redefining redefines is allowed by
the current spec. The following forwarded message indicates the reason(s).

=====================================================

A concrete example might help:

xsd1:
<schema ...>
  <complexType name="CT">
    ...
</schema>

xsd2:
<schema ...>
  <redefine schemaLocation="xsd1">
    <complexType name="CT">
      ...
  </redefine>
</schema>

xsd3:
<schema ...>
  <redefine schemaLocation="xsd2">
    <complexType name="CT">
      ...
  </redefine>
</schema>

Apparently, xsd1 is valid, and it corresponds to a schema with 1 global
complex type component (and built-in types, of course).

xsd2 is also valid, and it corresponds to a schema with 1 global complex
type, whose base type is something similar to "CT" in xsd1, without a name.

Now the question is whether, in the current spec, there is anything (other
than the "top-level" phrase) that makes xsd3 invalid, or makes it
impossible to determine the validity of xsd3, or makes it impossible to
determine what components are in the schema corresponding to xsd3.

Let's try to follow the rules in constraints [1] and [2]:

The interesting bullets seem to be 4.1 from [1] and 1 from [2].

"4.1 If clause 3.1 or clause 3.2 above is satisfied, then the schema
corresponding to SII' must include not only definitions or declarations
corresponding to the appropriate members of its own [children], but also
components identical to all the ·schema components· of I, with the
exception of those explicitly redefined (see Individual Component
Redefinition (§4.2.2) below)."

and

"1 The <simpleType> and <complexType> [children] information items each
correspond to two components:
1.1 One component which corresponds to the top-level definition item with
the same name in the <redefine>d schema document, as defined in Schema
Component Details (§3), except that its {name} is ·absent·;
1.2 One component which corresponds to the information item itself, as
defined in Schema Component Details (§3), except that its {base type
definition} is the component defined in 1.1 above."

a. I don't see anything that makes xsd3 invalid.
b. It's clear that the schema of xsd3 includes 1 global complex type CT,
whose base type is the CT in xsd2 (without a name, of course).

Now if another schema document or an instance document references xsd3
(include, import, redefine), xsd3 is nothing different from any other
schema document. It just corresponds to a schema that contains some
components. The fact that it redefined something, or it redefined something
that was redefined doesn't not concern the document referencing it.

Another case is that some document references both xsd3 and either xsd1 or
xsd2. But this is handled in the same way as if some document references
both xsd2 and xsd1: an error of duplicate globals.

Now back to R-123. Unless someone finds something else in the spec that
contradicts with what I figured, I'm going to draw the conclusions that:
1. The commentator's concern isn't necessary. Redefining redefines is
allowed by the current spec.
2. The spec is clear about how redefining redefines is handled. Nothing
needs to be clarified.
3. The spec does have an error with regard to the lack of the definition of
"top-level". This, IMO, should be classified as a future requirement.

[1] http://www.w3.org/TR/xmlschema-1/#src-redefine
[2] http://www.w3.org/TR/xmlschema-1/#src-expredef

Thanks,
Sandy Gao
Software Developer, IBM Canada
(1-905) 413-3255
sandygao@ca.ibm.com

Received on Thursday, 12 June 2003 12:35:29 UTC