Internet DRAFT - draft-bvandervalk-sadi

draft-bvandervalk-sadi






Submission by Individual                              B. Vandervalk, Ed.
Internet-Draft                                               E. McCarthy
Expires: August 3, 2012                                     M. Wilkinson
Intended status: Standards Track             James Hogg Research Centre,
                                              Institute for Heart + Lung
                                           Health, University of British
                                                                Columbia
                                                        January 31, 2012


           SADI: Semantic Automated Discovery and Integration
                       draft-bvandervalk-sadi-00

Abstract

   This document describes Semantic Automated Discovery and Integration
   (SADI), a set of best practices for implementing stateless web
   services that consume RDF data as input and generate RDF data as
   output.  The goal of SADI is to establish conventions that will
   enable a much higher level of interoperability between web services
   from independent providers than is currently possible under the
   widespread use of WSDL/XML and RESTful services.  Under SADI,
   interoperability depends on the shared use of predicate vocabularies,
   rather than the shared use of particular XML schemas, JSON
   structures, or ad hoc data formats.  Through the use of OWL to
   describe service input and output datatypes, SADI enables: i)
   automated discovery of services that provide data or computations of
   interest, and ii) automated matchmaking between local data and
   available services.  By iterative application of the former two
   capabilities, SADI enables semi-automated construction of arbitrarily
   complex workflows across independent service providers.

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on August 3, 2012.



Vandervalk, et al.       Expires August 3, 2012                 [Page 1]

Internet-Draft                    SADI                      January 2012


Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.





































Vandervalk, et al.       Expires August 3, 2012                 [Page 2]

Internet-Draft                    SADI                      January 2012


Table of Contents

   1.  Executive Summary  . . . . . . . . . . . . . . . . . . . . . .  4
   2.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Security Considerations  . . . . . . . . . . . . . . . . . . .  5
   4.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . .  5
   5.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  5
   6.  Motivation and Goals . . . . . . . . . . . . . . . . . . . . .  7
     6.1.  Motivation . . . . . . . . . . . . . . . . . . . . . . . .  7
     6.2.  Design Goals . . . . . . . . . . . . . . . . . . . . . . .  7
       6.2.1.  Interoperability with the Semantic Web . . . . . . . .  7
       6.2.2.  Stateless Services . . . . . . . . . . . . . . . . . .  8
       6.2.3.  Batch Processing of Inputs . . . . . . . . . . . . . .  8
       6.2.4.  Support for Long-running Services  . . . . . . . . . .  8
       6.2.5.  Explicit Relationship Between Service Input and
               Output . . . . . . . . . . . . . . . . . . . . . . . .  9
       6.2.6.  Minimal Constraints on Data Modeling . . . . . . . . .  9
   7.  Relationship to Other Web Service Standards  . . . . . . . . .  9
     7.1.  Web Services Description Language (WSDL) . . . . . . . . .  9
     7.2.  Semantic Annotations for WSDL (SAWSDL) . . . . . . . . . . 10
     7.3.  OWL-S and the Web Service Modeling Ontology (WSMO) . . . . 11
   8.  Running Example: The SADI "Hello, World!" Service  . . . . . . 11
   9.  Service Metadata . . . . . . . . . . . . . . . . . . . . . . . 13
     9.1.  Retrieving Service Metadata  . . . . . . . . . . . . . . . 14
     9.2.  Representing Service Metadata in RDF . . . . . . . . . . . 15
     9.3.  Describing Service Interfaces Using OWL  . . . . . . . . . 17
       9.3.1.  The Input OWL Class  . . . . . . . . . . . . . . . . . 17
       9.3.2.  The Output OWL Class . . . . . . . . . . . . . . . . . 21
     9.4.  Describing Service Execution Parameters Using OWL  . . . . 21
       9.4.1.  The Parameter OWL Class  . . . . . . . . . . . . . . . 22
       9.4.2.  The Default Parameter Instance . . . . . . . . . . . . 23
   10. Service Invocation . . . . . . . . . . . . . . . . . . . . . . 23
     10.1. Synchronous Services . . . . . . . . . . . . . . . . . . . 23
     10.2. Asynchronous Services  . . . . . . . . . . . . . . . . . . 25
     10.3. Invoking Services with Execution Parameters  . . . . . . . 28
   11. Service Registries . . . . . . . . . . . . . . . . . . . . . . 30
   12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 30
     12.1. Normative References . . . . . . . . . . . . . . . . . . . 30
     12.2. Informative References . . . . . . . . . . . . . . . . . . 31
   Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 31











Vandervalk, et al.       Expires August 3, 2012                 [Page 3]

Internet-Draft                    SADI                      January 2012


1.  Executive Summary

   SADI is a set of best practices for implementing stateless web
   services that natively consume RDF data as input and generate RDF
   data as output.  Its primary purpose is to increase the
   interoperability of services across independent providers.  Under
   SADI, the schemas for the input and output RDF data of a service are
   defined by the service's _input OWL class_ and _output OWL class_,
   respectively.  Provider-specified metadata about a service, including
   the URIs of the input and output OWL classes, is published as an RDF
   document that is retrievable by an HTTP GET on the service URL.
   Service invocation is accomplished by issuing an HTTP POST request to
   the service URL with an appropriate input RDF document as the request
   body.  The input RDF document contains one or more instances of the
   input OWL class which represent independent inputs to the service,
   and in response the service returns an output RDF document with a
   corresponding number of instances of the output OWL class.  Each
   output instance has the same root URI as its corresponding input
   instance, in order to ensure that the data consumed and generated by
   the service are explicitly linked.


2.  Introduction

   The principal benefit of web services is that they enable widespread
   and convenient reuse of software components, independent of the
   larger applications or goals being realized by the client software.
   However, in the current climate of WSDL/XML [WSDL][XML] and RESTful
   services [REST], the successful implementation of web service clients
   still depends on detailed human knowledge of the particular services
   being used.  For WSDL/XML services, software developers must be
   familiar with the particular XML schemas consumed and generated by a
   service and must implement transformations of local application data
   to and from those schemas as necessary.  Automatic code generators
   for WSDL clients assist in this task, but developers must still
   understand the structure of the input/output data and the meaning of
   the various components.  Likewise, developers of RESTful clients must
   be familiar with the semantics and permitted values of the named
   parameters for each service and must implement transformations on the
   service output data as necessary.  The requirement on software
   developers to learn and accomodate the particular interfaces and data
   schemas of each service has a high cost in terms of human labour.
   Moreover, variability in the design of schemas and interfaces creates
   obstacles for the coordinated use of web services across different
   providers.

   SADI addresses the variability of data representation through the use
   of Semantic Web standards, namely RDF [RDF] and OWL [OWL].  As these



Vandervalk, et al.       Expires August 3, 2012                 [Page 4]

