Version 3 (modified by markw, 7 years ago)

--

Day 1: SADI Web Services

Today we achieved several goals. First, we drew some conclusions about how the OWL ontologies should look for our Output classes in order to maximize our ability to discover and chain-services together through reasoning.

For example, say we have a service 'getKEGGParalogsByGene', which will provide the KEGG ID of the paralogs of any input KEGG gene id. The output class would be defined as in the ontology below:

<rdf:RDF 
 xml:base="http://sadiframework.org/ontologies/service_objects.owl#" 
 xmlns:service="http://sadiframework.org/ontologies/service_objects.owl#" 
 xmlns:owl="http://www.w3.org/2002/07/owl#" 
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
 xmlns:misc="http://sadiframework.org/ontologies/miscellaneousObjects.owl#" 
 xmlns="http://sadiframework.org/ontologies/service_objects.owl#">

<!-- Ontology Information -->
<owl:Ontology rdf:about="">
  <owl:imports>
    <owl:Ontology rdf:about="http://sadiframework.org/ontologies/service_objects.owl#"/>
  </owl:imports>
  <owl:imports>
     <owl:Ontology rdf:about="http://protege.stanford.edu/plugins/owl/dc/protege-dc.owl"/>
  </owl:imports>
  <owl:imports>
    <owl:Ontology rdf:about="http://purl.oclc.org/SADI/LSRN"/>
  </owl:imports>
</owl:Ontology>

<owl:SymmetricProperty rdf:about="http://sadiframework.org/ontologies/service_objects.owl#isParalogOf"/>

<owl:Class rdf:about="http://sadiframework.org/ontologies/service_objects.owl#getKEGGParalogsByGene_Output">
   <rdfs:subClassOf rdf:resource="http://purl.oclc.org/SADI/LSRN/KEGG_Record"/>
   <rdfs:subClassOf>
      <owl:Restriction>
          <owl:onProperty rdf:resource="http://sadiframework.org/ontologies/service_objects.owl#isParalogOf"/>
          <owl:someValuesFrom rdf:resource="http://purl.oclc.org/SADI/LSRN/KEGG_Record"/>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>

</rdf:RDF>

The important things to note are:

  1. We are explicitly importing any ontology we refer to
  1. our output class is a subclass of the input data-type (in this case, a KEGG_Record id)
  1. out output class also includes a restriction that it promises to give you 'isParalogOf' predicates attached to additional KEGG_Record entities. explicitly restricting the values that you will outputis important, since it allows us to do reasoning about how to chain services together. It is important that we put this restriction here, since it allows us to constrain OUR use of that predicate, without constraining the range of that predicate for anyone else!