- From: <Noah_Mendelsohn@lotus.com>
- Date: Wed, 17 Jan 2001 17:24:12 -0500
- To: Philip Wadler <wadler@research.bell-labs.com>
- Cc: ht@cogsci.ed.ac.uk (Henry S. Thompson), wadler@research.bell-labs.com, www-xml-schema-comments@w3.org
Philip Wadler writes:
>> Doing this in a functional way means forgetting everything about
>> the surrounding schema 1 until the validator leaves
>> <element ref="B:B1"/>. Thus the declaration of
>> <element name="A1" equivClass="B:B1">
>> is not available when processing the data inside the "start" elements
>> (<A:A1>...</A:A1>)!!!
I am not 100% sure I follow your concern, but I think your propsal to
"forget about surrounding schema 1" conflicts with the requirements that
[1]:
* The processor succeed in locating the schema components transitively
required to complete an assessment (note that components derived from
schema documents can be integrated with components obtained through other
means);
* no definition or declaration changes once it has been established;
* if the processor chooses to acquire declarations and definitions
dynamically, that there be no side effects of such dynamic acquisition
that would cause the results of assessment to differ from that which would
have been obtained from the same schema components acquired in bulk.
First of all, it is known and intentional that equivalence classes (now
called substitution groups) do support interactions across namespaces. It
is further known, and I _think_ this is the essence of your concern, that
a reference to the head of such a group represents a disjunction (a
choice) across all the elements in the group, and that the content model
can therefore be seen to "change" as you dynamically aquire schemas. I
think you will find that the rules above require you to (1) produce
consistent results in any given validation...the same reference doesn't
fail validate content at the beginning of a document that would later be
accepted and (2) if you choose to create DFA's for content models
aggressively, and you also choose to acquire schema documents dynamically,
then a consequence is that you may have to recompute such DFA as new
substitution group members are acquired. This was a conscious design
decision. An alternative that some schema processors will choose to
pursue is to identify all schema documents before beginning, either by
getting them from a command line or by prescanning the instance for
schemaLocation hints (if you're not streaming); if you know all schemas in
advance you can build each DFA once.
In general, your suggestion that one might tentatively "forget" schema 1
seems to conflict with the 2nd requirement above. Our model is that the
entire schema as stable throughout the validation, except insofar as you
may choose to dynamically assemble the pieces up to the time they are
first needed. Think of it more like paging in pieces of a conceptually
static set, rather than dynamically changing or deleting definitions or
declarations.
I hope I have correctly understood your concerns and that this explanation
is useful.
[1] http://www.w3.org/TR/xmlschema-1/#layer1
------------------------------------------------------------------------
Noah Mendelsohn Voice: 1-617-693-4036
Lotus Development Corp. Fax: 1-617-693-8676
One Rogers Street
Cambridge, MA 02142
------------------------------------------------------------------------
Philip Wadler <wadler@research.bell-labs.com>
Sent by: www-xml-schema-comments-request@w3.org
01/16/01 01:55 PM
To: ht@cogsci.ed.ac.uk (Henry S. Thompson)
cc: Philip Wadler <wadler@research.bell-labs.com>,
www-xml-schema-comments@w3.org, (bcc: Noah Mendelsohn/CAM/Lotus)
Subject: Re: Feedback on candidate recommendation
Henry requested more details on the problem with the interaction
between import and substitution. Volker's response follows. -- P
Date: Tue, 16 Jan 2001 19:18:06 +0100
From: Volker Renneberg <volker.renneberg@acm.org>
The problem is how to check the document. The element tagged with
"start" can be found in schema 1 (uri_for_A). Afterwards the validator
steps down into "complextype" where the it finds a reference to
element B1 which resides in schema 2 (uri_for_B).
Now it depends on the validator implementation. My first version had a
_current_ schema (containing all the imported and included schemas)
which was passed to all methods. While stepping into an import (like
<element ref="B:B1"/>) it extracted the new "current" schema,
i. e. schema 2 (uri_for_B).
Doing this in a functional way means forgetting everything about
the surrounding schema 1 until the validator leaves
<element ref="B:B1"/>. Thus the declaration of
<element name="A1" equivClass="B:B1">
is not available when processing the data inside the "start" elements
(<A:A1>...</A:A1>)!!!
My solution for this problem means getting away from the hierarchical
view towards a plain list of all known schemas (1 -> schema 1 | 2 ->
schema 2 | ...). Additionally the number of the current schema and a
list of numbers describing the way down to the current schema are
provided. For example, while checking <A:A1>...</A:A1>, the current
schema number would be 2 and the list would be [1], because the
validator stepped from schema 1 to schema 2.
This solution allows to step back through all schemas and to look for
existing equivClass-declarations.
I hope this helps although it's a little bit difficult to describe.
> I passed on to the Schema working group your comments about
> difficulties you encountered implementing Schema.
> They asked for more details on the following comment:
>
> - interaction between equivalence classes and import:
>
> <schema targetNamespace="uri_for_A" xmlns:B="uri_for_B">
> <import targetNamespace="uri_for_B"/>
> <element name="start">
> <complextype>
> <element ref="B:B1"/>
> </complextype>
> </element>
>
> <element name="A1" equivClass="B:B1">
> ...
> </element >
> </schema>
>
> <schema targetNamespace="uri_for_B">
> <element name="B1">
> ...
> </element >
> </schema>
>
> document:
> <A:start xmlns:A="uri_for_A">
> <A:A1>...</A:A1>
> </A:start>
Received on Wednesday, 17 January 2001 17:34:57 UTC