W3C logo
slanted W3C logo

Multi-stakeholder Perspectives on Translational Medicine


Resources: <SWObjects sparql binary> and <sample queries>
(contains <goProt.map> <goProt.rq>. <goProt2.map> <goProt2.rq> <goProt2-bug.rq>.)

Eric Prud'hommeaux, Sanitation Engineer. Helena Deus, Life Sciences Geek.
Last modified: $Date: 2011/02/23 16:18:33 $
Creative Commons License This work is licensed under a Creative Commons Attribution 3.0 License, with attribution to W3C.

Valid XHTML + RDFa

Agenda:

who is w3?

who is HCLS?

six task forces:

Other Projects: Clinical Decision Support...

HCLS Mission

We develop RDF tools, data and practices to help academia/industry use RDF.

Health Care Landscape:

Hospital data:

[unrendered SVG image of HL7 data in a relational database]

Indivo

Easy for us to extend schemas and feed back to project.

Easy for TMO's medical vocabs to become normative.

Nascent convergence of needs:

RDF's Fortés

Effects:

Decentralized Extensibility

Decentralized Extensibility

Extensibility Example: Blood Pressure

@prefix edns: <http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix galen: <http://www.co-ode.org/ontologies/galen#> .
@prefix snomed: <http://termhost.example/SNOMED/> .

<encounter7> edns:patient <patient3> ;
             edns:screeningBP <s20090714c> .
<patient3>   r:type galen:Patient ;
             foaf:family_name "Levin" ;
             foaf:firstName "Henry" .
<s20090714c> dc:date "2009-07-14T18:23"^^xsd:dateTime ;
             edns:systolic "132"^^edns:mmHg ;
             edns:diastolic "86"^^edns:mmHg .
             

Extensibility Example: Blood Pressure

@prefix edns: <http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix galen: <http://www.co-ode.org/ontologies/galen#> .
@prefix snomed: <http://termhost.example/SNOMED/> .

<encounter7> edns:patient <patient3> ;
             edns:screeningBP <s20090714c> .
<patient3>   r:type galen:Patient ;
             foaf:family_name "Levin" ;
             foaf:firstName "Henry" .
<s20090714c> dc:date "2009-07-14T18:23"^^xsd:dateTime ;
             edns:systolic "132"^^edns:mmHg ;
             edns:diastolic "86"^^edns:mmHg ;
             edns:posture snomed:_163035008 . # SNOMED:sitting

Emergency Room Blood Pressure Query

PREFIX edns: <http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX galen: <http://www.co-ode.org/ontologies/galen#>
PREFIX snomed: <http://termhost.example/SNOMED/>

SELECT ?date ?systolic ?diastolic WHERE {

?encounter edns:patient     ?patient ;
           edns:screeningBP ?screenBP .
?patient   foaf:family_name "Levin" ;
           foaf:firstName   "Henry" .
?screenBP  dc:date          ?date ;
           edns:systolic    ?systolic ;
           edns:diastolic   ?diastolic ;
} ORDER DESC BY ?date

Clinical Study Blood Pressure Query

PREFIX edns: <http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX galen: <http://www.co-ode.org/ontologies/galen#>
PREFIX snomed: <http://termhost.example/SNOMED/>

SELECT ?date ?systolic ?diastolic WHERE {

?encounter edns:patient     ?patient ;
           edns:screeningBP ?screenBP .
?patient   foaf:family_name "Levin" ;
           foaf:firstName   "Henry" .
?screenBP  dc:date          ?date ;
           edns:systolic    ?systolic ;
           edns:diastolic   ?diastolic ;
           edns:posture ?posture . 
FILTER (?posture = snomed:_163035008 || ?posture = snomed:_163035009)
} ORDER DESC BY ?date

Clinical Study Blood Pressure Query

PREFIX edns: <http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX galen: <http://www.co-ode.org/ontologies/galen#>
PREFIX snomed: <http://termhost.example/SNOMED/>

