W3C W3C Member Submission

OWLlink:
HTTP/Functional Binding

W3C Member Submission 1 July 2010

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

This document is available under the W3C Document License. See the W3C Intellectual Rights Notice and Legal Disclaimers for additional information.


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

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document is a part of the OWLllink Submission which comprises eight documents:

  1. OWLlink: Structural Specification
  2. OWLlink: HTTP/XML Binding
  3. OWLlink: HTTP/Functional Binding (this document)
  4. OWLlink: HTTP/S-Expression Binding
  5. OWLlink Extension: Retraction
  6. OWLlink Extension: Retraction HTTP/XML Binding
  7. OWLlink Extension: Retraction HTTP/Functional Binding
  8. OWLlink Extension: Retraction HTTP/S-Expression Binding

Earlier drafts of the OWLlink specification have been published by the informal OWLlink working group at http://www.owllink.org.

By publishing this document, W3C acknowledges that the Submitting Members have made a formal Submission request to W3C for discussion. Publication of this document by W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or will be allocating any resources to the issues addressed by it. This document is not the product of a chartered W3C group, but is published as potential input to the W3C Process. A W3C Team Comment has been published in conjunction with this Member Submission. Publication of acknowledged Member Submissions at the W3C site is one of the benefits of W3C Membership. Please consult the requirements associated with Member Submissions of section 3.3 of the W3C Patent Policy. Please consult the complete list of acknowledged W3C Member Submissions.


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:

<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.w3.org/submissions/2010/SUBM-owllink-httpxml-binding-20100701/owllink.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:

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:

<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:

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.

RequestMessage(
  GetDescription())

GetDescription response.

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.

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.

ResponseMessage(
  KB(Attribute(kb <http://www.owllink.org/examples/KB_1>))
  OK()
  BooleanResponse(
    Attribute(result "true"))
  OK())

3.3 Retrieving Settings

GetSettings request.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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 Document included in the present W3C Member Submission.
[OWLlink HTTP/XML Binding]
OWLlink: HTTP/XML Binding Document included in the present W3C Member Submission.
[OWLlink HTTP/S-Expression Binding]
OWLlink: HTTP/S-Expression Binding Document included in the present W3C Member Submission.
[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.