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