Re: SimpleType not enforced for extended element

"G. Ken Holman" <[email protected]>
Newsgroups gmane.text.xml.schema.devel
Message-ID <[email protected]>
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:[email protected]
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.