Re: SimpleType not enforced for extended element

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" <gkholman@cranesoftwrights.com>
wrote:

> 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<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<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<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/<http://www.CraneSoftwrights.com/x/>
> G. Ken Holman                   mailto:gkholman@**CraneSoftwrights.com<gkholman@CraneSoftwrights.com>
> Google+ profile: https://plus.google.com/**116832879756988317389/about<https://plus.google.com/116832879756988317389/about>
> Legal business disclaimers:    http://www.CraneSoftwrights.**com/legal<http://www.CraneSoftwrights.com/legal>
>
>
>

Received on Friday, 6 January 2012 08:27:16 UTC