0

I'm not sure how to interpret the semantics of the following RDF triples. Am I interpreting them correctly?

Example A

Subject - Predicate - Object
Tom     -    age    -   24 

I could read this as the predicate age has the value 24. This seems unintuitive. However, I can also read this as 24 is related to Tom by the predicate age which makes better semantic sense to me.

Example B

Subject -   Predicate    -  Object
Tom     -  HasProperty   -    age
age     -   HasValue     -    24 

This conveys that age is a property of Tom. The value of this property is 24. This makes explicit how age relates to Tom.

In one example, age is a predicate, in the other example, it is an object. In both cases the information encoded is more or less the same with addition of an explicit property in example B.

Michael Anslow
  • 397
  • 3
  • 12

1 Answers1

0

Yes, you are interpreting them correctly.

Both examples encode the same information (namely that the age of Tom is 24). In the first example, this is done via a direct binary relation. Rewritten in first-order predicate logic it reads:

age(tom, 24)

In the second example, the relation has been reified into an object, and it effectively reads

HasProperty(Tom, age) 
HasValue(age, 24)

An advantage of the first approach is that it is (obviously) shorter and more directly interpretable. An possible advantage of the second approach is that since the relation age is an object, you can say additional things about it. For example in addition to stating its value (a number), you could easily add the unit of measurement it is expressed in, by adding a simple additional statement:

HasUnit(age, DogYears)

Or in triple-form:

age  - HasUnit - DogYears

Of course, in the second example, you are assuming that only Tom has an age. After all, if we add knowledge about someone called Dick who is 26, and we were to reuse the relationship identifier age, we'd get:

HasProperty(Tom, age)
HasProperty(Dick, age)
HasValue(age, 24)
HasValue(age, 26)

Now, how do we tell who is 24 and who is 26? You can't, because they're both linked to the same relation object. So in practice, when reifying relations in this fashion, you make the relation object a specific occurrence of the relation. For example:

HasProperty(Tom, ageOfTom)
IsA(ageOfTom, age) 
HasValue(ageOfTom, 24)

HasProperty(Dick, ageOfDick)
IsA(ageOfDick, age) 
HasValue(ageOfDick, 26)
Jeen Broekstra
  • 21,642
  • 4
  • 51
  • 73