Welcome, introductions and apologies | | |
Agenda review | | Review agenda for today's meeting |
Compositional Grammar | | |
Expression Constraint Language v1.1 | | |
URI Standard | | URIs for SNOMED syntaxes |
URIs for SNOMED syntax instances
- ID - Expression (either precoordinated or postcoordinated)
- ECL - Expression Constraint
- QRL - Query
- ETL - Expression Template
- CTL - Expression Constraint Template
- QTL - Query Template
|
URIs for SNOMED syntax instances - with versioning |
Special Characters (not for ".", "-", "_", "~")Hexidecimal " " → %20 “!” -→ %21 “"” → %22 “#” → %23 "$" → %24 "%" → %25 "&" → %26 “’” → %27 "(" → %28 ")" → %29 "*" → %2A "+" → %2B "," → %2C "/" → %2F ":" → %3A ";" → %3B "<" → %3C "=" → %3D ">" → %3E "?" → %3F "@" → %40 "[" → %5B "\" → %5C "]" → %5D "^" → %5E “`” → %60 "{" → %7B "|" → %7C "}" → %7D
|
Upgrade "SNOMED URI Standard" to "SNOMED IRI Standard"?- URIs work with ASCII characters
- IRIs work with Unicode character sets
Wikipedia (IRI)
|
Template Syntax | | Remove slots and replace slots - Remove slot: [[ 1..1 ]], [[ 1..1 @slotName ]]
- Replace slot: [[ +id (<< 138875005 |SNOMED CT concept|) ]], [[ +id ]], [[ + ]], [[ +id(<<138875005 |SNOMED CT concept) @slotName $valueReference ]]
- Example: CT of X
71388002 |Procedure| : [[1..1 @roleGroup1]] { 260686004 |Method| = 312251004 |Computed tomography imaging action|, 405813007 |Procedure site - Direct| = [[+id (<<442083009 |Anatomical or acquired body structure|)] @site] }
|
Replace slots - Type of replacement - Replace with precoordinated expression (ie concept): [[ +id ]] ?? [[ +cpt ]] ??
- Replace with any expression: [[ +id ]]
- Replace with an expression constraint: [[ +ecl ]]
- Replace with a character string: [[ +str ]]
- Use cases include replacing comparison operators "=" and "!="
- Example 1: MRCM domainTemplateForPrecoordination (Finding with explicit context)
- [[+id(<< 243796009 |Situation with explicit context (situation)|: [0..0] 408730004 |Procedure context| = *, [0..0] 363589002 |Associated procedure| = *)]]:
[[0..*]] { [[1..*]] 408729009 |Finding context| = [[+id(<< 410514004 |Finding context value (qualifier value)|)]], [[1..*]] 408731000 |Temporal context| = [[+id(<< 410510008 |Temporal context value (qualifier value)|)]], [[0..*]] 246090004 |Associated finding| = [[+id(<< 404684003 |Clinical finding (finding)| OR << 272379006 |Event (event)|)]], [[0..*]] 408729009 |Finding context| = [[+id(<< 410514004 |Finding context value (qualifier value)|)]], [[0..*]] 408732007 |Subject relationship context| = [[+id(<< 125676002 |Person (person)|)]], [[0..*]] 408731000 |Temporal context| = [[+id(<< 410510008 |Temporal context value (qualifier value)|)]] }
- Example 2: MRCM domainTemplateForPostcoordination (Finding with explicit context)
- [[+id(<< 243796009 |Situation with explicit context (situation)|: [0..0] 408730004 |Procedure context| = *, [0..0] 363589002 |Associated procedure| = *)]]:
[[0..*]] { [[1..*]] 408729009 |Finding context| = [[+id(<< 410514004 |Finding context value (qualifier value)|)]], [[1..*]] 408731000 |Temporal context| = [[+scg(<< 410510008 |Temporal context value (qualifier value)|)]], [[0..*]] 246090004 |Associated finding| = [[+scg(<< 404684003 |Clinical finding (finding)| OR << 272379006 |Event (event)| OR << 363787002 |Observable entity (observable entity)| OR << 416698001 |Link assertion (link assertion)| OR << 71388002 |Procedure (procedure)|)]], [[0..*]] 408729009 |Finding context| = [[+scg(<< 410514004 |Finding context value (qualifier value)|)]], [[0..*]] 408732007 |Subject relationship context| = [[+scg(<< 125676002 |Person (person)|)]], [[0..*]] 408731000 |Temporal context| = [[+scg(<< 410510008 |Temporal context value (qualifier value)|)]] }
|
Cardinality - Cardinality of relationship group
- Pattern: [[ 1..* ]] { .. }
- Default operator between repeats: "," / "AND"
- Example: CT of X
71388002 |Procedure| : [[1..1 ]] { 260686004 |Method| = 312251004 |Computed tomography imaging action|, 405813007 |Procedure site - Direct| = [[+id (<<442083009 |Anatomical or acquired body structure|)] @site] }
- Cardinality of attribute value pair
- Pattern: [[ 1..* ]] 123345 |Attribute| = 234456 |Value|
- Default operator between repeats: "," / "AND"
- Example: CT of X
71388002 |Procedure| : { 260686004 |Method| = 312251004 |Computed tomography imaging action|, [[ 1..1 ]] 405813007 |Procedure site - Direct| = [[+id (<<442083009 |Anatomical or acquired body structure|)] @site] }
- Cardinality of focus concepts
- Pattern: [[ +() 1..* ]]
- Default operator between repeats: "+" / "AND"
- How would we achieve an operator of "OR" in an Expression Constraint? - e.g. [[+ecl 1..* ]] → A OR B OR C
- Example:
[[+id(<< 404684003 |Clinical finding|) 1..* ]]
- Other types of cardinalities?
|
Other Topics raised by Ed- The fact that a template processor would need to 'clean-up' any left over characters, such as ":". I suggest that we try to document the steps that a template processor should follow to turn a template into an expression, constraint etc.
|
Confirm next meeting date/time | | Next meeting to be held at 20:00 UTC on Wednesday 7th December |
2 Comments
Michael Lawley
My reading of IRIs is that it allows non-ASCII characters to be included "as-is". The alternative is that that their UTF8 encoding is %-encoded.
Given that the only real use case for this is for embedding ECLs etc into the URI/IRI and that the necessary %-encoding of the punctuation makes them all but human-unreadable anyway, I'm not really convinced that being able to include ç in the IRI rather than %c3%a7 is a big enough win to move from URI to IRI.
Note that the various standards that use these (eg FHIR) use URIs, so conversion would be required which imposes an implementation tax on those domains that generally doesn't exist at the moment. Standards that already work with IRIs already have that tax so they would not have significant additional work imposed by this spec remaining with URIs.
Linda Bird
Thanks Michael!
Certainly, if we can represent any UTF-8 character set using hexidecimal in a URI, and this avoid an implementation overhead for existing implementations, then this sounds like a great option.
Harold - Could you please confirm this with your colleague, and also ask if there is anything else we need to consider?