W3C home > Mailing lists > Public > xmlschema-dev@w3.org > February 2006

Re: xs:key and nesting

From: George Cristian Bina <george@oxygenxml.com>
Date: Fri, 17 Feb 2006 10:36:30 +0200
Message-ID: <43F58B0E.3010207@oxygenxml.com>
To: George Cristian Bina <george@oxygenxml.com>
Cc: richard.liu@ubs.com, xmlschema-dev@w3.org

Looking over the already recorded issues it seems that this is a 
manifestation of the
https://issues.apache.org/jira/browse/XERCESJ-832

A workaround is to replace

<xs:field xpath="wbr:footnoteExplanation | @footnoteRef"/>

with

<xs:field xpath="@footnoteRef | wbr:footnoteExplanation"/>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


George Cristian Bina wrote:
> The problem appears also with the latest SVN snapshot. I will report 
> that on Apache Jira as soon as that will be available, now I get 
> "Service Temporarily Unavailable" when trying to access Apache Jira.
> 
> Best Regards,
> George
> ---------------------------------------------------------------------
> George Cristian Bina
> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com
> 
> 
> George Cristian Bina wrote:
>> Hi Richard,
>>
>> This looks to me like a bug in Xerces 2.7.1.
>> I will check that against the current Xerces SVN snapshot to see if it 
>> shows the same problem and let you know.
>>
>> Best Regards,
>> George
>> ---------------------------------------------------------------------
>> George Cristian Bina
>> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
>> http://www.oxygenxml.com
>>
>>
>> richard.liu@ubs.com wrote:
>>> I have the following schema:
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
>>>     targetNamespace="http://www.ubs.com/namespace/wbml-render"
>>>     xmlns:wbr="http://www.ubs.com/namespace/wbml-render"
>>>     xmlns="http://www.ubs.com/namespace/wbml-render"
>>> elementFormDefault="qualified"
>>>     attributeFormDefault="unqualified">
>>>     <xs:complexType name="footnoteExplanation">
>>>         <xs:annotation>
>>>             <xs:documentation>The text explaining the
>>> footnote.</xs:documentation>
>>>         </xs:annotation>
>>>         <xs:simpleContent>
>>>             <xs:extension base="xs:string"/>
>>>         </xs:simpleContent>
>>>     </xs:complexType>
>>>     <xs:complexType name="footnote">
>>>         <xs:annotation>
>>>             <xs:documentation>Composed of base and
>>> explanation.</xs:documentation>
>>>         </xs:annotation>
>>>         <xs:sequence>
>>>             <xs:element name="footnoteBase" type="footnoteBase"/>
>>>             <xs:element name="footnoteExplanation"
>>> type="footnoteExplanation" minOccurs="0"/>
>>>         </xs:sequence>
>>>         <xs:attribute name="footnoteId" type="xs:NMTOKEN"
>>> use="optional"/>
>>>         <xs:attribute name="footnoteRef" type="xs:NMTOKEN"
>>> use="optional"/>
>>>     </xs:complexType>
>>>     <xs:complexType name="footnoteBase" mixed="true">
>>>         <xs:annotation>
>>>             <xs:documentation>The text to which the footnote
>>> pertains.</xs:documentation>
>>>         </xs:annotation>
>>>         <xs:sequence>
>>>             <xs:element ref="footnote" minOccurs="0"
>>> maxOccurs="unbounded"/>
>>>         </xs:sequence>           </xs:complexType>
>>>     <xs:element name="footnote" type="footnote">
>>>         <!--<xs:key name="ref_or_explanation">
>>>             <xs:selector xpath="."/>
>>>             <xs:field xpath="wbr:footnoteExplanation | @footnoteRef"/>
>>>         </xs:key>-->
>>>     </xs:element>
>>>     <xs:element name="para">
>>>         <xs:complexType mixed="true">
>>>             <xs:sequence>
>>>                 <xs:element ref="footnote" minOccurs="0"
>>> maxOccurs="unbounded"/>
>>>             </xs:sequence>
>>>         </xs:complexType>
>>>         <xs:key name="ref_or_explanation">
>>>             <xs:selector xpath=".//wbr:footnote"/>
>>>             <xs:field xpath="wbr:footnoteExplanation | @footnoteRef"/>
>>>         </xs:key>
>>>     </xs:element>
>>> </xs:schema>
>>>
>>> and the following XML schema instance
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <wbr:para xmlns:wbr="http://www.ubs.com/namespace/wbml-render"
>>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>     xsi:schemaLocation="http://www.ubs.com/namespace/wbml-render
>>>  
>>> file:/Users/richard/Documents/Work/Accessibility/Schemas/test_footnote.x
>>> sd"> Now is     <wbr:footnote footnoteRef="abc">
>>>         <wbr:footnoteBase>the</wbr:footnoteBase>
>>>         <!--<wbr:footnoteExplanation>As Clinton said, "It depends on
>>> what you mean by 'the'."</wbr:footnoteExplanation>-->
>>>     </wbr:footnote> for     <wbr:footnote>
>>>         <wbr:footnoteBase>
>>>             <wbr:footnote>
>>>                 <wbr:footnoteBase>
>>>                     <wbr:footnote footnoteRef="x22">
>>>                         <wbr:footnoteBase>all</wbr:footnoteBase>
>>>                     </wbr:footnote> good
>>>                 </wbr:footnoteBase>
>>>                 <wbr:footnoteExplanation>In some inner
>>> sense.</wbr:footnoteExplanation>
>>>             </wbr:footnote> men
>>>         </wbr:footnoteBase>
>>>         <wbr:footnoteExplanation>Good women,
>>> too.</wbr:footnoteExplanation>
>>>     </wbr:footnote>
>>> </wbr:para>
>>>
>>> The xs:key on the para element is supposed to ensure that each footnote
>>> descendant has either a footnoteExplanation child or a footnoteRef
>>> attribute.  The first footnote child of para "works" as desired (in
>>> Oxygen 7, i.e., Xerces):  Uncommenting the footnoteExplanation element
>>> results in an error, as does deleting the footnoteRef attribute.
>>>
>>> The second footnote element is rather complicated, because the model
>>> permits "nesting" footnotes.  The XML seems valid:  The second footnote
>>> element has a footnoteExplanation and no footnoteRef, so does its first
>>> footnote descendent, and the innermost footnote has a footnoteRef
>>> attribute and no footnoteExplanation.
>>>
>>> Nevertheless, I receive the following two error messages (I've pasted
>>> the offending statement after the Location):
>>>
>>> SystemID:
>>> /Users/richard/Documents/Work/Accessibility/Schemas/test_footnote.xml
>>> Location: 18:88
>>>                 <wbr:footnoteExplanation>In some inner
>>> sense.</wbr:footnoteExplanation>
>>> Description: E Identity constraint error:  field
>>> "./wbr:footnoteExplanation|@footnoteRef" matches more than one value
>>> within the scope of its selector; fields must match unique values.
>>>
>>> SystemID:
>>> /Users/richard/Documents/Work/Accessibility/Schemas/test_footnote.xml
>>> Location: 21:76
>>>         <wbr:footnoteExplanation>Good women,
>>> too.</wbr:footnoteExplanation>
>>> Description: E Identity constraint error:  field
>>> "./wbr:footnoteExplanation|@footnoteRef" matches more than one value
>>> within the scope of its selector; fields must match unique values.
>>>
>>> Can anybody tell me what I'm missing?
>>>
>>> Thanks,
>>> Richard
>>>
Received on Friday, 17 February 2006 08:34:37 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:53 GMT