Version 7 (modified by markw, 7 years ago)

--

Day 1: SADI Web Services

We are beginning to publish a set of best practices for service providers by codifying the lessons we've learned in the last year of service-building.

For example, say we have a service ' getKEGGParalogsByGene', which will provide the KEGG ID of the paralogs of any input KEGG gene id.

The input class (click on the link above to see the full service description) is defined by a third-party ontology, and is simply "any KEGG Record":

<a:inputParameter>
  <a:parameter rdf:about="illuminae.comgetKEGGParalogsByGeneddd">
    <a:hasParameterNameText>
       input
    </a:hasParameterNameText>
    <a:objectType rdf:resource="http://purl.oclc.org/SADI/LSRN/KEGG_Record"/>
  </a:parameter>
</a:inputParameter>

The output class is 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://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 class (in this case, a KEGG_Record)
  1. our output class includes a restriction indicating that the service returns KEGG_Records related to the input by the 'isParalogOf' predicate (i.e.: KEGG_Records that are paralogs of the input KEGG_Record). The owl:valuesFrom property on the restriction allows us to do reasoning about how to chain services together. It is important that we put this restriction here instead of in the owl definition of the predicate itself, since it allows us to constrain OUR use of the predicate, without constraining its range for anyone else!

The SADI Taverna plugin has been updated to use the information in these restrictions for service discovery.