- From: Hoylen Sue <h.sue@dstc.edu.au>
- Date: Thu, 14 Sep 2000 17:52:11 +1000 (EST)
- To: www-xml-schema-comments@w3.org
Henry,
Thank you for the prompt reply.
> Without look in great detail at your example, I think you can do what
> you want with equivalence classes. I'll give a general example, see
> if it fits for your particular case.
Unfortunately, we have already considered this approach of using
equivalence classes, e.g.
<element name="position" type="TERM_TEXT" abstract="true"/>
<element name="lying_position" type="LyingTerm" equivClass="position"/>
<complexType name="LyingTerm" base="G1_TERM_TEXT" derivedBy="restriction>
<element name="value" type="string" fixed="lying"/>
... etc ...
</complexType>
(ditto for standing, sitting)
However, we found a number of tradeoffs which makes it an unsatisfactory
solution:
a. The element tags have been changed in the instances. This would
affect the importing of XML instances to applications which were
expecting the generic form. The application would not know that they
are reading in the 'position' field when the element tag is
'lying_position'? You could do matching by the order that elements
appear, e.g. the fourth element must be the 'position' field, but
then you would have to be careful about not making surrounding
elements optional.
b. You would have to know beforehand that you want to restrict a given
base element, since it has to be set to abstract and made global.
This makes it less satisfactory as a general solution for
implementing an enumeration of complex types.
c. Also, equivalence classes have a global search and replace meaning,
whereas the enumeration list would apply within a certain context.
For example, there may be more than one 'position' element that
occurs in the schema. The first 'position' field may stand for the
body position in a medical test, the second 'position' field may be
for a job title for the related health care professional. You would
not want to mix the values of these two fields. You could possibly
rename these fields to go around the problem. However, it does solve
the case you're referring to the same element. For example, there may
be more than one medical test. In the first test, 'position' can be
'sitting', 'standing' or 'lying, and in the second test, 'position'
can only be 'sitting' or 'standing'. There's no way to distinguish
the two lists using equivalence classes.
This has been a tricky problem for us. Although there are serveral
approaches to the solution, the trade offs have been considerable.
Do you think there is a way to do this without such large tradeoffs?
Thanks.
Hoylen
--
__________________________________________________ Dr Hoylen Sue
h.sue@dstc.edu.au http://www.dstc.edu.au/
DSTC Pty Ltd --- Australian W3C Office +61 7 3365 4310
Received on Thursday, 14 September 2000 03:52:31 UTC