Re: blog: semantic dissonance in uniprot

On Wed, 2009-03-25 at 21:34 -0400, David Booth wrote:
> [ . . . ] the important criterion for using owl:sameAs are: (a)
> in *your* RDF graph the two terms are intended to denote the *same*
> individual; and (b) your RDF graph is consisistent with their
> definitions.  [ . . . . ]

After writing the above I realized that it may sound like I am saying
that it is okay to use owl:sameAs indiscriminately in cases where a
weaker assertion would do.  As many have pointed out owl:sameAs is
likely to cause problems when graphs are merged, which I illustrated:
http://lists.w3.org/Archives/Public/public-semweb-lifesci/2009Mar/0169.html
For example, graphs G1 and G2 individually use owl:sameAs without
problem, but they are inconsistent when merged.   

So, some amended points:

1. This problem is not unique to owl:sameAs.  It is rooted in the fact
that terms are ambiguous and different graphs may constrain their
interpretations in different, mutually exclusive ways.  However, it is
much more likely to show up when using owl:sameAs than with other
predicates.  Thus, the cautions you have heard about using owl:sameAs
are well founded.

2. To increase the chances of your graph being merged with other graphs
without inconsistency, you should consider not only whether two terms
are intended to denote the same individual in *your* graph, but whether
they are also likely to denote the same individual in the merge of your
graph with someone else's graph.  Admittedly, this may be impossible to
predict.  So in choosing to use owl:sameAs, you should recognize that
you are making a decision that will limit the scope of graphs that can
be painlessly combined with yours.  As pointed out in #1 above,
owl:sameAs is not the only assertion in your graph with this effect, but
owl:sameAs happens to do it much more powerfully than most other
assertions, so you should use a weaker assertion if you can.

3. I think a weaker version of owl:sameAs that is scoped to a particular
named graph may help -- an owl:scopedSameAs, for example.  So if one
says:

  :g1 owl:scopedSameAs ( :apple1 :apple2 ) .
  :g2 owl:scopedSameAs ( :apple1 :apple3 ) .

then :apple1 and :apple2 denote the same resource in the context of
named graph :g1, and :apple1 and :apple3 denote the same resource in the
context of named graph :g2, but if :g3 is the merge of :g1 and :g2, then
we effectively get two new blank nodes:

  _:apple12 s:isNarrowerThanResource :apple1 .
  _:apple12 s:isNarrowerThanResource :apple2 .

  _:apple13 s:isNarrowerThanResource :apple1 .
  _:apple13 s:isNarrowerThanResource :apple3 .

plus all the triples of :g1 and :g2.  s:isNarrowerThanResource is
defined here
http://dbooth.org/2007/splitting/#isNarrowerThanResource
and it may not be *quite* what we want, but I think something along
those lines would be.  The idea is that in a statement like

  _:apple12 s:isNarrowerThanResource :apple1 .

the s:isNarrowerThanResource predicate should indicate that the set of
interpretations for _:apple12 is a *subset* of the set of
interpretations for :apple1.  Thus, the pair of statements

  _:apple12 s:isNarrowerThanResource :apple1 .
  _:apple12 s:isNarrowerThanResource :apple2 .

has an effect that is similar to saying

  :apple1 owl:sameAs :apple2 .

except that it is more limited in scope.  This idea is illustrated in my
slides 16-18 from last year's workshop on identity and reference:
http://dbooth.org/2008/irsw/slides.ppt

4. Notice that this issue is far more like to arise when you are talking
about *individuals* -- not classes.  In essence, you want to be able to
restrict the set of interpretations to a particular subset.  But if
you're talking about a class, then you already have an easy way to do
that: rdfs:subClassOf.  This is one of the reasons why some people say
that you should model almost everything as classes rather than
individuals.

David Booth

Received on Thursday, 26 March 2009 11:01:41 UTC