[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Identity-constraint
- From: ht@cogsci.ed.ac.uk (Henry S. Thompson)
- To: Eddie Robertsson <eddie@allette.com.au>
- Date: Mon, 05 Mar 2001 13:54:16 +0000
Eddie Robertsson <eddie@allette.com.au> writes:
> I don't think that XSV has fully implemented the validation regarding keys
> and keyref yet but I don't think that is the problem with your
> schema.
Correct on both counts. XSV is not complete in this area, but it _is_
complete enough to catch bugs in the case at hand.
> From what I can understand of your instance above you want to define
> a key for Item1/@Item1_2 and then reference this key saying that the
> value of Item2/@Item2_2 must be the same as an already existing
> Item1/@Item1_2. Correct? If this is correct you must declare the
> key in the scope of where you want it to be unique and in this case
> you want the Item1/@Item1_2 value to be unique within the scope of
> the Project element. This means that the key should be declared
> within the scope of the Project element and not within the scope of
> the Item1 element. The same will apply to your keyref declaration,
> it should be declared within the scope of the Project element
> instead of the Item2 element. This means your schema should be:
Correct analysis. Schema _slightly_ buggy -- remember XPath does not
utilise the default namespace declaration.
> <?xml version="1.0" encoding="UTF-8"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
> elementFormDefault="qualified" targetNamespace="www.allette.com.au/keyref"
> xmlns="www.allette.com.au/keyref">
xmlns="www.allette.com.au/keyref" xmlns:r="www.allette.com.au/keyref">
> <xsd:element name="Project">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="Item1" minOccurs="0"/>
> <xsd:element ref="Item2" minOccurs="0"/>
> </xsd:sequence>
> </xsd:complexType>
> <xsd:key name="Item1Key">
> <xsd:selector xpath="Item1"/>
<xsd:selector xpath="r:Item1"/>
> <xsd:field xpath="@Item1_2"/>
> </xsd:key>
> <xsd:keyref name="Item2_KeyRef" refer="Item1Key">
> <xsd:selector xpath ="Item2"/>
<xsd:selector xpath ="r:Item2"/>
> <xsd:field xpath ="@Item2_2"/>
> </xsd:keyref>
> </xsd:element>
With these changes this validates the example and catches errors if
you add them.
ht
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
W3C Fellow 1999--2001, part-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/