S
SkyScrap
Hi,
my problem is the following. I have a complex type that has one
attribute that is based on an enumeration. The XML schema that I define
is fixed, but a customer/user of that schema should be able to add
items to the enumeration in an additional schema.
Currently the approach is:
1) use an element reference in the complex type
2) have an abstract element of type string
3) define a simple type that contains the enum literals based on string
4) have another element, that is of simple type and has the abstract
element as substitution group.
5) Users can extend the enumeration, by repeating step 3&4 in an own
schema, and provide a different enumeration simpleType, which ideally
includes the enum values of the original/parent simpleType.
Details to the steps are further down.
My questions are:
=> Is there a better way to do this? For example that a client/user
don't have to repeat all existing enums, but can somehow merge them in
with a union simple type?
=> How could a complex type definition look like that is an array of
the enum, and is also capable of using the customer extension?
1)
<complexType name="BusinessInteractionValue">
<complexContent>
<extension base="ns3:EntityValue">
<sequence>
<element ref="ns0:baseState" minOccurs="0"/>
</sequence>
</extension>
</complexContent>
</complexType>
2)
<element name="baseState" type="string" abstract="true"/>
3)
<element name="state" type="ns0:RequestState"
substitutionGroup="ns0:baseState"/>
4)
<simpleType name="RequestState">
<restriction base="string">
<enumeration value="ABORTED"/>
...
<enumeration value="PARTIALLY_COMPLETED"/>
</restriction>
</simpleType>
5) -- in a separate schema --
<simpleType name="ExtendedRequestState">
<restriction base="string">
<enumeration value="ABORTED"/>
...
<enumeration value="PARTIALLY_COMPLETED"/>
<enumeration value="open.running.new1"/>
<enumeration value="open.running.new2"/>
<enumeration value="open.running.new3"/>
</restriction>
</simpleType>
<element name="extendedRequestState" type="aek:ExtendedRequestState"
substitutionGroup="om:baseState"/>
my problem is the following. I have a complex type that has one
attribute that is based on an enumeration. The XML schema that I define
is fixed, but a customer/user of that schema should be able to add
items to the enumeration in an additional schema.
Currently the approach is:
1) use an element reference in the complex type
2) have an abstract element of type string
3) define a simple type that contains the enum literals based on string
4) have another element, that is of simple type and has the abstract
element as substitution group.
5) Users can extend the enumeration, by repeating step 3&4 in an own
schema, and provide a different enumeration simpleType, which ideally
includes the enum values of the original/parent simpleType.
Details to the steps are further down.
My questions are:
=> Is there a better way to do this? For example that a client/user
don't have to repeat all existing enums, but can somehow merge them in
with a union simple type?
=> How could a complex type definition look like that is an array of
the enum, and is also capable of using the customer extension?
1)
<complexType name="BusinessInteractionValue">
<complexContent>
<extension base="ns3:EntityValue">
<sequence>
<element ref="ns0:baseState" minOccurs="0"/>
</sequence>
</extension>
</complexContent>
</complexType>
2)
<element name="baseState" type="string" abstract="true"/>
3)
<element name="state" type="ns0:RequestState"
substitutionGroup="ns0:baseState"/>
4)
<simpleType name="RequestState">
<restriction base="string">
<enumeration value="ABORTED"/>
...
<enumeration value="PARTIALLY_COMPLETED"/>
</restriction>
</simpleType>
5) -- in a separate schema --
<simpleType name="ExtendedRequestState">
<restriction base="string">
<enumeration value="ABORTED"/>
...
<enumeration value="PARTIALLY_COMPLETED"/>
<enumeration value="open.running.new1"/>
<enumeration value="open.running.new2"/>
<enumeration value="open.running.new3"/>
</restriction>
</simpleType>
<element name="extendedRequestState" type="aek:ExtendedRequestState"
substitutionGroup="om:baseState"/>