2013/4/25 Thomas Beale <thomas.beale at oceaninformatics.com>:
> On 25/04/2013 11:47, Diego Bosc? wrote:
>
> As you know, I'm not a big fan of domain types, so take my comments
> with a grain of salt ;)
> I understand that back in the day when archetypes were hand crafted
> domain types could serve a purpose. But in my opinion ADL should not
> be written by hand nowadays. Tools should be the ones that 'hide' the
> 'verboseness' and provide the user with a simple interface to simulate
> domain types if you want/need that. Also, the difference in file size
> is negligible (if archetypes pass from 16kb to 20kb I wouldn't worry
> that much...).
> If you ask me I would get rid of them completely and make ADL
> completely model agnostic.
>
>
> I'm not worried about size, up to a point. But there some truisms about
> formalisms - the main one is that if the context free grammar of a formalism
> only has a complicated way to do something, then any structural
> representation will also be complicated. Additionally, if it's complicated
> to express a simple thing in the formalism, it's probable that no users or
> developers understand it clearly.
>
> Consider these dichotomies:
>
> OWL (readable) v RDF (hideous)
> JSON (simplistic, but readable) v XML (hard to read, tricky inheritance
> model, tricky containment semantics, ...)
> Ruby / Python (readable, according the young generation at least ;-) v C++
> (much harder than it should be)
> Ecore syntax (human readable and computable) v XMI (no need  to say anything
> here).
>
> One thing we can learn from this is that where clear abstract syntaxes are
> not found, there you find confusion.
>

"readability" seems like a too subjective measure, and depends mostly
of the person/program writing it on the first place.

>
>
> This is why I can agree with the second point completely: There you
> are making ADL better, more powerful.
> But I see a problem with the first point as it still requires an
> external definition of the 'mappings' between how we understand codes
> in each one of the standards (and which information we can constraint
> about them).
>
>
> well that's true, but it's already true for types like Date, Time, DateTime
> and Duration.  Note that a Datetime with timezone has 7 pieces of
> information in it, and a lot of implied validity rules. Is it a leaf type or
> a complex type? We just use ISO8601 strings for all of these, and let other
> tools work out the obvious mappings between various RMs with TS (HL7),
> DATE/TIME types (openEHR), XSD gXXX types (FHIR), and so on.
>

Dates are mostly represented as strings with more or less
restrictions. The classes to represent the codes are more complicated
than that (codes, terminology, mapping(s), qualifiers, etc)

> Proposing the idea of a 'terminology code' made up of a terminology id and a
> code or code-phrase (as a string expressed in e.g. the SNOMED CT
> Compositional grammar) as a built-in type doesn't seem a great leap in the
> semantic age.
>
>
>  With this new syntax, can we constraint mappings between
> codes? ( How do I say that I don't want to allow the mappings in
> certain coded text?)
>
>
> I'm not exactly sure what constraint you want to express here: can you be
> more precise?
>

Have a template or specialized archetype that the codes in my target
system will have exactly one mapping (from a standard terminology to a
local one, for example)

>
>  and what about the code qualifiers? What if your
> RM defines another kind of attribute for codes interesting to be put
> into the archetypes but not supported by this code syntax?
> If both visions (codes as a type and codes as a full structure)
> coexist then we have the same problem as we have now (or worse).
>
>
> well in openEHR we have always modelled code terms as syntax, not a complex
> model of qualifiers. See the CODE_PHRASE type.
>
>

I know how openEHR does it, but others may or may not model it like that.

>
>
> PS: BTW, by definition a leaf constraint type (the new proposed
> 'C_TERMINOLOGY_CODE' or whatever) does not have node id, I don't see
> how one would be able to define alternatives of codes from different
> terminologies or specialize that...
> PPS: ...which is the exact same problem that domain types have (as
> they also lack node id)
>
>
> it depends on what are trying to do. The 'normal' thing that 90% of
> archetypes need to do is this:
>
>                             ELEMENT[at0021] occurrences matches {0..1}
> matches {    -- Certainty
>                                 value matches {
>                                     DV_CODED_TEXT matches {
>                                         defining_code matches {
>                                             [local::
>                                             at0022,     -- Suspected
>                                             at0023,     -- Probable
>                                             at0024]    -- Confirmed
>                                         }
>                                     }
>                                 }
>                             }
>
> If this is written without the 'custom syntax' then you have:
>
>                             ELEMENT[at0021] occurrences matches {0..1}
> matches {    -- Certainty
>                                 value matches {
>                                     DV_CODED_TEXT matches {
>                                         defining_code matches {
>                                             CODE_PHRASE matches {
>                                                 terminology matches {
>                                                     TERMINOLOGY_ID matches {
>                                                         value matches
> {"local"}
>                                                     }
>                                                 code_string matches {
>                                                     "at0022",     --
> Suspected
>                                                     "at0023",     --
> Probable
>                                                     "at0024"    -- Confirmed
>                                                }
>                                             }
>                                         }
>                                     }
>                                 }
>                             }
>
> Either way, there is no at-codes on the possibilities, and there's no need.
>
> Of course, you can always do this:
>
>                             ELEMENT[at0021] occurrences matches {0..1}
> matches {    -- Certainty
>                                 value matches {
>                                     DV_CODED_TEXT [atNNNN] matches {
>                                         defining_code matches {
>                                             ...
>                                         }
>                                     }
>                                     DV_CODED_TEXT [atNNNN] matches {
>                                         defining_code matches {
>                                             ...
>                                         }
>                                     }
>                                 }
>                             }
>
> which might possibly make sense in some situation.
>
> - thomas
>
>


Sure, you can make alternatives of coded_text, the domain type here is
the codePhrase...

I think this could be a perfect valid example (ignore random codes)

defining_code existence matches {1..1} matches {
                                                    [SNOMED-CT::
                                                    123456,
                                                    11234561,
                                                    1002123456,
                                                    61234563,
                                                    98752;
                                                    233233]
                                                    [LOINC::
                                                    72693-5,
                                                    1234-5,
                                                    3254-8,
                                                    6548-1,
                                                    44563-7;
                                                    3254-8]
                                                    [local::
                                                    at1000,
                                                    at1001,
                                                    at1002,
                                                    at1003,
                                                    at1014;
                                                    at1001]
                                                }

You cannot define a node id for each defining code. But specializing
it should be allowed (define a subset of the parent seems like an
obvious thing to do on codephrases)

The same thing applies to C_DV_QUANTITY for example

ELEMENT[at1005] occurrences matches {0..1} matches {  -- Tilt
(degrees and radian)
                                        value existence matches {1..1}
matches {
                                            C_DV_QUANTITY <
                                                property = <[openehr::497]>
                                                list = <
                                                    ["1"] = <
                                                        units = <"?">
                                                        magnitude =
<|-90.0..90.0|>
                                                        precision = <|0|>
                                                    >
                                                >
                                              >
                                             C_DV_QUANTITY <
                                                property = <[openehr::497]>
                                                list = <
                                                    ["1"] = <
                                                        units = <"c">
                                                        magnitude =
<|-2PI..2PI|>
                                                        precision = <|0|>
                                                    >
                                                >
                                              >
                                        }
                                    }



 C_DV_QUANTITY[atXXXX]<...> is not correct.
And looking at the example, after all this years I have yet to find a
good explanation of why domain types can have things like "property"
which cannot be defined in standard ADL






> _______________________________________________
> openEHR-technical mailing list
> openEHR-technical at lists.openehr.org
> http://lists.openehr.org/mailman/listinfo/openehr-technical_lists.openehr.org

Reply via email to