Page tree

Date & Time

20:00 UTC Wednesday 9th November 2016 

GoToMeeting Details

Click here to see GoToMeeting joining information

Goals

  • To discuss Compositional Grammar document migration and feedback
  • To report on progress with Expression Constraint Language v1.1
  • To discuss outcomes of SNOMED URI discussions in Wellington
  • To progress SNOMED Template Syntax

Agenda and Meeting Notes

Description
Owner
Notes

Welcome, introductions and apologies

 
Agenda reviewReview agenda for today's meeting
Compositional Grammar
  • Document migration to http://snomed.org/scg
  • Feedback
    • numericValue = decimalValue / integerValue
      integerValue = (["-"/"+"] digitNonZero *digit ) / zero 
      decimalValue = integerValue "." 1*digit
    • How to represent -0.5
  • Solution A (which allows "+0" and "-0.00")
    • numericValue = ["-"/"+"] (decimalValue / integerValue)
      integerValue = (digitNonZero *digit ) / zero
      decimalValue = integerValue "." 1*digit

  • Solution B (which does not allow "+0" and "-0.00"

    • numericValue = decimalValue / integerValue
      integerValue = (["-"/"+"] digitNonZero *digit ) / zero
      decimalValue = (integerValue "." 1*digit) / (("-"/"+") zero "." *zero digitNonZero *digit)

  • Outcome - The group decided to go with Solution A
  • Requires parser update (http://apg.ihtsdotools.org) and github update (parser)
Expression Constraint Language v1.1
URI Standard

URIs for SNOMED syntaxes

URIs for SNOMED syntax instances

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"?
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 |Method312251004 |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 (findi
        ng)| 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 |Method312251004 |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 |Method312251004 |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/timeNext meeting to be held at 20:00 UTC on Wednesday 7th December

Meeting Files

No files shared here yet.

  • No labels

2 Comments

  1. 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.


    1. 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?