SimpleType not enforced for extended element

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

SimpleType not enforced for extended element

Karl Stubsjoen
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?  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" />
                </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 -->
            <type>StoredProcedure</type>
            <action>NonQuery</action>
        </command>
        <parameters>
    ...
    </SharedDB>


Thanks,
Karl..

Reply | Threaded
Open this post in threaded view
|

Re: SimpleType not enforced for extended element

G. Ken Holman
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:[hidden email]
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal


Reply | Threaded
Open this post in threaded view
|

Re: SimpleType not enforced for extended element

Karl Stubsjoen

I am kicking myself!

Now the real challenge and probably a lot off topic..
I have a base schema class.
I have a working schema class. It includes base and certain elements extend base types.
I compile the base class with Xsd2Code.
I compile the working schema with Xsd2Code with instructions to not compile the included schema rules.
The objective: write generic code for the base class and strongly tied code for the working class hoping that I can easily invoke my core business objects that is expecting the base schema code. The problem is there doesn't seem to be support for an xs:extension.  There is some other trickiness going on too, but anyone have experience with this?
Karl

On Jan 5, 2012 7:59 PM, "G. Ken Holman" <[hidden email]> wrote:
At <a href="tel:2012-01-05%2017" value="+12012010517" target="_blank">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:[hidden email]
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal


Reply | Threaded
Open this post in threaded view
|

Re: SimpleType not enforced for extended element

Michael Kay
On 06/01/2012 08:26, Karl Stubsjoen wrote:
>
> I am kicking myself!
>
> Now the real challenge and probably a lot off topic..
> I have a base schema class.
> I have a working schema class. It includes base and certain elements
> extend base types.
> I compile the base class with Xsd2Code.
>
I think there is probably a better forum for asking questions about the
Xsd2Code product, which is probably unfamiliar to most people on this list.

Michael Kay
Saxonica