RDFS-Plus Inferencing

AnzoGraph includes an inference engine that can create new relationships based on the vocabularies or ontologies in the existing data.

The following example from the W3C Semantic Web Inference documentation illustrates the inference concept:

A data set might include the relationship Flipper isA Dolphin. An ontology might declare that "every Dolphin is also a Mammal." An inference program that understands the notion of "X is also Y" adds the statement Flipper isA Mammal to the set of relationships even though it was not specified in the original data.

When AnzoGraph creates inferences, it scans the specified graph for any of the RDFS-plus and supported OWL 2 RL ontologies and generates new triples according to the W3C OWL 2 RL rules. This topic provides instructions for generating inferences with AnzoGraph and describes the supported inference vocabularies.

Generating Inferences

AnzoGraph generates inferences as a batch command. Run the following command to generate inferences from one or more existing graphs:

CREATE INFERENCES FROM source_graph1 [ source_graph2 ... ] INTO GRAPH target_graph

When you run the CREATE INFERENCES command, AnzoGraph runs rules for each of the RDFS-plus ontologies that it finds in the source graphs and inserts the inferred triples into the specified target graph. The tables below describe the RDFS-plus rules as well as the additional OWL 2 RL rules that AnzoGraph supports.

Semantics of Class Axioms

Rule Description IF THEN
cax-eqc1 Two classes are synonymous. T(?c1, owl:equivalentClass, ?c2)
T(?x, rdf:type, ?c1)
T(?x, rdf:type, ?c2)
cax-eqc2 Two classes are synonymous. T(?c1, owl:equivalentClass, ?c2)
T(?x, rdf:type, ?c2)
T(?x, rdf:type, ?c1)
cax-sco Members of a subclass are also members of the superclass. T(?c1, rdfs:subClassOf, ?c2)
T(?x, rdf:type, ?c1)
T(?x, rdf:type, ?c2)

Semantics of Equality

