Re: XML-Schema keyref & namespaces ??!

Hi,

On Fri, 2005-11-11 at 11:47 +0100, ezarakan@hsr.ch wrote:
> hallo everyone
> 
> my knowledge of xml is advanced, but not concerning namespaces.
> 
> 
> i've got the following error when validating the xml instance document against its schema.
> 
> i think it's got to do with the namespaces...

I think it's probably related to the simple type of the attribute
"linkIDRef", which defaults to xs:anySimpleType. If I recall correctly,
then comparison of values of xs:anySimpleType with other simple type
values was left to be implementation-defined. So xmlSpy's schema
processor might produce negative results for such a comparison.
It doesn't work either with XSV 2.10-1, Xerces-J 2.7.1,
MSXML 4.0 SP2 and Libxml2; only Saxon seems to find a match for "L4".

Try to set the type of the attribute decalaration "linkIDRef" to
xs:string.

By the way, XSV 2.10-1 reports errors like:

<invalid 
  char="9" code="cvc-identity-constraint.2.2.3" line="17"
  resource="file:///p:/libxml2-lab/tests/2005-11-11/keyref.xml">
duplicate key L1 for
{http://plirosost.ethz.ch/Ontology/Schema}LinkIDKey,
first appearance was in unnamed entity at line 17 char 9 of
file:///p:/libxml2-lab/tests/2005-11-11/keyref.xml
</invalid>

This looks like the union in the XPath expression
".//ont:Link | .//ont:Link" is confusing XSV's
IDC resolution mechanism.

Regards,

Kasimier



> thank you for your time and effort
> greetings elly
> 
> 
> ps: im using altova xmlSpy, enterprise edition 2005 rel. 3
> 
> 
> <!-- ERROR of xml instance document **************************************** -->
> 
> 
> line: 50
> This file is not valid: the value 'L4' matched by the <keyref> identity constraint
> 'ont:KeyIDRefLink' was not matched by the referenced key 'ont:LinkIDKey' within
> the scope of element 'ont:NewDataSet'.
> 
> 
> line: 55
> This file is not valid: the value 'L5' matched by the <keyref> identity constraint
> 'ont:KeyIDRefLink' was not matched by the referenced key 'ont:LinkIDKey' within
> the scope of element 'ont:NewDataSet'.
> 
> 
> <!-- Schema **************************************** -->
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema
>     targetNamespace="http://plirosost.ethz.ch/Ontology/Schema"
>     xmlns:xs="http://www.w3.org/2001/XMLSchema"
>     xmlns:ont="http://plirosost.ethz.ch/Ontology/Schema"
>     elementFormDefault="qualified"
>     attributeFormDefault="qualified">
>     <!--  -->
> 
>   
>    <xs:element name="Link">
>        <xs:complexType>
>            <xs:simpleContent>
>                <xs:extension base="xs:string">
>                    <xs:attribute name="linkIDKey" type="xs:string" use="required"/>
>                </xs:extension>
>            </xs:simpleContent>
>        </xs:complexType>
>    </xs:element>
>       
>     
>   <!--  -->
>   <xs:element name="NewDataSet">
>     <xs:complexType>
>       <xs:choice maxOccurs="unbounded">
>         <!--  -->
>           <xs:element name="Customers">
>             <xs:complexType>
>               <xs:sequence>
>                 <xs:element name="CustomerID">
>                   <xs:simpleType>
>                     <xs:restriction base="xs:string">
>                       <xs:pattern value="c\d+"/>
>                     </xs:restriction>
>                   </xs:simpleType>
>                 </xs:element>
>                 <xs:element name="CompanyName" type="xs:string"/>
>                 <xs:element name="ContactName" type="xs:string" minOccurs="0"/>
>                 <xs:element name="ContactTitle" type="xs:string" minOccurs="0"/>
>                 <xs:element name="Address" type="xs:string" minOccurs="0"/>
>                 <xs:element name="City" type="xs:string" minOccurs="0"/>
>                 <xs:element name="Region" type="xs:string" minOccurs="0"/>
>                 <xs:element name="PostalCode" type="xs:string" minOccurs="0"/>
>                  <xs:element ref="ont:Link"/>
>                  <xs:element name="Label" type="xs:string"/>
>               </xs:sequence>
>             </xs:complexType>
>           </xs:element>
>                 <!--  -->
>         <xs:element name="Orders">
>             <xs:complexType>
>                 <xs:sequence>
>                     <xs:element name="OrderID">
>                         <xs:simpleType>
>                             <xs:restriction base="xs:string">
>                                 <xs:pattern value="o\d+"/>
>                             </xs:restriction>
>                         </xs:simpleType>
>                     </xs:element>
>                     <xs:element name="CustomerID" type="xs:string"/>
>                     <xs:element name="OrderDate" type="xs:string" minOccurs="0"/>
>                     <xs:element ref="ont:Link"/>
>                 </xs:sequence>
>                 <xs:attribute name="label" type="xs:string"/>
>             </xs:complexType>
>         </xs:element>
>         <!--  -->
>         <xs:element name="Blabla">
>             <xs:complexType>
>                 <xs:sequence>
>                     <xs:element name="orderLink" type="xs:string"/>
>                 </xs:sequence>
>                 <xs:attribute name="linkIDRef" use="required"/>
>             </xs:complexType>
>         </xs:element>
>                 <!--  -->
>             </xs:choice>
>         </xs:complexType>
>       
>       <!--  -->
>       <xs:unique name="UniqueLinkID">
>           <xs:selector xpath=".//ont:Link | .//ont:Link"/>
>           <xs:field xpath="@ont:linkIDKey"/>
>       </xs:unique>
>     
>       <xs:key name="LinkIDKey">
>           <xs:selector xpath=".//ont:Link | .//ont:Link"/>
>           <xs:field xpath="@ont:linkIDKey"/>
>       </xs:key>
>       <xs:keyref name="KeyIDRefLink" refer="ont:LinkIDKey">
>           <xs:selector xpath=".//ont:Blabla"/>
>           <xs:field xpath="@ont:linkIDRef"/>
>       </xs:keyref>
>       <!--  -->
>     
>     </xs:element>
> </xs:schema>
> 
> 
> <!-- xml-instance **************************************** -->
> 
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <ont:NewDataSet xmlns="http://plirosost.ethz.ch/Ontology/Schema"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xmlns:ont="http://plirosost.ethz.ch/Ontology/Schema"
>     xsi:schemaLocation="http://plirosost.ethz.ch/Ontology/Schema
> 
> file:/D:/SA1_OntologyBuilder/XML/meineBsp/customer3_Namespace.xsd">
>   
>     <Customers>
>         <CustomerID>c666</CustomerID>
>         <CompanyName>HSR</CompanyName>
>         <ContactName>Elly</ContactName>
>         <ContactTitle>Frau</ContactTitle>
>         <Address>blabla</Address>
>         <City>Zürich</City>
>         <Region>CH</Region>
>         <PostalCode>8041</PostalCode>
>         <Link ont:linkIDKey="L1"></Link>
>         <Label>label1</Label>
>     </Customers>
>   
>     <Customers>
>         <CustomerID>c333</CustomerID>
>         <CompanyName>Herisau</CompanyName>
>         <ContactName>Claudio</ContactName>
>         <ContactTitle>Frau</ContactTitle>
>         <Address>blabla</Address>
>         <City>Zürich</City>
>         <Region>CH</Region>
>         <PostalCode>7777</PostalCode>
>         <Link ont:linkIDKey="L2">aa</Link>
>         <Label>label2</Label>
>     </Customers>
>       
>     <Orders ont:label="label1">
>         <OrderID>o333</OrderID>
>         <CustomerID>c666</CustomerID>
>         <OrderDate>23.07.77</OrderDate>
>         <Link  ont:linkIDKey="L3">b</Link>
>     </Orders>
>   
>     <Orders ont:label="label1">
>         <OrderID>o777</OrderID>
>         <CustomerID>c666</CustomerID>
>         <OrderDate>23.07.77</OrderDate>
>         <Link ont:linkIDKey="L4">bb</Link>
>     </Orders>
>   
> 
> 
>     <Blabla ont:linkIDRef="L4">      <!-- ***line50*** l4sollte keinen error geben, tut es aber !!!!! -->
>         <orderLink>bb</orderLink>
>     </Blabla>
>   
>   
>     <Blabla ont:linkIDRef="L5">      <!-- ***line55 ***TODO l5 sollte error geben, tut aber nicht !!!!! ev.
> 
> folgefehler von oben!-->
>         <orderLink>bb</orderLink>
>     </Blabla>
>      
> </ont:NewDataSet> 
> 
>  
> 
> 

Received on Friday, 11 November 2005 11:50:43 UTC