W3C home > Mailing lists > Public > xmlschema-dev@w3.org > February 2005

RE: Facets

From: <Farid.Mahini@L-3com.com>
Date: Mon, 21 Feb 2005 11:17:31 -0500
Message-ID: <F00F0521BE28134DA357DC1DF7475B9901AAA73A@texchg.te.l-3com.com>
To: richard.liu@ubs.com
Cc: xmlschema-dev@w3.org

Hi Richard,

Your schema does not seem to connect the content of 'validTypes' and the
vlaues used in the 'measurement/type' element.  I.e. your XMl document will
validate using this schema even if the value of type is not one of
validTypes.  I am not sure this the right way of doing it or not, but seems
to tie the validTypes and measurement/type.


XML Schema:

<xs:schema ......>
	<xs:element name="Measurements">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="validTypes" type="myAAA"/>
				<xs:element name="measurement" type="myBBB"
maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
		<xs:key name="myId">
			<xs:selector xpath="./validTypes/type"/>
			<xs:field xpath="@hwType"/>
		</xs:key>
		<xs:keyref name="myIdref" refer="myId">
			<xs:selector xpath="./measurement/name"/>
			<xs:field xpath="@hwType"/>
		</xs:keyref>
	</xs:element>
	<xs:complexType name="myAAA">
		<xs:sequence>
			<xs:element name="type" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="myBBB">
		<xs:sequence>
			<xs:element name="name"/>
		</xs:sequence>
	</xs:complexType>
	<xs:attribute name="hwType" type="xs:string"/>
</xs:schema>




XML input:

</Measurements......>
  <validTypes>
    <type hwType="analog"/> 
    <type hwType="digital"/>
    <type hwType="undefined"/> 
  </validTypes> 
  <measurement> 
    <name hwType="analog">Flow</name> 
  </measurement>
  <measurement> 
    <name hwType="digital">Heading</name> 
  </measurement>
  <measurement> 
    <name hwType="bus">Alt</name> 
  </measurement> 
</Measurements>

-Farid


> -----Original Message-----
> From: richard.liu@ubs.com [mailto:richard.liu@ubs.com]
> Sent: Friday, February 18, 2005 5:49 AM
> To: kbuchcik@4commerce.de; Farid.Mahini@L-3com.com
> Cc: xmlschema-dev@w3.org
> Subject: RE: Facets
> 
> 
> 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
> > 
> > 
> 


>From E-mail Administrator
ATTENTION PLEASE: Do you have our new e-mail addresses?
The current L-3 standard is First.Last @ L-3com.com
E-mail addressed to First.Last @ te.L-3com.com will no longer be delivered.
Please update your address book using the "From" address on this email.
Received on Monday, 21 February 2005 16:17:49 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:49 GMT