Bert,

There is no unique identifier within an archetype but every node within an
archetype has a unique path.  This is why paths are used in the
internal_ref.  Your paths must start at the root of the archetype and should
not go beyond the archetype (i.e. the node being reference must already
exist in the archetype).  Have a look at the Blood Pressure archetype to see
how internal_ref is used.  As Lisa suggested, paths are explained in the
Architecture overview, section 13 from memory.  I personally don't see any
issue with referencing a archetype slot, I would suggest that it would just
mean that we are using the same slot constraints, but you would not be able
to traverse through the slot into an included archetype node.

 

Heath

 

 

 

From: [email protected]
[mailto:openehr-technical-bounces at openehr.org] On Behalf Of Bert Verhees
Sent: Monday, 10 December 2007 11:22 PM
To: For openEHR technical discussions
Subject: Re: path of ArchetypeInternalRef

 

Hi Lisa, please read my comments below

Lisa Thurston schreef: 

Hi Bert
 
Bert Verhees wrote:
  

About your suggestion about the internal_ref I have a remark, because, if
you construct the path like that, and which seems logical, it is not
possible to distinguish in the path, or from the path, that it contains a
reference.
  
    

Does this matter? Anything that handles these paths (eg a "Get ADL Node 
at Path" function) should be able to find the targeted node whether it 
goes through an ARCHETYPE_INTERNAL_REF or via the more common 
C_COMPLEX_OBJECTs.
  

No, it does not matter, the only problem is that must be standardized,
because "path" is an important item to uniquely identify the location of a
node inside an archetype.
Because, as I understand, in internal_ref situations, the archetype_node_id
is not unique.
Because, in my example,  (I go back some days)

(excuse my too simple use of ADL)




contact[0005]..........
.........
addresses cardinality matches {0..*; ordered} matches {
                    ADDRESS[at0006] matches {    -- phone number
 
 
contact[0009]..........
.........
addresses cardinality matches {0..*; ordered} matches {
                    use_node ADDRESS /contacts[at0005]/addresses[at0006]
 
 
two paths pointing to the ADDRESS object
/contacts[at0005]/addresses[at0006]
and (as I think we agree which is the good thing (a little below in this
email))
/contacts[at0009]/addresses[at0006]
In both cases ADDRESS will have the same archetype_node_id: [at0006]

Maybe I misunderstand some small but fundamentally issue:
The path of a CObject, that is connected with a payload of an
Locatable-Object in the persistence-database is important.
Because, (in my opinion) an application must be able to locate a
Locatable-Object inside an archetype, and how can it do that when it has no
unique identifier pointing to location in an archetype




So in my example the path would be:
/contacts[at0009]/contacts[at0005]/addresses[at0006]
  
    

Perhaps I misunderstood you. I think it would be 
/contacts[at0009]/addresses[at0006] because your reference is to the 
addresses node, not contacts node.
  

To avoid possible misunderstandings, I think:



/contacts[at0009]/addresses[at0006]

will be the best way to define the path for that object (pointed to by a
internal_ref), I think you agree.
If not, please tell me



This would suggest that there exists a contacts inside contacts, other
examples (not repeating the same rm-reference) could even be more
confusing.
 
So replacing the second contacts by the first is another option, like this
/contacts[at0005]/addresses[at0006]
would become this:
/contacts[at0009]/addresses[at0006]
Maybe in this constructs also are problems of which I haven't thought of,
yet. How are other implementers doing this?
 
I wonder, is there no specification/rule about this? Shouldn't there be
one, maybe in the context of having an open standardized platform where
third parties can connect to, and understand the objects they get from a
system?
  
    

The relevant documents don't make this explicit to the best of my 
knowledge. The ADL1 spec has a section on "ADL paths" 
(http://svn.openehr.org/specification/TRUNK/publishing/architecture/am/adl.p
df 
section 5.3.7, section 7) and the Architecture Overview mentions paths 
in archetypes and templates too 
(http://svn.openehr.org/specification/TRUNK/publishing/architecture/overview
.pdf 
section 10.5).
  

I think it is a good feature when path's are allowed to be meaningful. They
add information to the system. Too bad if this possibility is not used,
except when there are strong arguments against it.



About the archetype-slot, I will come back to that later.
Maybe it is OK to leave the path just as it is, a path can only be
meaningfull inside a single archetype. Maybe it makes sense to add the
connected arcehtype to the original path of the archetype slot.
  
    

While I still don't think there should be paths going inside archetype 
slots, there is a question of what the path should be when you are 
talking about a path within a template. This is a bit more complicated 
to answer because there is no template spec yet, but in general I think 
the same approach can be taken as with the internal refs.
 
I have created in-memory flattened AOM representations of templates 
which add the definition.attributes of the referenced archetype as 
attributes of a new C_COMPLEX_OBJECT that becomes a sibling of the 
ARCHETYPE_SLOT. Imagine we did this for a template made from your 
archetype, with a CLUSTER.address_details.v1 archetype in the details 
slot. To get to the first item in your address details you'd end up with 
the path /contacts[at0009]/addresses[at0006]/details[at0001] where the 
at0001 of details is actually identifying the first one of the items 
nodes under the definition of a referenced CLUSTER.address_details 
archetype.
 
Hope that is more helpful than confusing.
  

My suggestion is that the path needs to go inside the archetype-slot,
because, it is necessary to locate a Locatable to the right context.
Specially because, more and more small parts of archetypes are used, as
building blocs, the connected Locatables can loose their necessary context,
afterwards.
But this is only a suggestion, I am technician, not a
medical-software-architect (I like to keep it that way)

I understand in so far, that I, for the moment, avoid the use of
Archetype_slots, because, it chances are small that I use them in a way that
will later on appear in the specs, and it is possible to avoid the use, just
a bit hairy <http://catb.org/jargon/html/H/hairy.html> .

Thanks
Bert 

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

Reply via email to