[
Lists Home |
Date Index |
Thread Index
]
You don't need the extra element, just some new constraints (XSV is
happy with this, and complains correctly if you change e.g. the last
child to have childid 4714):
Hope this helps,
ht
---- XML-Instance ----
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Multikeys_v2.xsd">
<parent parentid="1">
<child parentid="1" childid="4711"/>
<child parentid="1" childid="4712"/>
<child parentid="1" childid="4713"/>
</parent>
<parent parentid="2">
<child parentid="2" childid="4711"/>
<child parentid="2" childid="4715"/>
</parent>
<refer>
<parentRef parentRefId="1">
<childRef parentRefId="1" childRefId="4711"/>
</parentRef>
<parentRef parentRefId="2">
<childRef parentRefId="2" childRefId="4715"/>
</parentRef>
</refer>
</root>
----- Multikeys_v2.xsd ------
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="parent" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="child" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="childid" type="xs:int" use="required"/>
<xs:attribute name="parentid" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="parentid" type="xs:int" use="required"/>
</xs:complexType>
<xs:key name="childKey">
<xs:selector xpath="./child"/>
<xs:field xpath="@childid"/>
</xs:key>
<xs:key name="localParent">
<xs:selector xpath="."/>
<xs:field xpath="@parentid"/>
</xs:key>
<xs:keyref name="childParent" refer="localParent">
<xs:selector xpath="./child"/>
<xs:field xpath="@parentid"/>
</xs:keyref>
</xs:element>
<xs:element name="refer">
<xs:complexType>
<xs:sequence>
<xs:element name="parentRef" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="childRef" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="childRefId" type="xs:int" use="required"/>
<xs:attribute name="parentRefId" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="parentRefId" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="parentKey">
<xs:selector xpath="./parent"/>
<xs:field xpath="@parentid"/>
</xs:key>
<xs:key name="fullChildKey">
<xs:selector xpath="parent/child"/>
<xs:field xpath="@childid"/>
<xs:field xpath="@parentid"/>
</xs:key>
<xs:keyref name="parentRef" refer="parentKey">
<xs:selector xpath="refer/parentRef"/>
<xs:field xpath="@parentRefId"/>
</xs:keyref>
<xs:keyref name="fullChildRef" refer="fullChildKey">
<xs:selector xpath="refer/parentRef/childRef"/>
<xs:field xpath="@childRefId"/>
<xs:field xpath="@parentRefId"/>
</xs:keyref>
</xs:element>
</xs:schema>
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
Half-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: ht@inf.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/
[mail really from me _always_ has this .sig -- mail without it is forged spam]
|