SlideShare a Scribd company logo
SHARE & the Semantic
        Web
    This Time it’s Personal!




                                     http://
                               sadiframework.org
SADI
Semantic Automated Discovery & Integration




            (Semantic Web Services)
A SADI service…

 … is identified by a URI
     also an HTTP URL




  http://sadiframework.org/examples/hello
A SADI service…

 … responds to GET with service description
         RDF document describing the service URI
         conforms to Feta (BioMoby, myGrid)

 <rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:mygrid="http://www.mygrid.org.uk/mygrid-moby-service#">
  <mygrid:serviceDescription rdf:about="http://sadiframework.org/examples/hello">
   <mygrid:hasServiceNameText rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Hello</mygrid:hasServiceNameText>
   <mygrid:hasServiceDescriptionText>A simple "Hello</mygrid:hasServiceDescriptionText>
   <mygrid:hasOperation>
     <mygrid:operation rdf:about="http://sadiframework.org/examples/hello#operation">
      <mygrid:outputParameter>
       <mygrid:parameter rdf:about="http://sadiframework.org/examples/hello#output">
        <mygrid:objectType rdf:resource="http://sadiframework.org/examples/hello.owl#GreetedIndividual"/>
       </mygrid:parameter>
A SADI service…

 … responds to POST with service output
          RDF in, RDF out


 <hello:NamedIndividual rdf:about="http://sadiframework.org/examples/hello-input.rdf#1">
   <foaf:name>Guy Incognito</foaf:name>
 </hello:NamedIndividual>




                               <hello:GreetedIndividual rdf:about="http://sadiframework.org/examples/hello-input.rdf#1">
                                 <hello:greeting>Hello, Guy Incognito!</hello:greeting>
                               </hello:GreetedIndividual>
A SADI service…
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:mygrid="http://www.mygrid.org.uk/mygrid-moby-service#">
 <mygrid:serviceDescription rdf:about="http://sadiframework.org/examples/hello">
  <mygrid:hasServiceNameText rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Hello</mygrid:hasServiceNameText>
  <mygrid:hasServiceDescriptionText>A simple "Hello</mygrid:hasServiceDescriptionText>
  <mygrid:hasOperation>
    <mygrid:operation rdf:about="http://sadiframework.org/examples/hello#operation">
     <mygrid:inputParameter>
       <mygrid:parameter rdf:about="http://sadiframework.org/examples/hello#input">
 http://sadiframework.org/examples/hello.owl#NamedIndividual
        <mygrid:objectType rdf:resource="http://sadiframework.org/examples/hello.owl#NamedIndividual"/>
       </mygrid:parameter>
     </mygrid:inputParameter>
     <mygrid:outputParameter>

 http://sadiframework.org/examples/hello.owl#GreetedIndividual
       <mygrid:parameter rdf:about="http://sadiframework.org/examples/hello#output">
        <mygrid:objectType rdf:resource="http://sadiframework.org/examples/hello.owl#GreetedIndividual"/>
       </mygrid:parameter>
     </mygrid:outputParameter>
    </mygrid:operation>
  </mygrid:hasOperation>
 </mygrid:serviceDescription>
</rdf:RDF>
A SADI service…

 … has an input OWL class
         describes the RDF it consumes
         property restrictions characterize the data it needs


 <owl:Class rdf:ID="NamedIndividual">
   <owl:equivalentClass>
      <owl:Restriction>

                          http://xmlns.com/foaf/0.1/name
        <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/name"/>
        <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</owl:minCardinality>
      </owl:Restriction>
   </owl:equivalentClass>
 </owl:Class>
A SADI service…

 … has an output OWL class
         describes the RDF it produces
         property restrictions characterize the data it provides


 <owl:Class rdf:ID="GreetedIndividual">
   <owl:equivalentClass>
      <owl:Restriction>

         http://sadiframework.org/examples/hello.owl#greeting
        <owl:onProperty rdf:resource="#greeting"/>
        <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</owl:minCardinality>
      </owl:Restriction>
   </owl:equivalentClass>
 </owl:Class>
