I am stuck with a problem where Validation of constraints(keyref) fails saying it can't find the matching key values. But, I do have the Key values present in my XML instance. I also think I have taken care of defining these Key and Keyref with proper scoping (in my case, KeyRef is in the parent scope of Key constraint definition).
Here's the specific constraint Validation error message from XmlSpy (similar issue with XmlBeans): "Undefined values for keyref identity constraint "stSgRef" - the values referred to by the field selector must match an existing unique/key value" Here's my XSD: <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2008 sp1 (http://www.altova.com) by spy (spy) --> <!--W3C Schema generated by XMLSpy v2008 (http://www.altova.com)--> <xs:schema targetNamespace="http://www.xxx.com/1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.xxx.com/1.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"> <xs:complexType name="SgType" abstract="false" mixed="false"> <xs:sequence minOccurs="0"> <xs:element name="name" type="xs:string" nillable="false"/> <xs:element name="description" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="ServiceType" abstract="false" mixed="false"> <xs:sequence> <xs:element name="description" default="None" nillable="true" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="100" fixed="false"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="sgReference" type="GenericReference" nillable="false" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="OwnerType" abstract="false" mixed="false"> <xs:sequence> <xs:element name="emailAddress" nillable="false" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"/> </xs:simpleType> </xs:element> <xs:element name="url" nillable="false" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"/> </xs:simpleType> </xs:element> </xs:sequence> <xs:attributeGroup ref="OwnerReference"/> </xs:complexType> <xs:element name="data" abstract="false" nillable="false"> <xs:annotation> <xs:documentation>Root Element</xs:documentation> </xs:annotation> <xs:complexType mixed="false"> <xs:sequence> <xs:element name="owners"> <xs:complexType> <xs:sequence> <xs:element name="owner" type="OwnerType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="sgs" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="owner" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="sg" type="SgType" maxOccurs="unbounded"/> </xs:sequence> <xs:attributeGroup ref="OwnerReference"/> </xs:complexType> <xs:key name="sgKey"> <xs:selector xpath="./owner"/> <xs:field xpath="sg/name"/> <xs:field xpath="@id"/> <xs:field xpath="@name"/> </xs:key> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="sts" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="owner" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="st" type="ServiceType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="name" type="xs:string" use="required"/> </xs:complexType> <xs:key name="stKey"> <xs:selector xpath="./owner"/> <xs:field xpath="@id"/> <xs:field xpath="@name"/> <xs:field xpath="st/@id"/> </xs:key> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="schemaVersion" type="xs:string" use="required"> <xs:annotation> <xs:documentation>schema version</xs:documentation> </xs:annotation> </xs:attribute> </xs:complexType> <xs:keyref name="sgOwnerRef" refer="ownerKey"> <xs:selector xpath="./sgs/owner"/> <xs:field xpath="@id"/> <xs:field xpath="@name"/> </xs:keyref> <xs:key name="ownerKey"> <xs:selector xpath="./owners/owner"/> <xs:field xpath="@id"/> <xs:field xpath="@name"/> </xs:key> <xs:keyref name="stOwnerRef" refer="ownerKey"> <xs:selector xpath="./sts/owner"/> <xs:field xpath="@id"/> <xs:field xpath="@name"/> </xs:keyref> <xs:keyref name="stSgRef" refer="sgKey"> <xs:selector xpath="./sts/owner/st/sgReference"/> <xs:field xpath="name"/> <xs:field xpath="owner/@id"/> <xs:field xpath="owner/@name"/> </xs:keyref> </xs:element> <xs:attributeGroup name="OwnerReference"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="name" type="xs:string" use="required"/> </xs:attributeGroup> <xs:complexType name="GenericReference"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="owner"> <xs:complexType> <xs:attributeGroup ref="OwnerReference"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:schema> Here is my XML instance which has the validation error: <?xml version="1.0" encoding="UTF-8"?> <!--Sample XML file generated by XML Spy v4.3 U (http://www.xmlspy.com)--> <data xmlns="http://www.xxx.com/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xxx.com/1.1 sample.xsd" schemaVersion=""> <owners> <owner id="a" name="b"> <emailAddress/> <url/> </owner> <owner id="c" name="d"> <emailAddress/> <url/> </owner> </owners> <sgs> <owner id="a" name="b"> <sg> <name>sg1</name> <description/> </sg> <sg> <name>sg2</name> <description/> </sg> </owner> <owner id="c" name="d"> <sg> <name>sg1</name> <description/> </sg> <sg> <name>sssg</name> <description/> </sg> </owner> </sgs> <sts> <owner id="a" name="b"> <st id="ccc"> <description/> <sgReference> <name>sg1</name> <owner id="c" name="d"/> </sgReference> <sgReference> <name>sg2</name> <owner id="a" name="b"/> </sgReference> </st> <st id="ddd"> <description/> <sgReference> <name>sg1</name> <owner id="c" name="d"/> </sgReference> <sgReference> <name>sg1</name> <owner id="a" name="b"/> </sgReference> </st> </owner> <owner id="c" name="d"> <st id="re"> <description/> <sgReference> <name>sssg</name> <owner id="c" name="d"/> </sgReference> <sgReference> <name>sssg</name> <owner id="c" name="d"/> </sgReference> </st> <st id="ru"> <description/> <sgReference> <name>sg1</name> <owner id="a" name="b"/> </sgReference> <sgReference> <name>sssg</name> <owner id="c" name="d"/> </sgReference> </st> </owner> </sts> </data> Here is my sample Key value in the above XML instance: <sgs> <owner id="a" name="b"> <sg> <name>sg1</name> <description/> </sg> .... Key { sg/name, @id, @name} => {sg1,a,b} This Key is defined at the 'owner' scope. My sample KeyRef in Xml instance: <sts> <owner id="c" name="d"> <st id="ru"> <sgReference> <name>sg1</name> <owner id="a" name="b"/> </sgReference> ..... So, I do have these KeyRef values(sg1,a,b) in the Key value. Why am I still getting this validation error? Unfortunately, I need to keep this design where "Owner" element is a container holding hundreds of "st" or "sg". And there can be hundreds of "Owner" elements. Appreciate any tips. It may be nothing to with typical namespace issue. -samy ____________________________________________________________________________________ Looking for last minute shopping deals? Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]