- From: Eric van der Vlist <vdv@dyomedea.com>
- Date: Mon, 02 Jul 2001 22:00:50 +0200
- To: priscilla@walmsley.com
- Cc: "'WATKIN-JONES,ADAM (HP-UnitedKingdom,ex1)'" <adam_watkin-jones@hp.com>, xmlschema-dev@w3.org
Priscilla Walmsley wrote: > > Hello, > > You are correct that it should be a QName. I suspect it was a bug in a > previous version of XSV because the current on-line version of XSV does not > consider it an error. Good ;) ... > To answer your question about why it is a QName, the key and keyref > definitions do _not_ have to be defined side by side in the same scoping > element. The scoping element of the key can be a child of the scoping > element of the keyref. That child may be in a different namespace. This is a point I find most confusing in the spec. The rec [1] says that: If the {identity-constraint category} is keyref, then for each member of the ·qualified node set· (call this the keyref member), there must be a ·node table· associated with the {referenced key} in the [identity-constraint table] of the element information item (see Identity-constraint Table (§3.11.5), which must be understood as logically prior to this clause of this constraint, below) and there must be an entry in that table whose ·key-sequence· is equal to the keyref member's ·key-sequence· member for member, as defined by Equal in [XML Schemas: Datatypes]. [1] http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#section-Identity-constraint-Definition-Information-Set-Contributions I am probably wrong, but I read this as implying a need that the key and keyref tables belong to the same element. Furthermore, I would also think that allowing scoping element of the key or unique definition to be a child of the scoping element of the keyref still more confusing. If I understand what you mean correctly, it's allowing cases such as: <root> <sub> <key id="1"/> <key id="2"/> </sub> <sub> <key id="2"/> <key id="3"/> </sub> <keyref ref="2"/> </root> .../... <xs:element name="root"> <xs:element name="sub"> .../... <xs:key name="key"> <xs:selector xpath="key"/> <xs:field xpath="@id"/> </xs:key> </xs:element> <xs:keyref name="keyref" refer="key"> <xs:selector xpath="keyref"/> <xs:field xpath="@ref"/> </xs:key> </xs:element> where one cannot determine which key is referred by a keyref. This is also troubling to see that the scope of a key is wider than the element in which it is defined and I would have found it less confusing if it would have been the scoping element of the keyref that could have been a child of the scoping element of the key or unique. I have probably misread the rec and|or your answer, but I can't figure out what I have wrong! > In this example, mykey could have been defined in the declaration of keys, > and dummy1 could have been defined in the declaration of root. > > Hope that helps! Yes, it does. Thanks Eric > > Priscilla Walmsley > Vitria Technology > -- See you at XTech in San Diego. http://conferences.oreillynet.com/cs/os2001/view/e_spkr/790 ------------------------------------------------------------------------ Eric van der Vlist http://xmlfr.org http://dyomedea.com http://xsltunit.org http://4xt.org http://examplotron.org ------------------------------------------------------------------------
Received on Monday, 2 July 2001 16:01:05 UTC