Internet-Draft                    SADI                      January 2012


   standards have been specifically designed to facilitate integration
   and processing of data across multiple sites, they possess
   significant advantages over XML and ad hoc data formats for encoding
   web service input/output.  In particular, RDF enables automated
   merging of data sets and OWL enables automated logical reasoning over
   data.  Meaningful data integration always requires some level of
   agreement between providers regarding data representations.  However,
   under SADI, providers must only agree at the more granular level of
   predicate vocabularies, rather than on complete representations of
   datatypes.

   SADI addresses the variability of service interfaces by proposing
   conventions for retrieving metadata about services and for invoking
   services.  Briefly, metadata about a service is retrievable as an RDF
   document by issuing an HTTP GET to the service URL, while service
   invocation is realized by issuing an HTTP POST to the service URL
   with an input RDF document as the request body.  The response to a
   service invocation is likewise an RDF document.


3.  Security Considerations

   SADI services and clients are subject to the same security
   considerations as servers and clients that use the HTTP protocol, as
   described in Section 15 of [HTTP].


4.  IANA Considerations

   This document has no actions for IANA.


5.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].
   Readers of this document are expected to have a general familiarity
   with the HTTP protocol [HTTP], RDF [RDF], and OWL [OWL].  In
   addition, this document uses the following SADI-specific terminology:

   o  _input OWL class_ -- an OWL class that defines the required
      structure (i.e. schema) of a single input to a SADI service.  Each
      SADI service has exactly one input OWL class.

   o  _input instance_ -- an RDF node that is an instance of the input
      OWL class for a given SADI service, and thus is a valid input for
      that service.  In general, an RDF node is an instance of an OWL



Vandervalk, et al.       Expires August 3, 2012                 [Page 5]

Internet-Draft                    SADI                      January 2012


      class if it satifisies the property restrictions of the OWL class.
      Membership of an RDF node in a given OWL class can be determined
      using an OWL reasoner or can be directly asserted by assigning an
      rdf:type value that is equal to the OWL class URI.

   o  _input RDF document_ -- a document containing one or more input
      instances for a SADI service.  A SADI service is invoked by
      issuing an HTTP POST to the service URL with the input RDF
      document as the request body.

   o  _output OWL class_ -- an OWL class that defines the required
      structure (i.e. schema) of a single output from a SADI service.
      Each SADI service has exactly one output OWL class.

   o  _output instance_ -- an RDF node that is an instance of the output
      OWL class for a given SADI service, and thus is a valid output for
      that service.  In general, an RDF node is an instance of an OWL
      class if it satifisies the property restrictions of the OWL class.
      Membership of an RDF node in a given OWL class can be determined
      using an OWL reasoner or can be directly asserted by assigning an
      rdf:type value that is equal to the OWL class URI.

   o  _output RDF document_ -- the result of a SADI service invocation,
      which contains one or more output instances.  For a given service
      invocation, the number of output instances in the output RDF
      document should be equal to the number of input instances in the
      input RDF document.  Further, the URIs of corresponding input and
      output instances are always equal.

   o  _service execution parameter_ -- a value which is separate from
      the input instances for a service invocation, but affects how the
      input instances are processed.  For example, a "Hello, World!"
      service that returns a natural language greeting might have a
      service execution parameter indicating the desired output language
      for the greeting.

   o  _parameter OWL class_ -- an OWL class that defines the required
      structure (i.e. schema) of service execution parameters for a SADI
      service.  Similarly to input and output instances, service
      execution parameters may have arbitrarily complex representations
      in RDF.  The parameter OWL class describes a graph that contains
      _all_ service execution parameters.  If a service has multiple
      execution parameters, their RDF representations must be connected
      in a single RDF graph that is an instance of the parameter OWL
      class.

   o  _parameter instance_ -- an RDF node that is an instance of the
      parameter OWL class for a given SADI service, and thus is a valid



Vandervalk, et al.       Expires August 3, 2012                 [Page 6]

Internet-Draft                    SADI                      January 2012


      set of execution parameters for that service.  The input RDF
      document for a service invocation may contain at most one
      parameter instance, which affects the processing of all input
      instances within the input RDF document.

   o  _default parameter instance_ -- an instance of the parameter OWL
      class that represents the default values for all service execution
      parameters.  These values are used when an input RDF document does
      not explicitly specify values for execution parameters.


6.  Motivation and Goals

6.1.  Motivation

   The original motivation for the development of SADI was the
   complexity of discoverying, accessing, and integrating public data
   and software in the domain of bioinformatics.  While there are
   currently thousands of interrelated bioinformatics databases and
   software tools freely available on the web, they are published using
   a plethora of incompatible data models, schemas, and software
   interfaces that impedes their combined use.  The authors sought to
   develop a set of best practices for publishing data and software
   resources that would simultaneously offer the benefits of Semantic
   Web standards and technologies, such as the ability to automatically
   merge data sets and to automatically compute logical inferences from
   data.

   While the development of SADI has been motivated by bioinformatics,
   there is nothing that prevents its application to other domains.  It
   is applicable in any scenario where integrating data and/or software
   across multiple sites is required.

6.2.  Design Goals

6.2.1.  Interoperability with the Semantic Web

   One of the primary goals of SADI is to create web services that are
   compatible with the Semantic Web. In particular, it is desirable that
   services should be able to exchange data directly with various
   consumers and producers of RDF data such as triple stores, static RDF
   documents, OWL reasoners, and RDF browsers.  For this reason, SADI
   services consume a standard RDF document as input and generate a
   standard RDF document as output.

   Another key point of compatibility with the Semantic Web is the use
   of OWL to define the requirements for the input data, output data,
   and execution parameters of a service.  This permits the use of an



Vandervalk, et al.       Expires August 3, 2012                 [Page 7]

Internet-Draft                    SADI                      January 2012


   OWL reasoner as the main vehicle for data and service matchmaking
   tasks, such as:

   o  identifying services that can consume a subset of a given RDF
      graph as input

   o  extracting input instances for a service from a given RDF graph

   o  matching the output interface of one service to the input
      interface of another service, in order to create service execution
      chains (workflows)

   The intent of SADI is to facilitate the use of web services within
   Semantic Web applications.  For example, the authors have developed a
   prototype query engine called SHARE [SHARE] that integrates SADI
   services with a SPARQL query engine, a triple store, and an OWL
   reasoner in order to answer queries over the data that can be
   generated by a collection of SADI services.

6.2.2.  Stateless Services

   The scope of SADI is limited to stateless services so that services
   and clients can be implemented in a straightforward manner, at the
   expense of certain types of advanced applications.  The set of
   stateless services includes services that perform any type of data
   retrieval or data analysis, but excludes services that effect changes
   in the real world.  A common example of the latter type of service is
   a service that makes a withdrawal from a bank account.  Previous
   Semantic Web Service standards such as WSMO and OWL-S have been
   developed to model such stateful services.  However, the formal
   description of stateful services is complex, and the design of
   software agents to coordinate such services is an ongoing research
   problem.