SELECT ?date ?systolic ?diastolic ?posture WHERE {

?encounter edns:patient     ?patient ;
           edns:screeningBP ?screenBP .
?patient   foaf:family_name "Levin" ;
           foaf:firstName   "Henry" .
?screenBP  dc:date          ?date ;
           edns:systolic    ?systolic ;
           edns:diastolic   ?diastolic .
  OPTIONAL {
    ?screenBP  edns:posture ?posture .
  }
} ORDER DESC BY ?date

Many simple domains ...

... in one universe.

Global continuity

Collaborative workspace

Heterogeneous access to

Continuity of data ...

... enables mashups to become queries.

SERVICE <http://uu3.org:8888/7tm_receptors>
  {
    ?iuphar  iface:family      ?family .
    ?iuphar  iface:code	       ?code .
    ?iuphar  iface:iupharName  ?iupharNm .
    ?human   iface:iuphar      ?iuphar .
    ?human   iface:geneName    "GABBR1" .
    ?human   iface:entrezGene  ?humanEntrez .
  }
SERVICE <http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&should-sponge=&>

  {
     _:gene  dbp:entrezgene    ?humanEntrez ;
             rdfs:label        ?label ;
    FILTER (lang(?label) = "en")
  }
GRAPH <http://hcls.deri.org/atag/data/gabab_example.html>
  {
     ?topic  rdfs:label        ?label .
     ?post   sioc:topic        ?topic
  }

Translational Medicine Ontology

HCLS TMO, who needs what?

Category User / Role Interest
Research Biologist (in vivo, in vitro, cellular & molecular) Target identification, assay development, target validation
Bioinformatician Biological knowledge management, cellular modeling
Immunologist Natural defense mechanisms
Cheminformatician Predictive chemistry
Medicinal chemist Drug efficacy
Systems physiologist Tolerance, adverse events
Clinic Clinical trial specialist Trial formulation, recruitment
Clinical decision support Data Analysis, trend finding
Primary care physician General, conventional care
Specialty medical provider Specialized treatments
Business Sales & marketing Revenue generation
Strategic/portfolio manager Assessing market opportunities
Project manager Prioritizing resources & activities
Health plan provider Insurance coverage

AD patients without the APOE4 allele?

SELECT DISTINCT ?name ?patient
WHERE {
 graph <pchr_new> {
  ?patient 
   foaf:name ?name;
   trans:hasCondition [ trans:diagnosedWith trans:alzheimers_disease ] .
   FILTER ( 
    !bif:exists
     (( 
       SELECT ?result
       WHERE {
        ?encounter 
        trans:patient ?patient ;
        trans:test [ a ?testname ;  trans:result ?result ] .
        ?result
         trans:feature trans:variant_APOE4 ;
         trans:present true . 
       }      ))     )  } }

results

Linked Open Drug Data

drug knowledge

  @prefix : <http://rdf.farmbio.uu.se/chembl/onto/#> .
  act:a108377 :onAssay ass:a50464 . ass:a50464 :hasTarget p:t53 . p:t53 :hasKeyword "Isomerase" .
  act:a108377 :extractedFrom rsc:r6368 . rsc:r6368 bibo:pmid	pubmed:15125947 .
  act:a108377 :forMolecule mol:m258506 . mol:m258506 bo:smiles "COC(=O)[C@@H]1C[C@@H](CN1)NCc2n[nH]c3cccc(OCc4ccc(cc4)C(C)(C)C)c23" .
  act:a108377 :standardUnits "ug mL-1" .

Exploits LOD:

LODD Resources

RDF Channeling Existing Data

XML data

