

RE: keyref with empty sets

From: Michael Kay <mhk@mhk.me.uk>
Date: Fri, 28 May 2004 18:11:55 +0100
To: "'Nigel Hardy'" <nwh@aber.ac.uk>, <xmlschema-dev@w3.org>
Message-Id: <20040528171232.A9C34A0766@frink.w3.org>
DIfferent schema processors appear to differ on the validity of either of
these documents.
The rules for what happens when the xs:key and the corresponding xs:keyref
are defined on different element declarations are incredibly obscure (so
it's not surprising that implementations differ).
My reading is that the element on which the keyref appears (ExperimentSet)
is only valid if it has a "node-table" for the referenced key containing
each value selected by the keyref, and such a node-table will exist only for
the element on which the key is defined (UserSet) and on each of its
ancestors. In other words it only makes sense to define a keyref on either
the same element as the key, or an ancestor of it. The ExperimentSet element
doesn't have a node-table for the UserKey key, and I therefore conclude that
the ExperimentSet in d1.xml is invalid; and MSXML 4.0 appears to agree.
However, Xerces and XSV both say this one is valid, so I may well have the
wrong end of the stick.
In fact, I almost certainly have got the wrong end of the stick, because
MSXML, Xerces, and XSV all agree that d2.xml is invalid, and I can't for the
life of me see what is wrong with it. One would certainly think that d2 can
only be invalid if the schema is invalid, and if the schema is invalid then
d1 must fail validation. So I look forward to Henry's answer with eager
(I'm particular intrigued to know what the phrase "which much be understood
as logically prior to this clause of this constraint, below" is supposed to
mean. I don't understand it at all, let alone understanding it as logically
prior to something else, below or otherwise.)
As I am implementing a schema processor I'm interested in knowing what the
exact rules are, but my advice to a user would be always to declare the key
and the keyref on the same element, to steer clear of these problems. In
your case this is the Admin element.
Michael Kay


Behalf Of Nigel Hardy
Sent: 28 May 2004 13:56
To: xmlschema-dev@w3.org
Subject: Re: keyref with empty sets

Henry S. Thompson wrote:

I _think_ I understand your problem, but a complete schema and an

instance that illustrates the problem would allow me (and others) to

try to replicate. . .


Thank you very much. 

*	mod-admin.xsd is the schema 

*	it uses datatypes.xsd so I have added that 

*	d1.xml works (probably you don't need that example therefore) 

*	d2.xml causes the problem 

As you will guess for the filename, admin is only a module of a larger
system, hence the reason for allowing it to be empty.






  Adran Cyfrifiadureg, Prifysgol Cymru,     Aberystwyth, SY23 3DB, UK
Received on Friday, 28 May 2004 13:12:32 GMT
