Does RDF support negation?

To my understanding RDF gives a possibility to express any information in form of triplets. For example: ('Berlin', 'is capital of', Germany). To have such a triplet is equivalent to saying that we think that it is true that ('Berlin', 'is capital of', Germany). But is there a possibility to have an triplet saying that something is false. For example, in my RDF I would like to indicate explicitly that it is false that ('Paris','is capital of','Canada'). Or, alternatively, I there a natural was to have a negating relation? For example: 'is not capital of'. I understand that we can always define any new relation but is there a way to utilize the fact that the opposite relation already exists?


I have realized that my questions is part of a broader question: Does RDF support probabilities?

For example, I would like to say that: X is located in Y with probability equal to 0.7. What would be the way to include it into RDF?

Concerning negation: No, RDF(S) does not support the negation of triple statements. More precisely, there is no combination of RDF triples, to which the standard RDF semantics would give a meaning in the way you ask for, e.g. that it is false that ('Paris','is capital of','Canada').

OWL 2, on the other hand, really provides a per-statement form of negation in terms of negative property assertions (NPAs). According to the OWL 2 Mapping to RDF, your example above can be written as follows in OWL 2:

_:x rdf:type owl:NegativePropertyAssertion .
_:x owl:sourceIndividual :Paris .
_:x owl:assertionProperty :isCapitalOf .
_:x owl:targetIndividual :Canada .

for URIs ':Paris', ':isCaptialOf' and 'Canada'.

Concerning probabilities: No, neither RDF nor OWL 2 have direct support for the modeling of probabilities. Of course, you can use either language to create your own representation of probabilities, but you cannot expect standard reasoning engines to support probabilistic reasoning based on your modeling then.

RDF provides a mechanism called Reification that could be leveraged to capture the semantic you described:

    :stmt1 a rdf:Statement;
        rdf:subject :Paris
        rdf:predicate :capital;
        rdf:object :Germany;
        foo:truth 'false';
  or    foo:confidence 0.0.

RDF has no rules regarding this. It gives you the freedom to express things as you see fit for your system or your application. I imagine there are reasoners however that may how allow you to define specific syntax within your relationship to indicate the opposite meaning. For example, such reasoner might interpret every relationship starting with a !, such as '!isCapitalOf' as having the same meaning as 'is not capital of'.

However this is just syntax sugar, and as far as I know there is no standard way of doing this. I would simply define a clear relationship such as 'is not capital of', which is highly understandable to users.