slanted W3C logo
Cover page images (keys)

fhir-rdf

HCLS/COI - ITS/RDF call
25 Novenber, 2014

What it is

goals:

<./> a AllergyIntolerance:AllergyIntolerance;
      AllergyIntolerance:text [
         a AllergyIntolerance:Narrative;
         Narrative:status "generated"^^fhir:code;
         Narrative:div [
            a fhir:xhtml;
            fhir:text """<div>Sensitivity to Bee Stings</div>Sensitivity to Bee Stings""";
         ]
      ];
      AllergyIntolerance:criticality "fatal"^^fhir:code;
      AllergyIntolerance:sensitivityType "allergy"^^fhir:code;
      AllergyIntolerance:recordedDate [
         a fhir:dateTime;
         fhir:value "2012-09-17";
      ];
      AllergyIntolerance:status "confirmed"^^fhir:code;
      AllergyIntolerance:subject <Patient/example>;
      AllergyIntolerance:recorder <Practitioner/example>;
      AllergyIntolerance:substance <Substance/example>;
      AllergyIntolerance:reaction <AdverseReaction/example>;
      AllergyIntolerance:sensitivityTest <Observation/example> .

Generation

Tied to the machine-readable FHIR spec:

FHIR/XML to FHIR/RDF:

You can view it with a generic XSLT tool
http://www.w3.org/2005/08/online_xslt/

Fill out the form like:

URI for xsl resource https://raw.github.com/jmandel/fhir-rdf/master/generic/transform.xsl
URI for xml resource http://www.hl7.org/implement/standards/fhir/patient-example.xml (or an alergy example or anything FHIR example resource (use raw XML))

or just view the (Turtle) results

Round trip

The obvious goal is to round trip XML.

Shape Expressions?

see an example invocation (Look for a "View GenX output" to view results).

O-RIM to FHIR/RDF:

Schema:
<Player-target> {
  a (rim:Person) 
          %GenR{ Patient = s .
          %GenR       Patient <a> fhir:Patient %},
  rim:Entity.name {
    a (dt:COLL_EN)
          %GenR{ Name = bnode("name") .
          %GenR       Patient fhir:name Name %},
    dt:COLL.item {
      err:person-name-family LITERAL
          %GenR{ Name fhir:family o %},
      err:person-name-given LITERAL
          %GenR{ Name fhir:given o %}
    }
  },
  rim:LivingSubject.administrativeGenderCode {
    hl7:coding {
      dt:CDCoding.codeSystem ("2.16.840.1.113883.5.1")
          %GenR{ GenderCoding fhir:system o %},
      dt:CDCoding.code ("M" "F")
          %GenR{ GenderCoding fhir:code o %}
    }     %GenR{ GenderCoding = bnode("genderCoding") .
          %GenR       Gender fhir:coding GenderCoding %}
  }       %GenR{ Gender = bnode("gender") .
                 Patient fhir:gender Gender %}
}
Instance:
_:ClinicalDoc_recordTarget0_player a rim:Person ;
    rim:Entity.name [ a dt:COLL_EN ;
        dt:COLL.item [ err:person-name-family "Jones" ;
                       err:person-name-given "Isabella" ] ;
    ] ;
    rim:LivingSubject.administrativeGenderCode [
        hl7:coding [ dt:CDCoding.code "F" ; dt:CDCoding.codeSystem "2.16.840.1.113883.5.1" ;
                     dt:CDCoding.displayName "Female" ; dt:CDCoding.codeSystemName "HL7 AdministrativeGender" ]
    ] .
Result:
_:ClinicalDoc_recordTarget0_player <a> <http://hl7/org/fhir/Patient>.
_:ClinicalDoc_recordTarget0_player <http://hl7/org/fhir/name> _:"name".
_:"name" <http://hl7/org/fhir/family> "Jones".
_:"name" <http://hl7/org/fhir/given> "Isabella".
_:ClinicalDoc_recordTarget0_player <http://hl7/org/fhir/gender> _:"gender".
_:"gender" <http://hl7/org/fhir/coding> _:"genderCoding".
_:"genderCoding" <http://hl7/org/fhir/system> "2.16.840.1.113883.5.1".
_:"genderCoding" <http://hl7/org/fhir/code> "F".

see ShEx demo example using example of O-RIM generated from C-CDA.

contrast with ontology-y FHIR

Tony created concepts like Allergy to bee sting.

Can be derived by class restriction from fhir:Allergy with a particular code and code system, e.g. IRIs coding.

Issue how much of a meaningful e.g. CDS ontology can be projected onto the FHIR which is created by direct translation?