### Date & Time

20:00 UTC Wednesday 31st January 2018

**Teleconference Details**

To join the meeting please go to https://snomed.zoom.us/j/471420169.

Further information can be found at SLPG meeting information

### Goals

- Discuss recent comments - ECL requirements and string collation
- Updates to SNOMED URI Standard
- Progress SNOMED Query language

### Attendees

- Chair: Linda Bird
- Project Group: Michael Lawley, Daniel Karlsson, Ed Cheetham, Anne Randorff Højen

### Apologies

**Agenda and Meeting Notes**

Description | Owner | Notes |
---|---|---|

Welcome and apologies | ||

Recent comments |
**Added to ECL future requirements page.**
When specifying the lexical search type for term matching there is a need to specify the collation used, and to specify the default collation for the language in which the terms are to be matched are represented. Examples based on mysql collation behavior: "AAO" matches "ÅÄÖ" in utf8_generic_ci and utf8_unicode_ci (and utf8_german2_ci) but not in utf8_swedish_ci collation. "Aåa" matches "aåa" in utf8_generic_ci and utf8_swedish_ci but not in utf8_bin collation (i.e. case insesitive vs. sensitive, sometimes you need case sensitivity when searching...). Similar behavior can be implemented e.g. by java.text.Collator in java or by the collection.find() or cursor.collation() method in MongoDB. **Action from last week: Is there a standard or generic approach to defining Collation behaviour?****Using LET ... IN ...**(LET substrate = X IN *) MINUS (LET substrate = Y IN *) LET X = (<< 1234 : 5678 = << 6547) IN X MINUS >! X - Find leaf nodes of X
(LET substrate = X IN << 12345) MINUS (LET substrate = Y IN << 12345)
| |

URI Standard | - SLPG to review proposed updates to SNOMED CT URI Standard
- In particular, 2.9 URIs for Language Syntaxes and 2.10 URIs for Language Instances.
- Suggestions on 2.7 Comparing URIs for Equality of Reference would also be appreciated
| |

