Re: SimpleType not enforced for extended element

Karl Stubsjoen <[email protected]>
Newsgroups gmane.text.xml.schema.devel
Message-ID <CAHL+Fe3Fjbe4LM6LRvrWK33CUGxwKeDx9_3C5GBB=XULGQO0-Q@mail.gmail.com>
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" <[email protected]>
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<[email protected]>
> 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>
>
>
>
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.