- From: G. Ken Holman <gkholman@CraneSoftwrights.com>
- Date: Thu, 05 Jan 2012 21:55:30 -0500
- To: xmlschema-dev@w3.org
At 2012-01-05 17:48 -0700, Karl Stubsjoen wrote: >I have an element that extends a complex type but the additional >attribute with a simple type definition is not being enforced. The >attribute is enforced, just not it's simple type. Have I defined >something incorrectly? I think this is one of those "don't kick yourself" problems. >Here they are: > ><!-- to be used in extension below --> > <xs:complexType name="ProjXm_QueryType"> > <xs:sequence> > <xs:element ref="command"/> > <xs:element ref="parameters"/> > <xs:element ref="fields" minOccurs="0"/> > </xs:sequence> > </xs:complexType> > > ><!-- extends the above and adds a name attribute of specified simple type --> > <xs:element name="SharedDB"> > <xs:complexType> > <xs:complexContent> > <xs:extension base="ProjXm_QueryType"> > <xs:attribute name="name" >type="simpleType_SharedDBQueries" /> Here you've just augmented your element with an attribute .... > </xs:extension> > </xs:complexContent> > </xs:complexType> > </xs:element> > ><!-- expected values for name attribute -> > <xs:simpleType name="simpleType_SharedDBQueries"> > <xs:restriction base="xs:NCName"> > <xs:enumeration value="insert"/> > <xs:enumeration value="update"/> > </xs:restriction> > </xs:simpleType> > > ><!-- sample xml (snipped) --> > <SharedDB> > <command> > <name>insertxx</name><!-- would expect validation to > fail here --> ... but you've put an element in your XML for testing. > <type>StoredProcedure</type> > <action>NonQuery</action> > </command> > <parameters> > ... > </SharedDB> I think if you had <SharedDB name="insertxx"> you would find the problem NCName flagged. I just copied your exact schema fragment into a bogus schema below and you'll see the attribute is being validated by both Xerces and Saxon. I hope this helps. . . . . . . . . . . . . . Ken ~/t/ftemp $ cat karl.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- to be used in extension below --> <xs:complexType name="ProjXm_QueryType"> <xs:sequence> <xs:element ref="command"/> <xs:element ref="parameters"/> <xs:element ref="fields" minOccurs="0"/> </xs:sequence> </xs:complexType> <!-- extends the above and adds a name attribute of specified simple type --> <xs:element name="SharedDB"> <xs:complexType> <xs:complexContent> <xs:extension base="ProjXm_QueryType"> <xs:attribute name="name" type="simpleType_SharedDBQueries" /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <!-- expected values for name attribute --> <xs:simpleType name="simpleType_SharedDBQueries"> <xs:restriction base="xs:NCName"> <xs:enumeration value="insert"/> <xs:enumeration value="update"/> </xs:restriction> </xs:simpleType> <xs:element name="command"> <xs:complexType/> </xs:element> <xs:element name="fields"> <xs:complexType/> </xs:element> <xs:element name="parameters"> <xs:complexType/> </xs:element> </xs:schema> ~/t/ftemp $ cat karl.xml <?xml version="1.0" encoding="UTF-8"?> <SharedDB name="insert"> <command/> <parameters/> </SharedDB> ~/t/ftemp $ w3cschema karl.xsd karl.xml Xerces... Attempting validating, namespace-aware parse Parse succeeded (0.131) with no errors and no warnings. Saxon... No validation errors ~/t/ftemp $ cat karlbad1.xml <?xml version="1.0" encoding="UTF-8"?> <SharedDB namex="insert"> <command/> <parameters/> </SharedDB> ~/t/ftemp $ w3cschema karl.xsd karlbad1.xml Xerces... Attempting validating, namespace-aware parse Error:file:///Users/admin/t/ftemp/karlbad1.xml:2:26:cvc-complex-type.3.2.2: Attribute 'namex' is not allowed to appear in element 'SharedDB'. Parse succeeded (0.135) with 1 error and no warnings. Saxon... Validation error on line 2 column 26 of karlbad1.xml: Attribute @namex is not allowed on element <SharedDB> (See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 3) No validation errors ~/t/ftemp $ cat karlbad2.xml <?xml version="1.0" encoding="UTF-8"?> <SharedDB name="insertx"> <command/> <parameters/> </SharedDB> ~/t/ftemp $ w3cschema karl.xsd karlbad2.xml Xerces... Attempting validating, namespace-aware parse Error:file:///Users/admin/t/ftemp/karlbad2.xml:2:26:cvc-enumeration-valid: Value 'insertx' is not facet-valid with respect to enumeration '[insert, update]'. It must be a value from the enumeration. Error:file:///Users/admin/t/ftemp/karlbad2.xml:2:26:cvc-attribute.3: The value 'insertx' of attribute 'name' on element 'SharedDB' is not valid with respect to its type, 'simpleType_SharedDBQueries'. Parse succeeded (0.146) with 2 errors and no warnings. Saxon... Validation error on line 2 column 26 of karlbad2.xml: FORG0001: Value "insertx" contravenes the enumeration facet "update, insert" of the type simpleType_SharedDBQueries (See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 3) No validation errors ~/t/ftemp $ -- Contact us for world-wide XML consulting and instructor-led training Free 5-hour video lecture: XSLT/XPath 1.0 & 2.0 http://ude.my/uoui9h Crane Softwrights Ltd. http://www.CraneSoftwrights.com/x/ G. Ken Holman mailto:gkholman@CraneSoftwrights.com Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Received on Friday, 6 January 2012 02:58:35 UTC