W3C home > Mailing lists > Public > xmlschema-dev@w3.org > November 2008

Re: Identity constraints problem

From: Joe Halpin <jhalpin100@gmail.com>
Date: Wed, 12 Nov 2008 14:17:19 -0600
Message-ID: <4dc28b160811121217lc28d7bfg74f2f742a0676f8c@mail.gmail.com>
To: "Michael Kay" <mike@saxonica.com>
Cc: xmlschema-dev@w3.org

Doh!!

Thanks, I was overthinking it.

Joe

On Wed, Nov 12, 2008 at 2:01 PM, Michael Kay <mike@saxonica.com> wrote:
> If the constraint applies within a branch, define the <xs:unique> constraint
> at the level of the branch:
>
>>     <xs:complexType name="Branch">
>>         <xs:sequence>
>>             <xs:element name="unique-element" type="UniqueElement" />
>>         </xs:sequence>
>>         <xs:attribute name="id" type="xs:nonNegativeInteger" />
>>         <xs:unique name="ElementKey">
>>             <xs:selector xpath="unique-element" />
>>             <xs:field xpath="@id" />
>>         </xs:unique>
>>     </xs:complexType>
>
> Michael Kay
> http://www.saxonica.com/
>
>> -----Original Message-----
>> From: xmlschema-dev-request@w3.org
>> [mailto:xmlschema-dev-request@w3.org] On Behalf Of Joe Halpin
>> Sent: 12 November 2008 19:49
>> To: xmlschema-dev@w3.org
>> Subject: Identity constraints problem
>>
>>
>> I'm trying to figure out how to use identity constraints that
>> are limited to a single branch of an xml document. For
>> example, given the following xml:
>>
>> <?xml version="1.0"?>
>> <base
>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>     xsi:noNamespaceSchemaLocation="test.xsd">
>>
>>     <branch id="1">
>>         <unique-element id="1">
>>             <unique-child id="2" />
>>         </unique-element>
>>         <unique-element id="3">
>>             <unique-child id="4" />
>>         </unique-element>
>>         <unique-element id="5">
>>             <unique-child id="6" />
>>         </unique-element>
>>     </branch>
>>     <branch id="2">
>>         <unique-element id="1">
>>             <unique-child id="2" />
>>         </unique-element>
>>         <unique-element id="3">
>>             <unique-child id="4" />
>>         </unique-element>
>>     </branch>
>> </base>
>>
>> I'd like to ensure that unique-element and unique-child id
>> are unique within the branch in which they appear, but only
>> within that context.
>> As it is, I keep getting identity constraint errors because
>> the ids are duplicated between branches. What I'm doing is
>> pretty much like
>> this:
>>
>> <?xml version="1.0"?>
>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>>
>>     <xs:element name="base" type="Base">
>>         <xs:unique name="BranchKey">
>>             <xs:selector xpath="branch"  />
>>             <xs:field xpath="@id" />
>>         </xs:unique>
>>
>>         <xs:unique name="ElementKey">
>>             <xs:selector xpath="branch/unique-element" />
>>             <xs:field xpath="@id" />
>>         </xs:unique>
>>
>>         <xs:unique name="ChildKey">
>>             <xs:selector xpath="branch/unique-element/unique-child" />
>>             <xs:field xpath="@id" />
>>         </xs:unique>
>>     </xs:element>
>>
>>     <xs:complexType name="Base">
>>         <xs:sequence>
>>             <xs:element name="branch" type="Branch"
>> maxOccurs="unbounded" />
>>         </xs:sequence>
>>     </xs:complexType>
>>
>>     <xs:complexType name="Branch">
>>         <xs:sequence>
>>             <xs:element name="unique-element" type="UniqueElement" />
>>         </xs:sequence>
>>         <xs:attribute name="id" type="xs:nonNegativeInteger" />
>>     </xs:complexType>
>>
>>     <xs:complexType name="UniqueElement">
>>         <xs:sequence>
>>             <xs:element name="unique-child" maxOccurs="unbounded">
>>                 <xs:complexType>
>>                     <xs:attribute name="id"
>> type="xs:nonNegativeInteger" />
>>                 </xs:complexType>
>>             </xs:element>
>>         </xs:sequence>
>>         <xs:attribute name="id" type="xs:nonNegativeInteger" />
>>     </xs:complexType>
>> </xs:schema>
>>
>> I'm probably just missing it. I've been looking at this so
>> long I suspect I can't see it any more. Is there a way to do
>> what I want?
>>
>> Thanks
>>
>> joe
>>
>
>
Received on Wednesday, 12 November 2008 20:17:55 GMT

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