Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>It's not entirely clear yet what you mean by making two properties <em>un</em>-equal. By default, two properties can be distinct, so you don't really have to do anything special to <em>let</em> them be unequal. If the question is clarified, though, perhaps more information can be added about that.</p> <p>It's not entirely trivial to say that, e.g.,</p> <blockquote> <p>&forall;a,x . A(a) &rarr; (hasFinish(a,x) &iff; hasColor(a,x))</p> </blockquote> <p>in OWL, but you can do it. If you want to say this for all classes, you can, as you pointed out, use <code>owl:equivalentProperty</code>. Now, when you say that <code>p</code> is an equivalent property to <code>r</code>, you could also say that</p> <blockquote> <p>p &sqsubseteq; r<br> r &sqsubseteq; p</p> </blockquote> <p>that is, that each of <code>p</code> and <code>r</code> are subproperties of the other. In OWL 2 (but, unfortunately, not OWL 2 <em>DL</em>, as Antoine Zimmermann pointed out in the comments), you can assert that a given property is a superproperty of a <em>chain</em> of properties, e.g., </p> <blockquote> <p>hasFather &bullet; hasBrother &sqsubseteq; hasUncle </p> </blockquote> <p>which says that if someone has a father who has a brother, then that father's brother is that person's uncle. </p> <p>There's also a concept called rolification, which has been described more in <a href="https://stackoverflow.com/q/16989042/1281433">OWL 2 rolification</a>, which is the process of creating a property corresponding to a class that relates each individual of that class to itself. For you class <em>A</em>, there would be a relation <em>R<sub>A</sub></em> that relates each <em>A</em> to itself, and only relates those instances. If you then look at a property chain like </p> <blockquote> <p>R<sub>A</sub> &bullet; hasFinish</p> </blockquote> <p>you'll notice that it's really the subproperty of hasFinish where the first argument is an <em>A</em>. This means that you can say that hasFinish and hasColor are the same <em>for the class A</em> by making two subproperty assertions:</p> <blockquote> <p>R<sub>A</sub> &bullet; hasColor &sqsubseteq; hasFinish<br> R<sub>A</sub> &bullet; hasFinish &sqsubseteq; hasColor</p> </blockquote> <p>These assume that individuals of type A are the subjects of these statements. If A is actually the range here, then you'd just use </p> <blockquote> <p>&forall;a,x . A(a) &rarr; (hasFinish(x,a) &iff; hasColor(x,a))<br> hasColor &bullet; R<sub>A</sub> &sqsubseteq; hasFinish<br> hasFinish &bullet; R<sub>A</sub> &sqsubseteq; hasColor </p> </blockquote> <p>To get the property R<sub>A</sub>, you need to add the definition</p> <blockquote> <p>A &equiv; &exist;R<sub>A</sub>.Self </p> </blockquote> <p>to your ontology. In Protégé, this would look like:</p> <p><img src="https://i.stack.imgur.com/x1rll.png" alt="enter image description here"> <img src="https://i.stack.imgur.com/4vblS.png" alt="enter image description here"> <img src="https://i.stack.imgur.com/NZVfL.png" alt="enter image description here"></p> <p>and the resulting ontology looks like (in RDF/XML):</p> <pre class="lang-xml prettyprint-override"><code>&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns="http://example.org/ep#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"&gt; &lt;owl:Ontology rdf:about="http://example.org/ep"/&gt; &lt;owl:Class rdf:about="http://example.org/ep#A"&gt; &lt;owl:equivalentClass&gt; &lt;owl:Restriction&gt; &lt;owl:onProperty&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#R_A"/&gt; &lt;/owl:onProperty&gt; &lt;owl:hasSelf rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean" &gt;true&lt;/owl:hasSelf&gt; &lt;/owl:Restriction&gt; &lt;/owl:equivalentClass&gt; &lt;/owl:Class&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#hasFinish"&gt; &lt;owl:propertyChainAxiom rdf:parseType="Collection"&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#R_A"/&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#hasColor"/&gt; &lt;/owl:propertyChainAxiom&gt; &lt;/owl:ObjectProperty&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#hasColor"&gt; &lt;owl:propertyChainAxiom rdf:parseType="Collection"&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#R_A"/&gt; &lt;owl:ObjectProperty rdf:about="http://example.org/ep#hasFinish"/&gt; &lt;/owl:propertyChainAxiom&gt; &lt;/owl:ObjectProperty&gt; &lt;/rdf:RDF&gt; </code></pre> <p>and in Turtle:</p> <pre class="lang-none prettyprint-override"><code>@prefix : &lt;http://example.org/ep#&gt; . @prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; . @prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; . @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; . @prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; . :hasFinish a owl:ObjectProperty ; owl:propertyChainAxiom ( :R_A :hasColor ) . :A a owl:Class ; owl:equivalentClass [ a owl:Restriction ; owl:hasSelf true ; owl:onProperty :R_A ] . :hasColor a owl:ObjectProperty ; owl:propertyChainAxiom ( :R_A :hasFinish ) . &lt;http://example.org/ep&gt; a owl:Ontology . :R_A a owl:ObjectProperty . </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload