Code Monkey home page Code Monkey logo

fhir-rdf-playground's Introduction

FHIRCat - Enabling the Semantics of FHIR and Terminologies for Clinical and Translational Research

Specific Aims

The objective of this project is to design, develop and evaluate a novel informatics platform known as FHIRCat that leverages Semantic Web and Linked Data technologies, FHIR models/profiles, and ontologies for effective standards-based data integration and distributed analytics, enabling high-quality reproducible clinical and translational research. Our specific aims are:

  • Aim 1: Develop FHIR ShEx/RDF specification and tools for FHIR data validation.
  • Aim 2: Standardize and deploy the RDF-based data transformation between external models and FHIR.
  • Aim 3: Build and evaluate a FHIR ontology-based data access (OBDA) system interoperable with clinical data repositories across institutions in partnership with the CTSA National Center for Data to Health (CD2H).

This work is supported by funding from NIH BD2K (U01 HG009450) and FHIRCat (R56 EB028101, R01 EB030529).

For more information, contact Guoqian Jiang [email protected] and Emily Pfaff [email protected].

Publications/Presentations

Title Type Location
Developing an ETL tool for converting the PCORnet CDM into the OMOP CDM to facilitate the COVID-19 data integration Publication J Biomed Inform. 2022 Jan 22;127:104002.doi: 10.1016/j.jbi.2022.104002.
Consistency Check of the FHIR W5 Classification System in FHIR Modeling: Towards Improved Semantic Representation of FHIR RDF Podium Abstract AMIA 2022 Informatics Summit Oral Presentations
Implementing a New FHIR RDF Specification for Semantic Clinical Data Using a JSON-LD-based Approach Publication SWAT4HCLS, 2022
FHIR RDF Data Transformation and Validation Framework and Clinical Knowledge Graphs: Towards Explainable AI in Healthcare Tutorial SWAT4HCLS, 2022
Building Clinical Knowledge Graphs in FHIR RDF for Explainable AI Applications in Healthcare Poster PSB 2022
Development of a FHIR RDF data transformation and validation framework and its evaluation Publication J Biomed Inform. 2021 May;117:103755. doi: 10.1016/j.jbi.2021.103755. Epub 2021 Mar 26.
Exploring JSON-LD as an Executable Definition of FHIR RDF to Enable Semantics of FHIR Data Publication AMIA Annu Symp Proc. 2021 Jan 25;2020:1140-1149.eCollection 2020.

fhir-rdf-playground's People

Contributors

andersoncardoso avatar azaroth42 avatar bigbluehat avatar bollwyvl avatar dankawka avatar davidlehn avatar dbooth-boston avatar dijonkitchen avatar dlongley avatar gaurav avatar gkellogg avatar harlantwood avatar ivikash avatar jameschump avatar jasnell avatar jgmize avatar jmandel avatar lanthaler avatar msporny avatar niklasl avatar nrbgt avatar ogrisel avatar pjohnston-wiley avatar rdkrzysztofj avatar rubensworks avatar scor avatar stain avatar tallted avatar tingletech avatar tmarkovski avatar

Watchers

 avatar

fhir-rdf-playground's Issues

id:"Base" not present in 4.0.1

Base is the (a?) top-level abstract StructureDefinition from which all Resources are derived. There's a declaration for it in 4.6, but not in 4.0.

for d in FHIR-definitions-{4.0.1,4.6.0-2da64a0}; do
    for p in profiles-{resources,types}.json; do
        jq --arg FILE $d/$p '
          .entry[].resource |
          select(.id=="base" or .id=="Base") |
          [$FILE, .id, .resourceType] |
          join(" -- ")
        ' $d/$p ;
    done ;
done
"FHIR-definitions-4.0.1/profiles-resources.json -- base -- CapabilityStatement"
"FHIR-definitions-4.6.0-2da64a0/profiles-resources.json -- base -- CapabilityStatement"
"FHIR-definitions-4.6.0-2da64a0/profiles-types.json -- Base -- StructureDefinition"

Note that base(all lower case) is a CapabilityStatement, not a StructureDefinition.

rdf:Collection of value set constraint b0rked

Works with max card of 1 (i.e. not an rdf:Collection), e.g. Observation.status:

Name Flags Card. Type Description & Constraints
Observation N   DomainResource Measurements and simple assertions
... status ?!Σ 1..1 code registered | preliminary | final | amended +
ObservationStatus (Required)
... category 0..* CodeableConcept Classification of type of observation
Observation Category Codes (Preferred)

