Welcome and agenda | All |
|
ECL 2.2 Implementation Progress | | - "Top" and "Bottom" operators
- Ontoserver has implemented this
- Scheduled for development in Snowstorm
|
ECL 2.3 development Behaviour refinement for concrete string matching | | Proposal: Simplify concrete string matching. Use exact string match rather than prefix matching. Justification: The specification is a little vague in this area. The project group agreed that exact string matching seems most appropriate for concrete strings. The known terminology servers have already implemented exact string matching. Review change: |
ECL 2.3 development Ensuring consistency | | Updates following Jeremy Roger's Terminology Terver ECL consistency analysis the following changes were recommended by the group: - Filter changes
- Update ECL Spec to allow searching over active and inactive (apply everywhere, concept, description, members)
- Concept change not needed because active and inactive are included by default. Spec already states this.
- For review 5.1 Brief Syntax (Normative)
- Added wildcard. - update all syntaxes Kai Kewley
- Description filter changes
- Change ECL specification to exclude TextDefinitions by default
Make string “match” case insensitive- For review 6.8 Description Filters
|
ECL Lite - Expanding the use of the ECL standard | | Previous discussion: How to make it easier to add an ECL capability to more tooling? - SI already has open source implementations for reference
- The specification is now very large.
- An ECL Lite profile would reduce the months of effort required to implement the whole specification when starting fresh.
"ECL Lite" is a simpler version of Expression Constraint Language including only the most useful features. ECL Lite will be a true subset of ECL so will be forward compatible.
Feedback from previous meeting: - Concrete string matching simplification (resolved above)
- Not including description-filters limits the ability to define a set of concepts by language and dialect
- Consider publishing a recommendation to workaround this in FHIR Terminology servers.
- Review: Added scope info box: 6.8 Description Filters
- Add "Included In ECL Lite" Labels throughout the examples section - Use positive labels rather than exclusions
- Review: Added throughout -
- Appendix - make explicit that ECL Lite syntax must work with servers with full - intention is true subset.
Other draft specification updates: - Mentioned in 1. Introduction
- Reduced scope of concept filter to just active-filter.
ECL Lite - MVP Scope: - *, <, <<, >, >>, <!, !>, :, ^, AND, OR, MINUS, (), {{ +HISTORY-(MIN,MOD,MAX) }}, <!!, !!>, {{ C active }}
- Dot
- Not included:
- other filters
- cardinality
- groups
- Declare profile using block/set of language capabilities
- Survey capabilities in existing implementations - any existing capability groups?
- There are parallels in ECL builder and education scopes
|
ECL Capability statement in FHIR | | |
ECL Test Harness | | |
FHIR TX - Searching with a specific dialect | | Kai Kewley Try this in Snowstorm: When expanding a ValueSet with text filtering it is recommended to use the "Content-Language" header, to constrain the language and dialect of matched terms, in addition to informing the selection of display terms. This behaviour is owned by HL7. |
ECL Lite naming | | Not everyone happy with the name. Alternatives: - ECL Core
- ECL Essential
- ECL Focus
- ECL Base
- ECL Basic
- ECL--
- My First ECL
|
Substrate discussion | | Add appendix to describe the potential differences between terminology servers given what content is loaded/filtered out. |
ECL Enhancement Request: Set of reference sets containing a concept | | Enhancement for ECL 2.3 See comment here: Re: Discussions (2) Use cases: - Exploration for data analytics
- What subsets ~ what domains - how is this code used
- System design - finding existing relevant sets
- Would require a set of concepts that are all included within a refset
- Browsing
- Like the SI Browser "Refsets" tab
Syntax options: - ^[refsetId] * {{ M referencedComponentId = 404684003 }}
- Syntax sugar: ^? 404684003
- ^[refsetId] < 123000 {{ M referencedComponentId = 404684003 }}
- Syntax sugar: ^? 404684003 AND < 123000
- ^[refsetId] * {{ M referencedComponentId = << 404684003 }}
- Syntax sugar: ^? << 404684003
Agreed. Kai Kewley draft ECL guide changes for review next time. @404684003Overlaps with template language
? 404684003- ^? 404684003
- Looks intuitive
- Two Behaviours
- refsets returned match ANY concepts in the nested expression.
- ^? (<404684003)
- ^? (404684003 OR 234234234002)
- refsets returned match ALL concepts in the nested expression.
- ^! (<404684003)
- ^?MAX (<404684003)
- ^R 404684003
|
MRCM on FHIR | All | There is a growing desire to enable access to the SNOMED CT Machine Readable Concept Model via FHIR Terminology Servers. Use cases: - To support the creation and validation of Expression Constraint Language queries
- Creation and validation of Postcoordinated expressions using Compositional Grammar
How could this work? Current experiment: - An extension of the CodeSystem definition
- Kai Kewley drafted a JSON format to represent the required parts of the MRCM to support this use case.
- Review and discuss
- FHIR format feedback:
- Can we split the long string, maybe by domain?
- Alternative StructureMap rendering?
- JSON format feedback:
- Need to represent each attribute-domain
- Michael Lawley next iteration of the format.
Other options was considered but rejected because of demand of TS implementation complexity: - 1. Focus concept(s) -> MRCM Domain → set of domain - attributes
- ConceptMap? - translate focus concept to set of attributes
- A map would support returning additional information like grouping
- 2. Attribute → Search within attribute range
- New implicit URIs?
- Consider supporting a reverse lookup - given a focus concept, which attributes can this be used within.
|
2.3 ECL Enhancement | | I want to fetch the set of attribute names used by a concept or set of concepts. Use case: - Authoring ECL
- Authoring template generation
Syntax options: - 12334000 . ?
- 12334000 = R?
- 12334000 : ?
- 12334000 [ type ]
- 12334000.type
- 12334000 ...
|
ECL History Supplements with no association | | Potential issue: Concepts made inactive with inactivation reason "Non conformance to editorial policy" currently have no historical association. Use Cases - < 414408004 |Hispanic (racial group)| {{ +HISTORY }}
- No historical associations found against the inactive children
Should ECL be able to retrieve these concepts Options: - Include some association type in RF2 - could be generated before release.
- Fix in ECL. Terminology server could link concepts without any association to their last active parents.
- ECL engine could use the snapshot to find the last active parents
Requested discussion with MAG and Editorial Group |
ECL Maintenance Recommendations | All | We plan to add a "Maintenance Recommendations" page to the ECL guide. Suggested sections: - What does best practice ECL look like - what are the benefits
- ECL comments to record intent
- Existing tooling and features
Jeremy Rogers has drafted some content on this topic. Group have reviewed the word document Kai Kewley to Migrate to ECL Guide Appendix for final review. |
ECL Results - TS consistency | | Testing consistency between Snowray (Snow Owl), Ontoserver, Snowstorm. Also using custom made NHS Subset maintenance tool, would like to migrate to a standardised solution. Questions: ML: Some observations: it is interesting to see the number of examples that are querying against terms – the results are not surprising since 1., this is a relatively new part of the spec, and 2., it steps outside the original conception of ECL as a query language that only used defining aspects of concepts as supported by the Concept and Relationship tables. |
Postcoordination Guide + Reference Implementation Feedback | | Very little feedback received so far. An education module could be a way to expose more people to the caveats and best practises. |
Expression Repository Maintenance | | - Aim to round off the guidance - make expression repositories feasible - An expression repository uses a specific edition and version of SNOMED CT - how can expressions be migrated to a new version? Use cases of expressions: - Classifying expressions to discover closest existing precoordinated concept - no requirement for maintenance because expression not recorded in patient record
- Expression is recorded in patient record - need the ability to find relevant patients. This may not work well over time as SNOMED changes.
Potential issues when upgrading the substrate of an expression repository - Inactive concepts within the expression (focus concept, or attribute name or value)
- Concepts changing hierarchies (semantic tag) - e.g. procedure → observation
- The has happened for promoted concepts
- Is this a corner case / rare? Needs analysis. Kai Kewley
- Changes to concept model
- MRCM Changes / Editorial Guide
- Other modeling changes, perhaps driven by QI consistency efforts
- Will need to classify again to infer different ancestors and attributes
- MC: This has a lot of overlap with ECL maintenance
- General approaches for identifying issues:
- FHIR interface could validate the expression again to identify inactive concepts
- Expand existing value sets to see if there is a radical change in size
- Content unit tests - needs
- Strategies to avoid these issues:
- Capture user input (close to user form or template slot inputs) so that templates or transformations can be reapplied.
- Transform input again against the new substrate:
- Types of template based authoring / transformation
- Level 1 postcoordinated transformations.
- Implementation defined template - input to template captured and stored outside for the terminology server.
- Precoordinated template pairs - used by International Authoring teams
- Use the close to user form, level 1 transformations
- Create expressions using a proximal parent with minimal modeling, lean on Level 1 transformations (see guide)
- Expression repository should retransform existing close to user form expressions to classifiable expressions
- Kai Kewley What techniques from precoordinated authoring could be reused? How do international authors update PPP concepts, what automations?
- Should expression repository be versioned before being upgraded, or should the repository be recreated against the new substrate?
- Strategies to fix content issues:
- Use historical associations to replace inactive concepts used with an expression
- What historical association types work, which do not?
- Same As - Switch concept to target
- Maybe (possibly equivalent to, possibly replaced by)
- probably can't use both in an expression
- need a strategy - may not be able to automate, need an author choice?
Use cases for an expression repository, how are these impacted over time as the substrate changes. - Postcoordination as a replacement for authoring
- PPP modeling + attribute
- Desirable check when upgrading the substrate: detect change in subsumption.
|
Other Topics | All | - DK: Discussion of postcoordination transformations for Level 1+ or Level 2
- use of template language?
- Transformation choice interactive?
- JR: History supplements - Deprecate the WAS-A historic association? Causes implementation issues.
- Bring in other groups? Editorial EAG
|
The items below are currently on hold |
Meds ECL Requirement | | RequirementRequirement to select a substance or a modification of that substance .... use case: during authoring to prompt the user with all the active ingredient options. Author/modeller chooses a drug and wants to refine the selection using modification-of substances. - Alternate use case: Clinician chooses a drug and wants to refine the selection using modification-of substances
- The product may not exist - it could be made up.
- B2i have solved this problem using a real-time recursive search
BackgroundThe modification-of attribute is a transitive property in OWL. Transitive properties have a similar characteristic to an is-a relationships but without stating a subtype relationship. In SNOMED CT an OWL property chains are used to help organise the hierarchy, allowing products with modified substance to be subsumed into concept groupers defined using the base substance. However in this case the base substance should not be inherited into the product with the modified substance. The base (not modified) version of the substance is found as redundant and removed during NNF calculation. See OWL Guide: 2.5. Generating Necessary Normal Form Relationships from the OWL Refsets Example property chain: "|Has active ingredient| o |Is modification of|" is a sub-property of "|Has active ingredient|". Example hierarchy: Parent
Child
Because
And Property Chain: SubObjectPropertyOf(
ObjectPropertyChain(
:127489000 |Has active ingredient (attribute)|
:738774007 |Is modification of (attribute)|
)
:127489000 |Has active ingredient (attribute)|
)
.. which results in OWL seeing the non modified ingredient as a property of the concept for the purpose of subsumption. Finally TransitiveObjectProperty(:738774007 |Is modification of (attribute)|)
This could be used by the ECL engines.
Solution Options: - ECL Solution: << 372687004 |Amoxicillin (substance)|
OR ( << 105590001 |Substance (substance)| : << 738774007 |Is modification of (attribute)| = << 372687004 |Amoxicillin (substance)| ) OR ( << 105590001 |Substance (substance)| : << 738774007 |Is modification of (attribute)| = ( << 105590001 |Substance (substance)| : << 738774007 |Is modification of (attribute)| = << 372687004 |Amoxicillin (substance)| ) ) OR ( << 105590001 |Substance (substance)| : << 738774007 |Is modification of (attribute)| = ( << 105590001 |Substance (substance)| : << 738774007 |Is modification of (attribute)| = ( << 105590001 |Substance (substance)| : << 738774007 |Is modification of (attribute)| = << 372687004 |Amoxicillin (substance)| ) ) ) )- Pros: Already works, if you know the maximum number of transitive hops
- Cons: It's not pretty. It may work for modification-of but may not work for longer transitive chains like part-of (body structures)
- NNF Change Solution: Keep the modification-of relationships using a new characteristic type to support querying.
- Pros: Do not need to increase number of concepts or complexity of ECL engines.
- Cons: Big change in the spec? Could be misinterpreted. Seems risky.
- ECL Engine and Language Change Solution: Build a transitive closure for each transitive property, in the same way that we do for the is-a relationship. We would also need special ECL syntax for this.
- Pros: No content change. No classification change.
- Cons: Slightly more work in ECL engines.
- Pseudo-code: Kai Kewley
- In an ECL engine, when building the ECL index:
- Identify which properties are transitive:
Set<String> transitiveProperties = owlOntology.getAxioms(AxiomType.TRANSITIVE_OBJECT_PROPERTY).stream() .map(axiom -> axiom.getProperty().getNamedProperty().getIRI().getShortForm()) .collect(Collectors.toSet());
- Build up a set of transitive property ancestors:
- Concept:
Map<String, Set<String>> transitiveTypeParentMap;
addRelationship(source, destination, type) {
if (transitiveProperties.contains(type)) {
transitiveTypeAncestorMap.get(type).add(destination);
}
}
- Include transitive property ancestors in ECL index:
- conceptId: 351000220100 |Minocycline hydrochloride dihydrate (substance)|
- ancestors: (usual is-a ancestors)
- 738774007_ancestors: (52886009 |Minocycline hydrochloride (substance)|, 372653009 |Minocycline (substance)|)
- 738774007_parents: (52886009)
733930001_ancestors: ()
- further fields generated depending on the substrate.
- ECL Language could allow something like:
- << [+738774007 |Is modification of|] meaning use modification of transitive hierarchy in addition to is-a hierarchy.
- or << [+*] meaning use all available transitive hierarchies
- Examples:
- < |Product| : << |Has active ingredient| = << [+738774007 |Is modification of|] |Amoxicillin|
- < |Product| : << |Has active ingredient| = << [+*] |Amoxicillin|
- JR: At what point do we stop keeping everything stateless and use a reasoner. Should we check our approach / policy?
- ML: We need a solution that works with all property chains, not just transitive properties... we have that during NNF calculation, we are currently removing it. Perhaps those could be put into the NNF or another file to enable ECL implementations.
- Kai Kewley and Ale to catchup with Jim and Yong on this.
- DK: concerned that complexity of ECL would increase and usefulness may decrease? Maybe other architectures are needed to support another way to run snomed queries?
- JR: Suggests a hybrid ECL engine that can use a reasoner when needed, if the user needs to run a query that requires one and needs the complete answer.
- ALO: Perhaps SI could pre-compute the ECL index in a standard format for use in any ECL engine. A way to reduce the complexity for implementers and also standardise the solution. This could be a file in the release and also an open source tool.
- New Type of SNOMED Query Engine including an OWL Reasoner (an idea from Jeremy)
- Alternative approach to pre-computing the ECL index - see row below.
- Content Change Solution: Create a grouper substance to include that substance and all single and multi-hop the modification substances.
- Pros: Would work without other changes. This technique has precedent in the body structure hierarchy.
- Cons: Approx. three times the number of substance concepts. May be hard for implementers who want a clean list. Because of the high number (around 2K) of substances with a modification relationship these groups would need to be generated.
- Current content in numbers:
- 2,297 Substances have the modification-of attribute
- 89 Substance groupers exist with naming: "Substance-X and/or substance-X derivative"
- 37 Product groupers exist with naming: "Product containing substance-X and/or substance-X derivative"
|
SNOMED OWL Query Engine | | - New Type of SNOMED Query Engine including an OWL Reasoner (an idea from Jeremy)
- Alternative approach to pre-computing the ECL index. The engine would detect when OWL reasoning is required and use OWL to execute specific types of query.. for example queries involving property chains where the NNF is not sufficient.
- How is this different from postcoordination.
- What is the gap between ECL and Postcoordination:
- ECL things not available in PCE engines:
- ECL filters
- Refset membership and other fields
- Cardinality constraints
- Use Cases:
- Clinical use case: Refining the selection of a drug (using property chains)
- Back office / QA use case: Find all concepts with only one parent.
- B2i support this by extending the spec and allowing cardinality on the is-a relationship.
- Maybe in the future other attributes will be transitive: caused-by, due-to.
|