SHARE & the Semantic Web — This Time it's Personal
<rdf:RDF
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:regress="http://sadiframework.org/examples/regression.owl#">
               <regress:PairedValueCollection rdf:about="http://sadiframework.org/examples/input1">
                 <regress:element>
                  <regress:PairedValue>
                    <regress:x rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</regress:x>
                    <regress:y rdf:datatype="http://www.w3.org/2001/XMLSchema#int">2</regress:y>
                  </regress:PairedValue>
                 </regress:element>
                 <regress:element>
                   <regress:PairedValue>
                    <regress:x rdf:datatype="http://www.w3.org/2001/XMLSchema#int">3</regress:x>
                    <regress:y rdf:datatype="http://www.w3.org/2001/XMLSchema#int">5</regress:y>
                  </regress:PairedValue>
                 </regress:element>
               </regress:PairedValueCollection>
  </rdf:RDF>




                                                       #1
                                                                                                                                                                                                      Service
                                                                                                           <rdf:RDF
                                                                                                               xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                                                                                                               xmlns:regress="http://sadiframework.org/examples/regression.owl#">
                                                                                                             <regress:OutputClass rdf:about="http://sadiframework.org/examples/input1">
                                                                                                               <regress:hasRegressionModel>
                                                                                                                <regress:LinearRegressionModel>
                                                                                                                                                    #1
                                                                                                                  <regress:intercept rdf:datatype="http://www.w3.org/2001/XMLSchema#double">0.5</regress:intercept>
                                                                                                                  <regress:slope rdf:datatype="http://www.w3.org/2001/XMLSchema#double">1.5</regress:slope>
                                                                                                                 </regress:LinearRegressionModel>
                                                                                                               </regress:hasRegressionModel>
                                                                                                             </regress:OutputClass>
                                                                                                           </rdf:RDF>



Client



                                                                                                                                                                                                                      #

                                                                                                      #1
OWL classes in SADI…

 … are local to individual services
     one service’s world-view can conflict with another,
      but a client can use both
     not dogmatically; some types are shared
      (e.g. database records)

 … use global properties
     maximize interoperability
     represent community agreement
Input OWL classes in SADI…

 … are dynamically assignable
    property restrictions are sufficient for membership
    another way to discover services:
     what can I get with what I have now?
There’s nothing to
        it.
SHARE
Semantic Health And Research Environment
• SPARQL engine
 •   triple patterns are matched against service descriptions
 •   knowledge base is dynamically populated
 •   queries can contain OWL classes,
      which are expanded to the required triple patterns
 •   query is optimized to minimize the number of service calls
      and the amount of data sent over the network
PREFIX sadi: <http://sadiframework.org/ontologies/predicates.owl#>
PREFIX dumontier: <http://ontology.dumontierlab.com/>
PREFIX kegg: <http://lsrn.org/KEGG_PATHWAY:>
SELECT ?gene ?protein ?seq
WHERE {

   kegg:hsa00232 dumontier:hasParticipant ?gene .

   ?gene sadi:encodes ?protein .

   ?protein sadi:hasSequence ?seq
}                                                                    Service




                                                     Service



           Service
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
SELECT ?patient ?bmi
FROM <http://biordf.net/cardioSHARE/patients.rdf>
WHERE {
   ?patient rdf:type patients:AtRiskPatient .
   ?patient bmi:BMI ?bmi
}
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                                        PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                                        PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                                        SELECT ?patient ?bmi
                                        FROM <http://biordf.net/cardioSHARE/patients.rdf>
                                        WHERE {
                                        
   ?patient rdf:type patients:AtRiskPatient .
                                        
   ?patient bmi:BMI ?bmi
                                        }




1. initialize an empty knowledge base
   backed by an OWL reasoner

