playing around with N3, OWL, and inconsistency

In a paper for IRW[urisym], I used N3 to formalize the positions
of various people in a www-tag discussion.

The DCMI schema says, among other things:

  dc:title rdf:type rdf:Property.

and I gave TimBL's position as:

{
 ?X log:uri [
   str:startsWith "http:";
   str:notMatches "#"
 ] }
 => { ?X a tbl:Document }

tbl:Document
  owl:disjointWith tbl:Car, rdf:Property, foaf:Person.


I wrote, "This position is quite clearly inconsistent with
the DCMI schema," which raises the question of what, exactly, I meant
by inconsistent, since N3 doesn't have negation in the traditional
sense.

There is a sense of inconsistency that N3 does have, which
is that two things can't both be string:greaterThan
and string:notGreaterThan. This can be defined in terms
of owl:differentFrom a la:

{ ?S ?P ?O1. ?S [ :opposite ?P ] ?O2 } => { ?O1 owl:differentFrom ?O2 }.
{ ?S1 ?P ?O. ?S2 [ :opposite ?P ] ?O } => { ?S1 owl:differentFrom ?S2 }.

then if we have { str:greaterThan :opposite str:notGreaterThan } and

 x str:greaterThan y.
 x str:notGreaterThan y.

we get

    :x owl:differentFrom :x .

which is unsatisfyable w.r.t. the semantics for OWL.

The following rule relates owl:disjointWith to owl:differentFrom:

{ [ is rdf:type of ?X] owl:disjointWith [ is rdf:type of ?Y ]}
 => { ?X owl:differentFrom ?Y }.

I think it actually defines owl:disjointWith in terms of
owl:differentFrom; i.e. I think it follows from the definition
in the OWL spec and the definition in the OWL spec follows from it.
Perhaps not quite. In any case, it's sufficient to get
from TimBL's position and the DCMI position to:

    <http://purl.org/dc/elements/1.1/title>
         owl:differentFrom <http://purl.org/dc/elements/1.1/title> .


I went one step meta and wrote the following rule, (using
the nifty new log:supports, by the way...):

{ ?X a PositionStatement; log:semantics ?F.
  ?Y a PositionStatement; log:semantics ?G.
  <owlAx.n3> log:semantics ?OWLSEM.
  (?F ?G ?OWLSEM) log:conjunction [
    log:supports { _:x owl:differentFrom _:x }
  ].
} => { ?X inconsistentWith ?Y }.


I put that in http://www.w3.org/2006/04/irw65/argument.n3
along with

 <tbl.n3> a PositionStatement.
 <dc.n3> a PositionStatement.
 <markb.n3> a PositionStatement.

and put the OWL axiom in http://www.w3.org/2006/04/irw65/owlAx.n3

So if you run:

$ python $swap/cwm.py http://www.w3.org/2006/04/irw65/argument.n3
--think --data

then out comes:

    <dc.n3>     a :PositionStatement;
         :inconsistentWith <tbl.n3> .

    <markb.n3>     a :PositionStatement;
         :inconsistentWith <tbl.n3> .

    <tbl.n3>     a :PositionStatement;
         :inconsistentWith <dc.n3>,
                <markb.n3> .

which makes me feel much better about having written
"This position is quite clearly inconsistent with
the DCMI schema." :)

[urisym] http://www.w3.org/2006/04/irw65/urisym.html

-- 
Dan Connolly, W3C http://www.w3.org/People/Connolly/
D3C2 887B 0F92 6005 C541  0875 0F91 96DE 6E52 C29E

Received on Monday, 8 May 2006 18:32:12 UTC