
W3C Semantic Web in Health Care and Life Sciences.
This work is licensed under a
Creative Commons Attribution 3.0 License,
with attribution to W3C.
W3C Semantic Web Health Care and Life Sciences Interest Group.
90+ members from industry and academia.
a couple KBs (order 400 triples)
papers
Workshops
Ontology mapping code.
Other Projects: Clinical Decision Support...
A Knowledgebase for Neuroscience
Built by Neurocommons and the HCLS BioRDF task force.
Precise answers to complex questions:
What proteins are associated with pyramidal neurons
AND are involved in signal transduction.
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 }
PREFIX db: <…>
SELECT ?o ?d
WHERE {
?o db:onPatient <Bob> .
?o db:byDoctor ?d .
}
PREFIX db: <…> SELECT observations... doctors... FROM observations, patients ON id=observations.patient ... WHERE patients.name = "Bob" }
Importing terms into Semantic Web.
Requires data from bench to bedside.
Class(a:MGHcharlstStPatient partial a:MGHpatient)
Class(a:MGHcharlstStPatient complete
restriction(a:physician
allValuesFrom(unionOf(a:MGHcharlesStOncologist a:MGHcharlesStOptician))))_:MCSO rdfs:subClassOf :MGHpatient . _:MCSO rdfs:subClassOf _:physType . _:physType owl:onProperty :physician . _:physType owl:allValuesFrom _:list1 . _:list1 rdf:first :MGHcharlesStOncologist . _:list1 rdf:rest _:list2 . _:list2 rdf:first :MGHcharlesStOptician . _:list2 rdf:rest rdf:nil . _:MCSO owl:equivalentClass :MGHcharlstStPatient .
<encounter7> edns:patient <patient3> . <patient3> r:type galen:Patient ; foaf:family_name "Levin" ; foaf:firstName "Henry" .
<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 .
@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 .
@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
<rdf:RDF xmlns:edns="http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#" xmlns:foaf: "http://xmlns.com/foaf/0.1/" . xmlns:galen: "http://www.co-ode.org/ontologies/galen#" . xmlns:snomed: "http://termhost.example/SNOMED/"> <rdf:Description rdf:about="encounter7"> <edns:patient rdf:resource="patient3"/> <edns:screeningBP>s20090714c</edns:screeningBP> </rdf:Description> <galen:Patient rdf:about="patient3" foaf:family_name="Levin" foaf:firstName="Henry"> <rdf:Description rdf:about="s20090714c"> <dc:date xsi:dt="http://www.w3.org/2001/XMLSchemadateTime">2009-07-14T18:23</dc:date> <edns:systolic xsi:dt="http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#mmHg">132</edns:systolic> <edns:diastolic xsi:dt="http://www.loa-cnr.it/ontologies/ExtendedDnS.owl#mmHg">86</edns:systolic> <edns:posture rdf:resource="http://termhost.example/SNOMED/_163035008</edns:posture> <!-- SNOMED:sitting --> </rdf:Description>
InChI is a textual identifier for chemical substances. Consider inchi.html:
<table> <tr> <th>Familiar name</th><th>InChI</th> </tr><tr> <td>Methane</td> <td about="http://example.org/methane" property="chem:inchi" xmlns:chem="http://www.blueobelisk.org/chemistryblogs/"> InChI=1/CH4/h1H4 </td> ...
This RDFa encodes the single RDF triple:
<http://example.org/methane> chem:inchi "InChI=1/CH4/h1H4" .
| attribute | specifies | attribute | specifies | |
|---|---|---|---|---|
| @about | subjects | @property | predicate relating subject to literal content | |
| @href | objects, clickable | @rel | predicate relating subject to resources (@href, @src) | |
| @src | objects, embedded | @rev | predicate relating resources to subject in reverse | |
| @resource | objects, not clickable | @content | Object of triple (instead of element content) | |
| @instanceof | RDF types | @datatype | literal values' data types |
For more, see the RDFa primer or the RDFa specification.
See inchi.html.
<?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>
<xsl:template match="rim:ClinicalDocument[rim:recordTarget/ rim:patientRole/rim:patientPatient]"> <cpr:patient-record> <xsl:apply-templates select="rim:effectiveTime"/> <xsl:apply-templates select="rim:recordTarget/ rim:patientRole/rim:patientPatient"/> <xsl:for-each select="rim:author/ rim:assignedAuthor/rim:assignedPerson"> <foaf:maker> <foaf:Person> <xsl:apply-templates select="rim:name"/> </foaf:Person> </foaf:maker> </xsl:for-each> <xsl:apply-templates select="rim:component"/> </cpr:patient-record> </xsl:template> <xsl:template match="rim:name/rim:family"> <foaf:family_name><xsl:value-of select="."/></foaf:family_name> </xsl:template> <xsl:template match="rim:name/rim:given"> <foaf:firstName><xsl:value-of select="."/></foaf:firstName> </xsl:template> <xsl:template match="rim:patientPatient"> <edns:about> <galen:Patient> <xsl:apply-templates select="rim:name"/> </galen:Patient> </edns:about> </xsl:template>
<xsl:template match="rim:ClinicalDocument[rim:recordTarget/ rim:patientRole/rim:patientPatient]"> <cpr:patient-record> <xsl:apply-templates select="rim:effectiveTime"/> <xsl:apply-templates select="rim:recordTarget/ rim:patientRole/rim:patientPatient"/> <xsl:for-each select="rim:author/ rim:assignedAuthor/rim:assignedPerson"> <foaf:maker> <foaf:Person> <xsl:apply-templates select="rim:name"/> </foaf:Person> </foaf:maker> </xsl:for-each> <xsl:apply-templates select="rim:component"/> </cpr:patient-record> </xsl:template>
<xsl:template match="rim:name/rim:family"> <foaf:family_name><xsl:value-of select="."/></foaf:family_name> </xsl:template> <xsl:template match="rim:name/rim:given"> <foaf:firstName><xsl:value-of select="."/></foaf:firstName> </xsl:template> <xsl:template match="rim:patientPatient"> <edns:about> <galen:Patient> <xsl:apply-templates select="rim:name"/> </galen:Patient> </edns:about> </xsl:template>
<xsl:template match="rim:ClinicalDocument[rim:recordTarget/ rim:patientRole/rim:patientPatient]"> <cpr:patient-record> <xsl:apply-templates select="rim:effectiveTime"/> <xsl:apply-templates select="rim:recordTarget/ rim:patientRole/rim:patientPatient"/> <xsl:for-each select="rim:author/ rim:assignedAuthor/rim:assignedPerson"> <foaf:maker> <foaf:Person> <xsl:apply-templates select="rim:name"/> </foaf:Person> </foaf:maker> </xsl:for-each> <xsl:apply-templates select="rim:component"/> </cpr:patient-record> </xsl:template>
<xsl:template match="rim:name/rim:family"> <foaf:family_name><xsl:value-of select="."/></foaf:family_name> </xsl:template> <xsl:template match="rim:name/rim:given"> <foaf:firstName><xsl:value-of select="."/></foaf:firstName> </xsl:template>
<xsl:template match="rim:patientPatient"> <edns:about> <galen:Patient> <xsl:apply-templates select="rim:name"/> </galen:Patient> </edns:about> </xsl:template>
<xsl:template match="rim:ClinicalDocument[rim:recordTarget/ rim:patientRole/rim:patientPatient]"> <cpr:patient-record> <xsl:apply-templates select="rim:effectiveTime"/> <xsl:apply-templates select="rim:recordTarget/ rim:patientRole/rim:patientPatient"/> <xsl:for-each select="rim:author/ rim:assignedAuthor/rim:assignedPerson"> <foaf:maker> <foaf:Person> <xsl:apply-templates select="rim:name"/> </foaf:Person> </foaf:maker> </xsl:for-each> <xsl:apply-templates select="rim:component"/> </cpr:patient-record> </xsl:template> <xsl:template match="rim:name/rim:family"> <foaf:family_name><xsl:value-of select="."/></foaf:family_name> </xsl:template> <xsl:template match="rim:name/rim:given"> <foaf:firstName><xsl:value-of select="."/></foaf:firstName> </xsl:template>
<xsl:template match="rim:patientPatient"> <edns:about> <galen:Patient> <xsl:apply-templates select="rim:name"/> </galen:Patient> </edns:about> </xsl:template>
XSLT courtesy of Chimezie Ogbuji
GRDDL can extract RDF from both XML and (X)HTML.
<Observation>
<effectiveTime value="20090403T12:34+0400">
<title>Clinical Study 8B1a: Patient BP</title>
<value value=86 unites="mm[Hg]"/>
</effectiveTime>
</Observation>
<html> <head profile="http://www.w3.org/2003/g/data-view"> <title>Clinical Study 8B1a: Patient BP</title> <link rel="transformation" href="bp-html-to-pomr.xslt" /> </head> ...
Content publisher provides XML or XHTML document that does one of:
SPARQL lets us query different RDF graphs in a single query. Consider movie reviews:
GRAPH <http://example.org/reviews/rogerebert> {
ex:atonement rev:hasReview ?review .
?review rev:rating ?rating .
}
GRAPH <http://example.org/reviews/rogerebert> {
?movie rev:hasReview ?rev1 .
?rev1 rev:rating ?ebert .
}
GRAPH <http://example.org/reviews/me> {
?movie rev:hasReview ?rev2 .
?rev2 rev:rating ?me .
}
GRAPH ?reviewer_graph {
?review rev:rating 10 .
}
3 types of queries:
SELECT and ASK results can be returned as XML or JSON. CONSTRUCT and DESCRIBE results can be returned via any RDF serialization (e.g. RDF/XML or Turtle).
The SPARQL Protocol is a simple method for asking and answering SPARQL queries over HTTP. A SPARQL URL is built from three parts:
http://example.org/sparql?named-graph-uri=http%3A%2F%2Fexample.orgm%2F reviews%2Febert&query=SELECT+%3Freview_graph+WHERE+%7B%0D%0A++GRAPH+%3Frev iew_graph+%7B%0D%0A+++++%3Freview+rev%3Arating+10+.%0D%0A++%7D%0D%0A%7D
We want your help
join per <http://www.w3.org/2001/sw/hcls/#Participation>.
