- From: <richard.liu@ubs.com>
- Date: Fri, 18 Feb 2005 11:49:15 +0100
- To: <kbuchcik@4commerce.de>, <Farid.Mahini@L-3com.com>
- Cc: <xmlschema-dev@w3.org>
This seems to do what Farid wanted, and it validates in xmlspy 2005 sp2: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="measurements"> <xs:annotation> <xs:documentation>Testing my understanding of xs:key and xs:keyref. If this works, it could become the basis for translating an FDDL into an XML schema.</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="validTypes"> <xs:complexType> <xs:sequence> <xs:element name="validType" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="measurement" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="type" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="validType"> <xs:selector xpath="validTypes/validType"/> <xs:field xpath="."/> </xs:key> <xs:keyref name="measurementType" refer="validType"> <xs:selector xpath="measurement"/> <xs:field xpath="type"/> </xs:keyref> </xs:element> </xs:schema> <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2005 sp2 U (http://www.altova.com) by Rene Brunner (UBS AG) --> <measurements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\My Documents\Work\WBml\Forms\Schema\keyrefTest.xsd"> <validTypes> <validType>analog</validType> <validType>digital</validType> <validType>bus</validType> <validType>undefined</validType> </validTypes> <measurement> <name>airflow</name> <type>analog</type> </measurement> <measurement> <name>heading</name> <type>digital</type> </measurement> </measurements> Regards, Richard > -----Original Message----- > From: xmlschema-dev-request@w3.org > [mailto:xmlschema-dev-request@w3.org]On Behalf Of Kasimier Buchcik > Sent: Thursday, February 17, 2005 20:40 > To: Farid.Mahini@L-3com.com > Cc: xmlschema-dev@w3.org > Subject: Re: Facets > > > > Hi, > > Farid.Mahini@L-3com.com wrote: > > Thank you for your comment. > > > > I am planning on using this method (actually currently in > the middle of > > Michael Kay's XSLT2.0 book) in the way you mentioned it: > > > > I am creating XML files for running tests on various > 'boxes' which have > > different configurations (#of cards, channels, so on). I > was planning on > > using the XSLT to create the hardware dependant schema > using user hardware > > selection. It seems I am on the righttrack on that section > of the task. > > > > However, within each XML document, the user defines their own set of > > definitions to be used as enum values. Michael Kay > suggested using the > > 'key/keyref' elements; I tried it, but XMLSpy seems to > validate it even > > though I intentionally used an invalid attribute. I am new > at this and could > > be my code. Please point my error in the following example > I used to test > > the key/keyref element? > > > > The schema: > > <xs:schema ....> > > <xs:element name="Measurements"> > > <xs:complexType> > > <xs:sequence> > > <xs:element name="AAA" type="myAAA"/> > > <xs:element name="BBB" type="myBBB"/> > > </xs:sequence> > > </xs:complexType> > > <xs:key name="myId"> > > <xs:selector xpath="./AAA/a"/> > > <xs:field xpath="@a"/> > > </xs:key> > > <xs:keyref name="myIdref" refer="myId"> > > <xs:selector xpath="./BBB/b"/> > > <xs:field xpath="@b"/> > > </xs:keyref> > > </xs:element> > > <xs:complexType name="myAAA"> > > <xs:sequence> > > <xs:element name="a" maxOccurs="unbounded"> > > <xs:complexType> > > <xs:attribute name="id" > > type="xs:string" use="required"/> > > </xs:complexType> > > </xs:element> > > </xs:sequence> > > </xs:complexType> > > <xs:complexType name="myBBB"> > > <xs:sequence> > > <xs:element name="b" maxOccurs="unbounded"> > > <xs:complexType> > > <xs:attribute name="idref" > > type="xs:string" use="required"/> > > </xs:complexType> > > </xs:element> > > </xs:sequence> > > </xs:complexType> > > </xs:schema> > > > > > > The XML input doucment: > > <Measurements .....> > > <AAA> > > <a id="x"/> > > <a id="y"/> > > </AAA> > > <BBB> > > <b idref="x"/> > > <b idref="y"/> > > <b idref="z"/> // should cause an error since only > 'x' and 'y' are > > valid choices. > > </BBB> > > > > </Measurements> > [...] > > XMLSpy does not evaluate this correctly. The XPath expression > of the IDC > fields used here should resolve to the attributes "a" or "b" only. > If those XPath expressions are substituted for "@id" and > "@idref" I get > keyref error you expected with Libxml2, Xerces 2.6.2 and XSV 2.7. > > Regards, > > Kasimier > >
Received on Friday, 18 February 2005 10:49:49 UTC