| Literature DB >> 34192772 |
Andrey Soares1, Robert A Jenders2, Robert Harrison3, Lisa M Schilling1.
Abstract
OBJECTIVES: This article presents a comparative study of two Health Level Seven International (HL7) standards for clinical knowledge representation, the Arden Syntax and the Clinical Quality Language (CQL), regarding their expressiveness and utility to represent knowledge for clinical decision support (CDS) systems.Entities:
Year: 2021 PMID: 34192772 PMCID: PMC8245210 DOI: 10.1055/s-0041-1731001
Source DB: PubMed Journal: Appl Clin Inform ISSN: 1869-0327 Impact factor: 2.342
Feature categories and description used for comparison
| Language characteristics |
|---|
|
•
|
|
|
|
•
|
|
|
|
•
|
|
|
|
•
|
Comparison between Arden and CQL regarding language characteristics and constructs
| Category | Arden Syntax v2.10 | CQL v1.4 |
|---|---|---|
|
| ||
| Grammar | Backus-Naur Form (BNF) | Antlr4, an Extended Backus-Naur Form (EBNF) |
| Machine- friendly executable | ArdenML | Expression Logical Model (ELM) |
| Code execution | Data slot, Evoke slot, Logic slot, Action slot. | Library, Using, Include, Codesystem, Valueset, Code, Concept, Parameter, Context, Define, Function. |
| Modularization | Call, Mlm, Interface, Event, Include | Define functions, Include libraries |
| Event triggering | Event, Evoke slot | − |
| Maintenance / Library | Title, Mlmname, Version, Arden Syntax Version, Institution, Author, Specialist, Date, Validation, Purpose, Explanation, Keywords, Citations, Links | Name, Version |
|
| ||
| Data types | Boolean, String, List, Null, Number, Time, Duration, Term, Query results, Object, Time-of-day, Day-of-week, Truth value, Fuzzy | Boolean, Integer, Decimal, String, Date, Datetime, Time, Quantity, Ratio, CodeSystem, ValueSet, Code, Concept, Tuple, Interval |
| Data models | − | multiple data models such as Quality Information and Clinical Knowledge (QUICK), Quality Data Model (QDM), Fast Healthcare Interoperability Resources (FHIR) and Virtual Medical Record (vMR) |
| Data context | − | Patient, Provider, Unfiltered |
| Data/Type conversion | As String, As Number, As Time, As Truth value | As String, As Integer, As Code, As Quantity, As <Resource>, Cast..As, ToBoolean(String), ToInteger(String), ToDecimal(Integer), ToDecimal(String), ToQuantity(Decimal), ToQuantity(Integer), ToQuantity(String), ToRatio(String), ToDate(String), ToDate(Datetime), ToDatetime(Date), ToDatetime(String), ToTime(String), ToString(Boolean), ToString(Integer), ToString(Decimal), ToString(Quantity), ToString(Ratio), ToString(Date), ToString(Datetime), ToString(Time), ToConcept(Code), ToConcept(List<Code>), Integer From/To Decimal, Integer From/To Quantity, Decimal From/To Quantity, Date From/To Datetime, Code From/To Concept, Convert..To |
| External resources | Read, Destination, Interface, Event, Write | External functions |
| Terminologies | − | Valueset, Codesystem, Code, Concept |
|
| ||
| Conditional statements | If-then-else, Switch-case | If..then…else, Case..when…then…else |
| Iteration statements | While loop, For loop | − |
|
| ||
| Logical operators | And, Or, Not | And, Or, Not, Xor, Implies |
| Arithmetic/Numeric operators | **, +, –, *, /, Ceiling, Floor, Truncate, Round, Abs, Exp, Log, Arcos, Arcsin, Arctan, Cosine, Sine, Tangent, Log10, Int, Sqrt | +, –, *, /, Div, Mod, Ceiling, Floor, Truncate, Abs, – (negate), Round, Ln, Log, Exp, ^, Max, Min, HighBoundary, LowBoundary, Precision, Predecessor, Successor |
| Comparison operators | =, < > , <, < = , >, > = , After, Before, Ago, Is [not] equal, Is [not] less than, Is [not] greater than, Is [not] less than or equal, Is [not] greater than or equal, Is [not] within… to, Is [not] within… preceding, Is [not] within… following, Is [not] within… surrounding, Is [not] within past, Is [not] within same day as, Is [not] before, Is [not] after, Is [not] in, Is [not] present, Is [not] null, Is [not] boolean, Is [not] number, Is [not] string, Is [not] time, Is [not] time of day, Is [not] duration, Is [not] list, [not] In, Is [not] object, Is [not] <objecttype>, Is [not] fuzzy, Is [not] crisp, Occur [not] equal, Occur [not] within… to, Occur [not] within… preceding, Occur [not] within… following, Occur [not] within… surrounding, Occur [not] within past, Occur [not] within same day as, Occur [not] before, Occur [not] after, Occur [not] at | = , ! = , >, <, > = , < = , Between, ∼, !∼, In, Same as, Before, After, Meets before, Meets after, Meets, Overlaps before, Overlaps after, Overlaps, Begins, Included in, Includes, Ends; Starts/Ends: On or, Or on, Less than, More than, Or less, Or more, Within… of, Occurs, During, Same or before, Same or after |
| Date/Time operators - Construction | Time, Time of day [of], Time of object [of], Attime, Replace year [of]… with, Replace month [of]… with, Replace day [of]… with, Replace hour [of]… with, Replace minute [of]… with, Replace second [of]… with | Year, Month, Day, Hour, Minute, Second, Millisecond, Timezone offset, Now, Today, TimeOfDay |
| Date/Time operators - Extraction | Day of week, Extract year, Extract month, Extract day, Extract hour, Extract minute, Extract second | Date from, Time from, Year from, Month from, Day from, Hour from, Minute from, Second from, Millisecond from, Timezoneoffset from |
| Date/Time operators - Arithmetic | +, – | +, – |
| Date/Time operators - Duration and Differences | From, Year, Month, Week, Day, Hour, Minute, Second | Between, Difference, Duration, Year(s), Month(s), Week(s), Day(s), Hour(s), Minute(s), Second(s), Millisecond(s) |
| List operators | , (Comma), Merge, Sort, Add… to… [At…], Remove… from…, Minimum (Min)… from, Maximum (Max)… from, First… from, Last… from, Sublist… elements [Starting at…] From …, Increase, Decrease, % Increase, % Decrease, Earliest… from, Latest… from | Contains, Distinct, =, Except, Exists, Flatten, First, In, Includes, Included in, [], IndexOf, Intersect, Last, Length, ∼, ! = , !∼, Properly Includes, Properly included in, Singleton from, Skip, Tail, Take, Union |
| Aggregate operators | Count, Exist, Average, Median, Sum, Stddev, Variance, Minimum (Min), Maximum (Max), Last, First, Any, All, No, Latest, Earliest, Element, Extract Characters…, Seqto, Reverse | Count, Sum, Stddev, Median, Variance, AllTrue, AnyTrue, Avg, GeometricMean, Max, Min, Mode, PopStdDev, PopVariance, Product |
| String operators | ||, Formatted with, String…, Trim, Find in string, Localized, Substring…, Length, Uppercase, Lowercase, Matches, Matches pattern | Combine, +, &, EndsWith, [], LastPositionOf, PositionOf, ReplaceMatches, Split, StartsWith, Substring, Length, Upper, Lower, Matches, SplitOnMatches |
| Query operators | Where, Nearest… from, Index nearest… from, Index of… from…, At least… [ISTrue|AreTrue] from…, At most… [IsTrue|AreTrue] from…, Slope, Interval | Where, Sources, Let clause, With or Without, Return, Sort |
| Object operators | New, Dot, Clone, Extract attribute Names…, Attribute… from…, Using | − |
| Uncertainty | Fuzzy set…, Fuzzified by, Defuzzified…, Applicability [of]… | Uncertainty |
Abbreviation: CQL, Clinical Quality Language.
Fig. 1Example of include and call statements to invoke other libraries. Clinical Quality Language (CQL) allows the use of any expressions from the included library, while Arden returns the result of processing the Medical Logic Modules (MLM).
Fig. 2Example of setting and evoking an event in Arden. 9
Fig. 3Example of Arden's Maintenance category.
Fig. 4Example of Clinical Quality Language (CQL) using a data model and Arden using object .
Fig. 5Example of referencing function from another Clinical Quality Language (CQL) library (source: https://cql.hl7.org/02-authorsguide.html ), and a data slot in Arden demonstrating the read of data from a Fast Healthcare Interoperability Resources (FHIR) service and a database.
Arden and CQL implications on utility
| Category | Arden | CQL | Implication | |
|---|---|---|---|---|
| Language | Grammar | ★★ | ★★ | Both standards allow the creation of a logic module consisting of English-language-like statements |
| Machine-friendly executable | ★★ | ★★ | Both standards can convert the logic into an XML/JSON format to be used by other systems | |
| Code execution | ★★ | ★★ | Arden executes the expressions in sequence and CQL evaluates all the expressions based on their interdependencies (like in production rules) | |
| Modularization | ★★ | ★★ | Both standards have constructs to break the logic into modules. In Arden, each function must be a separate MLM file imported and called individually. Arden has special constructs to also access external logic modules and resources | |
| Event triggering | ★★ | ☆☆ | Only Arden has constructs to support event triggering | |
| Maintenance/Library | ★★ | ★☆ | Arden has a more robust metadata library that would better support integration with knowledgement databases and key metadata uses. CQL leaves metadata about the library to be stored outside of the artifact | |
| Data | Data types | ★★ | ★★ | Arden and CQL can support basic primitive data types and some specific data types |
| Data models | ☆☆ | ★★ | CQL alignment with several quality and data exchange models facilitates technical integration and sharable resources | |
| Data context | ★☆ | ★★ | Both standards can work with EHR data with different contexts, but only CQL has a language construct to control the context such as patient, provider, and unfiltered | |
| Data conversion | ★★ | ★★ | Both standards can convert data from one type to another | |
| External resources | ★★ | ★☆ | Arden facilitates access to external logic modules and resources, while CQL provides references to value sets and code systems and also definition of functions from external libraries | |
| Terminologies | ☆☆ | ★★ | Only CQL has terminology declarations to represent codesystem, valueset, code, or concept, which can be used anywhere within the artifact | |
| Control statements | Conditional statements | ★★ | ★★ | Both standards support conditional statements |
| Iteration statements | ★★ | ☆☆ | Only Arden has loop statements | |
| Operators | Logical operators | ★★ | ★★ | Both standards support logical operators |
| Arithmetic/Numeric operators | ★★ | ★★ | Both standards support a variety of arithmetic operators | |
| Comparison operators | ★★ | ★★ | Both standards support a variety of comparison operators | |
| Date/Time operators - Construction | ★★ | ★★ | Both standards support a variety of date/time operators to create and compare date and time | |
| Date/Time operators - Extraction | ★★ | ★★ | Both standards support a variety of date/time operators to extract information from date and time | |
| Date/Time operators - Arithmetic | ★★ | ★★ | Both standards support date/time operators to perform arithmetic operations with date and time | |
| Date/Time operators – Duration and Differences | ★★ | ★★ | Both standards support date/time operators to perform calculations of duration and differences between dates and times | |
| List operators | ★★ | ★★ | Both standards support a variety of operations with lists | |
| Aggregate operators | ★★ | ★★ | Both standards support a variety of mathematical operations | |
| String operators | ★★ | ★★ | Both standards support a variety of string operators | |
| Query operators | ★★ | ★★ | Both standards support query operators, with CQL being closer to a SQL-like query operations | |
| Object operators | ★★ | ★☆ | Arden has several operators to handle objects, while CQL has only tuple as an object. CQL, however, can access objects and attributes from the data models | |
| Uncertainty | ★★ | ★☆ | Both standards support uncertainty. Arden uses fuzzy set and fuzzy logic to handle vague data and imprecise reasoning, and CQL uses intervals for date, time, duration, and numbers, but does not have a construct to represent or calculate gradual transition or degree of applicability |
Abbreviations: CQL, Clinical Quality Language; EHR, electronic health record; MLM, Medical Logic Modules.
Note: ★★ = addressed; ★☆ = partially addressed; ☆☆ = not addressed.