<?xml version="1.0"?>
<ClinicalDocument transformation="hl7-rim-to-pomr.xslt">
  <recordTarget>
    <patientRole>
      <patientPatient>
	<name>
	  <given>Henry</given>
	  <family>Levin</family>
	</name>
	<administrativeGenderCode code="M"/>
	<birthTime value="19320924"/>
      </patientPatient>
    </patientRole>
  </recordTarget>
  <component>
    <StructuredBody>
      <Observation>
	<code displayName="Cuff blood pressure"/>
	<effectiveTime value="200004071430"/>
	<targetSiteCode displayName="Left arm"/>
	<entryRelationship typeCode="COMP">
	  <Observation>
	    <effectiveTime value="200004071530"/>
	    <value value="132" unit="mm[Hg]"/>
	  </Observation>
	</entryRelationship>
      </Observation>
      <Observation>
	<code displayName="Cuff blood pressure"/>
	<effectiveTime value="200004071530"/>
	<targetSiteCode displayName="Left arm"/>
	<entryRelationship typeCode="COMP">
	  <Observation>
	    <code displayName="Systolic BP"/>
	    <effectiveTime value="200004071530"/>
	    <value value="135" unit="mm[Hg]"/>
	  </Observation>
	</entryRelationship>
	<entryRelationship typeCode="COMP">
	  <Observation>
	    <code displayName="Diastolic BP"/>
	    <effectiveTime value="200004071530"/>
	    <value value="88" unit="mm[Hg]"/>
	  </Observation>
	</entryRelationship>
      </Observation>
    </StructuredBody>
  </component>
</ClinicalDocument>

Mapped to RDF

[unrendered SVG image of HL7 data in RDF]

RDF representation of XML

Relational data (e.g. EPIC, I2B2) …

[unrendered SVG image of HL7 data in a relational database]

… as a graph.

[unrendered SVG image of HL7 data in RDF]

Using Existing Data(bases)

[unrendered SVG image of HL7 data in RDF]

[unrendered SVG image of HL7 data in RDF]

Using Existing Data(bases)

[unrendered SVG image of HL7 data in RDF]

[unrendered SVG image of HL7 data in RDF]

Using Existing Data(bases)

[unrendered SVG image of HL7 data in RDF]

[unrendered SVG image of HL7 data in RDF]

Using Existing Data(bases)

[unrendered SVG image of HL7 data in RDF]

[unrendered SVG image of HL7 data in RDF]

Using Existing Data(bases)

[unrendered SVG image of HL7 data in RDF]

[unrendered SVG image of HL7 data in RDF]

Using Existing Data(bases)

[unrendered SVG image of HL7 data in RDF]

[unrendered SVG image of HL7 data in RDF]

Relational Mappings

D2R

<d2r:ClassMap
   d2r:type="eb:Customer"
   d2r:sql="SELECT Tab_K_Kunde.KundenNr, Tab_K_Kunde.FullName,
        Tab_K_Kunde.Anrede, Tab_K_Kunde_Kreditkarte.CCNo
        FROM Tab_K_Kunde_Kreditkarte INNER JOIN Tab_K_Kunde ON
        Tab_K_Kunde_Kreditkarte.KundenNr = Tab_K_Kunde.KundenNr;"
   d2r:groupBy="Tab_K_Kunde.KundenNr"
   d2r:uriPattern=
       “http://example.org/customers#@@Tab_K_Kunde.KundenNr@@“>

Re-uses OWL constructs:

<d2r:ObjectPropertyBridge d2r:property="rdf:type"
   d2r:pattern="iswc:@@Persons.Position@@"/>

Configuration consumable as RDF (SPARQL-able).

Relational Views (DDL)

create iri class prd:product_iri using
  function OPLWEB.DBA.PRODUCT_URI (in id varchar)
    returns varchar,
  function OPLWEB.DBA.PRODUCT_URI_INVERSE (in id_iri varchar)
    returns varchar .

Uses hardened algorithms from SQL land.

RDF Views

   PREFIX :mydb <http://cityhospital.example/dbs>
CONSTRUCT { ?o a               study:SubjectObservation .
            ?o study:subject   ?p .
            ?o study:clinician ?d .
            ?d :foaf:name ?dName }

    WHERE { ?o mydb:patient ?p .
            ?o mydb:doctor  ?d .
            ?d mydb:name    ?dName }

Intuitive (testable) semantics.

RDB2RDF Status

Inference/"Validation"

(a,b,c) set enumeration

union

disjunction

algebraics

 

intersection

complement

restriction

cardinality

equivalence

courtesy: Fabien Gandon

Summary

SWObjects Tutorial?

Acknowledgements

Questions?