The OWLlink interface provides an implementation-neutral mechanism for accessing OWL reasoner functionality. OWLlink is a refinement of the DIG protocol most notably with respect to query and language expressivity. It has been renamed to OWLlink since it relies on OWL 2 for the primitives of the modelling language, and is thus fully compatible with OWL. The set of OWLlink core primitives described in this document cover basic reasoner management, assertion of axioms and elementary ask functionality. An extension mechanism is provided in order to easily add any required functionality in a controlled way to the core language. This document defines the OWLlink core interface by providing a structural specification. A concrete binding into [HTTP/1.1] and [XML Schema] is given in an accompanying document [OWLlink HTTP/XML Binding].
This version of the OWLlink structural specification refers to the public OWL 2 working draft as of April 11th 2008 (http://www.w3.org/TR/2008/WD-owl2-syntax-20080411/) and will soon be superseded by an updated specification in order to align with the latest OWL 2 working draft or recommendation.
This document is being published as one of a set of 3 documents:
The OWLlink Working Group seeks public feedback on these Working Drafts. Please send your comments to public-comments@owllink.org or post to the public discussion forum at http://www.owllink.org/forum/.
Contents |
OWLlink provides a declarative interface to OWL reasoners. It is intended to be a lightweight mechanism giving client applications access to reasoning functionality provided by a server. The OWLlink core defines primitives for handling and manipulation of OWL Knowledge Bases (KBs), such as asserting axioms, as well as primitives for asking questions about KB entities. Each KB given to the reasoner is a self-contained collection of facts and axioms.
This document specifies the latest version of the OWLlink interface. The specification draws on experiences gained from its predecessor DIG. The initial [DIG 1.0] specification of 2002 was designed by the DL Implementation Group (DIG), a self-selecting assembly of researchers and developers associated with implementations of DL systems. The shortly following version [DIG 1.1] of 2003 was quickly adopted by numerous reasoning engines, ontology editors and other applications. Despite its success there remained several shortcomings, such as limitations in the supported language fragment, a lack of elementary queries, and no mechanism to extend the protocol [DIG 1.1 Experience]. Most of the identified issues were fixed in the draft specification of [DIG 2.0], introduced in 2006 [DIG 2.0 OWLED'06], by adding the requested features and lifting the concept language to that of [OWL 2]. Finally, [DIG 2.0] has been renamed into OWLlink in 2008 [OWLlink OWLED'08] to reflect the important shift from its DL roots to the XML-based cousin OWL and the lack of backwards compatibility to DIG.
Since syntax and semantic of the OWLlink language primitives are based on OWL 2, the effort to support the core protocol with respect to parsing is reduced. Consequently, OWLlink inherits all of its underlying language concepts such as punning and the OWL 2 notion of structural equivalence. However, it does not support any parts of OWL 2 beyond the level of axioms. In particular, it does not support imports and the notion of an ontology. Client applications have to resolve any issues related to the handling of imports before passing a KB to an OWLlink server. Under this view, the OWLlink interface is by far more abstract in terms of implementation languages and internal representation models than frameworks that provide access to data structures representing OWL ontologies such as the Java specific OWL API. Furthermore, the OWLlink specification does not address issues such as stateful connections, transactions, authentication, encryption, compression, concurrency, multiple clients and so on. Yet some features (such as authentication, encryption and compression) might be transparently provided by the access protocol (eg., [HTTP/1.1]) underlying a concrete OWLlink binding.
We introduce the structural specification of the OWLlink core using class diagrams expressed in the Unified Modeling Language (UML). Such a style of specification allows for a specification of the OWLlink primitives at a conceptual level. The conceptual aspects of the primitives, such as the types of arguments and the semantics, are thus decoupled from a concrete protocol and syntax used to actually access OWLlink implementations. Hence, the same primitives can be realized using different access protocols. The accompanying [OWLlink HTTP/XML Binding] document describes a concrete binding in [HTTP/1.1] and [XML Schema]. However, access protocols using Web services or other remote procedure call mechanisms could be provided in the future.
The OWLlink interface makes a number of assumptions:
OWLlink relies on the [OWL 2 Specification] for the language used to express Knowledge Base axioms. OWL 2 has also been specified using UML, so OWLlink simply reuses many UML classes provided by OWL 2. The UML notation used in this document is restricted to a very limited subset of UML class diagram notation. The names of abstract classes are written in italic. The names of all OWL 2 UML concepts are prefixed with ox. to emphasize that they are not defined in this specification. We briefly recapitulate the most important classes of OWL 2 with respect to this OWLlink specification:
OWLlink inherits the notion of structural equivalence of OWL 2. An OWLlink server has to to accept sets containing repetitions of structurally equivalent axioms without raising an error, but is free to provide a warning in this case.
Another feature of OWLlink shared with OWL 2 is its use of what is generally called "punning". The basic idea is that each name in an OWLlink Knowledge Base can be used as the name of any or all of a datatype property, an object property, a class, a datatype, and an individual at the same time. However, all five of these uses are completely independent. Punning in OWL 2 and OWLlink Knowledge Bases eliminates the need for introducing different names for different entity types. In fact, the structure of OWL 2 axioms has been chosen in a way that any construct that use names provides enough context to unambiguously identify the type of an entity the name refers to.
The semantics of the OWLlink core asks is given (if not obvious) on the basis of the OWL 2 model-theoretic semantics [OWL 2 Semantics]. More precisely, OWLlink adopts the notion of a vocabulary for its KBs being a 6-tuple V = ( NC , NPo , NPd , NI , ND , NV ) and an interpretation I where
OWLlink is a client-server protocol. It is specified in two parts: the first part defines the abstract protocol, and the second part defines the binding of the protocol into a concrete transport mechanism. While the abstract protocol is defined in this specification document, its binding to [HTTP/1.1] and [XML Schema] is given in an accompanying document [OWLlink HTTP/XML Binding].
This document uses UML class diagrams to specify the abstract protocol. Thereby all following diagrams depict both, the OWLlink request and their corresponding response message. In case of bundling multiple requests with different responses within one diagram, the accompanying text describes which response belongs to which request.
Before sending a request to an OWLlink server, a client must establish an OWLlink session to the server that abstracts the actual bidirectional communication channel between the client and the server. The actual implementation of a session provides primitives to transport requests and responses and is defined by the transport mechanism used to access an OWLlink server.
OWLlink servers are allowed to service several clients concurrently. However, interaction within one OWLlink session is not concurrent. An OWLlink session is assumed to transport requests and responses sequentially. Each request should be processed by the OWLlink server such that the results are the same as if the requests were processed sequentially in the order they were dispatched. Furthermore, the server must send the responses to the client in exactly the same order in which the requests arrived. OWLlink does not prescribe how concurrent requests issued through different OWLlink sessions are to be handled. Servers are free to provide their own mechanisms for isolating interaction between different OWLlink sessions.
An OWLlink session can be terminated by the client or the server. Furthermore, due to environmental circumstances (e.g., network problems or timeouts), an OWLlink session can be broken asynchronously. Regardless of the cause, all requests issued on an OWLlink session that were not completed when the OWLlink session was terminated must be made invalid. The exact meaning of this is not precisely specified. An OWLlink server can, but is not required to, implement a transaction mechanism for rolling back not completed requests. If a client establishes a different OWLlink session, an OWLlink server should not send any responses for the invalid requests: each response can be transmitted only through the OWLlink session through which the request was initiated.
Protocol Objects
The basic interaction pattern of OWLlink is that of request-response. The fundamental objects used in the protocol are presented in Figure 1.
Each request is paired with exactly one response. Depending on the transport mechanism, it might be inefficient to send individual requests to an OWLlink server at a time. Therefore, OWLlink allows to bundle requests into messages. As shown in Figure 1, a RequestMessage object encapsulates a list of Request objects, whereas a ResponseMessage object encapsulates a list of Response objects.
Each request message must correspond to exactly one response message. The response message must contain the responses to all the requests from the request message, and all responses must be listed in the response in the order matching with the order of the corresponding requests. The responses must be the same as if the requests were executed sequentially in the order specified in the request message. Note that an OWLlink server is free to execute the requests in any way it wishes, as long as the requests are seemingly executed sequentially. For example, if a request to update the Knowledge Base is followed by a query request, the responses to the query must take the updates into account.
Each request in OWLlink must be accompanied by a corresponding response (cf. Figure 1). Request primitives that address a specific Knowledge Base are subclasses of the abstract KBRequest class and the corresponding confirmations are subclasses of the abstract KBResponse class. If a request has been processed successful, the type of the response returned depends on the request and may contain additional data. If a request does not produce any specific data, the OWLlink server should still return a Confirmation response to the client. For example, if a request to write axioms into a Knowledge Base succeeds, only a confirmation response is returned indicating that all axioms were added successfully.
A Confirmation (or any sub-type thereof) may contain a warning. For example, an OWLlink server may accept sets containing repetitions of objects without raising a warning. However, it may be useful to warn the user if this has happened, as this may indicate a spelling or typographical mistake.
If a request cannot be executed, the OWLlink server should return an Error response to the OWLlink client containing a message specifying the cause for failure. Specific error classes are defined to report syntactic violations (SyntaxError), semantic problems (SemanticError) and problems regarding the management of a Knowledge Base (KBError).
If a server cannot process a request, it should attempt to recover gracefully, and process other pending requests as if the error did not happen. If, however, this recovery is not possible the server should close the OWLlink session after sending the Error response. The state of the server after such an action is not prescribed by this specification.
This specification does not require requests that modify a Knowledge Base to execute atomically. For example, a request for adding axioms to a Knowledge Base might fail after several axioms have been already added. In this case, the OWLlink server is not required to roll back the already processed axioms — the behavior of the server is implementation-specific. Nevertheless, OWLlink implementors are encouraged to ensure that requests which modify a Knowledge Base are executed atomically.
All OWLlink servers must support the GetDescription request, shown in Figure 2, to allow clients to discover its identity and introspect its capabilities. The response to this request is a Description, providing information about the servers current state, including: the name of the OWLlink server, its version, an optional identification message, the OWLlink protocol version, the currently managed public and named KBs (see Section 3.4), the supported OWLlink extensions (see Section 3.5), and a set of configurations. In this way, each OWLlink client can introspect the current status and the capabilities of an OWLlink server. The OWLlink protocol version as of this specification is "1.0" (major.minor and no build).
Server Description
A configuration is either and property or a setting. While properties are read-only, settings (such as optimizations to be used during reasoning) can be set via Set to values of the associated types by a client for a specific KB (see Section 3.4). Each configuration item in a Description is associated with its values and its type. Values are transported in String constants and the set of possible types is restricted to simple types (at least the types Boolean and String have to be supported by any implementation), enumeration types and homogeneous lists of such types. Note that the settings given in a Description are the default values that hold for newly created KBs. The actual settings that hold for a KB can be retrieved via a Settings request (cf. Section 3.4). As settings can be modified per KB at any time via Set requests, the default settings reported in a Description might differ from the actual settings retrieved by Settings.
While OWLlink defines the general format of configurations, it does not provide specific details on available configurations — these will be defined on a per-server basis. However, the following configurations have to be supported by any OWLlink server.
OWLlink servers can manage more than one KB simultaneously. Each OWLlink KB is identified with a unique URI on creation. These URIs provide a handle that identifies the particular incarnation of the KB in the particular server. Most OWLlink requests are derived from the KBRequest class, which requires a kb parameter identifying the KB to which the request applies. If a KB with the given URI cannot be found, the server should return a KBError object.
Knowledge Base Allocation
A new KB is allocated within the OWLlink server by sending a CreateKB request (cf. Figure 3). If the optional argument kb of type URI is given, the new KB is allocated with this URI, otherwise a new (server-generated) URI is used. On successful creation of the new KB, a KB object containing the URI that identifies the allocated KB is returned. However, if the given URI is already in use by another KB allocated before or the KB could not be allocated for some other reasons (e.g., a low memory condition), the response to the CreateKB request is a KBError. Freshly allocated KBs are initially empty, not containing any fact or axiom. Note that the only way to produce an empty KB (without using advanced features like retraction of course) is through a CreateKB request. The optional name argument of a CreateKB request allows to associate a name with a KB on creation. Such KB names do not have to be unique and thus cannot be used to identify a certain KB. However, named KBs are published together with their identifying KB URI in the servers Description object and thus can be accessed from multiple clients.
The use of unique URIs allows to sidestep some of the issues relating to multiple clients. If a client chooses not to share a KB URI with another client (either directly or by making it public through passing a name on creation), then the client can be sure that it is the only one interacting with that KB. This is not entirely the case, as a malicious client could choose to try sending messages with random URIs to a running OWLlink server. There is a (very small) chance that such a client could get lucky and hit on a URI which is in use, but this potential situation is unlikely enough not to be concerned with it.
Different clients of the same server, like KB browsers or explanation tools, however, may want to
share KBs by sharing URIs or making KBs public through naming — it is then the clients'
responsibility to manage and coordinate this sharing.
The possibility to pass an identifying URI along with a CreateKB request, allows OWLlink KBs to stand alone — a situation that is useful, say for test suites and benchmarking.
Knowledge Base Settings
The actual settings of a KBs options can be retrieved by sending a GetSettings request (see Figure 4). The Settings response does not need to be equal to the corresponding section within the Description object, as the value of an option may at any time be modified using a Set request (see Figure 5). The response to a successful Set request is an OK object indicating that the value of the corresponding option has been set to the given value within the server. At any time, the value reported by a Settings object for an option has to correspond to the value of the previous successful Set request for that option, or, in case no such request was ever issued, the default value for that option as reported in the Description object. Note that a server might at any time decide to refuse a Set request. For example, a server might support the change of certain options only if the corresponding KB is still empty. In that case, or if the addressed option is not supported or the value does conflict with the options type annotation, it has to return a corresponding Error object without modifying the value of the option.
Knowledge Base Configuration and Release
It is good practice for clients to release a KB once it is not in use any more, as this allows the OWLlink server to free the resources allocated for the KB. This can be done using the ReleaseKB request (see Figure 5), to which the server should respond on success with the OK response and otherwise with a KBError. Once a KB has been released, any further requests using its URI result in a KBError.
Different reasoners support different languages as well as different reasoning facilities. To support these differences, OWLlink is extensible. Current candidates for extensions are:
An OWLlink extension consists of a set of documents,
All documents must be available on the web, and their URIs must adopt the given naming schema for bindings. For instance, the specification of the retraction extension can be found at http://www.owllink.org/ext/retraction/ and its corresponding HTTP/XML binding is described at http://www.owllink.org/ext/retraction-httpxml/ (whereas the XML schema for the latter is at http://www.owllink.org/ext/retraction-xml.xsd). An OWLlink server reports the set of extensions supported for the binding used by a GetDescription request as part of the resulting Description object (cf. Figure 2) by listing their URIs without extension.
OWLlink implementors are free to extend the set of supported OWLlink primitives. This can be simply done by providing adequate subclasses of Request and Response with appropriate parameters. Since RequestMessage and ResponseMessage objects contain lists of Request and Response objects, respectively, such proprietary extensions can readily be passed in messages.
The extension mechanism should not be used for either overloading core OWLlink statements with additional information or altering their semantics.
Figure 6 shows the primitive for adding content to a KB via OWLlink. Since OWLlink
2 relies on the concept language of OWL 2 for expressing content, it basically refers to the OWL 2
axioms. More precisely, the Tell request adds a set of OWL 2 axioms to
the specified KB. Analogous to the definition of an ontology in OWL 2 an OWLlink KB
is defined by a set of unordered axioms without repetitions in the sense of
structural equivalence. An OWLlink server must not return an error in case a
structurally equivalent axiom is submitted a second time but is free to provide
a warning. It should, however, keep only one copy of the structurally equivalent
axiom. If a server states to ignore annotations it also has to take this into
account when checking for structural equivalence, i.e. has to filter annotations
at all levels of the tell language beforehand.
If all axioms are successfully added to the KB, the server should respond with
a Ok response.
Primitive for Adding Axioms to a KB
A request may contain a mixture of arbitrary management, tell, and ask requests. This allows, for example, to create self-containing test cases for OWLlink servers. For instance, one single request may include the creation of a KB (with a user given URI) followed by a tell, an ask, more tells, and further asks.
The OWLlink core includes a set of general requests for retrieving information about KB entities as well as entailed facts. These so called basic asks only cover very common queries. They extend the query interface of [DIG 1.1] with requests needed to be more aligned with OWL 2 or which have been missed by user of previous DIG releases (e.g. see [DIG 1.1 Experience]). More complex queries are delegated to query extensions such as the query language extension [OWLlink Query Extension]. Furthermore, syntactical information about previously transfered axioms can be retrieved by the optional told axiom extension [OWLlink Told Retrieval].
Each particular request depicted in Figure 7 returns a set of all corresponding
named OWL 2 entities of the referenced KB. That is a possibly empty
SetOfXXX consisting of ox.XXX where XXX is one of
OWLClass, ObjectProperty, DataProperty,
Datatype, Individual, or AnnotationProperty.
Note that semantically equivalent entities are not grouped or marked
as such.
Note that GetAllIndividuals return the set
of all named individuals (ground facts). The SetOfDatatypes response has to consist of all built-in and user defined datatypes which are actually referenced within the axioms of the KB.
Basic Asks for Retrieving KB Entities
In case an OWLlink server ignores all annotation axioms it must not return annotation properties as well as classes, properties, etc. which only occur in annotation axioms. Furthermore, if a server ignores declarations, all declared entities will not be part of the responses unless they are referenced elsewhere. On the other hand, when considering declarations the responses have to account for declared entities in all responses.
Request for Checking KB Status
Figure 8 shows the KB status requests. IsKBSatisfiable returns true if the KB has at least one interpretation I which is a model for all axioms of the KB. Note that according to the OWL 2 semantics [OWL 2 Semantics] annotations have no semantic influence. Therefore, conflicting statements within annotations are without any consequences to the KB status requests.
IsKBStructurallyConsistent returns true if the Knowledge Base is structurally consistent according to the definition from [OWL 2 Semantics]. Note that if a server ignores declarations the IsKBStructurallyConsistent query is useless and has to respond with an error.
The GetKBLanguage query returns a string representation of the internal, reasoner-specific language fragment of the KB. Note that due to potential optimization techniques or other processing steps this fragment may be different to the pure syntactical language characterization as well as may change over time (e.g. after adding/retracting axioms or reasoning).
The basic asks of Figure 9 about one or more classes all return a boolean value and cover requests such as class subsumption, class satisfiability, class equivalence, and class disjointness.
Basic Asks Referring to Classes
The basic class queries GetSubClasses and GetSuperClasses of Figure 10 return the (direct) sub- resp. super-classes of a given class description. The sub-classes of a OWL class description D are the named class entities (class descriptions of type ox.OWLClass) A for which AIc ⊆ DIc (resp. ⊇ for super-classes) in all models of the KB. In case of direct is set to true then these queries only return the direct sub- resp. super-classes with the further constraint that there is no distinct B with BIc ⊂ DIc and AIc ⊂ BIc.
Basic Queries wrt. Subsumption between Classes
Both queries return a set of class synonym sets. The synonym sets embrace those classes which are equivalent to each other.
Basic Queries Referring to Equivalent Classes and the Class Hierarchy
The equivalent classes of a OWL class description can be retrieved with help of the GetEquivalentClasses query of Figure 11. This query returns a (potentially empty) set of other class names An (SetOfClasses response) which are equivalent to the given description C (see left hand side of Fig. 11), that is AkIc = CIc for 1 ≤ k ≤ n.
The complete class hierarchy can be retrieved utilizing a single request,
namely GetSubClassHierarchy. This request has an
optional argument which is a class name (see Figure 11). Without giving a class
name this query returns all super-/sub-class pairs of the KB, whereas the first
element consists of a synset of classes and the second of a set of sub-class
synsets (ClassHierarchy response). The latter set may
be an empty set in case the super class has no sub classes other than the
unsatisfiable class. There is no order of class-subclass pairs within the
response. The two predefined OWL class entities owl:Nothing and owl:Thing are not
considered in the class sub-class pairs of this response (unless there is a
class which is equivalent to them) . This is because of two reasons: (1) to have
analogous responses in comparison to the property hierarchy requests (where
comparable predefined entities do not exist) (2) to minimize the number of pairs
to be transfered (by ruling out redundant pairs). Therefore, when retrieving the
initial hierarchy of a just created KB the response will contain no class
sub-class pair.
See the following examples use square brackets
"[]" for ClassSubClassPairs, curly brackets
"{}" for SetOfSubClassSynsets and round
brackets "()" for ClassSynsets. The
respective responses to the GetSubClassHierarchy query,
namely ClassHierarchy are enclosed with angle brackets
"〈〉":
KB (OWL 2 functional syntax) | GetSubClassHierarchy() response |
---|---|
∅ | 〈〉 |
SubClassOf(A owl:Thing) | 〈[(A) {}]〉 |
SubClassOf(A owl:Thing) SubClassOf(B A) |
〈[(A) {(B)}]〉 |
EquivalentClasses(A owl:Thing) EquivalentClasses(C owl:Nothing) SubClassOf(B owl:Thing) |
〈[(A owl:Thing) {(B)}] [(B) {(C owl:Nothing)}]〉 |
KB (OWL 2 functional syntax) | GetSubClassHierarchy() response |
---|---|
∅ | 〈[(owl:Thing) {}] [(owl:Nothing) {}]〉 |
SubClassOf(A owl:Thing) | 〈[(owl:Thing) {(A)}] [(owl:Nothing) {}]〉 |
SubClassOf(A owl:Thing) SubClassOf(B A) |
〈[(owl:Thing) {(A)}] [(A) {(B)}] [(owl:Nothing) {}]〉 |
EquivalentClasses(A owl:Thing) EquivalentClasses(C owl:Nothing) SubClassOf(B owl:Thing) |
〈[(A owl:Thing) {(B)}] [C owl:Nothing) {}]〉 |
When providing a class name as argument to GetSubClassHierarchy a fraction of the hierarchy will be returned starting with the supplied class as root.
Likewise to the class asks above there are analog asks about object properties as shown in Figure 12.
Basic Asks Referring to Object Properties
Furthermore, the IsObjectPropertyXXX checks for the various characteristics an object property can have. Here XXX can be one of Functional, InverseFunctional, Reflexive, Irreflexive, Symmetric, Asymmetric, or Transitive.
Basic Queries to Object Properties
Queries about sub- as well as super-object properties are given in Figure 13. The answers to these queries are sets of object property synsets. Likewise to the corresponding class queries these queries also have a direct flag in order to retrieve all or only the direct sub- resp. super-object properties.
Basic Asks Referring to Equivalent, Unsatisfiable, and Disjoint Object Properties
The request for retrieving equivalent (GetEquivalentObjectProperties) and unsatisfiable object properties (GetUnsatisfiableObjectProperties) and the object
property hierarchy are shown in Figure 14. Their respective response is a set of object properties (SetOfObjectProperties response).
The result set of the GetDisjointObjectProperties query in Figure 15 is
a set of object property synsets (SetOfObjectPropertySynsets).
The object property hierarchy can be retrieved with GetSubObjectPropertyHierarchy (Figure 15). It is analogical to the corresponding class query and returns pairs consisting of object property synsets and their corresponding set of sub-object property synsets. Note that since there is no predefined unsatisfiable (as well as universal) property in OWL 2 this reveals no information about unsatisfiable object properties.
Query for Retrieving the Object
Property Hierarchy.
Essentially the same queries as for object properties are provided for data properties. There is one exception with respect to the characteristics of data properties which are limited to IsDataPropertyFunctional as can be seen in Figure 16.
Basic Asks Referring to Data Properties
The queries for retrieving all as well as only direct sub- and super-data properties are depicted in Figure 17.
Basic Queries to Data Properties
Requests for querying important data property relationships are given in Figure 18. The result set to GetEquivalentDataProperties return a set of equivalent other data properties. With help of GetUnsatisfiableDataProperties one can retrieve the set of non-satisfiable data properties. GetDisjointDataProperties returns a set of data property synsets which are disjoint to the given one.
Basic Asks Referring to Equivalent, Unsatisfiable, and Disjoint Data Properties.
Likewise to the object property hierarchy, GetSubDataPropertyHierachy (Figure 19) responds with pairs of super- and sub-data properties.
Query for Retrieving the Data
Property Hierarchy.
The following queries refer to ground facts. This means that they are only sensitive to named individuals of the underlying KB. For instance, retrieving the fillers of an object property r with respect to an individual i (see GetObjectPropertyFillers in Figure 27) given a KB containing solely the axiom ClassAssertion(i MinCardinality(1 r)) will return the empty set since there is no named individual in the KB which satisfies the query condition.
AreIndividualsEquivalent respectively AreIndividualsDisjoint returns true in case a set of provided individuals are all the same or all different from each other. More precisely, for n individuals an AreIndividualsEquivalent returns true if ajIi = akIi with 1 ≤ j, k ≤ n for every model I of the KB. The contrary case (AreIndividualsDisjoint) returns true if ajIi ≠ akIi with 1 ≤ j, k ≤ n and j ≠ k. In case an OWLlink server has the UNA enabled AreIndividualsEquivalent always returns false and AreIndividualsDisjoint always true when asked with different identifiers.
Whether an individual is an instance of a class description can be checked with help of IsInstanceOf. For an individual a and a description C this query returns true in case aIi ∈ CIc holds in every model I of the KB.
Basic Asks wrt. Individuals
In order to retrieve the classes an individual is an instance of GetTypes can be used as depicted in Figure 21. For an individual a it returns all synonym sets of named classes A where aIi ∈ AIc in all models I of the KB. When setting the direct flag to true the query returns only the most specific class synonym sets of the previous answer, namely those where there is no B with aIi ∈ BIc where BIc ⊂ AIc.
The flattened variant GetFlattenTypes rules out any information about class equivalence from the response by simply returning a set of classes.
Basic Query wrt. Individual Instantiation
Figure 22 show the the GetDisjointIndividuals query which answers with a set of synsets containing all those individuals bn for a given a with aIi ≠ bjIi where 1 ≤ j ≤n.
Retrieving Disjoint Individuals
The equivalent individuals to an individual are returned as result to the query GetEquivalentIndividuals (Figure 23) which answers with a potentially empty set of equivalent individuals to a, namely all bn with aIi = bjIi where 1 ≤ j ≤n. This query as well as the flattened variant for retrieving disjoint individuals (GetFlattenDisjointIndividuals) also returns a set of individuals.
Retrieving Equivalent Individuals
To retrieve the object properties originating from a source individual or pointing to a target individual GetObjectPropertiesOfSource and GetObjectPropertiesOfFiller are provided (see Figure 24). They return a set of object property synsets. The object properties of a source individual a are those object properties R where there exists an individual b such that (aIi, bIi) ∈ RIpo in all models of the KB (and vice versa for the corresponding filler query). The query GetObjectPropertiesBetween returns all object properties which relate two given individuals.
The negative flag of those queries indicates whether this queries refer to the positive (default) or negative object property assertions. When set to true this flag refers to NegativeObjectPropertyAssertions which state that two entities are not related by a property. For instance, the result set of the GetObjectPropertiesOfSource query will then contain all object properties R where there exists an individual b such that (aIi, bIi) ∉ RIpo in all models of the KB.
Querying Instantiated Object Properties between Individuals
Figure 25 shows the asks for checking whether two individuals or an individual and a constant are related via a given property (AreIndividualsRelated resp. IsIndividualRelatedWithConstant).
Asks for Checking Relatedness
between Individuals and Constants.
In Figure 26 there are the corresponding data property queries from above (Figure 24) in order to retrieve data properties which relate individuals with constants.
Querying Instantiated Data Properties
The queries GetObjectPropertyFillers and GetObjectPropertySources take an object property and an originating/target individual and return all fillers resp. sources with respect to the property (see Fig. 27). The result consists of a set of individual synsets. Formally, given an individual a and an object property R the GetObjectPropertyFillers response consists of all individuals bn where (aIi, bkIi) ∈ RIpo for 1 ≤ k ≤ n in all models of the KB (and vice versa for the corresponding source query). The negative flags refer to the kind of property assertion (either positive or negative).
Querying Fillers/Sources of Instantiated Properties
GetInstances returns those individuals which are instances of a provided description, i.e. all a wrt. C for which aIi ∈ CIc. When setting its direct flag to true the result set excludes those individuals which are also instances of sub-classes of the given description.
Querying Fillers/Sources of
Instantiated Properties (flattened version of Fig. 27)
The queries about related individuals also come in a so called flattened variant as shown in Figure 28. Here, the result set contains exactly the same individuals as before but is made flat in terms of not grouping equivalent individuals anymore. This is especially useful when applying the unique name assumption (UNA) where different identifier always refer to different individuals.
Likewise to the queries about related individuals there are queries with respect to individuals related to constants via data properties. Those queries allow to retrieve the source individuals for a given data property and constant as well as the constant for a given individual and data property (Figure 29). Note that the negative flag, in contrast to the object property queries, is only allowed within GetDataPropertySources (it is simply unclear how to deal with an infinite result set; e.g. GetDataPropertyFillers[negative=true](i, r) with functional(r), domain(r, xsd;integer) and r(i, 1)).
Querying Fillers/Sources of
Instantiated Data Properties
The former also comes with a flattened variant (see Figure 30) in order to trade semantic information (about equivalent individuals) for a smaller result message in case communication performance is of high importance to the client.
Querying Fillers/Sources of
Instantiated Data Properties (flattened version of Fig. 29)