6.2.3.  Batch Processing of Inputs

   In order to minimize overhead due to network latency, it should be
   possible to group independent inputs for a service into a single
   request, and to receive the corresponding outputs in a single
   response.  In SADI, the input RDF document for a service invocation
   may contain any number of input instances which represent independent
   inputs to the service.  Likewise, the output RDF document may contain
   any number of independent output instances.

6.2.4.  Support for Long-running Services

   The processing time of a service should not be limited to the
   lifetime of a TCP connection.  Asynchronous SADI services support



Vandervalk, et al.       Expires August 3, 2012                 [Page 8]

Internet-Draft                    SADI                      January 2012


   long-running computations by means of client polling and HTTP
   redirects, as described in Asynchronous Services (Section 10.2).

6.2.5.  Explicit Relationship Between Service Input and Output

   It is desirable to ensure that related input and output instances
   from a service invocation are explicitly linked.  This saves a client
   from the task of tracking input/output relationships on its own, and
   ensures that the RDF produced by service invocations forms a
   connected graph that is queriable in a meaningful manner.  In SADI,
   related input and output instances are linked because they share the
   same URI.  This constraint is demonstrated concretely in Running
   Example: The SADI "Hello, World!"  Service (Section 8) and is
   described more formally in The Output OWL Class (Section 9.3.2).

6.2.6.  Minimal Constraints on Data Modeling

   Aside from the constraint of the previous section, SADI does not
   provide any rules about how service input and output data should be
   modeled in RDF.  Service providers are free to encode the data using
   any OWL or RDFS ontologies deemed suitable.  Further, the input and
   output RDF documents for a service invocation consist only of data
   that is consumed or generated by the service, respectively.  There
   are no SADI-specific messaging structures required within the input/
   output RDF documents.


7.  Relationship to Other Web Service Standards

7.1.  Web Services Description Language (WSDL)

   WSDL [WSDL] is an XML schema that is the current de facto standard
   for machine-readable description of web service interfaces.  At the
   time of writing this document, the most recent version of WSDL is
   WSDL 2.0.

   The most important difference between SADI and WSDL is that SADI uses
   RDF for message content, whereas WSDL conventionally uses XML.  WSDL
   uses XML Schema [XML Schema] as the default schema language for
   message structures, but is also extensible to use other schema
   languages.  To date, there have been proposals for extensions that
   use Document Type Definitions (DTDs) and RelaxNG as alternative
   schema languages for WSDL.  In principle, a similar extension could
   be created for the use of OWL as a schema language, although none has
   been put forward to date.

   SADI uses only a small, fixed subset of the behaviours that can
   described by WSDL.  In the terminology of WSDL, SADI services must



Vandervalk, et al.       Expires August 3, 2012                 [Page 9]

Internet-Draft                    SADI                      January 2012


   have:

   o  _one operation per service_, where an _operation_ is interaction
      between the client and the service to accomplish some result.  An
      operation is analogous to a function call in a programming
      language.

   o  _one endpoint per service_, where an _endpoint_ is an URL where
      the client interacts with the service

   o  _a fixed protocol_, where the _protocol_ is the mechanism for
      transporting messages between the client and the service.  All
      SADI services use HTTP as the underlying protocol.

   o  _a fixed message exchange pattern_, where a _message exchange
      pattern_ is a sequence of messages that are exchanged between a
      client and a service during an operation.  SADI services have one
      of two possible message exchange patterns, corresponding to
      synchronous services (Section 10.1) and asynchronous services
      (Section 10.2).

   The only variables of a SADI service interface are the graph
   representations of the input data, the output data, and the service
   execution parameters, which are defined by the input OWL class
   (Section 9.3.1), the output OWL class (Section 9.3.2), and the
   parameter OWL class (Section 9.4.1), respectively.  For SADI, these
   three OWL classes are the functional analog of a WSDL service
   description file.

7.2.  Semantic Annotations for WSDL (SAWSDL)

   SAWSDL [SAWSDL] is a small set of extensions to the WSDL XML schema
   that facilitates the mapping of XML-based services to a semantic data
   model (e.g.  RDF).  Specifically, SAWSDL defines 3 additional XML
   attributes for WSDL:

   o  modelReference

   o  loweringSchemaMapping

   o  liftingSchemaMapping

   _modelReference_ is used to annotate elements of a WSDL interface
   with entities from a semantic data model, such as class URIs from an
   OWL ontology. _liftingSchemaMapping_ and _loweringSchemaMapping_ are
   used to provide mappings of XML datatypes to and from a semantic data
   model, respectively.  The values of _liftingSchemaMapping_ and
   _loweringSchema_ are URIs that identify documents that define the



Vandervalk, et al.       Expires August 3, 2012                [Page 10]

Internet-Draft                    SADI                      January 2012


   transformation; however, SAWSDL is agnostic with respect to the
   specific mapping language that is used.  For example, when
   translating between XML and RDF, the required mappings might be
   accomplished with XSLT for the lifting transformation and SPARQL
   followed by XSLT for the lowering transformation.

   SAWSDL can be used as an adaptor layer that maps a WSDL service to
   the expected behaviour of a SADI service.

7.3.  OWL-S and the Web Service Modeling Ontology (WSMO)

   OWL-S [OWL-S] and WSMO [WSMO] are two previous Semantic Web Services
   standards that are similar in their goals and approaches.  Both
   standards define ontologies for describing the _capablities_ and
   _choreographies_ of stateful web services, where capabilities are
   changes to the world that are effected by a service, and
   choreographies are the sequences of messages exchanged between a
   client and a service during an interaction.  (Choreographies
   correspond to message exchange patterns in WSDL.)  OWL-S and WSMO
   exceed the descriptive power of WSDL by providing a generic framework
   for modeling both the internal state of a service and the state of
   external variables that are affected by the service (e.g. a credit
   card balance).  Transitions between states are formally described by
   boolean formulas that express preconditions and postconditions for an
   event.

   The principal difference between OWL-S and WSMO is that OWL-S uses
   OWL as its ontology language, whereas WSMO uses a more expressive
   language called the Web Service Modeling Language (WSML).  The OWL-S
   and WSMO standards are complex, and the development of software
   agents to coordinate OWL-S/WSMO services to accomplish higher order
   tasks in an ongoing area of research.

   In comparison to OWL-S and WSMO, SADI is a simpler standard that is
   limited to the description of stateless services.  SADI uses OWL
   ontologies only for defining the schema of input data, output data,
   and service execution parameters, and not to define the effects or
   choreography of a service.  The choreography of a SADI service is
   fixed to one of two possibilities, corresponding to synchronous
   services (Section 10.1) and asynchronous services (Section 10.2)
   respectively.


