OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] Constraints for nested elements; key and keyref

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




 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS