- From: Krzysztof Fink-Finowicki <Krzysztof.Finowicki@tessel.pl>
- Date: Fri, 11 Dec 2009 14:03:51 +0100
- To: <xmlschema-dev@w3.org>
This discussion was a long time ago: http://lists.w3.org/Archives/Public/xmlschema-dev/2002Mar/0219.html but it seems that I've reached the same problem. Opposite to Roger L. Costello statement, Best Practices from xFront *advises* parallel substitution group element hierarchies in elements and element containers as well. See "Implementing Substitution Group Element Hierarchies" in: http://www.xfront.com/ElementHierarchy.html I've seen in "OpenGISR Geography Markup Language (GML) Encoding Standard" version 3.2.1 opened possibility for this, e.g. in 21.4.2.2 "User-defined geometry property types" we have: "A geometry property type may be a restriction of gml:GeometryPropertyType, but this is not a requirement." My question is - why it is not a practice in GML 3.2.1?: In GML, we have AbstractGeometry element: <element name="AbstractGeometry" type="gml:AbstractGeometryType" abstract="true" substitutionGroup="gml:AbstractGML"/> and "generic" Property type (container) like below: <complexType name="GeometryPropertyType"> <sequence minOccurs="0"> <element ref="gml:AbstractGeometry"/> </sequence> <attributeGroup ref="gml:AssociationAttributeGroup"/> <attributeGroup ref="gml:OwnershipAttributeGroup"/> </complexType> Then there are *lot of* concrete geometry types, extending AbstractGeometryType, and associated geometry elements, belonging to substitutionGroup of AbstractGeometry. e.g. Point (indirect derivation and obsolete content simplified for brevity): <complexType name="PointType"> <complexContent> <extension base="gml:AbstractGeometryType"> <sequence> <element ref="gml:pos"/> </sequence> </extension> </complexContent> </complexType> <element name="Point" type="gml:PointType" substitutionGroup="gml:AbstractGeometry"/> All these Point, Curve, Surface, ..., PointArray, CurveArray, SurfaceArray, ... have their own Property (container) types defined but not within any hierarchy, only "following the same pattern", like below: <complexType name="PointPropertyType"> <sequence minOccurs="0"> <element ref="gml:Point"/> </sequence> <attributeGroup ref="gml:AssociationAttributeGroup"/> <attributeGroup ref="gml:OwnershipAttributeGroup"/> </complexType> My question is: What's wrong with defining all similar containers using "infamous" derivation by restriction, like below: <complexType name="PointPropertyType"> <complexContent> <restriction base="gml:GeometryPropertyType"> <sequence> <element ref="gml:Point"/> </sequence> </restriction> </complexContent> </complexType> Is it only due to troubles with MSXML validation (see http://markmail.org/message/fotntmddcmmwhkoc) ? Element gml:Point is in substitution group of gml:AbstractGeometry, so can be used here, isn't it? Ot it is the problem that PointType is EXTENSION of AbstractGeometryType, while I suggest to define PointPropertyType as RESTRICTION of GeometryPropertyType? Best Practices paper cited above doesn't mention about this. With my suggestion, at least two benefits can be seen: - after changing or extending usage of attributeGroup's (gml:AssociationAttributeGroup, gml:OwnershipAttributeGroup) it wouldn't be necessary to "follow the same pattern" in all duplicated container definitions; - it would be possible to define some flexible content models allowing Feature to have *any* geometryProperty, replaceable by concrete pointProperty, curveProperty and so on; This flexibility would be specifically convenient when creating layered schemas - flexible generic one with "templated", and concretized specific ones with restricted content. Please explain me where I'm wrong.
Received on Friday, 11 December 2009 13:04:35 UTC