2. load URLs in FROM clauses
    http://biordf.net/cardioSHARE/patients.rdf
        <rdf:Description rdf:ID="patient6">
         <mged:has_height>
          <mged:Measurement>
           <mged:has_units rdf:resource="&mged;m"/>
           <mged:has_value>1.8034</mged:has_value>
          </mged:Measurement>
         </mged:has_height>
         <mged:has_mass>
          <mged:Measurement>
           <mged:has_units rdf:resource="&mged;kg"/>
           <mged:has_value>73.9355563</mged:has_value>
          </mged:Measurement>
         </mged:has_mass>
         <rdfs:label>patient #6</rdfs:label>
         <rdfs:comment>I am not a number, I am a free man!</rdfs:comment>
        </rdf:Description>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                          PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                          PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                          SELECT ?patient ?bmi
                          FROM <http://biordf.net/cardioSHARE/patients.rdf>
                          WHERE {
                          
   ?patient rdf:type patients:AtRiskPatient .
                          
   ?patient bmi:BMI ?bmi
                          }




3. select next triple pattern
    ?patient rdf:type patients:AtRiskPatient


4. process pattern
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                                       PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                                       PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                                       SELECT ?patient ?bmi
                                       FROM <http://biordf.net/cardioSHARE/patients.rdf>
                                       WHERE {
                                       
   ?patient rdf:type patients:AtRiskPatient .
                                       
   ?patient bmi:BMI ?bmi .
                                       }   ?patient bmi:BMI ?x
                                       }


5. decompose OWL class
   http://biordf.net/cardioSHARE/patients.owl#AtRiskPatient
   <owl:Class rdf:ID="AtRiskPatient">
    <rdfs:label>A patient at risk for some condition</rdfs:label>
    <owl:equivalentClass>
     <owl:Restriction>
      <owl:onProperty rdf:resource="&bmi;BMI"/>

         BMI some double[> 25]
      <owl:someValuesFrom>
       <rdfs:Datatype>
         <owl:onDatatype rdf:resource="&xsd;double"/>
         <owl:withRestrictions rdf:parseType="Collection">
          <rdf:Description>
            <xsd:minExclusive rdf:datatype="&xsd;double">25</xsd:minExclusive>
          </rdf:Description>
         </owl:withRestrictions>
       </rdfs:Datatype>
      </owl:someValuesFrom>
     </owl:Restriction>
    </owl:equivalentClass>
   </owl:Class>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                            PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                            PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                            SELECT ?patient ?bmi
                            FROM <http://biordf.net/cardioSHARE/patients.rdf>
                            WHERE {
                            
   ?patient rdf:type patients:AtRiskPatient .
                            
   ?patient bmi:BMI ?bmi .
                                ?patient bmi:BMI ?x
                            }




6. select next triple pattern
    ?patient bmi:BMI ?bmi


7. process pattern
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                             PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                             PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                             SELECT ?patient ?bmi
                             FROM <http://biordf.net/cardioSHARE/patients.rdf>
                             WHERE {
                             
   ?patient rdf:type patients:AtRiskPatient .
                             
   ?patient bmi:BMI ?bmi .
                                 ?patient bmi:BMI ?x
                             }




8. find services that attach the predicate
    bmi:BMI →
      http://sadiframework.org/examples/calculateBMI


9. find inputs to service
    use ?patient candidates
    no candidates; find instances of the service’s input class
      http://sadiframework.org/examples/bmi.owl#InputClass
    filter inputs previously sent to this service
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                           PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                           PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                           SELECT ?patient ?bmi
                           FROM <http://biordf.net/cardioSHARE/patients.rdf>
                           WHERE {
                           
   ?patient rdf:type patients:AtRiskPatient .
                           
   ?patient bmi:BMI ?bmi .
                               ?patient bmi:BMI ?x
                           }




10.invoke the service
   assemble minimal RDF that still satisfies the input class
   POST that RDF and add the response to the KB


11.update variable candidates
   use current triple pattern
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                          PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                          PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                          SELECT ?patient ?bmi
                          FROM <http://biordf.net/cardioSHARE/patients.rdf>
                          WHERE {
                          
   ?patient rdf:type patients:AtRiskPatient .
                          
   ?patient bmi:BMI ?bmi .
                              ?patient bmi:BMI ?x
                          }




