Extensions of Enumerations

Since XML Schema has no way of dealing with extensions of enumerations
we are forced to come up  with a work around in dealing with such a poor
short coming.
Below are two possible work arounds in dealing with extensions. Are these
two work arounds,
valid and which method would be recommended.

Scenario #1

1) Wrap the enumeration declaration in a base complexType. Simply provide
the
element name (Value in this example) but do not provide the type
declaration. 
2) In the extension you can declare the Value element and provide the
declaration of 
the simple type enumeration
3)  Any consequent extension you could declare the Value element of a
different enumerated type.

1)  <complexType name="OrderStateBase" abstract="true">
	<sequence>
		<element name="Value"/>
	</sequence>
    </complexType>

2)  <complexType name="OrderState">
	   <complexContent>
		<restriction base="en:OrderStateBase">
			<sequence>
				<element name="Value"
type="en:OrderStateEnum"/>
			</sequence>
		</restriction>
	   </complexContent>
    </complexType>

3)  <complexType name="OrderStateExtended">
	   <complexContent>
		<restriction base="en:OrderStateBase">
			<sequence>
				<element name="Value"
type="en:OrderStateEnumExtended"/>
			</sequence>
		</restriction>
	   </complexContent>
    </complexType>

Scenario #2

1)  Wrap the enumeration element declaration in a base complexType. Provide
the
element name (Value in this example) and the simple type enumeration
declaration. 
2) Introduce OrderStateRestricted that does not re-declare the 
the Value element. 
3)Then declare a OrderStateExtended (extended from OrderStateRestricted)
that declares a Value element of a different simple type enumeration.

1)    <complexType name="OrderState">
		<sequence>
			<element name="Value" type="en:OrderStateEnum"
nullable="true"/>
		</sequence>
	</complexType>


2)  <complexType name="OrderStateRestricted">
		<annotation>
		   <documentation>By not re-declaring the original 
                element Value, it is in effect Omitted.</documentation>
		</annotation>
		<complexContent>
			<restriction base="en:OrderState">
				<sequence/>
			</restriction>
		</complexContent>
	</complexType>

3) <complexType name="OrderStateExtended">
		<annotation>
		<documentation>We extend from OrderStateRestricted, 
            which has no elements in it but is still extended 
            from OrderState and therefore allowed to replace any 
            occurrence of OrderState</documentation>
		</annotation>
		<complexContent>
			<extension base="en:OrderStateRestricted">
				<sequence>
					<element name="Value"
type="en:OrderStateEnumExtended"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

Received on Friday, 22 June 2001 10:50:49 UTC