Rule Description IF THEN
eq-rep-s Two subjects are equal and have the same meaning. All statements about one subject are true for the other subject. T(?s, owl:sameAs, ?s')
T(?s, ?p, ?o)
T(?s', ?p, ?o)
eq-rep-p Two predicates are equal and have the same meaning. All statements about one predicate are true for the other predicate. T(?p, owl:sameAs, ?p')
T(?s, ?p, ?o)
T(?s, ?p', ?o)
eq-rep-o Two objects are equal and have the same meaning. All statements about one object are true for the other object. T(?o, owl:sameAs, ?o')
T(?s, ?p, ?o)
T(?s, ?p, ?o')
eq-sym Two instances are equal and have the same meaning. All statements about one instance are true for the other instance. T(?x, owl:sameAs, ?y) T(?y, owl:sameAs, ?x)
eq-trans Chains of relationships collapse into a single relationship. T(?x, owl:sameAs, ?y)
T(?y, owl:sameAs, ?z)
T(?x, owl:sameAs, ?z)

Semantics of Axioms about Properties

Rule Description IF THEN
prp-dom Infer the subject's type from the predicate's domain. T(?p, rdfs:domain, ?c)
T(?x, ?p, ?y)
T(?x, rdf:type, ?c)
prp-eqp1 Two properties are synonymous. T(?p1, owl:equivalentProperty, ?p2)
T(?x, ?p1, ?y)
T(?x, ?p2, ?y)
prp-eqp2 Two properties are synonymous. T(?p1, owl:equivalentProperty, ?p2)
T(?x, ?p2, ?y)
T(?x, ?p1, ?y)
prp-fp If predicate p is a functional property, then a subject can be related to only one specific object by p. T(?p, rdf:type, owl:FunctionalProperty)
T(?x, ?p, ?y1)
T(?x, ?p, ?y2)
T(?y1, owl:sameAs, ?y2)
prp-ifp If predicate p is an inverse functional property, then a specific object can be related to only one subject by p. T(?p, rdf:type, owl:InverseFunctionalProperty)
T(?x1, ?p, ?y)
T(?x2, ?p, ?y)
T(?x1, owl:sameAs, ?x2)
prp-inv1 Two properties are the inverse of each other. T(?p1, owl:inverseOf, ?p2)
T(?x, ?p1, ?y)
T(?y, ?p2, ?x)
prp-inv2 Two properties are the inverse of each other. T(?p1, owl:inverseOf, ?p2)
T(?x, ?p2, ?y)
T(?y, ?p1, ?x)
prp-rng Infer the object's type from the predicate's range. T(?p, rdfs:range, ?c)
T(?x, ?p, ?y)
T(?y, rdf:type, ?c)
prp-spo1 Relationships that are described by a subproperty also hold for the superproperty. T(?p1, rdfs:subPropertyOf, ?p2)
T(?x, ?p1, ?y)
T(?x, ?p2, ?y)
prp-symp The inverse is true for a property. T(?p, rdf:type, owl:SymmetricProperty)
T(?x, ?p, ?y)
T(?y, ?p, ?x)
prp-trp Chains of relationships collapse into a single relationship. T(?p, rdf:type, owl:TransitiveProperty)
T(?x, ?p, ?y)
T(?y, ?p, ?z)
T(?x, ?p, ?z)

Semantics of Schema Vocabulary

Rule Description IF THEN
scm-cls Every class is its own subclass and equivalent class, and it is a subclass of owl:Thing. T(?c, rdf:type, owl:Class) T(?c, rdfs:subClassOf, ?c)
T(?c, owl:equivalentClass, ?c)
T(?c, rdfs:subClassOf, owl:Thing)
T(owl:Nothing, rdfs:subClassOf, ?c)
scm-dom1 A property with domain c also has domain c's superclasses. T(?p, rdfs:domain, ?c1)
T(?c1, rdfs:subClassOf, ?c2)
T(?p, rdfs:domain, ?c2)
scm-dom2 A subproperty inherits the domains of the superproperties. T(?p2, rdfs:domain, ?c)
T(?p1, rdfs:subPropertyOf, ?p2)
T(?p1, rdfs:domain, ?c)
scm-eqc1 Equivalent classes are subclasses of each other. T(?c1, owl:equivalentClass, ?c2) T(?c1, rdfs:subClassOf, ?c2)
T(?c2, rdfs:subClassOf, ?c1)
scm-eqc2 If two classes are subclasses, they are also equivalent classes. T(?c1, rdfs:subClassOf, ?c2)
T(?c2, rdfs:subClassOf, ?c1)
T(?c1, owl:equivalentClass, ?c2)
scm-eqp1 Equivalent properties are subproperties of each other. T(?p1, owl:equivalentProperty, ?p2) T(?p1, rdfs:subPropertyOf, ?p2)
T(?p2, rdfs:subPropertyOf, ?p1)
scm-eqp2 If two properties are subproperties, they are also equivalent properties. T(?p1, rdfs:subPropertyOf, ?p2)
T(?p2, rdfs:subPropertyOf, ?p1)
T(?p1, owl:equivalentProperty, ?p2)
scm-rng1 A property with range c also has range c's superclasses. T(?p, rdfs:range, ?c1)
T(?c1, rdfs:subClassOf, ?c2)
T(?p, rdfs:range, ?c2)
scm-rng2 A subproperty inherits the ranges of its superproperties. T(?p2, rdfs:range, ?c)
T(?p1, rdfs:subPropertyOf, ?p2)
T(?p1, rdfs:range, ?c)
scm-sco owl:subClassOf relationships are transitive T(?c1, rdfs:subClassOf, ?c2)
T(?c2, rdfs:subClassOf, ?c3)
T(?c1, rdfs:subClassOf, ?c3)
scm-spo owl:subPropertyOf relationships are transitive. T(?p1, rdfs:subPropertyOf, ?p2)
T(?p2, rdfs:subPropertyOf, ?p3)
T(?p1, rdfs:subPropertyOf, ?p3)
scm-svf1 (OWL 2 RL) A property restriction c1 is a subclass of c2 if they are both someValuesFrom restrictions on the same property and c1's target class is a subclass of c2's target class. T(?c1, owl:someValuesFrom, ?y1)
T(?c1, owl:onProperty, ?p)
T(?c2, owl:someValuesFrom, ?y2)
T(?c2, owl:onProperty, ?p)
T(?y1, rdfs:subClassOf, ?y2)
T(?c1, rdfs:subClassOf, ?c2)
scm-svf2 (OWL 2 RL) A property restriction c1 is a subclass of c2 if they are both someValuesFrom restrictions on the same class where c1's target property is a subproperty of c2's target property. T(?c1, owl:someValuesFrom, ?y)
T(?c1, owl:onProperty, ?p1)
T(?c2, owl:someValuesFrom, ?y)
T(?c2, owl:onProperty, ?p2)
T(?p1, rdfs:subPropertyOf, ?p2)
T(?c1, rdfs:subClassOf, ?c2)
scm-int (OWL 2 RL) T(?c, owl:intersectionOf, ?x)
LIST[?x, ?c1, ..., ?cn]
T(?c, rdfs:subClassOf, ?c1)
T(?c, rdfs:subClassOf, ?c2)
...
T(?c, rdfs:subClassOf, ?cn)

Note: AnzoGraph does not run the scm-dp and scm-op schema vocabulary rules. The rules add significant compute overhead but do not result in meaningful inference results.

Semantics of Classes

Rule Description IF THEN
cls-svf1 (OWL 2 RL) At least one object of a property is a member of the specified class. T(?x, owl:someValuesFrom, ?y)
T(?x, owl:onProperty, ?p)
T(?u, ?p, ?v)
T(?v, rdf:type, ?y)
T(?u, rdf:type, ?x)
cls-int1 (OWL 2 RL) An instance belongs to every one of the specified classes. T(?c, owl:intersectionOf, ?x)
LIST[?x, ?c1, ..., ?cn]
T(?y, rdf:type, ?c1)
T(?y, rdf:type, ?c2)
...
T(?y, rdf:type, ?cn)
T(?y, rdf:type, ?c)

Inference Example

The following simple example demonstrates the inferences that AnzoGraph generates to infer friendships in the sample Tickit data set. The example uses the following subset of triples, and it describes the friend relationships using the owl:TransitiveProperty vocabulary:

# friends.ttl
PREFIX owl: <http://www.w3.org/2002/07/owl#> .
<friend> a owl:TransitiveProperty .
<person1>
rdf:type <person>
;<name> "Rafael Taylor"
;<like> "sports","theatre","classical","vegas","musicals"
;<dislike> "jazz","broadway"
;<friend> <person2>,<person4>
.
<person2>
rdf:type <person>
;<name> "Vladimir Humphrey"
;<like> "jazz","classical","vegas","musicals"
;<dislike> "broadway"
;<friend> <person3>
.
<person3>
rdf:type <person>
;<name> "Lars Ratliff"
;<like> "sports","rock","musicals"
;<dislike> "theatre","jazz","opera"
;<friend> <person1>
.
<person4>
rdf:type <person>
;<name> "Barry Roy"
;<like> "theatre"
;<dislike> "sports","jazz","musicals"
;<friend> <person5>
.
<person5>
rdf:type <person>
;<name> "Reagan Hodge"
;<like> "concerts","rock","vegas","musicals"
;<dislike> "jazz","broadway"
;<friend> <person1>
.

Loading friends.ttl into a graph named friends and querying the new graph for a list of friendships produces the following results. The query returns 6 friendships:

SELECT *
FROM <friends>
WHERE { ?person <friend> ?friend . }
ORDER BY ?person
person  | friend
--------+---------
person1 | person4
person1 | person2
person2 | person3
person3 | person1
person4 | person5
person5 | person1
6 rows

The query below generates inferences for the friends graph based on the rules for owl:TransitiveProperty. The query creates the inferences in a graph named more-friends:

CREATE INFERENCES FROM <friends> INTO GRAPH <more-friends>

When the inferencing is complete, the following query returns the friend triples in the more-friends graph. The query filters out triples for which the same person is the subject (?person) and object (?friend):

SELECT *
FROM <more-friends>
WHERE {
  ?person <friend> ?friend.
  FILTER(?person != ?friend).
}
ORDER BY ?person
person  | friend
--------+---------
person1 | person5
person1 | person3
person2 | person5
person2 | person4
person2 | person1
person3 | person5
person3 | person2
person3 | person4
person4 | person2
person4 | person3
person4 | person1
person5 | person2
person5 | person4
person5 | person3
14 rows

Following the OWL 2 RL rules for owl:TransitiveProperty, AnzoGraph inferred 8 new friendships from the 6 friendships in the original friend graph.

Related Topics