some problems regarding to transforming UML to XML Schema

Hello everybody:

I found a hard time to map inheritance defined in UML to XML Schema.
Usually, the complex type extension is used for inheritance. Then, two
issues raised:

(1) Use <sequence> or <all> ?
<sequence> specify the order of elements defined in it. But in UML, there is
no such specification for order. Attributes and associations defined in a
class may appear in any order. It seems <all> is good choice (??)

(2) How to use <all>
<all> does provide the flexibility for order. But it has other restrictions.
It seems hard for me to handle multi-level inheritance defined in UML.
Reference [1] shows an example for mapping Inheritance defined in UML to XML
Schema. It looks like:

	<xsd:element name = "Address" type = "Address" abstract = "true"/>
	<xsd:complexType name = "Address" abstract = "true">
		<xsd:all>
			<xsd:element name = "name" type = "xsd:string"/>
			<xsd:element name = "street" type = "xsd:string"/>
			<xsd:element name = "city" type = "xsd:string"/>
		</xsd:all>
	</xsd:complexType>
	<xsd:element name = "USAddress" type = "USAddress" substitutionGroup
= "Address"/>
	<xsd:complexType name = "USAddress">
		<xsd:complexContent>
			<xsd:extension base = "Address">
				<xsd:all>
					<xsd:element name = "state" type =
"xsd:string"/>
					<xsd:element name = "zip" type =
"xsd:positiveInteger"/>
				</xsd:all>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

This schema can't pass the validation check, and the error is "groups are
not allowed in ALL element".

But if I change the <all> defined in the base complex type to <sequence>, it
passed the validation check without any error. Could anybody please explain
this? If I define "MyAddress" as a sub-class of "USAddress", can I write the
schema like the following? I changed <all> of base class to <sequence> and
defined "MyAddress" as a child of "USAddress".

	<xsd:element name = "Address" type = "Address" abstract = "true"/>
	<xsd:complexType name = "Address" abstract = "true">
		<xsd:sequence>
			<xsd:element name = "name" type = "xsd:string"/>
			<xsd:element name = "street" type = "xsd:string"/>
			<xsd:element name = "city" type = "xsd:string"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name = "USAddress" type = "USAddress" substitutionGroup
= "Address"/>
	<xsd:complexType name = "USAddress">
		<xsd:complexContent>
			<xsd:extension base = "Address">
				<xsd:all>
					<xsd:element name = "state" type =
"xsd:string"/>
					<xsd:element name = "zip" type =
"xsd:positiveInteger"/>
				</xsd:all>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name = "MyAddress" type = "MyAddress"/>
	<xsd:complexType name = "MyAddress">
		<xsd:complexContent>
			<xsd:extension base = "USAddress">
				<xsd:all>
					<xsd:element name = "Mystate" type =
"xsd:string"/>
					<xsd:element name = "Myzip" type =
"xsd:positiveInteger"/>
				</xsd:all>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

Reference:
[1] Dave Carlson "Modeling XML Vocabularies with UML, Part I, II, and III,"
<http://www.xml.com/pub/a/2001/08/22/uml.html>
	
Xiaofeng Wang
GE Network Solutions
1990 West NASA Blvd, Melbourne Florida, 32904
Voice: (321)435-5458, Fax: (321)435-5652
xiaofeng.wang@ps.ge.com

Received on Monday, 14 January 2002 14:33:25 UTC