Hi
everyone,

Is it true that key/keyref does not validate with recursion? I have this
question because that when I validate the following xml file, the validation of
an element defined with recursion doesn't work. Following is xml and the
corresponding xsd file. (I validate xml file with Eclipse and the xerces
plug-in is org.apache.xerces_2.9.0.v200805270400). Thanks in advance!

Toan.



xsd file :



<?xml version="1.0" encoding="ISO-8859-1"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";>

 <xsd:element name="CompositeType"
type="CompositeType" />

 <xsd:element name="Model" type="Model">

  <!-- CompositeTypeKey/KeyRef -->

  <xsd:key name="CompositeTypeKey">

   <xsd:selector

    xpath=".//CompositeType" />

   <xsd:field xpath="./typeName" />

  </xsd:key>

  <xsd:keyref name="CompositeTypeRef"
refer="CompositeTypeKey">

   <xsd:selector

    xpath=".//Attribute/CompositeTypeReference" />

   <xsd:field xpath="." />

  </xsd:keyref>

 </xsd:element>



 <xsd:complexType name="CompositeType">

  <xsd:sequence>

   <xsd:element minOccurs="0" name="typeName"

    type="xsd:string" />

   <xsd:element maxOccurs="unbounded"
minOccurs="0"

    name="Attribute" type="Attribute" />

  </xsd:sequence>

 </xsd:complexType>

 <xsd:complexType name="Attribute">

  <xsd:sequence>

   <xsd:element minOccurs="0" name="name"
type="xsd:string" />

   <xsd:choice minOccurs="1">

    <xsd:element minOccurs="1" maxOccurs="1"

     name="CompositeType"
type="CompositeType" />

    <xsd:element minOccurs="1" maxOccurs="1"

     name="CompositeTypeReference"
type="xsd:string" />

   </xsd:choice>

  </xsd:sequence>

 </xsd:complexType>

 <xsd:complexType name="Model">

  <xsd:sequence>

   <xsd:element maxOccurs="unbounded"
minOccurs="0"

    name="CompositeType" type="CompositeType"
/>

  </xsd:sequence>

 </xsd:complexType>

</xsd:schema>



xml file :



<?xml version="1.0" encoding="ISO-8859-1"
standalone="no"?>

<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";

xsi:noNamespaceSchemaLocation="test.xsd" >

 <CompositeType>

  <typeName>Bozo</typeName>

 </CompositeType>

 <CompositeType>

  <typeName>MyData</typeName>

  <Attribute>

   <name>b</name>

   <CompositeTypeReference>Bozo</CompositeTypeReference>

  </Attribute>

  <Attribute>

   <name>d</name>

   <CompositeType>

    <typeName>CustomData</typeName>

   </CompositeType>

  </Attribute>

  <Attribute>

   <name>n</name>

   <CompositeType>

    <typeName>NewData</typeName>

    <Attribute>

     <name>m</name>

     <CompositeTypeReference>My</CompositeTypeReference>

    </Attribute>

    <Attribute>

     <name>c</name>

    
<CompositeTypeReference>Custom</CompositeTypeReference>

    </Attribute>

   </CompositeType>

  </Attribute>

 </CompositeType>

</Model>



Notice that when validate if the validation of recursion works, there will be
two errors at :

    
<CompositeTypeReference>My</CompositeTypeReference>

    
<CompositeTypeReference>Custom</CompositeTypeReference>

because the right references are :

     <CompositeTypeReference>MyData</CompositeTypeReference>

    
<CompositeTypeReference>CustomData</CompositeTypeReference>




      New Email names for you! 
Get the Email name you&#39;ve always wanted on the new @ymail and @rocketmail. 
Hurry before someone else does!
http://mail.promotions.yahoo.com/newdomains/aa/

Reply via email to