[ 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]