[ 
https://issues.apache.org/jira/browse/XERCESC-1729?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12517209
 ] 

Boris Kolpackov commented on XERCESC-1729:
------------------------------------------

I think Xerces is right here. Your uniqu constraint has two fields: Direction 
and Start/StartObj1. Your second pair element has Direction but not 
Start/StartObj1 which basically means you have half of the key present. One way 
to achive want you want is to split your unique into two:

<xs:unique name="UniqueDirectionAcrossFile">
<xs:selector xpath="Pair"/>
<xs:field xpath="Direction"/>
</xs:unique>

<xs:unique name="UniqueStartObj1AcrossFile">
<xs:selector xpath="Pair"/>
<xs:field xpath="Start/StartObj1"/>
</xs:unique>

BTW, don't use XMLSpy as a refernce for it is well-known for its broken schema 
processor.


> Simple unique constraint fails across choice element
> ----------------------------------------------------
>
>                 Key: XERCESC-1729
>                 URL: https://issues.apache.org/jira/browse/XERCESC-1729
>             Project: Xerces-C++
>          Issue Type: Bug
>          Components: Validating Parser (Schema) (Xerces 1.5 or up only)
>    Affects Versions: 1.5, 1.5.1, 1.5.2, 1.6.0, 1.7.0, 2.0.0, 2.1.0, 2.2.0, 
> 2.3.0, 2.4.0, 2.5.0, 2.6.0, 2.7.0
>         Environment: UNBUNTU 7.04  Intel
> g++ 4.01 
>            Reporter: Steve Baker
>            Priority: Blocker
>             Fix For: 2.7.0
>
>
> Error while parsing xml- check against schema: 
> Failed to parse: Not enough values specified for <unique> identity constraint 
> for element 'Pairs'.
> The problem occurs in 'UniqueDirectionStartObj1AcrossFile' where i ask that 
> the direction with the StartObj1 is unique across the file. StartObj1 is part 
> of a choice element where the choice is StartObj1 or StartObj2. When 
> StartObj2 exists instead of StartObj1 Xerces complains that there are not 
> enough values for the unique contraint. This is the problem.
> I would expect the code to say " there's no StartObj1 in this case so the 
> unique contraint doesn't apply, lets skip it in the case' but the code 
> complains that the hasn't got the values to complete the unique case.
> If its not there don't apply the constraint!!!  
> XMLSpy handles this as i would expect.
> the data...
> <Pairs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xsi:noNamespaceSchemaLocation="TEST.xsd">
>       <Pair>
>               <Direction>UP</Direction>
>               <Start>
>                       <StartObj1>20</StartObj1>
>               </Start>
>       </Pair>
>       <Pair>
>               <Direction>UP</Direction>
>               <Start>
>                       <StartObj2>30</StartObj2>
>               </Start>
>       </Pair>
> </Pairs>
> the schema...
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
> elementFormDefault="qualified" attributeFormDefault="unqualified">
>       <xs:element name="Pairs">
>               <xs:annotation>
>                       <xs:documentation>Comment describing your root 
> element</xs:documentation>
>               </xs:annotation>
>               <xs:complexType>
>                       <xs:sequence>
>                               <xs:element name="Pair" maxOccurs="unbounded">
>                                       <xs:complexType>
>                                               <xs:sequence>
>                                                       <xs:element 
> name="Direction"/>
>                                                       <xs:element 
> name="Start">
>                                                               <xs:complexType>
>                                                                       
> <xs:choice>
>                                                                               
> <xs:element name="StartObj1"/>
>                                                                               
> <xs:element name="StartObj2"/>
>                                                                       
> </xs:choice>
>                                                               
> </xs:complexType>
>                                                       </xs:element>
>                                               </xs:sequence>
>                                       </xs:complexType>
>                               </xs:element>
>                       </xs:sequence>
>               </xs:complexType>
>               <xs:unique name="UniqueDirectionStartObj1AcrossFile">
>                       <xs:selector xpath="Pair"/>
>                       <xs:field xpath="Direction"/>
>                       <xs:field xpath="Start/StartObj1"/>
>               </xs:unique>
>       </xs:element>
> </xs:schema>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to