Extensible enumerations in XML Schema

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"/>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,015
Latest member
AmbrosePal

Latest Threads

Top