OWLlink:
HTTP/Functional Binding

Version 1.0
Working Group Recommendation 16 November 2009

This version:
http://www.owllink.org/owllink-httpfunct-20091116/
Latest version:
http://www.w3.org/Submission/owllink-httpfunct-binding/
Previous version:
http://www.owllink.org/owllink-httpsexpr-20081001/
Authors:
Michael Wessel, Racer Systems GmbH & Co. KG
Marko Luther, DOCOMO Euro-Labs Munich
Contributors: (in alphabetic order)
Thorsten Liebig, Ulm University
Ralf Möller, Hamburg University of Technology
Olaf Noppens, Ulm University

Abstract

The OWLlink interface provides an implementation-neutral mechanism for accessing OWL reasoner functionality. This document defines a concrete binding of OWLlink which exploits HTTP/1.1 as the transport protocol and an extended OWL 2 functional-style syntax for the message syntax.

Status of this Document

Summary of Changes

Since the latest Working Draft:

Please Comment

The OWLlink Working Group seeks public feedback on this Working Group Recommendation. Please send your comments to public-comments@owllink.org or post to the public discussion forum at http://www.owllink.org/forum/.


Contents


1. Preliminaries

This document presents the OWLlink HTTP/Functional Binding, a functional-style syntax for OWLlink, called OWLlink Functional for short. OWLlink Functional employs [HTTP/1.1] as the underlying transport protocol. As such, standard notions and features from the HTTP protocol apply (e.g., sessions, content encoding and compression, etc.).

The abstract syntax of OWLlink messages is specified in the [OWLlink Structural Specification] in terms of UML. This document specifies a concrete syntax for these abstract OWLlink messages. It employs the standard OWL 2 functional-style syntax for OWL 2 axioms and descriptions of any kind (e.g., class descriptions, datatype descriptions, etc.) As a result, developers of OWLlink components can easily reuse their parsers resp. generators to implement the two bindings. The remaining OWLlink expressions are given a functional-style syntax which is analogous to the OWL 2 functional-style syntax.

1.1 Example Request

To exemplify this, consider the following OWLlink message in the OWLlink HTTP/XML binding, which adds an OWL 2 ClassAssertion axiom to a freshly created knowledge base http://www.owllink.org/KB_1, and asks for the instances of the Father class:

owllink-example-Intro-request-20091116.xml
<RequestMessage xmlns="http://www.owllink.org/owllink#"
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:racer="http://www.racer-systems.com/owllink/ext/racer#"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.owllink.org/owllink#
    http://www.owllink.org/owllink-20091116.xsd"
>

  <racer.FullReset/>
  <CreateKB kb="http://www.owllink.org/KB_1">
    <Prefix name="family" fullIRI="http://www.family.com/"/>
  </CreateKB>
  <Tell kb="http://www.owllink.org/KB_1">
    <owl:ClassAssertion>
      <owl:Class IRI="http://www.family.com/Father"/>
      <owl:NamedIndividual abbreviatedIRI="family:John"/>
    </owl:ClassAssertion>
  </Tell>
  <GetInstances kb="http://www.owllink.org/KB_1">
    <owl:Class abbreviatedIRI="family:Father"/>
  </GetInstances>
  <ReleaseKB kb="http://www.owllink.org/KB_1"/>
</RequestMessage>

This message takes the following form in the OWLlink Functional binding:

