1

Forgive me if I'm misusing some terms, I'm just becoming familiar with RDF and reification in particular.

What I'm trying to understand is if/how you can make a statement about a statement that you don't control and which isn't actually set up as an rdf:Statement (or any other resource, i.e., reified).

For instance, if some semantic website makes the claim:

ex:elvis-presley
    ex:is-alive "true"^^xsd:boolean .

There is an implicit rdf:Statement resource here:

_:x
    a rdf:Statement ;
    rdf:subject ex:elvis-presley ;
    rdf:predicate ex:is-alive ;
    rdf:object ex:true "true"^^xsd:boolean .

Now suppose I have my own semantic website and I would like to refute this statement, or affirm it, or make any other kind of meta-statement about this statement. The statement resource doesn't have a global identifier, so I can't reference it.

Is there any way to handle this, or can you only make statements about statements that are explicitly formed as identified resources in their own right?

brianmearns
  • 9,581
  • 10
  • 52
  • 79
  • I just came across [Formalized model for Reification done Right: RDF* and SPARQL* semantics](http://blog.bigdata.com/?p=716) that you might be interested in. – Joshua Taylor Jun 27 '14 at 18:35
  • If an RDF graph contains the triple `ex:elvis ex:lives true`, there is no implicit `rdf:Statement` at all. All `rdf:Statement` have to be explicit, otherwise they do not exist, even implicitly. Unless you mean, by implicit, something different, such as "there is a general understanding that such `rdf:Statement` should exist somehow". I don't think this is even true. – Antoine Zimmermann Nov 16 '14 at 09:21

2 Answers2

2

I think that reification is a topic that initially seems more useful than it actually tends to be in practice. You can have a triple in a graph:

s p o .

and you can have four triples in a graph:

x a rdf:Statement .
x rdf:subject s .
x rdf:preficate p .
x rdf:object o .

but that's about it. If someone happens to have four triples of the second form, and x happens to be a URI, then then you write triples about x. If it's a blank node, then you don't have a way of referencing it. In either case, x is said to be a reification of the triple s p o. That means that the question

Can you only reify statements that are explicitly formed as identified resources in their own right?

doesn't make a whole lot of sense. The reificiation of a statement s p o is a resource x that has the associated properties. "To reify s p o" doesn't really mean anything except "pick an x, and assert the corresponding triples about it."

It's very unlikely that anyone trying to assert s p o would write the second form. The second form tends to arise if you're trying to represent some statements about triples, e.g., "john says x . x a rdf:Statement . …".

If you want to decry someone's claim that Elvis lives, you'd probably just do

:elvisLives a rdf:Statement ;
            rdf:subject ex:elvis-presley ;
            rdf:predicate ex:is-alive ;
            rdf:object true ;
            :claimedBy <http://example.org/whoeverSaidIt> ;
            :hasValue false .

Alternatively, if you're in the realm of OWL, you can use a negative property assertion:

NegativeDataPropertyAssertion( ex:lives ex:elvis-presley "true"^^xsd:boolean )

The RDF representation would look like

_:x rdf:type owl:NegativePropertyAssertion .
_:x owl:sourceIndividual ex:elvis-presley .
_:x owl:assertionProperty ex:lives .
_:x owl:targetValue true .

You can see a similarity between the two approaches. OWL includes a sort of reification vocabulary with its owl:sourceIndividual, owl:assertionProperty and owl:targetValue.

Joshua Taylor
  • 84,998
  • 9
  • 154
  • 353
  • Thanks for clarifying: I guess I was misunderstanding what part of the process reification actually referred to: I thought that making the meta-statement was the reification, but now I see that reification is actually just the process of setting up a statement as a resource so that statements _can_ be made about it. – brianmearns Jun 05 '14 at 19:38
  • So if I understand, you're basically saying that if the author of the statement did not reify the statement by making it a resource in its own right, the only way to make a statement about it is to repeat the statement yourself (with a property to attribute it to the original source). That's unfortunate, because it makes it quite a bit harder to, for instance, collect all the statements made about a particular statement. – brianmearns Jun 05 '14 at 19:41
  • It's very uncommon to reify a statement in the first place. And really, the presence of the reification of a statement alone shouldn't be interpreted as an *assertion* of that statement, so you'd need even more triples after that. Reification isn't used all that much in practice. Reifying a statement doesn't assert it, so even if you have `x subject s ; preficate p ; object o`, a SPARQL query, e.g., for `select * where { ?x ?y ?z }` only finds those three triples, not `s p o`. Unless someone's trying to saying something *about* a triple, they probably won't reify that triple. – Joshua Taylor Jun 05 '14 at 20:09
  • What do you mean "it makes it quite a bit harder to collect all the statements made about a particular statement"? To get a graph of statements about ``, I'd usually just do `construct where { ?p ?o }`. With a SPARQL dataset, you could put those into a *named graph*, and then, in your application, treat different named graphs as "what so and so said". – Joshua Taylor Jun 05 '14 at 20:11
  • Say for instance I want to crawl the web and find any statements that are about this particular statement that Elvis is alive. Instead of being able to look for all statements which have a particular subject (that subject being the global identifier for the reified statement), I have to look for all statements which have a particular combination of subject, predicate, and object. That in itself isn't such a big deal, unless one of those things is a blank node. I.e., in order to find statements about a resource that doesn't have a global identifier, I need to do arbitrarily complex comparisons – brianmearns Jun 06 '14 at 12:20
  • Well, as I said, it's uncommon to see reification in the wild. Most people don't say "The sentence '...' is called X, and I assert X," they just say "...". Even if people did reify in this way, it's unlikely that they'd all settle on the same identifier for the reification. – Joshua Taylor Jun 06 '14 at 12:23
  • I understand that it's not common, but my question is if and how I can refer to statements that *aren't* reified. It sounds like I can't without just repeating the statement as you show in your answer. – brianmearns Jun 06 '14 at 12:46
  • I think that's about right. It doesn't come up in practice very often, so it's not something that there's an easy way to do. – Joshua Taylor Jun 06 '14 at 13:08
  • OWL doesn't really introduce any notion of reification. `owl:sourceIndividual`, etc. are just ways to tell which triple is negated. To say that this is like reifying a triple would be similar to say that negation in first order logic reifies the formula it negates. – Antoine Zimmermann Nov 16 '14 at 09:27
2

The newly proposed approach called singleton property is exactly what you need. This approach is formally described in this paper "Don’t like RDF Reification? Making Statements about Statements Using Singleton Property". http://www.slideshare.net/ntkimvinh7/www2014-singleton-propertyfinal

In your example, instead of using reification, the triple can be represented using the singleton property approach, such as

ex:elvis-presley ex:is-alive#1 "true"^^xsd:boolean .

ex:is-alive#1 rdf:singletonPropertyOf ex:is-alive .

If you want to dispute this fact, you can use the singleton property ex:is-alive#1 because it can be globally unique if you use a UUID, instead of #1.

Vinh Nguyen
  • 119
  • 1
  • 2