RE: Invalid particle derivation by restriction (XMLSpy vs. MSXML4 )

Hi Simon,

Thanks for the information. Will version 3 of GML use the latest w3 schema
specification?

Thanks,

Andy

-----Original Message-----
From: Simon.Cox@csiro.au [mailto:Simon.Cox@csiro.au]
Sent: Wednesday, March 27, 2002 8:13 PM
To: jeni@jenitennison.com; aed5@cdc.gov
Cc: xmlschema-dev@w3.org
Subject: RE: Invalid particle derivation by restriction (XMLSpy vs.
MSXML4 )


Andrew, Jeni - 

This is a known error in version 2 of Geography Markup Language.  
We are very close to releasing version 3 in which we hope to have eliminated
such mistakes.  

However, as some of my questions to this list may have hinted, 
we are not being helped by the approach to "derivation by restriction" 
applied by MSXML.  In some places it has helped us catch problems, 
but more recently MSXML has clearly been rejecting valid schema 
constructions - see for example:  

http://lists.w3.org/Archives/Public/xmlschema-dev/2002Mar/0177.html



_____
[This mail represents part of a discussion of work in progress 
and should not be used for any purpose without my permission.] 
_____
Simon.Cox@csiro.au  CSIRO Exploration & Mining
26 Dick Perry Avenue, Kensington WA 6151
PO Box 1130, Bentley WA 6102  AUSTRALIA
T: +61 (8) 6436 8639  F: +61 (8) 6436 8555  C: +61 (4) 0330 2672
http://www.csiro.au/page.asp?type=resume&id=CoxSimon

> -----Original Message-----
> From: Jeni Tennison [mailto:jeni@jenitennison.com]
> Sent: Wednesday, 27 March 2002 9:18 PM
> To: Dent, Andrew
> Cc: 'xmlschema-dev@w3.org'
> Subject: Re: Invalid particle derivation by restriction (XMLSpy vs.
> MSXML4)
> 
> 
> Hi Andrew,
> 
> > Quick question: The following code validates in XMLSpy, but using
> > MSXML4 (in VB) raises the following error:
> >
> > Invalid particle derivation by restriction
> > Base Type {http://www.opengis.org/gml}GeometryCollectionType
> > Derived Type {http://www.opengis.org/gml}MultiLineStringType
> 
> The relevant types from your code are:
> 
> <complexType name="MultiLineStringType">
>   <complexContent>
>     <restriction base="gml:GeometryCollectionType">
>       <sequence>
>         <element name="lineStringMember" maxOccurs="unbounded">
>           <complexType>
>             <sequence>
>               <element ref="gml:LineString"/>
>             </sequence>
>           </complexType>
>         </element>
>       </sequence>
>     </restriction>
>   </complexContent>
> </complexType>
> 
> and:
> 
> <complexType name="GeometryCollectionType">
>   <complexContent>
>     <extension base="gml:AbstractGeometryCollectionBaseType">
>       <sequence>
>         <element ref="gml:geometryMember" maxOccurs="unbounded"/>
>       </sequence>
>     </extension>
>   </complexContent>
> </complexType>
> 
> which is in turn based on:
> 
> <complexType name="AbstractGeometryCollectionBaseType" 
> abstract="true">
>   <complexContent>
>     <restriction base="gml:AbstractGeometryType">
>       <attribute name="gid" type="ID" use="optional"/>
>       <attribute name="srsName" type="anyURI" use="required"/>
>     </restriction>
>   </complexContent>
> </complexType>
> 
> The GeometryCollectionType therefore has a content of one or more
> gml:geometryMember elements.
> 
> You are attempting to derive this to a MultiLineStringType that
> contains one or more gml:lineStringMember elements.
> 
> The basic rule that you always have to follow when deriving by
> restriction is that an element that is valid according to the derived
> type *must* also be valid according to the base type. In other words,
> all the elements of the type MultiLineStringType must be valid
> according to the GeometryCollectionType.
> 
> But that's the not the case in your schema: an element that contains a
> gml:lineStringMember element isn't a valid GeometryCollectionType
> element. This is why the derivation by restriction is failing.
> 
> If you want the derivation by restriction to cause a change in the
> name of the child element, then you need to use substitution groups.
> The gml:geometryMember element needs to be declared at the top level
> of the schema (as it is already). The gml:lineStringMember element
> also needs to be declared at the top level of the schema, and
> reference the gml:geometryMember element to say that it is part of its
> substitution group:
> 
> <xs:element name="lineStringMember"
>             substitutionGroup="gml:geometryMember" ... />
> 
> Also note that to make this legal, the gml:lineStringMember element
> has to have a type that's an explicit restriction of the
> gml:geometryMember element's type.
> 
> Alternatively, if you don't want the types of gml:lineStringMember and
> gml:geometryMember to be related, you can declare the
> GeometryCollectionType to contain any elements in the GML namespace:
> 
> <complexType name="GeometryCollectionType">
>   <complexContent>
>     <extension base="gml:AbstractGeometryCollectionBaseType">
>       <sequence>
>         <any namespace="##targetNamespace" maxOccurs="unbounded" />
>       </sequence>
>     </extension>
>   </complexContent>
> </complexType>
> 
> though obviously that might cause problems elsewhere. Either way, your
> hierarchies probably need reworking a bit.
> 
> Cheers,
> 
> Jeni
> 
> ---
> Jeni Tennison
> http://www.jenitennison.com/
> 

Received on Saturday, 30 March 2002 07:31:27 UTC