Hi Thomas, I think you're going too far with this controlled key and syntax approach. The important thing at this point is we get a structure that we can start using to get more experience with. Although my proposal was a simple property value bag, I think your idea of a triplet is good, but we should do this using attributes rather than syntax. So a directive type, an name/ID and value attributes seems like a pretty powerful structure, its similar the Claim class in an Identity Model for authorisation (claim type, right, resource).
I think the majority of view directive use will be in templates at the local level, but certainly some directives are likely at the jurisdictional level (e.g. pass_through). For this reason, I think that we should not restrict the values to only controlled values, controlled values are only necessary for shared use and it is these that certainly need to have a registry. Erik's RDF suggestion seems like a reasonable approach to doing this rather than openEHR inventing a new scheme. We need to support innovation in this area and hence allow local groups to use local directive type/identifiers/values at will and when they have something to bring back to the community somewhere to register and align their local directives with shared directives. A consumer should only need to process the directives it is interested in, unless we provide something like a must-understand attribute. With regard to inheritance of directives, I think this needs to be based on the directive type. In some cases we will want an override, in others we would want addition or constraint. Not sure yet whether this needs to be specified in the directive or not so that the compile can generate the appropriate result or always have the complete set and leave the responsibility to the consumer to interpret the set. I don't think we need to make this too complicated at first, the main thing is to get the containment structure right, we can always add attributes such as must_understand and override mode to the directive class later. Regards Heath From: openehr-technical-boun...@openehr.org [mailto:openehr-technical-bounces at openehr.org] On Behalf Of Thomas Beale Sent: Monday, 30 January 2012 11:52 PM To: openehr-technical at openehr.org Subject: pass_through and implementation directives in general On 30/01/2012 03:16, Heath Frankel wrote: Hi Pablo, If I understand correctly, the pass_through attribute is only for data displaying on a screen (as you mention the use for data grouping or collapsing). If that's right, I don't think that should be part of the generic template structure, because templates are meant to represent other elements than data views/GUI, like messages, reports, etc. No, that is not what I are saying. I are saying it can be used for more than display purposes such as data views, messages, reports etc. As you mention " screen layout and binding are consistent with the XML schema or class it will bind to" I feel maybe this is a little attached to Oceans implementation, e.g. in our implementaition we don't have binding with XML Schemas . Ocean doesn't bind to XML schema either, I used this as an example of why you may want to ensure your presentation view is consistent with a data view derived from the same template artefact. The use of the annotation-like structure for view directives allows us to separate these kind of directives from true annotations and the data definition itself whilst providing flexibility for specifying a set of directives that we know of now but may improve on later such as pass_through, add to in the future, and also use in local environments. We need to remember that templates where inteded for local use cases but are now also becoming important at jurisdictional levels for shared use. Heath, the options for passthrough today (ADL/AOM 1.5) seem to be the following: * leave it where it is today, specified on C_COMPLEX_OBJECT * move it to be an annotation within the new annotations section of ADL 1.5 archetypes, with a key such as 'view_directive' * create an entirely new section, structured the same (?) as the annotations section, within the archetype for view / other directives The potential problems with including a new view-directives section within archetypes include: * it makes the archetype dependent on those directives. They would need to be limited to universal directives, because most UI/presentation, as well as other implementation directives are locally specific, and there can clearly be more than one, for a given archetype. * we don't yet know what structure such a directives section should really take Potential benefits: * the section can be specified within the AOM & ADL docs, i.e. no new specs required * making a new section in archetypes & templates means that we don't need any new tools to process these directives - the main archetype compiler would do it * we could make it so that applying more local directives was done by defining correct inheritance rules for the implementation-directives section - i.e. use inheritance As I think about this, I am starting to be persuaded that continuing to use inheritance to achieve local additions and overrides is a good thing - it works for the rest of the archetype. If we commit to this path, the remaining question is: is the current annotations section structure sophisticated enough to contain implementation directives? An example of the annotations section from a current test archetype is as follows: annotations items = < ["en"] = < items = < ["/data[at0001]/items[at0.8]"] = < items = < ["design note"] = <"this is a design note on allergic reaction"> ["requirements note"] = <"this is a requirements note on allergic reaction"> ["medline ref"] = <"this is a medline ref on allergic reaction"> > > ["/data[at0001]/items[at0.10]"] = < items = < ["design note"] = <"this is a design note on intelerance"> ["requirements note"] = <"this is a requirements note on intolerance"> ["national data dictionary"] = <"NDD ref for intolerance"> > > ["/data[at0001]/items[at0002]"] = < items = < ["design note"] = <"this is a SPECIALISED design note on Statement"> ["NEW TAG"] = <"this is a SPECIALISED design note on Statement"> > > > > > So let's imagine that a new section could be of a similar structure. The first thing to note is that it is path-based. Is this sufficient? For now, I will assume it is. Secondly, do we need multiple languages? I would assume not, since we are now talking about computable strings rather than human-consumable strings. The tags will obviously be different. Here is a possible example. implementation_directives items = < ["/data[at0001]/items[at0.8]"] = < items = < ["presentation"] = <"pass_through"> ["querying"] = <"something_else"> > > ["/data[at0001]/items[at0.10]"] = < items = < ["presentation"] = <"widget_type=smart_text_coded_selector (args...)"> > > > The blue tags would have to be controlled somehow by agreement, and would define the possible 'implementation directives' that could be stated. The green values, or 'flags' could potentially also be controlled. The red part in the last one illustrates an example whereby the value is a piece of syntax (it could be a function call, or something like a Javascript expression). If the value space for a given 'flag' is controlled (e.g. 'widget_type' always = some javascript expression) then we have enabled some formal computing elements to be used, as are likely to be required for implementation. It seems clear to me at least that there would not be many of these implementation directives on international archetypes, but national and local archetypes, and particular templates would potentially have many. We would need to establish basic rules like: * tag names come from a) a central controlled vocabulary and additionally b) local values being allowed * this could be done by registering the vocabularies at different jurisdictional levels. Initially, I think we could just work off a central wiki page, with perhaps a few key tags defined in the AOM spec itself (if we can figure them out in time) * values could also potentially be defined in this controlled vocabulary, i.e. in the form * tag1 = value1 | value2 | value3 etc * or in other ways, e.g. tag1 = string; javascript syntax * specialised archetypes and templates could override the value of an existing tag with another legal value for that tag * but we probably need to allow locally defined values as well for tags with a fixed value set * specialised archetypes and templates can add directives containing new (locally-defined) tags and values * there may need to be a way to 'remove' a tag setting from an archetype This is obviously pretty 'soft' computing, and therefore open to some dangers, but if we manage it as a community in a sensible way, it could bring a lot of value. The use of specialisation to add new directives I think is the key to making it work properly with respect to localisation. thoughts? - thomas beale -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.openehr.org/mailman/private/openehr-technical_lists.openehr.org/attachments/20120131/0ee26490/attachment.html>