Subject:Question using xsd:key Author:Hans-Peter Küchler Date:29 Oct 2002 11:56 AM
Please have a look at the KeyTest.xml file (it is in the ZIP file). Open the file with SS and validate the file. The file is valid. But I think it shouldn't be valid because of the key definition in the xsd file. What's wrong with my key definition?
Subject:Re: Question using xsd:key Author:Hans-Peter Küchler Date:31 Oct 2002 05:28 AM
I think, there is another subtle error in validating keys. This error(?) is not reported by SS (nor by XSV):
The key in KeyTest2.xsd should prevent element Prozess with Name="P2" from referencing Prozess "P1-1" which is recursive embedded. At first sight the key "KProzessNameR" has all Prozess names, BUT (because of the spec) there shouldn't be a Name of a recursive embedded element Prozess in the key! http://www.w3.org/TR/xmlschema-1/#section-Identity-constraint-Definition-Information-Set-Contributions:
'PSVI Contributions for Identity-constraint Binding information items' says
"A ·node table· with one entry for every ·key-sequence· (call it k) and node (call it n) such that one of the following must be true:
1 There is an entry in one of the ·node tables· associated with the [definition] in an Identity-constraint Binding information item in at least one of the [identity-constraint table]s of the element information item [children] of the element information item whose ·key-sequence· is k and whose node is n;
2 n appears with ·key-sequence· k in the ·qualified node set· for the [definition]."
The word "one" in the primer is written in bold, so I read this as "exactly one". So there have all Name elements from recursive embedded Prozess elements removed from the node table, because BOTH clauses are true for such a Name element.
First, it is at least in the node table of the Prozesse element where it appears with XPath Prozess/Name and it has to be propagated upwards and so it is in the node table of the child Prozess of Prozesse.
Second, it is in the qualified node set of Prozesse.
Subject:Re: Question using xsd:key Author:(Deleted User) Date:07 Nov 2002 01:13 PM
Hi Hans,
sorry for the delay, but this question needed a lot of thought... (I still
have headache ;-) )
After reading the specs multiple times, I came to the conclusion that your
fragment is valid, and there should not be any error reported.
The key sentence is located just after the piece of spec you reported:
"Potential conflicts are resolved by not including any conflicting entries
which would have owed their inclusion to clause 1 above.". That is, the
node with value "P1-1" could be added to the identity constraint table of
the top level "Prozesse" both because it is selectable by the
".//Prozess/Name" XPath query and because it is already in the identity
constraint table of a child of "Prozesse"; due to this conflict, the second
entry is discarded, but one is entered in the table anyway.