Query Language | Outstanding questions about relationship filters - Consider issues and potential resolutions. Questions needing resolution include:
**Do we need inferred relationship filters?**- Answer: Tentative Yes
**If yes, then what are some good use cases?**- Answer: QA - Find me all the source concepts of a relationship added in an extension module
- Answer: QA - Find me all the source concepts of a relationship added at a particular effective time
**ACTION**(Daniel) - To investigate QA example use cases based on RVF
**How should no brackets be interpreted?**- What does this mean? "< 404684003 |Clinical finding| {{ C.definitionStatusId = 900000000000074008 |Primitive|}}"
- 1a)
**(**__404684003 |Clinical finding|__{{ C.definitionStatusId = 900000000000074008 |Primitive|}}**)** - 1b) <
**(**__404684003 |Clinical finding| {{ C.definitionStatusId = 900000000000074008____|Primitive|}}__**)** - Answer: 1a -
**AGREED**
- 1a)
- What does this mean? "< 404684003 |Clinical finding| : 363698007 |Finding site| = << 80891009 |Heart structure| {{ C.definitionStatusId = 900000000000074008 |Primitive|}}"
- 2a)
**(**<__404684003 |Clinical finding| : 363698007 |Finding site| = << 80891009 |Heart structure|__{{ C.definitionStatusId = 900000000000074008 |Primitive|}}**)** - 2b) < 404684003 |Clinical finding| : 363698007 |Finding site| =
**(****(**__<< 80891009 |Heart structure|__{{ C.definitionStatusId = 900000000000074008 |Primitive|}} )**)** - 2c) < 404684003 |Clinical finding| : 363698007 |Finding site| = <<
{{ C.definitionStatusId = 900000000000074008 |Primitive|}} )**((****)** - Answer: 2a -
**AGREED**
- 2a)
- What does this mean? "< 404684003 |Clinical finding| {{ C.definitionStatusId = 900000000000074008 |Primitive|}}"
**If we do support relationship filters, then where should they go and how should they be bracketed?**- Directly after the attribute - for example:
- 1a) < 404684003 |Clinical finding| : 363698007 |Finding site| {{ R.moduleId = 32506021000036107 |AU extension|}} = << 80891009 |Heart structure|
- or
- 1b) < 404684003 |Clinical finding| :
**(**__363698007 |Finding site|____{{ R.moduleId = 32506021000036107 |AU extension|____}}__**)**
- 1a) < 404684003 |Clinical finding| : 363698007 |Finding site| {{ R.moduleId = 32506021000036107 |AU extension|}} = << 80891009 |Heart structure|
- Directly after the refinement (with brackets) - for example:
- 2a) < 404684003 |Clinical finding| : (
__( 363698007 |Finding site| = << 80891009 |Heart structure____|__{{ R.moduleId = 32506021000036107 |AU extension|}})**)** - or
- 2b) < 404684003 |Clinical finding| :
__( 363698007 |Finding site| = << 80891009 |Heart structure____| {{ R.moduleId = 32506021000036107 |AU extension|____}}__**)**
- 2a) < 404684003 |Clinical finding| : (
- Directly after the =/!= , for example:
- 3a) < 404684003 |Clinical finding| :
__363698007 |Finding site| = {{ R.moduleId = 32506021000036107 |AU extension|}} << 80891009 |Heart structure____|__
- 3a) < 404684003 |Clinical finding| :
- Directly after the constraint operator (Interpretation - there exists a relationship in the chain) - for example:
- 3a) < {{ R.moduleId = 32506021000036107 |AU extension|}} 404684003 |Clinical finding|
- After the concept being constrained - for example:
- 4a) < 404684003 |Clinical finding| {{ R.moduleId = 32506021000036107 |AU extension|}}
- or
- 4b)
**(**__< 404684003 |Clinical finding____|__**)**{{ R.moduleId = 32506021000036107 |AU extension|}}
- Answer(s): ? 2b and 4a (Note: 1b is more consistent with dotted notation)
**What exactly do relationship filters mean?**- < 404684003 |Clinical finding| {{ R.moduleId = 32506021000036107 |AU extension|}}
*There exists*|is a| relationship, that connects the given descendant to |Clinical finding|, meets the given filter criteria**at least one**|is a| relationships, that connect the given descendant to |Clinical finding|, meet the given filter criteria*All*
- < 404684003 |Clinical finding| {{ R.moduleId = 32506021000036107 |AU extension|}}
**How****d**o we indicate the execution order for relationship filters?- Dotted notation - For example "ANY . << 246090004 |Associated finding| . 363698007 |Finding site|"
- Only returns those concepts that result from using a |Finding site| relationship in the AU core (
**Note**: return the destinationConcept of these relationships)- 1a) ANY . << 246090004 |Associated finding| . 363698007 |Finding site| {{ R.moduleId != 'AU Core' }}
- or
- 1b) ANY . << 246090004 |Associated finding| .
**(**__363698007 |Finding site|____{{ R.moduleId != 'AU Core' }}__**)** - Answer: ? 1b
- Only returns those concepts that result from using an |Associated finding| relationship (or type of |associated finding| relationship) in the AU core (
**Note**: return the destinationConcept of these relationships)- 2a) ANY . << 246090004 |Associated finding| {{ R.moduleId != 'AU Core' }}. 363698007 |Finding site|
- or
- 2b) ANY .
**(**__<<____246090004 |Associated finding____|__**)**{{ R.moduleId != 'AU Core' }}. 363698007 |Finding site| - or
- 2c) ANY .
**(**__<<____246090004 |Associated finding|____{{ R.moduleId != 'AU Core' }}__**)**. 363698007 |Finding site| - Answer: ? 2c
- 2a) ANY . << 246090004 |Associated finding| {{ R.moduleId != 'AU Core' }}. 363698007 |Finding site|
- Only returns those concepts that result from using a |Finding site| relationship in the AU core (
- Cardinality
- Exactly one matching relationship in the AU core (but may be other matching relationships in other modules)
- 1a) < 404684003 |Clinical finding| : [1..1]
**(**__63698007____|Finding site| = << 80891009 |Heart structure____|____}}__**)** - or
- 1b) < 404684003 |Clinical finding| : [1..1]
**(**__63698007____|Finding site| = << 80891009 |Heart structure____|__**)**{{ R.moduleId = 32506021000036107 |AU extension|}} - Answer: ? 1a
- 1a) < 404684003 |Clinical finding| : [1..1]
- Exactly one matching relationship, and this relationship is in the AU core
- 2a) < 404684003 |Clinical finding| :
**(**__[1..1] 63698007 |Finding site| = << 80891009 |Heart structure____|____}}__**)** - or
- 2b) < 404684003 |Clinical finding| :
**(**__[1..1] 63698007 |Finding site| = << 80891009 |Heart structure____|__{{ R.moduleId = 32506021000036107 |AU extension|}}**)** - Answer: ? 2a
- 2a) < 404684003 |Clinical finding| :
- Exactly one matching relationship in the AU core (but may be other matching relationships in other modules)
- Dotted notation - For example "ANY . << 246090004 |Associated finding| . 363698007 |Finding site|"
**Which keyword filters must be qualified with a component/refset type? (e.g. "C", "D", "R", "M")**- For example, do we qualify "languageRefSetId", "preferredTerm", "fullySpecifiedName", "acceptableTerm"?
**What options do we provide for constraining terms, preferred terms, fully specified names, acceptable terms and/or selecting language refsets?**- See slide deck
| |

Confirm next meeting date/time | Next meeting to be held at 20:00 UTC on |