owllink-example-Intro-request-20091116.funct
NamespacePrefix(racer <http://www.racer-systems.com/owllink/ext/racer#>)
RequestMessage(
  racer.FullReset()
  CreateKB(
    Attribute(kb <http://www.owllink.org/KB_1>)
    Prefix(
      Attribute(name "family")
      Attribute(fullIRI <http://www.familiy.com/>)))
  Tell(
    Attribute(kb <http://www.owllink.org/KB_1>)
    ClassAssertion(
      <http://www.familiy.com/Father>
      family:John))
  GetInstances(
    Attribute(kb <http://www.owllink.org/KB_1>)
    family:Father)
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/KB_1>)))

The details of this syntax translation are described in Section 2.

1.2 Namespaces

As a substitute for XML namespaces we propose a new message which extends the structural OWLlink specification, namely the NamespacePrefix message. For demonstration purposes, the namespace prefix owl is declared as a shorthand for the namespace <http://www.w3.org/2002/07/owl#> in the example message above. As a consequence, owl.ClassAssertion can be used instead of <http://www.w3.org/2002/07/owl#ClassAssertion>, very similar to XML namespaces. Note that OWLlink Functional assumes that the OWL 2 standard namespace prefixes rdf, rdfs, xsd, owl can be used without explicit declaration, as well as ol for the OWLlink namespace http://www.owllink.org/owllink#. Moreover, all the elements from these namespaces can be used without prefix notation, so ClassAssertion is synonym for owl.ClassAssertion. Regarding ol.Literal and owl.Literal, it is required that an OWLlink Functional implementation can disambiguate these Literals from their syntactic context, e.g., no explicit disambiguation is required here.

However, namespace disambiguation is required in case an element appears in more than one namespace, e.g. an element may appear in two different OWLlink extensions which shall be used simultaneously in a request. Then, either fully qualified names have to be used, or namespace prefixes have to be declared and used, as illustrated.

A set of such optional namespace prefix declarations has to appear before the RequestMessage (ResponseMessage) message, and the scope of such a prefix declarations is the current request/response pair only.

Please note that the NamespacePrefix message is rather different from the OWLlink Prefix message. Whereas the latter declares KB-specific prefixes to be used in abbreviated IRIs in attribute values, the former is required as a substitute for XML namespaces. In the following we thus explicitly distinguish namespace prefixes from prefixes. An OWLlink Functional implementation must not support namespace prefixes; in this case, fully qualified names have to be used for extensions.

1.3 Attribute Handling

To specify attributes and their values, an associative argument-passing style is used by employing the Attribute element, e.g. Attribute(kb <http://www.owllink.org/KB_1>). Note that this is an OWLlink Functional specific message. Although this seems verbose at first sight, this argument passing-style is robust the sense that the message syntax will not break if additional attributes are added to an element in a future version of OWLlink or an OWLlink extension. Moreover, a "by position"-based argument-passing scheme has the disadvantage that optional arguments complicate the message parsing, and optional arguments may have to be bypassed by supplying empty values such as nil, resulting in a non-robust message syntax with respect to future extensions or changes of the messages.

1.4 Example Response

In order to also present an OWLlink ResponseMessage, consider the valid OWLlink XML/HTTP response to the request given above:

owllink-example-Intro-response-20091116.xml
<ResponseMessage xmlns="http://www.owllink.org/owllink#"
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.owllink.org/owllink#
    http://www.owllink.org/owllink-20091116.xsd"
>

  <OK/>
  <KB kb="http://www.owllink.org/KB_1"/>
  <OK/>
  <SetOfIndividualSynsets>
    <IndividualSynset>
      <owl:NamedIndividual abbreviatedIRI="family:John"/>
    </IndividualSynset>
  </SetOfIndividualSynsets>
  <OK/>
</ResponseMessage>

In OWLlink Functional, this message takes the following form:

owllink-example-Intro-response-20091116.funct
ResponseMessage(
  OK()
  KB(Attribute(kb <http://www.owllink.org/KB_1>))
  OK()
  SetOfIndividualSynsets(
    IndividualSynset(family:John))
  OK())
Note that the [OWLlink S-Expression Binding] offers a syntactic variant of OWLlink Functional that encodes terms as S-Expressions, to be directly consumed and produced by Lisp-like languages without any further machinery.

2. Functional Binding

The functional binding specifies a concrete syntax for OWLlink abstract messages which are specified in terms of UML class diagrams, the [OWLlink Structural Specification]. The adopted syntax is very similar to the OWL 2 functional-style syntax, which is the main syntax in the [OWL 2 Specification]. In the same way as the OWL 2 XML syntax can be considered as a syntactic variant of the OWL 2 functional syntax, the OWLlink Functional syntax can be considered as a syntactic variant of the [OWLlink HTTP/XML Binding].

The set of well-formed OWLlink Functional messages is specified by a transformation which maps abstract OWLlink messages and thus, object graphs conforming to these UML diagrams, into concrete messages in OWLlink functional syntax. The transformation is specified by the two recursive transformation functions T and AT given below.

Consider an abstract OWLlink message as an object graph of the corresponding UML diagram. If i is a direct OWLlink instance (message) or OWL 2 instance (message) of type (UML class) c in this graph, and i has attribute values v_1, ..., v_n for the attributes a_1, ..., a_n of types t_1, ..., t_n (n may be zero), and also has associations ac_1, ..., ac_m to further instances (messages) i_1, ..., i_m (m may be zero) of types c_1, ..., c_m (the ranges of the associations), and if i is itself possibly the source individual of some association ac (ac is nil in case i is a root individual in the object graph), then the concrete syntax of i is given by T(i,c,ac), where T is the translation function specified below. Note that, if i is a root node and thus c is either RequestMessage or a ResponseMessage, then the OWLlink functional concrete syntax is given by T(i,c,nil). In general, T(i,c,ac) is specified as follows. Note that terminal content is specified in double quotes in this specification.

  1. If c is owl.IRI and ac is not nil, then T(i,c,ac) is given as
          "Attribute(" IRI i' ")"
        

    and i' is specified in the [OWL 2 Specification] ("Attribute" is a literal of the grammar, hence it specified in double quotes).

  2. If c is owl.fullIRI, then T(i,c,ac) is given as
          "Attribute(" ac i' ")" 
        

    and i' is specified in the [OWL 2 Specification].

  3. If c is either owl.Class, owl.ObjectProperty, owl.DataProperty, owl.Datatype, owl.Individual, or owl.AnnotationProperty, then i' is rendered either as a owl.fullIRIs or as an owl.abbreviatedIRIs (in case the implementation abbreviates IRIs), as specified by the OWL 2 functional-style syntax.This may depend on the Prefixes which are defined for the corresponding OWLlink KB from (or to) which this messages comes from (or goes to, resp.) given the implementation supports abbreviated IRIs. Note that the set of Prefixes is knowledge-base specific in OWLlink.
  4. If c denotes an OWL 2 UML class (i.e., those prefixed with owl. in the [OWLlink Specification]) which has not been covered by the preceeding clauses, then T(i,c,ac) is given as
          f "(" ... ")"
        

    as specified in the [OWL 2 Specification]. In extension to the official OWL 2 functional-style syntax, also

          prefix.f "(" ... ")" 
        

    may be used, where prefix is either some declared NamespacePrefix for <http://www.w3.org/2002/07/owl#>, or owl. Moreover, a fully qualified syntax may be used:

          "<http://www.w3.org/2002/07/owl#"f">" "(" ... ")" 
        
  5. Otherwise, i is an OWLlink message. The result of T(i,c,ac) is then given as
          c' "(" 
                TA(v_1,a_1)
                    ... 
                TA(v_n,a_n)
           
                T(i_1,c_1,ac_1) 
                    ...
                T(i_m,c_m,ac_m) 
             ")"
        

    where either c'=nsprefix.postfix if some namespace prefix nsprefix is defined for the namespace (an IRI) such that c is the concatenation of namespace and postfix, or c' is <c>, i.e. c' is the owl.fullIRI of c as specified by the OWL 2 functional-style syntax, if no such namespace prefix nsprefix is declared, or the implementation does not support namespace prefixes. Moreover, if nsprefix is one of ol, rdf, rdfs, xsd, owl, simply postfix may be used for c'. It is required that an OWLlink Functional implementation can disambiguate e.g. owl.Literal and ol.Literal from the syntactic context.

    The notion of declared namespace prefixes is explained below. An implementation may also "invent" new namespace prefixes but it is then required that the corresponding NamespacePrefix declarations appear in any response generated by this implementation. The standard namespace prefixs declarations may not appear in a response.

    Whereas for attributes, the order in which attributes are translated is not important, the translation order matters for certain i_l (referenced via associations) in some OWLlink messages such as IsClassSubsumedBy. This ordering is specified in Section '2.2 XML Schema' [OWLlink HTTP/XML Binding] and is adopted for the bindings described in this document as well.

    Moreover, TA is the attribute translation function: If v is an attribute value (e.g., the string "true") of attribute a (e.g., result) of type t (e.g., string), then TA(v,a) is specified as follows:

     
          "Attribute(" a v' ")"
        

    and v' is thus either a String, Int, or Boolean (these are the "conceptual" primitive datatypes used in the [OWLlink Structural Specification]). Boolean values are rendered as strings "true" and "false". String are double quoted strings; the encoding of the character content is addressed at the HTTP level (HTTP content encoding; UTF8 is suggested). Note that the backslash character ("\") serves as the escape character in strings.

In addition to the OWLlink messages, the OWLlink Functional binding defines one additional messages. Any number of NamespacePrefix messages may appear in a OWLlink HTTP request (response) before the RequestMessage (ResponstMessage). The message has the following form:

NamespacePrefix(nsprefix owl.fullIRI)

nsprefix may be a quoted string in terms of OWL 2 or simply a sequence of characters (without double quotes and whitespaces). This is basically owl.prefixName, but without colon at the end.

The scope of a namespace prefix declaration is the current HTTP request and the corresponding response. It is assumed that the following prefixes are automatically declared with their standard namespaces and thus need not be declared again: ol, rdf, rdfs, xsd, owl. Moreover, elements from these namespaces can be referred to without prefix notation, e.g., ClassAssertion instead of owl.ClassAssertion or even <http://www.w3.org/2002/07/owl#ClassAssertion>.

An implementation must include those user-defined non-standard NamespacePrefixes in a response which are actually used in that response to the request for which these prefixes have been declared. However, the set of standard prefix declarations for ol, rdf, rdfs, xsd, owl are never included in a OWLlink Functional response.

3. Examples

This Section present the example request and response messages from Section '4 Examples' [OWLlink HTTP/XML Binding] in Functional Syntax.

3.1 Introspecting Reasoner Capabilities

GetDescription request.

owllink-example-GetDescription-request-20091116.funct
RequestMessage(
  GetDescription())

GetDescription response.

owllink-example-GetDescription-response-20091116.funct
ResponseMessage(
  Description(
    Attribute(name "MyOwnReasoner")
    ProtocolVersion(
      Attribute(major 1)
      Attribute(minor 0))
    ReasonerVersion(
      Attribute(major 1)
      Attribute(minor 0)
      Attribute(build 0))
    Setting(
      Attribute(key "selectedProfile")
      OneOf(Attribute(type xsd:string)
        Literal(Attribute(value "OWL DL"))
        Literal(Attribute(value "OWL 2 EL")))
      Literal(Attribute(value "OWL 2 EL")))
    Property(
      Attribute(key "appliedSemantics")
      OneOf(Attribute(type xsd:string)
        Literal(Attribute(value "RDF-based")))
      Literal(Attribute(value "RDF-based")))
    Property(
      Attribute(key "supportedDatatypes")
      List(Attribute(type xsd:anyURI))
        Literal(Attribute(value <http://www.w3.org/2001/XMLSchema#long>))
        Literal(Attribute(value <http://www.w3.org/2001/XMLSchema#int>))
        Literal(Attribute(value <http://www.w3.org/2001/XMLSchema#nonPositiveInteger>))
        Literal(Attribute(value <http://www.w3.org/2001/XMLSchema#nonNegativeInteger>))
        Literal(Attribute(value <http://www.w3.org/2001/XMLSchema#short>))
        Literal(Attribute(value <http://www.w3.org/2002/07/owl#real>)))
    Setting(
      Attribute(key "abbreviatesIRIs")
      Datatype(Attribute(IRI xsd:boolean))
      Literal(Attribute(value "true")))
    Property(
      Attribute(key "ignoresAnnotations")
      Datatype(Attribute(IRI xsd:boolean))
      Literal(Attribute(value "true")))
    Property(
      Attribute(key "ignoresDeclarations")
      Datatype(Attribute(IRI xsd:boolean))
      Literal(Attribute(value "true")))
    Setting(
      Attribute(key "uniqueNameAssumption")
      Datatype(Attribute(IRI xsd:boolean))
      Literal(Attribute(value "true")))
    SupportedExtension(
      Attribute(identifier <http://www.owllink.org/ext/retraction>))
    SupportedExtension(
      Attribute(identifier <http://www.owllink.org/ext/told>))
    PublicKB(
      Attribute(kb <http://www.owllink.org/examples/KB_1>)
      Attribute(name "Test KB 1"))
    PublicKB(
      Attribute(kb <http://www.owllink.org/examples/KB_2>)
      Attribute(name "Test KB 2"))))

3.2 Creating Knowledge Bases

CreateKB request.

owllink-example-CreateKB-request-20091116.funct
RequestMessage(
  CreateKB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  Tell(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#A>
      <http://www.owllink.org/examples/myOntology#B>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#B>
      <http://www.owllink.org/examples/myOntology#C>))
  IsClassSatisfiable(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    <http://www.owllink.org/examples/myOntology#A>)
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)))

CreateKB response.

owllink-example-CreateKB-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  OK()
  BooleanResponse(
    Attribute(result "true"))
  OK())

3.3 Retrieving Settings

GetSettings request.

owllink-example-GetSettings-request-20091116.funct
RequestMessage(
  CreateKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    Attribute(name "KB 1"))
  GetSettings(
    Attribute(kb <http://www.owllink.org/examples/KB_1>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)))

GetSettings response.

owllink-example-GetSettings-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  Settings(
    Setting(Attribute(key "selectedProfile")
      OneOf(Attribute(type xsd:string)
        Literal(Attribute(value "OWL 2 QL"))
        Literal(Attribute(value "OWL 2 RL")))
      Literal(Attribute(value "OWL 2 RL")))
    Setting(Attribute(key "abbreviatesIRIs")
      Datatype(Attribute(IRI xsd:boolean))
      Literal(Attribute(value "false"))))
  OK())

3.4 Changing Settings

Set request.

owllink-example-Set-request-20091116.funct
RequestMessage(
  CreateKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    Attribute(name "KB 1"))
  Set(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    Attribute(key "abbreviatesIRIs")
    Literal(Attribute(value "true")))
  GetSettings(
    Attribute(kb <http://www.owllink.org/examples/KB_1>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)))

Set response.

owllink-example-Set-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  OK()
  Settings(
    Setting(Attribute(key "selectedProfile")
      OneOf(Attribute(type "xsd:string")
        Literal(Attribute(value "OWL 2 QL"))
        Literal(Attribute(value "OWL 2 RL")))
      Literal(Attribute(value "OWL 2 RL")))
    Setting(Attribute(key "abbreviatesIRIs")
      Datatype(Attribute(IRI "xsd:boolean"))
      Literal(Attribute(value "true"))))
  OK())

3.5 Declaring Prefixes

Prefix request.

owllink-example-Prefix-request-20091116.funct
RequestMessage(
  CreateKB(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Prefix(
      Attribute(name "test")
      Attribute(fullIRI <http://www.owllink.org/test/ont#>))
    Prefix(
      Attribute(name "myOnt")
      Attribute(fullIRI <http://www.owllink.org/examples/myOntology#>)))
  Tell(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    owl.SubClassOf(test:A myOnt:A))
  Set(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(key "abbreviatesIRIs")
    Literal(Attribute(value "false")))
  GetSubClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(direct "false")
    <http://www.owllink.org/examples/myOntology#A>)
  GetSubClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(direct "false")
    myOnt:A)
  Set(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(key "abbreviatesIRIs")
    Literal(Attribute(value "true")))
  GetSubClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(direct "false")
    <http://www.owllink.org/examples/myOntology#A>)
  GetSubClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(direct "false")
    A)
  GetPrefixes(
    Attribute(kb <http://www.owllink.org/examples/KB_2>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)))

Prefix response. Note that the fourth GetSubclass request raises an error, since it refers to the unqualified class A which relies on the XML base xml:base="http://www.owllink.org/examples/myOntology#" in the corresponding HTTP/XML example. Since there is no such feature in OWLlink functional, A cannot be resolved to http://www.owllink.org/examples/myOntology#A.

owllink-example-Prefix-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_2>))
  OK()
  OK()
  SetOfClassSynsets(
    ClassSynset(<http://www.owllink.org/test/ont#A>)
    ClassSynset(<http://www.w3.org/2002/07/owl#Nothing>))
  SetOfClassSynsets(
    ClassSynset(<http://www.owllink.org/test/ont#A>)
    ClassSynset(<http://www.w3.org/2002/07/owl#Nothing>))
  OK()
  SetOfClassSynsets(
    ClassSynset(test:A)
    ClassSynset(owl:Nothing))
  SyntaxError(
    Attribute(error "A is not a valid IRI."))
  Prefixes(
    Prefix(
      Attribute(name "rdf")
      Attribute(fullIRI <http://www.w3.org/1999/02/22-rdf-syntax-ns#>))
    Prefix(
      Attribute(name "rdfs")
      Attribute(fullIRI <http://www.w3.org/2000/01/rdf-schema#>))
    Prefix(
      Attribute(name "xsd")
      Attribute(fullIRI <http://www.w3.org/2001/XMLSchema>))
    Prefix(
      Attribute(name "owl")
      Attribute(fullIRI <http://www.w3.org/2002/07/owl#>))
    Prefix(
      Attribute(name "test")
      Attribute(fullIRI <http://www.owllink.org/test/ont#>))
    Prefix(
      Attribute(name "myOnt")
      Attribute(fullIRI <http://www.owllink.org/examples/myOntology#>)))
  OK())

3.6 Loading Ontologies

LoadOntologies request.

owllink-example-LoadOntologies-request-20091116.funct
RequestMessage(
  CreateKB(
    Attribute(kb <http://www.owllink.org/examples/families>)
    Prefix(
      Attribute(name "families")
      Attribute(fullIRI <http://example.com/owl/families/>))
    Prefix(
      Attribute(name "otherOnt")
      Attribute(fullIRI <http://example.org/otherOntologies/families/>)))
  LoadOntologies(
    Attribute(kb <http://www.owllink.org/examples/families>)
    OntologyIRI(
      Attribute(IRI <http://www.owllink.org/ontologies/primer.owl>)))
  GetInstances(
    Attribute(kb <http://www.owllink.org/examples/families>)
    families:Person)
  GetTypes(
    Attribute(kb <http://www.owllink.org/examples/families>)
    Attribute(direct "false")
    families:John)
  Tell(
    Attribute(kb <http://www.owllink.org/examples/families>)
    owl.SubClassOf(
      families:HappyPerson
      families:Person)
    owl.SubClassOf(
      otherOnt:ExcitedPerson
      families:HappyPerson))
  GetSuperClasses(
    Attribute(kb <http://www.owllink.org/examples/families>)
    Attribute(direct "false")
    otherOnt:ExcitedPerson)
  GetObjectPropertySources(
    Attribute(kb <http://www.owllink.org/examples/families>)
    families:hasWife
    families:Mary)
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/families>)))

LoadOntologies response.

owllink-example-LoadOntologies-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/families>))
  OK()
  SetOfIndividualSynsets(
    IndividualSynset(
      families:Jack)
    IndividualSynset(
      families:Mary
      otherOnt:MaryBrown)
    IndividualSynset(
      families:John
      otherOnt:JohnBrown))
  ClassSynsets(
    ClassSynset(
      families:Father)
    ClassSynset(
      families:Man)
    ClassSynset(
      families:Human
      families:Person)
    ClassSynset(
      owl:Thing
      families:NarcisticPerson)
    ClassSynset(
      families:Parent)
    ClassSynset(
      families:MyBirthdayGuests))
  OK()
  SetOfClassSynsets(
    ClassSynset(
      families:HappyPerson)
    ClassSynset(
      families:Parent)
    ClassSynset(
      owl:Thing
      families:NarcisticPerson)
    ClassSynset(
      families:Human
      families:Person))
  SetOfIndividualSynsets(
    IndividualSynset(
      families:John
      otherOnt:JohnBrown))
  OK())

3.7 Pooling Requests

Pooling request.

owllink-example-PoolingRequests-request-20091116.funct
RequestMessage(
  CreateKB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  Tell(Attribute(kb <http://www.owllink.org/examples/KB_1>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#B>
      <http://www.owllink.org/examples/myOntology#A>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#C>
      <http://www.owllink.org/examples/myOntology#A>)
    owl.EquivalentClasses(
      <http://www.owllink.org/examples/myOntology#D>
      <http://www.owllink.org/examples/myOntology#E>)
    owl.ClassAssertion(
      <http://www.owllink.org/examples/myOntology#A>
      <http://www.owllink.org/examples/myOntology#iA>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#C>
      <http://www.owllink.org/examples/myOntology#A>))
  GetAllClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_1>))
  GetEquivalentClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    <http://www.owllink.org/examples/myOntology#D>)
  IsEntailedDirect(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    owl.SubClassOf(
      owl:Thing
      owl:Nothing))
  GetSubClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)
    <http://www.owllink.org/examples/myOntology#C>)
  CreateKB(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    Attribute(name "MyKB_2"))
  Tell(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    owl.SubClassOf(
      http://www.owllink.org/examples/myOntology#A
      http://www.owllink.org/examples/myOntology#B))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_2>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>))
  GetAllClasses(
    Attribute(kb <http://www.owllink.org/examples/KB_1>)))

Pooling response.

owllink-example-PoolingRequests-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  OK(Attribute(warning "Duplicate axiom ignored"))
  SetOfClasses(
    <http://www.owllink.org/examples/myOntology#A>
    <http://www.owllink.org/examples/myOntology#B>
    <http://www.owllink.org/examples/myOntology#C>
    <http://www.owllink.org/examples/myOntology#D>
    <http://www.owllink.org/examples/myOntology#E>)
  SetOfClasses(
    <http://www.owllink.org/examples/myOntology#D>
    <http://www.owllink.org/examples/myOntology#E>)
  BooleanResponse(Attribute(result "false"))
  SetOfClassSynsets(
    ClassSynset(owl:Nothing))
  KB(Attribute(kb <http://www.owllink.org/examples/KB_2>))
  OK()
  OK()
  OK()
  KBError(Attribute(error "http://www.owllink.org/examples/KB_1 does not exist!")))

3.8 Retrieving Taxonomies

Taxonomy request.

owllink-example-Taxonomy-request-20091116.funct
RequestMessage(
  CreateKB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  CreateKB(Attribute(kb <http://www.owllink.org/examples/KB_2>))
  Tell(
    Attribute(kb <http://www.owllink.org/examples/KB_2>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#A>
      owl:Thing))
  CreateKB(Attribute(kb <http://www.owllink.org/examples/KB_3>))
  Tell(
    Attribute(kb <http://www.owllink.org/examples/KB_3>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#A>
      owl:Thing)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#B>
      <http://www.owllink.org/examples/myOntology#A>)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#D>
      <http://www.owllink.org/examples/myOntology#A>))
  CreateKB(Attribute(kb <http://www.owllink.org/examples/KB_4>))
  Tell(
    Attribute(kb <http://www.owllink.org/examples/KB_4>)
    owl.EquivalentClasses(
      <http://www.owllink.org/examples/myOntology#A>
      owl:Thing)
    owl.EquivalentClasses(
      <http://www.owllink.org/examples/myOntology#C>
      owl:Nothing)
    owl.SubClassOf(
      <http://www.owllink.org/examples/myOntology#B>
      owl:Thing))
  GetSubClassHierarchy(
    Attribute(kb <http://www.owllink.org/examples/KB_1>))
  GetSubClassHierarchy(
    Attribute(kb <http://www.owllink.org/examples/KB_2>))
  GetSubClassHierarchy(
    Attribute(kb <http://www.owllink.org/examples/KB_3>))
  GetSubClassHierarchy(
    Attribute(kb <http://www.owllink.org/examples/KB_4>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_1>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_2>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_3>))
  ReleaseKB(
    Attribute(kb <http://www.owllink.org/examples/KB_4>)))

Taxonomy response.

owllink-example-Taxonomy-response-20091116.funct
ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  KB(Attribute(kb <http://www.owllink.org/examples/KB_2>))
  OK()
  KB(Attribute(kb <http://www.owllink.org/examples/KB_3>))
  OK()
  KB(Attribute(kb <http://www.owllink.org/examples/KB_4>))
  OK()
  ClassHierarchy(
    ClassSynset(owl:Nothing))
  ClassHierarchy(
    ClassSynset(owl:Nothing)
    ClassSubClassesPair(
      ClassSynset(owl:Thing)
      SubClassSynsets(
        ClassSynset(<http://www.owllink.org/examples/myOntology#A>))))
  ClassHierarchy(
    ClassSynset(owl:Nothing)
    ClassSubClassesPair(
      ClassSynset(owl:Thing)
      SubClassSynsets(
        ClassSynset(<http://www.owllink.org/examples/myOntology#A>)))
    ClassSubClassesPair(
      ClassSynset(<http://www.owllink.org/examples/myOntology#A>)
      SubClassSynsets(
        ClassSynset(<http://www.owllink.org/examples/myOntology#B>)
        ClassSynset(<http://www.owllink.org/examples/myOntology#D>))))
  ClassHierarchy(
    ClassSynset(<http://www.owllink.org/examples/myOntology#C> owl:Nothing)
    ClassSubClassesPair(
      ClassSynset(<http://www.owllink.org/examples/myOntology#A> owl:Thing)
      SubClassSynsets(
        ClassSynset(<http://www.owllink.org/examples/myOntology#B>))))
  OK()
  OK()
  OK()
  OK())

4. References

[OWL 2 Specification]
OWL 2 Web Ontology Language: Structural Specification and Functional-Style Syntax Boris Motik, Peter F. Patel-Schneider, Bijan Parsia, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/. Latest version available at http://www.w3.org/TR/owl2-syntax/.
[OWLlink Structural Specification]
OWLlink: Structural Specification Thorsten Liebig, Marko Luther, Olaf Noppens. Working Group Recommendation, 16 November 2009, http://www.owllink.org/owllink-20091116/.Latest version available at http://www.owllink.org/owllink/.
[OWLlink HTTP/XML Binding]
OWLlink: HTTP/XML Binding Olaf Noppens, Marko Luther, Thorsten Liebig, Michael Wessel. Working Group Recommendation, 16 November 2009, http://www.owllink.org/owllink-httpxml-20091116/. Latest version available at http://www.owllink.org/owllink-httpxml/.
[OWLlink HTTP/S-Expression Binding]
OWLlink: HTTP/S-Expression Binding Michael Wessel. Working Group Recommendation, 16 November 2009, http://www.owllink.org/owllink-httpsexpr-20091116/. Latest version available at http://www.owllink.org/owllink-httpsexpr/.
[HTTP/1.1]
Hypertext Transfer Protocol - HTTP/1.1, Request for Comments 2616. R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, and T. Berners-Lee.