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]

Reply via email to