A fact must become somehow the Object of another statement in RDF.

Reification in RDF permits interleaving of statements, i.e. to make statements about statements.

In the following example the knowledge can be splitted into two statements.

Example: Hevok: Dear EVA, .. I hypothesizes that Aging is the Cause of Cancer!

To address the fact Hevok is referring to RDF Reification is used. Reinfication is expressed via the the keyword rdf:Statement which defines a statement of Subject, Predicate and Object. The Subject is referencing to the described resource, the predicate is referring to the original Property, and the Object refers to the value of this property.

  • rdf:Statement: defines an RDF Statement, consisting of Subject, Predicate and Object

The graph representation of this looks somehow like the following:

:Hevok -ex:hypothesizes-> :StatementOnAging
    -rdf:subject-> :Aging
    -rdf:predicate-> ex:causes
    -rdf:object-> :Cancer

In turtle the same RDF statments look like this. Hevok hypothesizes some statement. Of course the statement on Aging needs to be defined. Therefore it is defined that this is an RDF Statement. This RDF Statement itself has a Subject, Predicate and Object, which mean here Aging causes Cancer.

@prefix rdf: <>]
@prefix <>]

:Hevok ex:hypothesizes :StatementOnAging .
:StatementOnAging a rdf:Statement ;
    rdf:subject :Aging ;
    rdf:predicate :hypothesizes ;
    rdf:object :Cancer .

Thus, with this four parts one can make a statement about a statement. Of course one can than again make a statement about a statement and so on.

Reification enables to model data provenance, i.e. how has made a statement and with that one can judge whether one can relay on that statement. Thus, it is possible to formalize Statements about Reliability and Trust. On the other hand one can define Metadata about statements, which means data about data, in form of Assertions or Statements. Thus, this is very important thing to have in Knowledge design and Engineering.

However, one has to be careful, because with this kind of Reification, some conflicts can arise as it results in situation where one has no strict separation of types like Classes, Individuals and Statements. If one defines a Class and makes then a statement about a class, the class immediately becomes an individual, which of course is not a statement/class itself. This means there is some type conflict, therefore this Reification sometimes causes trouble. Especially if one is referring in a statement to the statement itself, i.e. a self-referring Statement, one is in a internal loop (recursion). This of course will cause trouble. The problems of Reification are therefore that it might cause type conflicts (Classes, Individuals, Properties) or it might cause possible infinite recursion.

Edit tutorial

Comment on This Data Unit