For ontologies in which the unique-names assumption holds, the use of
owl:differentFrom is likely to lead to a large number of
statements, as all individuals have to be declared pairwise disjoint. For such
situations OWL provides a special idiom in the form of the construct owl:AllDifferent.
This is a special built-in OWL class, for which the
property owl:distinctMembers
is defined, which links
an instance of owl:AllDifferent to a list of individuals. The
intended meaning of such a statement is that all individuals in the list are all
different from each other.
<rdfs:Class rdf:ID="AllDifferent">
<rdfs:label>AllDifferent</rdfs:label>
</rdfs:Class>
<owl:AllDifferent>
<owl:distinctMembers rdf:parseType="Collection">
<Person rdf:about="#David"/>
<Person rdf:about="#Alice"/>
<Person rdf:about="#Jack"/>
<Person rdf:about="#John"/>
</owl:distinctMembers>
</owl:AllDifferent>
This states that these four URI references all point to different persons.
NOTE: owl:distinctMembers is a special syntactical
construct added for convenience and should always be used with an
owl:AllDifferent individual as its subject.
Many languages have a so-called "unique names" assumption: different names refer to different things in the world. On the web, such an assumption is not possible. For example, the same person could be referred to in many different ways (i.e. with different URI references). For this reason OWL does not make this assumption. Unless an explicit statement is being made that two URI references refer to the same or to different individuals, OWL tools should in principle assume either situation is possible.
OWL provides three constructs for stating facts about the identity of individuals:
owl:sameAs is used to state that two URI references refer to
the same individual.
owl:differentFrom is used to state that two URI references
refer to different individuals owl:AllDifferent provides an idiom for stating that a list of
individuals are all different. If a node x has rdf:type
owl:AllDifferent, then the following should be the case:
rdf:List, all of whose elements are individuals.owl:AllDifferent is the domain of owl:distinctMembers.
In general, blank nodes occurring in the graph either represent unnamed individuals, or should be exactly one of the following:
rdfs:subClassOf,
owl:equivalentClass, owl:disjointWith,
owl:someValuesFrom, owl:allValuesFrom or
rdf:type triple.
rdf:type triple with object
owl:AllDifferent.
rdf:List. Orphan blank nodes, i.e. those which are not the object of a triple are, in general, not allowed (other than the owl:AllDifferentcase described above).
If we wanted to add a new member in some existing ontology and assert that it was
disjoint from all of those that have already been defined, we would need to cut
and paste the original owl:AllDifferentassertion and add the new maker
to the list. There is not a simpler way to extend an
owl:AllDifferentcollection in OWL DL. In OWL Full, using RDF triples and the
rdf:List constructs, other approaches are possible.