12.select next triple pattern
    ?patient bmi:BMI ?x


13.process pattern
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                            PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                            PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                            SELECT ?patient ?bmi
                            FROM <http://biordf.net/cardioSHARE/patients.rdf>
                            WHERE {
                            
   ?patient rdf:type patients:AtRiskPatient .
                            
   ?patient bmi:BMI ?bmi .
                                ?patient bmi:BMI ?x
                            }




14.find services that attach the predicate
   bmi:BMI →
     http://sadiframework.org/examples/calculateBMI


15.find inputs to service
   use ?patient candidates
   filter inputs previously sent to this service
   nothing to do
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                         PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#>
                         PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#>
                         SELECT ?patient ?bmi
                         FROM <http://biordf.net/cardioSHARE/patients.rdf>
                         WHERE {
                         
   ?patient rdf:type patients:AtRiskPatient .
                         
   ?patient bmi:BMI ?bmi .
                             ?patient bmi:BMI ?x
                         }




16.select next triple pattern
    no more patterns


17.execute original SPARQL query
    using the populated knowledge base and a
     conventional SPARQL reasoner
OWL classes in SHARE queries…

 … are personal
     but defined in terms of common properties

 … are shared
     class URIs resolve to their definitions
     anyone can use your class with their data

 … are flexible
     disagree with a definition? try a new one!
OWL classes in SHARE queries…



 … are workflows
    describe the data that’s needed, not the services to call
      (though the service chain can be reconstructed)

 … are hypotheses?
    “what is” → “what might be”
Acknowledgements
            This research is supported by The Heart + Stroke Foundation of BC and Yukon, Microsoft Research,
The Canadian Institutes of Health Research, The Natural Sciences and Engineering Research Council of Canada and CANARIE.

More Related Content

PDF
SPARQL Assist Language-Neutral Query Composer
PPTX
jstl ( jsp standard tag library )
ODP
Solid and Infrastructure as Code
PDF
10 jdbc
KEY
Linked services
PDF
Model-Driven Software Development - Strategies for Design & Implementation of...
PDF
Jersey and JAX-RS
KEY
Open Standards for the Semantic Web: XML / RDF(S) / OWL / SOAP
SPARQL Assist Language-Neutral Query Composer
jstl ( jsp standard tag library )
Solid and Infrastructure as Code
10 jdbc
Linked services
Model-Driven Software Development - Strategies for Design & Implementation of...
Jersey and JAX-RS
Open Standards for the Semantic Web: XML / RDF(S) / OWL / SOAP

Similar to SHARE & the Semantic Web — This Time it's Personal (20)

PPTX
Evaluating Hypotheses using SPARQL-DL as an abstract workflow language to cho...
PDF
A practical introduction to SADI semantic Web services and HYDRA query tool
PPTX
Tutorial - Creating SADI semantic-web-services
PPTX
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
PPT
Semantic SOA Governance
PDF
Bio it 2005_rdf_workshop05
PPTX
Research - this time it's personal
PPTX
C:\fakepath\bioit world2010
PPTX
SADI SWSIP '09 'cause you can't always GET what you want!
PDF
Semantic Technologies and Triplestores for Business Intelligence
PDF
RESTful writable APIs for the web of Linked Data using relational storage sol...
PDF
Querying Mediated Web Services
PDF
Scientific Social Objects
PDF
SpagoBI and Big Data: next Open Source Information Management suite, OW2con'1...
 
PPTX
Sparql
PPT
Using Semantic Web Technologies to Facilitate XBRL-based Financial Data Compa...
PPTX
Hadoop & Greenplum: Why Do Such a Thing?
PPTX
Using Semantics to personalize medical research
KEY
Linked data: spreading data over the web
Evaluating Hypotheses using SPARQL-DL as an abstract workflow language to cho...
A practical introduction to SADI semantic Web services and HYDRA query tool
Tutorial - Creating SADI semantic-web-services
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
Semantic SOA Governance
Bio it 2005_rdf_workshop05
Research - this time it's personal
C:\fakepath\bioit world2010
SADI SWSIP '09 'cause you can't always GET what you want!
Semantic Technologies and Triplestores for Business Intelligence
RESTful writable APIs for the web of Linked Data using relational storage sol...
Querying Mediated Web Services
Scientific Social Objects
SpagoBI and Big Data: next Open Source Information Management suite, OW2con'1...
 
