- From: Bijan Parsia <bparsia@isr.umd.edu>
- Date: Sun, 19 Feb 2006 12:36:24 -0500
- To: "PL. Miraglia (home)" <pierlu.m@gmail.com>
- Cc: public-owl-dev@w3.org, www-rdf-logic@w3.org
On Feb 19, 2006, at 11:47 AM, PL. Miraglia (home) wrote:
> You're right, I had left out a lot of assumptions that I thought could
> be filled out in the most "obvious" manner, but that's probably bad
> practice -- when one is asking for clarifications especially!
It matters a lot if you are trying to move between OWL Full and OWL DL,
hence the need for details.
> So I'll try to be more specific below. Let me say that this was just
> for clarifying to myself the meaning of Owl expressions, and their
> relations to FOL style KR. I had no particular application in mind.
I recommend:
<http://www.cs.man.ac.uk/~horrocks/Publications/download/2003/
HoPH03a.pdf>
For a good discussion.
For OWL DL, there is a direct transliteration to FOL via the
transliteration to SHOIN.
> So your reply is already helpful. But onto the particulars:
> On 2/18/06, Bijan Parsia <bparsia@isr.umd.edu> wrote:
>> On Feb 18, 2006, at 3:01 PM, PL. Miraglia (home) wrote:
>>
>>> consider the following:
>>>
>>> <rdfs:subClassOf>
>>> <owl:Restriction>
>>> <owl:onProperty rdf:resource="#R"/>
>>> <owl:someValuesFrom rdf:resource="#P"/>
>>> </owl:Restriction>
>>> <owl:Class rdf:about="#Q"/>
>>> </rdfs:subClassOf>
>>>
>>> I need some clarifications about this term: are these statements true
>>> or false?
>>>
>>> 1) The construct above is legal in OWL DL/Full not OWL Lite -- right?
>>
>> FIrst I want to ask why do you care? It's relatively important to
>> distinguish between OWL Full and OWL DL, but much less so for OWL Lite
>> and OWL DL. Anyhoo.
>
> I am not interested in the DL/Lite distinction, actually. I was most
> curious about: can a restriction be the subject of a subClassOf axiom
> too?
Yes it can, but that would be (syntactically) in OWL DL. See:
<http://www.w3.org/TR/owl-semantics/syntax.html#2.3.2>
In particular, these productions:
axiom ::= ...
| 'SubClassOf(' description description ')'
description ::= classID
| restriction
....
In OWL lite you'd have to use an intermediate name due to the
restriction to atomic names on the LHS of conditionals, but it's
perfectly possible, e.g.,
A = some(P, C).
A subClassOf D
(clearly these imply some(P,C) subClassOf D).
> It's not commonly seen, but it seems to me that it's perfectly
> legal -- also it would help dispensing with having to use inverse
> relations for everything, which I find kinda silly.)
I don't see how inverses were helping, but yes, you can write arbitrary
GCIs in OWL. Swoop can handle these easily and even has special support
for what you're doing here.
>> This fragment alone (assuming a reasonable outer wrapping element)
>> will
>> be owl full because of the lack of type triples for #R and #P
>> (probably
>> objectproperty and class).
>
> Right. I didn't mean this fragment to be "alone", but I didn't bother
> to add the necessary definitional axioms. I guess i was assuming at
> least this:
[snip since fullness isn't the issue, and a bit more]
>> Oh, and it's illegal RDF as it will have two object elements as the
>> value of one property element.
>>
>> You may have meant something like this:
>>
>> <owl:Class rdf:about="#A">
>> <rdfs:subClassOf>
>> <owl:Restriction>
>> <owl:onProperty rdf:resource="#R"/>
>> <owl:someValuesFrom rdf:resource="#P"/>
>> </owl:Restriction>
>> </rdfs:subClassOf>
>> <rdfs:subClassOf>
>> <owl:Class rdf:about="#Q"/>
>> </rdfs:subClassOf>
>> </owl:Class>
>
> This is not what I meant. Logically, it defines a class A that is (a
> subset of) the intersection of the set {x: Ey(Rxy & Py)} and Q. What
> I was trying to express is instead:
>
> {x: Ey(Rxy & Py)} is a subset of Q
Ah, but you seem to think that prefix is the way to do it. It's not.
subClassOf is always infix:
<owl:Restriction>
<owl:onProperty rdf:resource="#R"/>
<owl:someValuesFrom rdf:resource="#P"/>
<rdfs:subClassOf rdf:resource="#Q"/>
</owl:Restriction>
Or
<owl:Restriction rdf:nodeID="foo">
<owl:onProperty rdf:resource="#R"/>
<owl:someValuesFrom rdf:resource="#P"/>
</owl:Restriction>
<rdf:Description rdf:nodeID="foo">
<rdfs:subClassOf rdf:resource="#Q"/>
</rdf:Description>
So, in Swoop, I created a class Q (and the relevant properties and
other classes), turned on Editable, and then clicked on "add
Superclass" and made the restriction and it came out:
<owl:Restriction>
<rdfs:subClassOf rdf:resource="#Q"/>
<owl:onProperty rdf:resource="#P"/>
<owl:someValuesFrom rdf:resource="#D"/>
</owl:Restriction>
Pretty easy.
[snip]
> I was trying to figure how to express in owl these 2 logical
> constraints on an arbitrary property (binary predicate) R:
>
> 1. (Ex)(Rxy & Qx) => Py
>
> 2. (Ey)(Rxy & Py) => Qx
<http://www.mindswap.org/dav/ontologies/bijan/2006/examples/owl-dev
-2006-feb>
does both.
> (1) is straightforward in owl (or so I thought, perhaps I am wrong
> there too):
>
> <owl:Class rdf:about="#Q>
> <rdfs:subClassOf>
> <owl:Restriction>
> <owl:onProperty rdf:resource="#R"/>
> <owl:allValuesFrom rdf:resource="#P"/>
> </owl:Restriction>
> </rdfs:subClassOf>
> </owl:Class>
That gives you Qx => (Ey)(Rxy & Py). See my file for the correct
encoding.
And didn't you mean "someValuesFrom"?
> (2) is the one I have a question about. It seems that it can be
> expressed in the "straightforward" form of (1), provided that IR (the
> inverse of R) is used.
Hmm. I missed the swap of the variables.. Yes, you need an inverse in
order to bind the first argument of a property with a nested
quantifier.
> But is the inverse necessary?
Yes. And, unfortunately, in owl you don't have an inverse operator (as
is standard in DLs), so you have to coin a name for the inverse. Curse
RDF! :)
Cheers,
Bijan.
Received on Sunday, 19 February 2006 17:36:34 UTC