Search code examples
sparqlrdfowlpredicatenegation

How to express one predicate by means of another one?


I have a predicate "HAVE", now I need a predicare "don'tHave". How to create such predicate using existing predicate "HAVE"?


Solution

  • In OWL, whose assertions are under open-world assumption, it is sufficient to declare such properties as disjoint, in such a way that, if you state :x :DontHave :y ., then you'll know that :x :Have :y is false.

    Functional-Style Syntax

    DisjointObjectProperties( :Have :DontHave )  
    

    RDF/XML Syntax

    <rdf:Description rdf:about="Have">
      <owl:propertyDisjointWith rdf:resource="DontHave"/>
    </rdf:Description>
    

    Turtle Syntax

    :Have  owl:propertyDisjointWith  :DontHave .
    

    Manchester Syntax

    DisjointProperties: Have, DontHave
    

    OWL/XML Syntax

    <DisjointObjectProperties>
      <ObjectProperty IRI="Have"/>
      <ObjectProperty IRI="DontHave"/>
    </DisjointObjectProperties>