- From: Michael Kay <mhk@mhk.me.uk>
 - Date: Sat, 17 Jan 2004 11:20:02 -0000
 - To: <john.madden@duke.edu>, <xmlschema-dev@w3.org>
 - Message-ID: <006201c3dceb$da2b1e30$6401a8c0@pcukmka>
 
My reading is that Clause 4.3 of section 3.11.4 places constraints on
nodes in the "qualified node set" of a keyref, which is defined as "the
subset of the  <http://www.w3.org/TR/xmlschema-1/#key-tns> .target node
set. for which all the  <http://www.w3.org/TR/xmlschema-1/#fields>
{fields} evaluate to a node-set with exactly one member ". It doesn't
place any constraints on members of the target node-set that aren't in
the qualified node-set, that is, nodes for which one or more of the
fields are "null".
 
Presumably someone thought that SQL does it this way and therefore it
makes sense.
 
Michael Kay
-----Original Message-----
From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org]
On Behalf Of John F. Madden
Sent: 17 January 2004 00:13
To: xmlschema-dev@w3.org
Subject: Question about <unique/>/<keyref/>
Hi,
 
A construct involving a <unique/>/<keyref/> pair is not giving me the
validation behavior that I anticipate.
 
As I read the schema specification, the instance below should NOT
validate against the schema below. However, with the validator that I am
using, the instance DOES validate. 
 
Who's right here: me or the machine?
 
John
======================
John F. Madden
Duke University Medical Center
 
<!--Am I right to think the following instance should be INVALID...?-->
<Root xmlns="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="test.xsd">
     <KeyElement KeyField1="1" KeyField2="a"/>
     <KeyElement KeyField1="2" KeyField2="b"/>
     <KeyElement KeyField1="3"/>
     <KeyElement KeyField2="c"/>
     <KeyrefElement KeyrefField1="1" KeyrefField2="a"/>
     <KeyrefElement KeyrefField1="2" KeyrefField2="b"/>
     <KeyrefElement KeyrefField1="3"/>
     <KeyrefElement KeyrefField2="c"/>
     <KeyrefElement KeyrefField1="ThisKeyValueDoesNotExist"/>
     <KeyrefElement KeyrefField2="NeitherDoesThisOne"/>
</Root>
 
 
<!--...if this is the schema I'm validating against...-->
<xs:schema targetNamespace="test" xmlns="test"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:element name="Root">
          <xs:complexType>
               <xs:choice maxOccurs="unbounded">
                         <xs:element name="KeyElement"
type="KeyElementType" maxOccurs="unbounded"/>
                         <xs:element name="KeyrefElement"
type="KeyrefElementType" maxOccurs="unbounded"/>
               </xs:choice>
          </xs:complexType>
          <xs:unique name="Uniqueness">
               <xs:selector xpath=".//KeyElement"/>
               <xs:field xpath="@KeyField1"/>
               <xs:field xpath="@KeyField2"/>
          </xs:unique>
          <xs:keyref name="ReferentialIntegrity" refer="Uniqueness">
               <xs:selector xpath=".//KeyrefElement"/>
               <xs:field xpath="@KeyrefField1"/>
               <xs:field xpath="@KeyrefField2"/>
          </xs:keyref>
     </xs:element>
     <xs:complexType name="KeyElementType">
          <xs:complexContent>
               <xs:extension base="xs:anyType">
                    <xs:attribute name="KeyField1" type="xs:string"/>
                    <xs:attribute name="KeyField2" type="xs:string"/>
               </xs:extension>
          </xs:complexContent>
     </xs:complexType>
     <xs:complexType name="KeyrefElementType">
          <xs:complexContent>
               <xs:extension base="xs:anyType">
                    <xs:attribute name="KeyrefField1" type="xs:string"/>
                    <xs:attribute name="KeyrefField2" type="xs:string"/>
               </xs:extension>
          </xs:complexContent>
     </xs:complexType>
</xs:schema>
This email was sent on 1/16/04 at 7:13 PM.
Received on Saturday, 17 January 2004 07:13:57 UTC