In the current ADL 1.4-based XSDs used in openEHR, occurrences, 
cardinality and existence are expressed as XML elements. We will want to 
improve this for ADL 1.5 based XML. Now, we don't want to only take care 
of XML; we also need to make it work for JSON, and (internally) for dADL 
- neither of the latter have XML's 'attributes'. Many people have asked 
for more efficient ways of serialising. Here are some ideas for ADL 1.5 
XML, JSON etc.

~~~~~~~~~~ first question: occurrences and cardinality  ~~~~~~~~~~~~~~~~
Occurrences and cardinality  are proper intervals in the AOM 
representation. The most simplified object structure (JSON and dADL) for 
occurrences and cardinality could look as follows (I use dADL & 
occurrences here):

occurrences = <
     lower = <2> -- Integer field
     upper = <10> -- Integer field
 >

but the upper limit is commonly unbounded, i.e. '*' in typical UML-like 
syntax. We could do:

occurrences = <
     lower = <2> -- Integer field
     upper_bounded = <True> -- Boolean field
 >

meaning that 3 possible attributes could occur for an occurrences, but 
only ever 2 at the same time. Or we could make everything into a string:

occurrences = <
     lower = <"2"> -- String field
     upper = <"*"> -- String field
 >

The upside is that the 'upper' attribute now handles both bounded and 
unbounded values. The downside is that the JSON / dADL parsers would 
have to do a bit more work to generate the required Interval<Integer> 
object - since the 'upper' attribute now has to be treated as a little 
fragment of syntax and checked before being turned into an Integer.

If we were just doing JSON, dADL and other 'proper' OO syntaxes, the 
first one would be the obvious one. But since we are also targetting 
XML, we have to think whether it makes more sense to do:

<children node_id="at0005" occurrences_lower="2" 
*occurrences_upper*="10"> -- xsi:type=C_OBJECT
<rm_type_name>CLUSTER</rm_type_name>

and

<children node_id="at0005" occurrences_lower="2" 
*occurrences_unbounded*="true"> -- xs:boolean has to support 0/1 and 
true/false
<rm_type_name>CLUSTER</rm_type_name>

which is the analog of the first approach above, or it could be:

<children node_id="at0005" occurrences_lower="2" *occurrences_upper*="10">
<rm_type_name>CLUSTER</rm_type_name>

and

<children node_id="at0005" occurrences_lower="2" *occurrences_upper*="*">
<rm_type_name>CLUSTER</rm_type_name>

with both attributes defined in the XSD as xs:string. This means that 
like for JSON/dADL, the XML standard parser only generates strings, and 
somehting further has to be done to obtain a proper Interval object.

My preference is still to go with the first way of doing things. Do 
others agree with this? If so, it is what I will implement in the ADL 
1.5 workbench.

~~~~~~~~~~~~~ second question:existence ~~~~~~~~~~~~
Existence as an interval can be 0..0 (prohibited, commonly used in 
templates), 0..1 (optional, typical in the RM) and 1..1 (used in 
templates and sometimes in archetypes). Now, since archetypes and 
templates are /constraint/ structures, they can only /further /constrain 
the RM in ADL/AOM 1.5. The only possibilities for this are actually 
"0..0" and "1..1", so we could collapse existence onto a single Boolean 
for serialised representation (it could also be a single Boolean in the 
AOM, but that would be a breaking change, and since we already use 
Intervals for occurrences and cardinality, it does not seem worth the 
trouble).

Thus in JSON/dADL it could be:

some_attr = <
     existence = <True|False>
 >

In XML:

<attributes rm_attribute_name="name"*existence*="true">
    ....
</attributes>

Now, this is cheating a bit because we are making it look like there is 
an AOM property 'existence' of type Boolean, but there isn't. Should it 
be named something else to make this clear? I.e. a pseudo attribute that 
only exists in serialised format but not in AOM internal format, e.g. 
'existence_constraint'? I would favour this. In my current 
implementation, the serialised format actually has its own object model, 
and this would have to be true for JSON as well. I think it also makes 
sense in XML - that there will be a level of classes corresponding to 
the space-efficient serial form, which are not the same as the internal 
AOM classes.

thoughts?

- thomas beale


-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://lists.openehr.org/mailman/private/openehr-technical_lists.openehr.org/attachments/20111110/d9d5e427/attachment.html>

Reply via email to