- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 8 Mar 2002 10:18:52 +0000
- To: Mark Thornton <mthornton@optrak.co.uk>
- CC: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>
Hi Mark,
> The data I have looks like this:
>
> <table name='addresses'>
> <column name='street'/>
> <column name='town'/>
> </table>
>
> then elsewhere
>
> <table ref='addresses'>
> <column ref='street'/> <!-- refer to the street column defined
> earlier -->
> <column name='country'/> <!-- adds a new column to the 'addresses'
> table -->
> </table>
I don't think it's possible to express that constraint with XML
Schema. Ideally you'd like to key the columns by a combination of
their parent table's name or ref, and their name, and then refer to
them in a similar way:
<xs:unique name="kColumn">
<xs:selector xpath="table/column" />
<xs:field xpath="../@name|../@ref" />
<xs:field xpath="@name" />
</xs:unique>
<xs:keyref name="kColumnRef" refer="kColumn">
<xs:selector xpath="table/column" />
<xs:field xpath="../@ref" />
<xs:field xpath="@ref" />
</xs:keyref>
But the restrictions on the XPaths that are allowed within identity
constraints prevents you from doing that.
I think that Schematron would allow you to test this constraint;
Eddie's put together a great description of how to use it with XML
Schema at http://www.topologi.com/public/Schtrn_XSD/Paper.html.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Friday, 8 March 2002 05:18:53 UTC