Basically, most proposals to tackle the identity issue have boiled down so far to use direct assertions. To express that http://ex1.org/foo and http://ex2.org/bar denote more or less exactly the same thing, one uses dedicated predicates to make declarations such as:
http://ex1.org/foo p http://ex2.org/bar
The predicate p may stand here for owl:sameAs, rdfs:seeAlso; skos:exactMatch; umbel:isLike, any future foaf:whatever ... all those predicates conveying some kind of co-reference. In fact, even if it's not respected, among those only owl:sameAs has hard-defined semantics, the other ones can be interpreted at will by applications, through any follow-your-nose heuristics. Moreover, defining formal semantics for any of those will not prevent hacking. You can define as many same-ness similarity properties you like, they are bound to be used and abused the same way owl:sameAs has been. And if you consider that owl:sameAs semantics are as straightforward as can be, go figure how more subtle definitions will be hacked.
But there are other ways to explore this issue, including the radical "blank hub" way introduced here years ago. The path I would like to explore now uses operational rules rather than declarative assertions, and in particular substitution rules.
The basic principle is as following : Two denotations (e.g., URIs) are (somehow) co-referent if they can be substituted to each other in (some, many, most, all) assertions.
An owl:sameAs declaration amounts to absolute substitutability. When substitutability is partial, substitution rules could assert the conditions under which substitution is valid.
For exemple one could say that ex:author is substitutable to dc:creator if the subject of the predicate is a Book. Put formally, using e.g., RIF Basic Logic Dialect
Forall ?x ?p (ex:author(?x ?p) :- And(?x#ex:Book dc:creator(?x ?p))
This rule is different, and in fact independent of a declaration such as
ex:author rdfs:subPropertyOf dc:creator
Let's take an example discussed at length a few months ago on DBpedia forum.
ex1:MichelleObama rdf:type foaf:Person
ex2:MichelleObama rdf:type skos:Concept
?x rdfs:label 'Michelle LaVaughn Robinson'
which hold for both URIs.
This could be captured by the following rule (using RIF syntax again)
Forall ?name (rdfs:label(ex2:MichelleObama ?name) :- rdfs:label(ex1:MichelleObama ?name))
Using such rules has several advantages over declarative assertions:
- They do not need extra vocabulary to be defined and (mis)understood
- They have non-ambiguous formal interpretation
- They are flexible ad libitum to cover the whole spectrum of similarity-sameness flavours.
They can be expressed in various, more or less expressive rule languages, such as SPARQL CONSTRUCT.