8.  Running Example: The SADI "Hello, World!" Service

   To illustrate the different aspects of the SADI protocol in a
   concrete manner, we will frequently make reference to the SADI
   "Hello, World!" service located at



Vandervalk, et al.       Expires August 3, 2012                [Page 11]

Internet-Draft                    SADI                      January 2012


   http://sadiframework.org/examples/hello.  The purpose of this section
   is to describe the behaviour of this service and at the same time to
   provide a brief, non-normative introduction to the key aspects of the
   SADI protocol.

   The SADI "Hello, World!" service consumes one or more input instances
   representing people with names (e.g.  "Guy Incognito") and returns
   corresponding output instances representing greetings for each person
   (e.g.  "Hello, Guy Incognito!").  The following shows an example
   input RDF document for the service, in N3:

      @prefix foaf: <http://xmlns.com/foaf/0.1/> .
      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:GuyIncognito
          a hello:NamedIndividual;
          foaf:name "Guy Incognito" .

      input:HomerSimpson
          a hello:NamedIndividual;
          foaf:name "Homer Simpson" .

   In response, the service generates the following output RDF document:

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:GuyIncognito
          a hello:GreetedIndividual;
          hello:greeting "Hello, Guy Incognito!" .

      input:HomerSimpson
          a hello:GreetedIndividual;
          hello:greeting "Hello, Homer Simpson!" .

   In this example, the input RDF document contains two input instances
   with the URIs input:GuyIncognito and input:HomerSimpson.  Each input
   instance is processed independently by the service, and so the same
   result could be generated by invoking the service twice with the
   input graphs for Guy Incognito and Homer Simpson separately, and
   afterwords performing an RDF-merge on the two output RDF documents.
   The input instances are identified by the service as those URIs
   having an rdf:type matching the service's _input OWL class_ (hello:
   NamedIndividual).  The purpose of the input OWL class is to describe
   the expected structure of the input instances.  More will be said



Vandervalk, et al.       Expires August 3, 2012                [Page 12]

Internet-Draft                    SADI                      January 2012


   about the purpose and design of the input OWL class in The Input OWL
   Class (Section 9.3.1).

   Analogously to the case for input instances, each output instance in
   the output RDF document is assigned an rdf:type equal to the URI of
   the service's _output OWL class_ (hello:Greetedindividual).  The
   purpose of the _output OWL class_ is to describe the expected
   structure of the output instances generated by the service.
   Comparing the input and output RDF documents, the reader will observe
   that the URI of each output instance is equal to URI of its
   corresponding input instance (input:GuyIncognito and input:
   HomerSimpson, respectively).  This is a general requirement for SADI
   services that ensures that related input and output instances are
   always explicitly linked.  As a result, SADI clients are able to
   merge the input and output RDF documents from a service invocation
   into a single, coherent RDF graph that captures the relationships
   between the input and output data.  For example, a client could load
   the two RDF documents above into a triple store, and then pose
   queries against the triple store such as "What is the greeting for
   Homer Simpson?".


9.  Service Metadata

   The metadata for a SADI service provides information that is
   potentially helpful to human and/or software clients attempting to
   use the service.  All provider-specified metadata for a SADI service
   MUST be retrievable as an RDF document by issuing an HTTP GET request
   to the service URL.  Within the RDF document, all metadata items MUST
   be represented as part of a single, connected RDF graph whose root
   URI is the URL of the service.

   The metadata graph MUST include the following items:

   o  _input OWL class_ -- an OWL class describing the expected
      structure of the input RDF graphs consumed by the service

   o  _output OWL class_ -- an OWL class describing the expected
      structure of the output RDF graphs generated by the service

   If the service has one or more execution parameters, the metadata
   graph MUST also include:

   o  _parameter OWL class_ -- an OWL class describing execution
      parameters for the service

   o  _default parameter instance_ -- an instance of the parameter OWL
      class which provides default values for the service execution



Vandervalk, et al.       Expires August 3, 2012                [Page 13]

Internet-Draft                    SADI                      January 2012


      parameters

   The following items are optional:

   o  _service name_ -- a human readable label for the service

   o  _description_ -- a human readable description of the service
      functionality

   o  _contact e-mail address_ -- an e-mail address where the provider
      of the service may be contacted

   o  _service type URI(s)_ -- one or more rdf:type URIs indicating the
      type of service.  These URIs may be used to categorize the service
      by a wide variety of criteria, such as the task performed, the
      algorithm utilized, or the intended users of the service.

   o  _unit test(s)_ -- one or more input RDF graph(s) that MUST
      constitute valid input(s) to the service.  The expected output RDF
      graphs corresponding to these input graphs MAY also be provided.

   o  _authoritative flag_ -- a boolean value that MUST be true if the
      person or organization hosting the service is also the author or
      owner of the data underlying the service, or the author or curator
      of the software which will generate the service output.  If a SADI
      service acts as an interface to third party data or software, the
      value of the authoritative flag MUST be false.  This is to provide
      some Quality-of-Service information in cases where multiple
      services report to provide the same output data.

   In addition, any other items deemed useful to clients of the service
   MAY be included in the metadata graph.

9.1.  Retrieving Service Metadata

   An RDF document containing the metadata graph MUST be retrievable by
   an HTTP GET request to the service URL.

   The GET request MAY include an Accept header indicating the desired
   RDF serialization format for the response document.  A SADI service
   MUST support content types of text/rdf+n3 for N3 and application/
   rdf+xml for RDF/XML, and MAY support additional content types for
   these formats or for any other RDF serialization formats.  In the
   event of an omitted, unrecognized, or unsupported content type, the
   default content type used for the response MUST be RDF/XML.






Vandervalk, et al.       Expires August 3, 2012                [Page 14]

Internet-Draft                    SADI                      January 2012


