This wiki has undergone a migration to Confluence found Here

GELLO

From HL7Wiki
Jump to navigation Jump to search

GELLO is a standard expression language for decision support. The syntax of the GELLO language is based on the Object Constraint Language (OCL). OCL was developed by the Object Management Group (OMG) as a constraint and query language for UML class models. Given that the HL7 Version 3 Reference Information Model (RIM) and associated Refined Message Information Models (R-MIMs) are based on UML, GELLO was designed to leverage the semantics of these HL7 models, in combination with HL7 Vocabulary and Data Types, for clinical decision support.

See Also

Discussion

  • How, in your mind, does GELLO relate to object-query-languages as supported by ORM tools, e.g. Hibernate query Language (HQL) ?
    • (Ioan Salau) GELLO is more close with OCL (Object Constraint Language) and QVT (Query View Transformer) from OMG which make GELLO a real object oriented language while ORM based query languages like HQL/EJB QL/JPQL are just translations of SQL to in memory object graph and it focuses on persistence aspect. Usually a HQL/EJBQL expression is transformed internally into SQL code and then executed within a database engine. GELLO expression are interpreted and executed directly over the object graph and it doesn't make assumption where the object graph is persisted. Also, GELLO makes use of many other features that you can find in OCL like strongly typed expressions, extensible language, truly object oriented. Certainly, there are situations when you have the object graph saved in database and the GELLO expression looks like:
 patientList->select(p|p.status='critical')->orderBy(name);

Then you can say that GELLO behaves like HQL/EJBQL/JPQL.

  • In how far are the GELLO expressions based on the 'relational properties' of the HL7 v3 datatypes specifications?
    • (Ioan Salau) Based on my current understanding of GELLO expressions and the knowledge I have from QCL/QVT usage, HL7 V3 Datatypes are handled as any other objects and although you can simulate the "relational properties", you can do much more than that: casting using oclAsType(), checking the type of datatype, use the datatype operations (isNull(), nonNull(), union(), diff() and so on)