Sparql
Using Semantic Web Technologies to Facilitate XBRL-based Financial Data Compa...
Hadoop & Greenplum: Why Do Such a Thing?
Using Semantics to personalize medical research
Linked data: spreading data over the web
Ad

Recently uploaded (20)

PDF
Approach and Philosophy of On baking technology
PPTX
Big Data Technologies - Introduction.pptx
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Machine learning based COVID-19 study performance prediction
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
A Presentation on Artificial Intelligence
PDF
KodekX | Application Modernization Development
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Cloud computing and distributed systems.
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Empathic Computing: Creating Shared Understanding
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
Approach and Philosophy of On baking technology
Big Data Technologies - Introduction.pptx
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
20250228 LYD VKU AI Blended-Learning.pptx
Machine learning based COVID-19 study performance prediction
MYSQL Presentation for SQL database connectivity
Spectral efficient network and resource selection model in 5G networks
A Presentation on Artificial Intelligence
KodekX | Application Modernization Development
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Cloud computing and distributed systems.
CIFDAQ's Market Insight: SEC Turns Pro Crypto
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Unlocking AI with Model Context Protocol (MCP)
Per capita expenditure prediction using model stacking based on satellite ima...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Empathic Computing: Creating Shared Understanding
Building Integrated photovoltaic BIPV_UPV.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Ad

