You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Boris Kolpackov (JIRA)" <xe...@xml.apache.org> on 2007/08/02 12:56:53 UTC

[jira] Commented: (XERCESC-1729) Simple unique constraint fails across choice element

    [ 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: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org