ShEx-ified as:

  { "type": "Shape",
    "id": "http://hl7.org/fhir/shape/Observation",
    "closed": true,
    "expression": {
      "type": "EachOf",
      "expressions": [
        { "type": "TripleConstraint",
          "predicate": "http://hl7.org/fhir/status",
          "valueExpr": {
            "type": "ShapeAnd",
            "shapeExprs": [
              "http://hl7.org/fhir/shape/code", # conforms to code shape
              { "type": "Shape",
                "expression": {
                  "type": "TripleConstraint",   # and code's value is in observation-status
                  "predicate": "http://hl7.org/fhir/value",
                  "valueExpr": "http://hl7.org/fhir/ValueSet/observation-status"
              } }
            ]
        } },
        { "type": "TripleConstraint",
          "predicate": "http://hl7.org/fhir/category",
          "min": 0, "max": -1, # Collection of CodeableConcepts with no value set
          "valueExpr": "http://hl7.org/fhir/shape/OneOrMore_CodeableConcept",
        }
      ]
  } },
  { "type": "Shape", # formulaic Collection shape typed for CodeableConcepts.
    "id": "http://hl7.org/fhir/shape/OneOrMore_CodeableConcept",
    "closed": true,
    "expression": {
      "type": "EachOf",
      "expressions": [
        { "type": "TripleConstraint",
          "predicate": "http://www.w3.org/1999/02/22-rdf-syntax-ns#first",
          "valueExpr": "http://hl7.org/fhir/shape/CodeableConcept"
        },
        { "type": "TripleConstraint",
          "predicate": "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest",
          "valueExpr": {
            "type": "ShapeOr",
            "shapeExprs": [
              { "type": "NodeConstraint",
                "values": [ "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil" ]
              },
              "http://hl7.org/fhir/shape/OneOrMore_CodeableConcept"
            ]
        } }
      ]
  } }

(Note that 0..* is expressed as a an optional property with a value of a non-empty list. I don't know if "category" [] is allowed in JSON-land or its analog in XML-land.)

CodeSystem.filter.operator has both a value constraint and a max card > 0:

Name Flags Card. Type Description & Constraints
CodeSystem N   CanonicalResource Declares the existence of and describes a code system or code system supplement
... filter Σ 0..* BackboneElement Filter that can be used in a value set
.... operator Σ 1..* code = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists
FilterOperator (Required)
  { "type": "Shape",
    "id": "http://hl7.org/fhir/shape/CodeSystem.filter",
    "closed": true,
    "expression": {
      "type": "EachOf",
      "expressions": [
        { "type": "TripleConstraint",
          "predicate": "http://hl7.org/fhir/extension", "min": 0, "max": -1,
          "valueExpr": "http://hl7.org/fhir/shape/OneOrMore_Extension"
        },
        
        { "type": "TripleConstraint",
          "predicate": "http://hl7.org/fhir/operator", "min": 1, "max": -1,
          "valueExpr": {
            "type": "ShapeAnd",
            "shapeExprs": [
              "http://hl7.org/fhir/shape/OneOrMore_code", # Bug: constrains Collection structure, not contained rdf:firsts
              { "type": "Shape",
                "expression": {
                  "type": "TripleConstraint",
                  "predicate": "http://hl7.org/fhir/value",
                  "valueExpr": "http://hl7.org/fhir/ValueSet/filter-operator"
              } }
            ]
        } },
        
      ]
  } }

Two files collide on case-insensitive filesystems

The following two files collide on case-insensitive filesystems (such as the default macOS filesystem):

  • fhirlib/test/fhir/medreq-min-RDVch-expected.shexj
  • fhirlib/test/fhir/medreq-min-rDVch-expected.shexj

You can see this if you clone this repository on macOS, when GitHub gives the following error:

warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

  'fhirlib/test/fhir/medreq-min-RDVch-expected.shexj'
  'fhirlib/test/fhir/medreq-min-rDVch-expected.shexj'

Could we please rename one of these files to avoid this collision?

Do we add multiple types to a Coding shape?

When uncurrying value type from predicates, we need to add a type to any datatype they may reference.

<Obs1> :Observation.effectivePeriod [ :start "2022-02-02T02:22:22Z"^^xsd:dateTime ]

=>

<Obs> :Observation.effective [ a fhir:Period ; :start "2022-02-02T02:22:22Z"^^xsd:dateTime ]

Codings already need a type arc 'cause we add one for OWL logic:

<Obs1> :Observation.code (
  [ a sct:1234567 ; :system "...snomed..." ; :code "1234567" ]
) .

Do we add multiple types to a Coding shape?

<#Coding> {
  a [fhir:Coding] ? ; # might have type fhir:Coding
  a IRI ? ;           # might have some other type derived form system and code
  fhir:system . ? ;
  fhir:code .
}

performAction executed multiple times

Actions like keystrokes in the editor window apparently call ‘performAction‘ 4 or 5 times. I'm guessing this is related to the number of occult editors in the app.

I created a branch to instrument the playground to trace the source.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.