- From: Eric van der Vlist <vdv@dyomedea.com>
- Date: Tue, 17 Jul 2001 16:27:18 +0200
- To: Stephane Pageau <spageau@sed.ara.com>
- Cc: xmlschema-dev@w3.org
Stephane Pageau wrote: > > How can I construct a XML schema in which > I wish to enforce that the content > of an element (e.g., a subelement) > be an existing element of the instance > XML file? > To clarify this question let me take an example: > ------------------------------------------------ > Assume that I have a shape described using a > bunch of vertices and I describe both the > vertices and the shape separately as follows: > <vertex id=10 > You probably mean id="10" (otherwise it's not well formed XML) :=) ... > <x> 10. </x> > <y> 60. </y> > </vertex> > <vertex id=20 > > <x> 10. </x> > <y> 45. </y> > </vertex> > <vertex id=30 > > <x> 10. </x> > <y> 50. </y> > </vertex> > ... > <shape id=1> > <vertexptr> 10 </vertexptr> > <vertexptr> 30 </vertexptr> > <vertexptr> 20 </vertexptr> > </shape> > How can I construct my schema to make sure that someone does not > put <vertexptr> 1000 </vertexptr> if > the vertex with id=1000 does not exist? > > Note that I do not want to use the XML ref because there > might be several shapes refering to the same vertex > and I do not wish to repeat the coordinates of this vertex > multiple times. That is, I do not want to do the following: > <complexType name="vertex"/> > <all> > <element name="x" type="decimal" minOccurs="1"/> > <element name="y" type="decimal" minOccurs="1"/> > </all> > <attribute name="id" type="ID"/> Type "ID" wouldn't do the deal anyway since it's derived from "NCName" and cannot start with a number. > </complexType> > <complexType name="shape"/> > <element ref="vertex" minOccurs="1" maxOccurs="unbounded"/> > <attribute name="id" type="ID"/> This could|should be type="IDREF" here, but again would not allow numbers. > </complexType> What you need if I understand what you mean is a xs:key/xs:keyref, such as: <xs:element name="my-root"> <xs:complexType> .../... </xs:complexType> <xs:key name="vertex"> <xs:selector xpath="vertex"/> <xs:field xpath="@id"/> </xs:key> <xs:keyref name="vertexptr" refer="vertex"> <xs:selector xpath="shape/vertexptr"/> <xs:field xpath="."/> </xs:keyref> </xs:element> Hope this helps. Eric > Stephane Pageau > 811 Spring Forest Rd, Suite 100 > Raleigh, NC 27609 > mailto:spageau@sed.ara.com > (919)876-0018 > fax: (919) 878-3672 -- See you at XTech in San Diego. http://conferences.oreillynet.com/cs/os2001/view/e_spkr/790 ------------------------------------------------------------------------ Eric van der Vlist http://xmlfr.org http://dyomedea.com http://xsltunit.org http://4xt.org http://examplotron.org ------------------------------------------------------------------------
Received on Tuesday, 17 July 2001 10:27:25 UTC