9.2.  Representing Service Metadata in RDF

   The schema for the metadata graph is beyond the current scope of the
   SADI specification.

   At the time of writing, all SADI services and SADI-related tools
   known to the authors use the myGrid/Moby service ontology [myGrid/
   Moby] to encode the service metadata graph.  For illustrative
   purposes, the service metadata graph for a parameterized version of
   the "Hello, World!" service
   (http://sadiframework.org/examples/hello-param) is shown below in N3
   format.

      @prefix protege-dc: <http://protege.stanford.edu/plugins/owl/dc/pr
otege-dc.owl#> .
      @prefix mygrid: <http://www.mygrid.org.uk/mygrid-moby-service#> .
      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix test: <http://sadiframework.org/examples/t/> .
      @prefix foaf: <http://xmlns.com/foaf/0.1/> .
      @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

      <http://sadiframework.org/examples/hello-param>
        a mygrid:serviceDescription ;

        #----------------------------------------
        # Service Name
        #----------------------------------------

        mygrid:hasServiceNameText
            "ParamaterizedHelloWorld"^^xsd:string ;

        #----------------------------------------
        # Service Description
        #----------------------------------------

        mygrid:hasServiceDescriptionText
            "A \"Hello, world!\" service where the output language is sp
ecified in a parameter"^^xsd:string ;

        #----------------------------------------
        # Contact E-mail Address, Authoritative Flag
        #----------------------------------------

        mygrid:providedBy
          [ a mygrid:organisation ;
            protege-dc:creator "person@organization.com"^^xsd:string ;
            mygrid:authoritative "false"^^xsd:boolean
          ] ;



Vandervalk, et al.       Expires August 3, 2012                [Page 15]

Internet-Draft                    SADI                      January 2012


        mygrid:hasOperation
          [ a mygrid:operation ;

            #----------------------------------------
            # Input OWL Class
            #----------------------------------------

            mygrid:inputParameter
                [ a mygrid:parameter ;
                  mygrid:objectType hello:NamedIndividual
                ] ;

            #----------------------------------------
            # Parameter OWL Class, Default Parameter Graph
            #----------------------------------------

            mygrid:inputParameter
                [ a mygrid:secondaryParameter ;
                  mygrid:objectType hello:SecondaryParameters ;
                  mygrid:hasDefaultValue
                    [ a hello:SecondaryParameters ;
                      hello:lang "en"^^xsd:string
                    ]
                ] ;

            #----------------------------------------
            # Output OWL Class
            #----------------------------------------

            mygrid:outputParameter
                [ a mygrid:parameter ;
                  mygrid:objectType hello:GreetedIndividual
                ] ;

            #----------------------------------------
            # Unit Test
            # (test input/output RDF included directly)
            #----------------------------------------

            mygrid:hasUnitTest
                [ a mygrid:testCase ;
                  mygrid:exampleInput
                    [ a hello:InputClass ;
                      foaf:name "Guy Incognito"
                    ] ;
                  mygrid:exampleOutput
                    [ a hello:OutputClass ;
                      hello:greeting "Hello, Guy Incognito!"



Vandervalk, et al.       Expires August 3, 2012                [Page 16]

Internet-Draft                    SADI                      January 2012


                    ]
                ] ;

            #----------------------------------------
            # Unit Test
            # (test input/output RDF in external documents)
            #----------------------------------------

            mygrid:hasUnitTest
                [ a mygrid:testCase ;
                  mygrid:exampleInput test:hello-param-input.rdf ;
                  mygrid:exampleOutput test:hello-param-output.rdf
                ]

          ] .

9.3.  Describing Service Interfaces Using OWL

   The input and output OWL classes for a service provide a machine-
   readable representation of the service interface.  This facilitates
   the automation of various data and service matchmaking tasks, such
   as:

   o  identifying services that can consume a subset of a given RDF
      graph as input

   o  extracting input instances for a service from a given RDF graph

   o  matching the output interface of one service to the input
      interface of another service, in order to create service execution
      chains (workflows)

   Moreover, the use of OWL for describing service interfaces enables
   the use an _OWL reasoner_ as the main vehicle for accomplishing these
   tasks.

9.3.1.  The Input OWL Class

   The primary purpose of the input OWL class is to identify and extract
   valid input instances for a service from a given RDF data set.  Each
   SADI service has exactly one input OWL class which MUST either be
   referenced by or directly included in the metadata graph for the
   service.

   For illustrative purposes, the following excerpt shows the definition
   for hello:NamedIndividual, which is the input OWL class for the SADI
   "Hello, World!" service:




Vandervalk, et al.       Expires August 3, 2012                [Page 17]

Internet-Draft                    SADI                      January 2012


      <owl:Class rdf:ID="NamedIndividual">
        <owl:equivalentClass>
          <owl:Restriction>
            <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/name
"/>
            <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XML
Schema#int">1</owl:minCardinality>
          </owl:Restriction>
        </owl:equivalentClass>
      </owl:Class>

   This class definition states that a URI is an instance of hello:
   NamedIndividual if and only if it has one or more values for the
   foaf:name property.  As a result, each input instance for the "Hello,
   World!" service is required to have at least one foaf:name property.

9.3.1.1.  Instance Checking and the Input OWL Class

   The identification of instances of an OWL class within an RDF graph
   is a commonly supported operation of OWL reasoners, which we we will
   refer to here as _instance checking_.  The purpose of this section is
   provide guidelines for writing an input OWL class that enables an OWL
   reasoner to perform instance checking in a useful manner.

   The most important consideration when authoring an input OWL class is
   that the conditions for class membership should be defined using
   necessary and sufficient ('if and only if') conditions.  In OWL,
   necessary conditions ('if') are defined using the rdfs:subClassOf
   property whereas necessary and sufficient conditions ('if and only
   if') are defined using the owl:equivalentClass property.  For
   example, the following two excerpts show alternate definitions of
   hello:NamedIndividual which use necessary conditions and necessary
   and sufficient conditions, respectively:

      <owl:Class rdf:ID="NamedIndividual">
        <rdfs:subClassOf>
          <owl:Restriction>
            <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/name
"/>
            <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XML
Schema#int">1</owl:minCardinality>
          </owl:Restriction>
        </rdfs:subClassOf>
      </owl:Class>







Vandervalk, et al.       Expires August 3, 2012                [Page 18]

Internet-Draft                    SADI                      January 2012


      <owl:Class rdf:ID="NamedIndividual">
        <owl:equivalentClass>
          <owl:Restriction>
            <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/name
"/>
            <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XML
Schema#int">1</owl:minCardinality>
          </owl:Restriction>
        </owl:equivalentClass>
      </owl:Class>

   The first definition uses only a necessary condition.  It states that
   a URI has one or more foaf:name properties _if_ it is an instance of
   hello:NamedIndividual.  (A URI is known to be an instance of the
   hello:NamedIndividual if it has an rdf:type value of hello:
   NamedIndividual.)  From this rule, a reasoner cannot deduce that a
   given URI is a member of hello:NamedIndividual based on its
   properties.

   The second definition uses a necessary and sufficient condition.  It
   states that a URI has one or more foaf:name properties _if and only
   if_ it is an instance of hello:NamedIndividual.  From this rule, the
   reasoner can deduce that a URI with one or more foaf:name properties
   is a member of the hello:NamedIndividual class.

   A second consideration when authoring an input OWL class is that, at
   the time of writing this document, the majority of OWL reasoners
   operate under the Open World Assumption (OWA).  The OWA holds that a
   statement cannot be inferred to be false merely by its absence in a
   data set.  Instead, the truth value of a such a statement is simply
   unknown.  For example, consider an RDF data set which provides foaf:
   name values for various URIs representing people, as might be used
   for input to the SADI "Hello, World!" service.  Under the OWA, the
   fact that a particular URI (person) only has a single value for the
   foaf:name property within a particular data set does not imply that
   the person only has one name.  He or she may have aliases that are
   represented by other values for foaf:name in other RDF data sets on
   the web.  Similarly, one cannot assume that a person does not have a
   name simply because there is no foaf:name value for that person in a
   particular data set.

   Under the OWA, certain types of property restrictions cannot be
   directly tested for truth.  For example, consider the following
   definition of hello:NamedIndividual, which uses an exact cardinality
   restriction:






Vandervalk, et al.       Expires August 3, 2012                [Page 19]

Internet-Draft                    SADI                      January 2012


      <owl:Class rdf:ID="NamedIndividual">
        <owl:equivalentClass>
          <owl:Restriction>
            <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/name
"/>
            <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSch
ema#int">1</owl:cardinality>
          </owl:Restriction>
        </owl:equivalentClass>
      </owl:Class>

   This definition states that a URI is a member of the hello:
   NamedIndividual class _if and only if_ it has exactly one foaf:name
   property.  However, even if a URI (person) has exactly one value for
   foaf:name in a particular data set, that same URI may possess any
   number of additional foaf:name values in other RDF data sets on the
   web.  For this reason, a reasoner using the OWA can never confirm the
   truth of an exact cardinality restriction by examining the known
   properties of a URI.  It can only prove the falsehood of the
   cardinality restriction in cases where the URI is known to have a
   greater number of distinct values for the property than desired.

   As the primary purpose of the input OWL class is to automatically
   identify and extract input graphs for a service from an RDF data set,
   it is important to define the input OWL class using property
   restrictions that can be directly tested for truth.  The following
   types of property restrictions satisfy this criteria:

   o  owl:someValuesFrom (existential quantification)

   o  owl:hasValue (value restriction)

   o  owl:minCardinality (minimum cardinality restriction)

   o  owl:minQualifiedCardinality (qualified minimum cardinality
      restriction)

   On the other hand, the following types of property restrictions do
   NOT satisfy the directly-testable-for-truth criteria:

   o  owl:allValuesFrom (universal quantification)

   o  owl:cardinality (cardinality retriction)

   o  owl:qualifiedCardinality (qualified cardinality restriction)

   o  owl:maxCardinality (maximum cardinality restriction)




Vandervalk, et al.       Expires August 3, 2012                [Page 20]

Internet-Draft                    SADI                      January 2012


   o  owl:maxQualifiedCardinality (qualified maximum cardinality
      restriction)

9.3.2.  The Output OWL Class

   The output OWL class provides a machine readable description of the
   output instances produced by a service, which facilitates the
   automated identification of services that produce data of interest to
   either human or software clients.  Each SADI service has exactly one
   output OWL class which MUST be either referenced by or directly
   included in the metadata graph for the service.

   Each input instance that is sent to a service produces exactly one
   output instance, and each pair of corresponding input and output
   instances ALWAYS have the same URI.  While the function of the input
   OWL class is to identify valid input instances for a service within
   an RDF data set, the function of the output OWL class is to describe
   the graph structures that are attached to each input instance as a
   result of invoking the service.

   To illustrate, the following shows the definition of hello:
   GreetedIndividual, the output OWL class for the SADI "Hello, World!"
   service:

      <owl:Class rdf:ID="GreetedIndividual">
        <owl:equivalentClass>
          <owl:Restriction>
            <owl:onProperty rdf:resource="#greeting"/>
            <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XML
Schema#int">1</owl:minCardinality>
          </owl:Restriction>
        </owl:equivalentClass>
      </owl:Class>

   The definition for hello:GreetedIndividual indicates that one or more
   hello:greeting properties will be attached to each input instance as
   a result of invoking the service.

9.4.  Describing Service Execution Parameters Using OWL

   Service execution parameters are values which are separate from the
   input instances for a service invocation, but which affect how those
   input instances are processed.  For example, the parameterized
   version of the SADI "Hello, World!" service (discussed below) accepts
   an execution parameter indicating the desired language for the
   generated greetings.





Vandervalk, et al.       Expires August 3, 2012                [Page 21]

Internet-Draft                    SADI                      January 2012


9.4.1.  The Parameter OWL Class

   Analogously to the input and output OWL classes, the _parameter OWL
   class_ describes the RDF representation of the service execution
   parameters.  A service may have any number of execution parameters,
   and each parameter may have an arbitrarily complex representation in
   RDF.  However, all parameter representations MUST be contained within
   a single, connected RDF graph that is described by the parameter OWL
   class.  Any service with execution parameters MUST have exactly one
   parameter OWL class that is either referenced by or directly included
   in the metadata graph for the service.

   To demonstrate the description of service execution parameters,
   consider an extended "Hello, World!" service that returns greetings
   in alternate languages.  Such a service has been implemented and is
   accessible at http://sadiframework.org/examples/hello-param.  The
   parameter OWL class for the service (hello:SecondaryParameters)
   describes a single execution parameter for the desired language of
   the output greetings, as shown below:

      <owl:Class rdf:ID="SecondaryParameters">
        <owl:equivalentClass>
          <owl:Restriction>
            <owl:onProperty rdf:resource="#lang"/>
            <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XML
Schema#int">1</owl:minCardinality>
          </owl:Restriction>
        </owl:equivalentClass>
      </owl:Class>

   Although the intention of the hello:SecondaryParameters class is to
   describe a graph with a single value for hello:lang, a minimum
   cardinality restriction is used to facilitate instance checking with
   OWL reasoners that use the Open World Assumption (OWA).  For a
   detailed discussion of OWL class design as it pertains to instance
   checking and the OWA, see Instance Checking and the Input OWL Class
   (Section 9.3.1.1).

   When invoking a service, a client indicates the desired values of
   execution parameters by including a single _parameter instance_ in
   the input RDF document for the service invocation, where the
   parameter instance is an RDF node that is an instance of the
   parameter OWL class.  All input instances within the input RDF
   document are processed according to this single, shared set of
   parameter values.






Vandervalk, et al.       Expires August 3, 2012                [Page 22]

Internet-Draft                    SADI                      January 2012


9.4.2.  The Default Parameter Instance

   The inclusion of a parameter instance in the input RDF document for a
   service invocation is not required.  If no parameter instance is
   provided by the client, the service MUST use a suitable set of
   default values for the execution parameters.  Further, the service
   metadata graph MUST either include or reference exactly one _default
   parameter instance_ that represents these default values for the
   parameters.  The output instances generated by an input RDF document
   that includes a copy of the default parameter instance MUST be
   identical to the output instances generated by an input RDF document
   that does not contain a parameter instance.

   For illustrative purposes, the following N3 shows the default
   parameter instance for the parameterized "Hello, World!" service
   discussed above:

         @prefix hello: <http://sadiframework.org/examples/hello.owl#> .

         [] a hello:SecondaryParameters;
            hello:lang "en" .

   This default parameter instance indicates that, unless otherwise
   specified, greetings will be returned in English.


10.  Service Invocation

10.1.  Synchronous Services

   Communication with a synchronous SADI service occurs according to the
   following steps:

   1.  The client sends an HTTP POST request to the service URL.  The
   body of the request is an RDF document containing one or more
   instances of the service's input OWL class and, optionally, one
   instance of the service's parameter OWL class.  The serialization
   format of the RDF document SHOULD be specified in the Content-type
   header of the POST request (one of application/rdf+xml or text/
   rdf+n3).  If no Content-type header is sent with the request, the
   service MUST assume that the input is in RDF/XML format.  Similarly,
   the desired serialization format of the response RDF document MAY be
   indicated with an Accept header (also one of application/rdf+xml or
   text/rdf+n3).  In the case that the client does not provide an Accept
   header, or the content type is unsupported, the service MUST return
   RDF/XML.





Vandervalk, et al.       Expires August 3, 2012                [Page 23]

Internet-Draft                    SADI                      January 2012


      POST /examples/hello HTTP/1.1
      Host: sadiframework.org
      Accept: text/rdf+n3
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .
      @prefix foaf: <http://xmlns.com/foaf/0.1/> .
      @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      input:GuyIncognito
         a hello:NamedIndividual;
         foaf:name "Guy Incognito" .

      input:HomerSimpson
         a hello:NamedIndividual;
         foaf:name "Homer Simpson" .

   2.  The service sends a response containing the output.  The body of
   the response is an RDF document containing one or more instances of
   the service's output OWL class.  Each instance of the output OWL
   class MUST have the same root URI as exactly one instance of the
   input OWL class from the input RDF document.  The serialization
   format of the output RDF document MUST be specified in the Content-
   type header of the response (one of application/rdf+xml or text/
   rdf+n3).

      HTTP/1.1 200 OK
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:GuyIncognito
          a hello:GreetedIndividual;
          hello:greeting "Hello, Guy Incognito!" .

      input:HomerSimpson
          a hello:GreetedIndividual;
          hello:greeting "Hello, Homer Simpson!" .

   A synchronous service must finish processing its input before the TCP
   connection between the client and the service times out.  SADI
   services that must run for longer periods of time should be
   implemented as asynchronous services, as described in the next
   section.



Vandervalk, et al.       Expires August 3, 2012                [Page 24]

Internet-Draft                    SADI                      January 2012


10.2.  Asynchronous Services

   Asynchronous SADI services use client polling and HTTP redirects to
   accomodate services that may run for an arbitrarily long period of
   time.  Communication with an asynchronous SADI service occurs
   according to the following steps:

   1.  The client sends an HTTP POST request to the service URL.  The
   body of the request is an RDF document containing one or more
   instances of the service's input OWL class and, optionally, one
   instance of the service's parameter OWL class.  The serialization
   format of the RDF document SHOULD be specified in the Content-type
   header of the POST request (one of application/rdf+xml or text/
   rdf+n3).  If no Content-type header is sent with the request, the
   service MUST assume that the input is in RDF/XML format.  Similarly,
   the desired serialization format of the response RDF document MAY be
   indicated with an Accept header (also one of application/rdf+xml or
   text/rdf+xml).  In the case that the client does not provide an
   Accept header, or the content type is unsupported, the service MUST
   return the response in RDF/XML.

      POST /examples/hello HTTP/1.1
      Host: sadiframework.org
      Accept: text/rdf+n3
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .
      @prefix foaf: <http://xmlns.com/foaf/0.1/> .
      @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      input:GuyIncognito
         a hello:NamedIndividual;
         foaf:name "Guy Incognito" .

      input:HomerSimpson
         a hello:NamedIndividual;
         foaf:name "Homer Simpson" .

   2.  The service sends a response with the HTTP response code 202
   (accepted but incomplete).  The body of the response is an RDF
   document containing statements about the input instances.  The
   serialization format of the RDF document MUST be specified in the
   Content-type header of the response (one of application/rdf+xml or
   text/rdf+n3).  The existence of additional data is indicated by rdfs:
   isDefinedBy statements where the object is a URL the client must
   fetch to receive the complete output.  There MAY be multiple such



Vandervalk, et al.       Expires August 3, 2012                [Page 25]

Internet-Draft                    SADI                      January 2012


   URLs and the initial output MAY contain only rdfs:isDefinedBy
   statements.

      HTTP/1.1 202 Accepted
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .
      @prefix rdfs: <http://http://www.w3.org/2000/01/rdf-schema#> .
      @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      input:GuyIncognito
         a hello:GreetedIndividual;
         rdfs:isDefinedBy <http://sadiframework.org/examples/hello?poll=
1> .

      input:HomerSimpson
         a hello:GreetedIndividual;
         rdfs:isDefinedBy <http://sadiframework.org/examples/hello?poll=
2> .

   3.  The client sends a GET request for each rdfs:isDefinedBy URL in
   the initial response.  The client SHOULD include an Accept header
   indicating the desired RDF serialization format for the response,
   which otherwise defaults to RDF/XML.

   Request 1:

         GET /examples/hello?poll=1
         Host: sadiframework.org
         Accept: text/rdf+n3

   Request 2:

         GET /examples/hello?poll=2
         Host: sadiframework.org
         Accept: text/rdf+n3

   4.  If the output for a given polling URL is ready, the service sends
   a response with the output.  The body of the response is an RDF
   document containing statements that should be combined with the
   initial output document.  The serialization format of the RDF
   document MUST be specified in the Content-type header of the response
   (one of application/rdf+xml or text/rdf+n3).  If the output is not
   yet ready, the service sends an HTTP redirect with a Retry-after
   header that contains the number of seconds that the client should
   wait before trying again.  In the example responses below, the



Vandervalk, et al.       Expires August 3, 2012                [Page 26]

Internet-Draft                    SADI                      January 2012


   response for the first output is ready, but the response for the
   second output is not yet ready.

   Response for Request 1:

      HTTP/1.1 200 OK
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:GuyIncognito
          a hello:GreetedIndividual;
          hello:greeting "Hello, Guy Incognito!" .

   Response for Request 2:

         HTTP/1.1 302 Moved Temporarily
         Pragma: sadi-please-wait = 5000
         Location: http://sadiframework.org/examples/hello?poll=1

   5.  The client waits as suggested for the second output, then follows
   the redirect.

         GET /examples/hello?poll=2
         Host: sadiframework.org
         Accept: text/rdf+n3

   6.  If the second output is still not ready, the service sends
   another HTTP redirect as above.  When the second output is ready, the
   service returns another RDF document:

      HTTP/1.1 200 OK
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:HomerSimpson
          a hello:GreetedIndividual;
          hello:greeting "Hello, Homer Simpson!" .

   7.  The client may perform an RDF-merge on the initial output
   document and the output documents from each polling URL to create an
   RDF document that contains a complete representation of all output
   instances.  The client SHOULD remove the rdfs:isDefinedBy statements



Vandervalk, et al.       Expires August 3, 2012                [Page 27]

Internet-Draft                    SADI                      January 2012


   from the merged document, as the polling URLs MAY expire after
   returning data or after a fixed period of time, at the discretion of
   the service provider.

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:GuyIncognito
          a hello:GreetedIndividual;
          hello:greeting "Hello, Guy Incognito!" .

      input:HomerSimpson
          a hello:GreetedIndividual;
          hello:greeting "Hello, Homer Simpson!" .

10.3.  Invoking Services with Execution Parameters

   _Service execution parameters_ are settings that affect the behaviour
   of a service invocation and which are separate from the input data
   that is processed by the service.  A SADI service MAY have any number
   of execution parameters that are collectively described by a single
   _parameter OWL class_, as detailed in The Parameter OWL Class
   (Section 9.4.1).

   A client indicates values for service execution parameters when
   invoking a synchronous or asynchronous SADI service by including
   exactly one instance of the parameter OWL class in the input RDF
   document.  All instances of the input OWL class within the input RDF
   document MUST be processed according to this shared set of execution
   parameters.  If the client includes more than one instance of the
   parameter OWL class in the input RDF document, the behaviour of the
   service is undefined.

   If no instance of the parameter OWL class is provided by the client,
   the service MUST use a suitable set of default values for the
   execution parameters.  In the case where the parameter graph
   represents multiple independent parameters, the client MAY omit any
   component of the parameter graph corresponding to a particular
   parameter, in which case the service will use the corresponding
   default value instead.  The metadata graph for every service that has
   execution parameters MUST either reference or directly include
   exactly one _default parameter instance_, as described in The Default
   Parameter Instance (Section 9.4.2).

   The following shows an example invocation of the parameterized
   "Hello, World!" service at
   http://sadiframework.org/examples/hello-param, which is a synchronous



Vandervalk, et al.       Expires August 3, 2012                [Page 28]

Internet-Draft                    SADI                      January 2012


   service.  The client indicates that the output greetings should be
   returned in Spanish by including an appropriately constructed
   instance of the parameter OWL class in the input RDF document.

   Request:

      POST /examples/hello HTTP/1.1
      Host: sadiframework.org
      Accept: text/rdf+n3
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .
      @prefix foaf: <http://xmlns.com/foaf/0.1/> .

      [] a hello:SecondaryParameters;
         hello:lang "es" .

      input:GuyIncognito
         a hello:NamedIndividual;
         foaf:name "Guy Incognito" .

      input:HomerSimpson
         a hello:NamedIndividual;
         foaf:name "Homer Simpson" .

   Response:

      HTTP/1.1 200 OK
      Content-type: text/rdf+n3

      @prefix hello: <http://sadiframework.org/examples/hello.owl#> .
      @prefix input: <http://sadiframework.org/data/examples/hello-input
.n3#> .

      input:GuyIncognito
          a hello:GreetedIndividual;
          hello:greeting "Hola, Guy Incognito!" .

      input:HomerSimpson
          a hello:GreetedIndividual;
          hello:greeting "Hola, Homer Simpson!" .








Vandervalk, et al.       Expires August 3, 2012                [Page 29]

Internet-Draft                    SADI                      January 2012


11.  Service Registries

   A service registry allows users to query metadata about a collection
   of services, in order to discover services that accomplish a task of
   interest.  The implementation of service registries for SADI is
   beyond the current scope of the specification.  However, for the
   benefit of SADI users, the authors maintain a public registry of SADI
   services that may be accessed at http://sadiframework.org/registry.


12.  References

12.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, 1997.

   [WSDL]     Chinnici, R., Moreau, J., Ryman, A., and S. Weerawarana,
              "Web Services Description Language (WSDL) Version 2.0 Part
              1: Core Language", W3C Recommendation , 2007.

   [XML]      Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and
              F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth
              Edition)", W3C Recommendation , 2008.

   [REST]     Fielding, R., "Architectural styles and the design of
              network-based software architectures", University of
              California , 2000.

   [RDF]      Klyne, G. and J. Carroll, "Resource Description Framework
              (RDF): Concepts and Abstract Syntax", W3C Recommendation ,
              2004.

   [OWL]      Motik, B., "OWL 2 Web Ontology Language: Structural
              Specification and Functional-Style Syntax", W3C
              Recommendation , 2009.

   [HTTP]     Fielding, R., "Hypertext Transfer Protocol -- HTTP/1.1",
              RFC 2616, 1999.

   [XML_Schema]
              Thompson, H., Beech, D., Maloney, M., and N. Mendelsohn,
              "XML Schema Part 1: Structures Second Edition", W3C
              Recommendation , 2004.

   [SAWSDL]   Farrell, J. and H. Lausen, "Semantic Annotations for WSDL
              and XML Schema", W3C Recommendation , 2007.




Vandervalk, et al.       Expires August 3, 2012                [Page 30]

Internet-Draft                    SADI                      January 2012


   [OWL-S]    Martin, D., "OWL-S: Semantic markup for web services", W3C
              Member Submission , 2004.

   [WSMO]     De Bruijn, J., "Web Service Modeling Ontology (WSMO)", W3C
              Member Submission , 2005.

12.2.  Informative References

   [myGrid/Moby]
              Wolstencroft, K., Alper, P., Hull, D., and C. Wroe, "The
              myGrid Ontology: Bioinformatics Service Discovery",
              International Journal of Bioinformatics Research and
              Applications , 2007.

   [SHARE]    Vandervalk, B., "The SHARE system : a semantic web based
              approach for evaluating queries across distributed
              bioinformatics databases and software", University of
              British Columbia , 2011.


Authors' Addresses

   Ben Vandervalk (editor)
   James Hogg Research Centre, Institute for Heart + Lung Health, University of British Columbia

   Email: ben dot vvalk at gmail


   E. Luke McCarthy
   James Hogg Research Centre, Institute for Heart + Lung Health, University of British Columbia


   Mark D. Wilkinson
   James Hogg Research Centre, Institute for Heart + Lung Health, University of British Columbia

















Vandervalk, et al.       Expires August 3, 2012                [Page 31]