SHARE & the Semantic Web — This Time it's Personal

  • 1. SHARE & the Semantic Web This Time it’s Personal! http:// sadiframework.org
  • 2. SADI Semantic Automated Discovery & Integration (Semantic Web Services)
  • 3. A SADI service… … is identified by a URI also an HTTP URL http://sadiframework.org/examples/hello
  • 4. A SADI service… … responds to GET with service description RDF document describing the service URI conforms to Feta (BioMoby, myGrid) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:mygrid="http://www.mygrid.org.uk/mygrid-moby-service#"> <mygrid:serviceDescription rdf:about="http://sadiframework.org/examples/hello"> <mygrid:hasServiceNameText rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Hello</mygrid:hasServiceNameText> <mygrid:hasServiceDescriptionText>A simple "Hello</mygrid:hasServiceDescriptionText> <mygrid:hasOperation> <mygrid:operation rdf:about="http://sadiframework.org/examples/hello#operation"> <mygrid:outputParameter> <mygrid:parameter rdf:about="http://sadiframework.org/examples/hello#output"> <mygrid:objectType rdf:resource="http://sadiframework.org/examples/hello.owl#GreetedIndividual"/> </mygrid:parameter>
  • 5. A SADI service… … responds to POST with service output RDF in, RDF out <hello:NamedIndividual rdf:about="http://sadiframework.org/examples/hello-input.rdf#1"> <foaf:name>Guy Incognito</foaf:name> </hello:NamedIndividual> <hello:GreetedIndividual rdf:about="http://sadiframework.org/examples/hello-input.rdf#1"> <hello:greeting>Hello, Guy Incognito!</hello:greeting> </hello:GreetedIndividual>
  • 6. A SADI service… <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:mygrid="http://www.mygrid.org.uk/mygrid-moby-service#"> <mygrid:serviceDescription rdf:about="http://sadiframework.org/examples/hello"> <mygrid:hasServiceNameText rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Hello</mygrid:hasServiceNameText> <mygrid:hasServiceDescriptionText>A simple "Hello</mygrid:hasServiceDescriptionText> <mygrid:hasOperation> <mygrid:operation rdf:about="http://sadiframework.org/examples/hello#operation"> <mygrid:inputParameter> <mygrid:parameter rdf:about="http://sadiframework.org/examples/hello#input"> http://sadiframework.org/examples/hello.owl#NamedIndividual <mygrid:objectType rdf:resource="http://sadiframework.org/examples/hello.owl#NamedIndividual"/> </mygrid:parameter> </mygrid:inputParameter> <mygrid:outputParameter> http://sadiframework.org/examples/hello.owl#GreetedIndividual <mygrid:parameter rdf:about="http://sadiframework.org/examples/hello#output"> <mygrid:objectType rdf:resource="http://sadiframework.org/examples/hello.owl#GreetedIndividual"/> </mygrid:parameter> </mygrid:outputParameter> </mygrid:operation> </mygrid:hasOperation> </mygrid:serviceDescription> </rdf:RDF>
  • 7. A SADI service… … has an input OWL class describes the RDF it consumes property restrictions characterize the data it needs <owl:Class rdf:ID="NamedIndividual"> <owl:equivalentClass> <owl:Restriction> http://xmlns.com/foaf/0.1/name <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/name"/> <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</owl:minCardinality> </owl:Restriction> </owl:equivalentClass> </owl:Class>
  • 8. A SADI service… … has an output OWL class describes the RDF it produces property restrictions characterize the data it provides <owl:Class rdf:ID="GreetedIndividual"> <owl:equivalentClass> <owl:Restriction> http://sadiframework.org/examples/hello.owl#greeting <owl:onProperty rdf:resource="#greeting"/> <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</owl:minCardinality> </owl:Restriction> </owl:equivalentClass> </owl:Class>
  • 10. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:regress="http://sadiframework.org/examples/regression.owl#"> <regress:PairedValueCollection rdf:about="http://sadiframework.org/examples/input1"> <regress:element> <regress:PairedValue> <regress:x rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</regress:x> <regress:y rdf:datatype="http://www.w3.org/2001/XMLSchema#int">2</regress:y> </regress:PairedValue> </regress:element> <regress:element> <regress:PairedValue> <regress:x rdf:datatype="http://www.w3.org/2001/XMLSchema#int">3</regress:x> <regress:y rdf:datatype="http://www.w3.org/2001/XMLSchema#int">5</regress:y> </regress:PairedValue> </regress:element> </regress:PairedValueCollection> </rdf:RDF> #1 Service <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:regress="http://sadiframework.org/examples/regression.owl#"> <regress:OutputClass rdf:about="http://sadiframework.org/examples/input1"> <regress:hasRegressionModel> <regress:LinearRegressionModel> #1 <regress:intercept rdf:datatype="http://www.w3.org/2001/XMLSchema#double">0.5</regress:intercept> <regress:slope rdf:datatype="http://www.w3.org/2001/XMLSchema#double">1.5</regress:slope> </regress:LinearRegressionModel> </regress:hasRegressionModel> </regress:OutputClass> </rdf:RDF> Client # #1
  • 11. OWL classes in SADI… … are local to individual services one service’s world-view can conflict with another, but a client can use both not dogmatically; some types are shared (e.g. database records) … use global properties maximize interoperability represent community agreement
  • 12. Input OWL classes in SADI… … are dynamically assignable property restrictions are sufficient for membership another way to discover services: what can I get with what I have now?
  • 14. SHARE Semantic Health And Research Environment
  • 15. • SPARQL engine • triple patterns are matched against service descriptions • knowledge base is dynamically populated • queries can contain OWL classes, which are expanded to the required triple patterns • query is optimized to minimize the number of service calls and the amount of data sent over the network
  • 16. PREFIX sadi: <http://sadiframework.org/ontologies/predicates.owl#> PREFIX dumontier: <http://ontology.dumontierlab.com/> PREFIX kegg: <http://lsrn.org/KEGG_PATHWAY:> SELECT ?gene ?protein ?seq WHERE { kegg:hsa00232 dumontier:hasParticipant ?gene . ?gene sadi:encodes ?protein . ?protein sadi:hasSequence ?seq } Service Service Service
  • 17. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi }
  • 18. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi } 1. initialize an empty knowledge base backed by an OWL reasoner 2. load URLs in FROM clauses http://biordf.net/cardioSHARE/patients.rdf <rdf:Description rdf:ID="patient6"> <mged:has_height> <mged:Measurement> <mged:has_units rdf:resource="&mged;m"/> <mged:has_value>1.8034</mged:has_value> </mged:Measurement> </mged:has_height> <mged:has_mass> <mged:Measurement> <mged:has_units rdf:resource="&mged;kg"/> <mged:has_value>73.9355563</mged:has_value> </mged:Measurement> </mged:has_mass> <rdfs:label>patient #6</rdfs:label> <rdfs:comment>I am not a number, I am a free man!</rdfs:comment> </rdf:Description>
  • 19. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi } 3. select next triple pattern ?patient rdf:type patients:AtRiskPatient 4. process pattern
  • 20. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . } ?patient bmi:BMI ?x } 5. decompose OWL class http://biordf.net/cardioSHARE/patients.owl#AtRiskPatient <owl:Class rdf:ID="AtRiskPatient"> <rdfs:label>A patient at risk for some condition</rdfs:label> <owl:equivalentClass> <owl:Restriction> <owl:onProperty rdf:resource="&bmi;BMI"/> BMI some double[> 25] <owl:someValuesFrom> <rdfs:Datatype> <owl:onDatatype rdf:resource="&xsd;double"/> <owl:withRestrictions rdf:parseType="Collection"> <rdf:Description> <xsd:minExclusive rdf:datatype="&xsd;double">25</xsd:minExclusive> </rdf:Description> </owl:withRestrictions> </rdfs:Datatype> </owl:someValuesFrom> </owl:Restriction> </owl:equivalentClass> </owl:Class>
  • 21. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . ?patient bmi:BMI ?x } 6. select next triple pattern ?patient bmi:BMI ?bmi 7. process pattern
  • 22. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . ?patient bmi:BMI ?x } 8. find services that attach the predicate bmi:BMI → http://sadiframework.org/examples/calculateBMI 9. find inputs to service use ?patient candidates no candidates; find instances of the service’s input class http://sadiframework.org/examples/bmi.owl#InputClass filter inputs previously sent to this service
  • 23. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . ?patient bmi:BMI ?x } 10.invoke the service assemble minimal RDF that still satisfies the input class POST that RDF and add the response to the KB 11.update variable candidates use current triple pattern
  • 24. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . ?patient bmi:BMI ?x } 12.select next triple pattern ?patient bmi:BMI ?x 13.process pattern
  • 25. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . ?patient bmi:BMI ?x } 14.find services that attach the predicate bmi:BMI → http://sadiframework.org/examples/calculateBMI 15.find inputs to service use ?patient candidates filter inputs previously sent to this service nothing to do
  • 26. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX patients: <http://biordf.net/cardioSHARE/patients.owl#> PREFIX bmi: <http://sadiframework.org/examples/bmi.owl#> SELECT ?patient ?bmi FROM <http://biordf.net/cardioSHARE/patients.rdf> WHERE { ?patient rdf:type patients:AtRiskPatient . ?patient bmi:BMI ?bmi . ?patient bmi:BMI ?x } 16.select next triple pattern no more patterns 17.execute original SPARQL query using the populated knowledge base and a conventional SPARQL reasoner
  • 27. OWL classes in SHARE queries… … are personal but defined in terms of common properties … are shared class URIs resolve to their definitions anyone can use your class with their data … are flexible disagree with a definition? try a new one!
  • 28. OWL classes in SHARE queries… … are workflows describe the data that’s needed, not the services to call (though the service chain can be reconstructed) … are hypotheses? “what is” → “what might be”
  • 29. Acknowledgements This research is supported by The Heart + Stroke Foundation of BC and Yukon, Microsoft Research, The Canadian Institutes of Health Research, The Natural Sciences and Engineering Research Council of Canada and CANARIE.

Editor's Notes

  • #11: *make it obvious the input and output node are the same(with animation or label)*