- From: Richard H. McCullough <rhm@cdepot.net>
- Date: Sun, 6 Apr 2003 12:39:55 -0700
- To: "Bob MacGregor" <macgregor@ISI.EDU>, <www-rdf-logic@w3.org>
- Cc: "KR-language" <KR-language@YahooGroups.com>
- Message-ID: <002801c2fc74$74474970$bd7ba8c0@rhm8200>
My MKR language (http://rhm.cdepot.net/)
is a good OWL-cool language!
With respect to your point (b), MKR simply says
C has P;
D has P;
or
C,D has P;
============
Dick McCullough
knowledge := man do identify od existent done;
knowledge haspart proposition list;
----- Original Message -----
From: Bob MacGregor
To: www-rdf-logic@w3.org
Sent: Sunday, April 06, 2003 12:07 PM
Subject: OWL-cool
Side-bar conversations with Jim Hendler revealed that
he thinks OWL-lite is pretty cool, and figures that
if you need things like attaching data to classes and
properties, you just switch to OWL-full, and then you're
OK (Jim, if I paraphrased this improperly, I apologize).
Unfortunately, switching to OWL-full doesn't make things OK.
The good news is that it wouldn't take a whole lot to
convert OWL-lite into a practical language.
The objective is to define a language that
(i) contains a base set of useful primitives
(ii) uses names that are easy to understand
(iii) doesn't leave out anything essential
(iv) is relatively easy to implement
(v) has a syntax that is easy to read
OWL-full fails badly on (iv), which is partly why its not
a solution for the metadata problem. It also fails badly
on (v).
Point (i): OWL does contain a base set of useful primitives.
Point (ii): Most of the OWL names are pretty good. The only really
bad one is 'InverseFunctionalProperty'. I had an e-mail discussion
with someone who was unaware of the fact that it means
approximately the same thing as "defines a single-attribute key".
If that's how you define an attribute key in OWL, then the
name ought to reflect that.
Point (iii):
If I had to pick three things to add to OWL-lite to make it
much more usable, they would be:
(a) the ability to annotate classes and properties
(b) the ability to mimic the way object-oriented programming
languages associate attributes with classes
(c) the ability to define keys on classes, analogous to the
way database people define keys on tables.
Fixing (a) is trivial -- you just say that its OK, and you're
done.
Now (b): Suppose we want to assert that a property P can be used with
classes C and D. Here is one way to do that, using
RDF triple syntax:
P rdfs:domain _:d1
C rdfs:subClassOf _:d1
D rdfs:subClassOf _:d1
That wasn't so hard. Unfortunately, its kind of clumsy -- enough
so that I wouldn't expect people to use it. We could sugar-coat
it rather easily by inventing a property one might call 'subDomain'.
Then
P subDomain C
P subDomain D
would expand into
P rdfs:domain _:d1
C rdfs:subClassOf _:d1
P rdfs:domain _:d2
D rdfs:subClassOf _:d2
Since 'rdfs:domain' is functional, the two blank nodes
must denote the same domain.
I'll leave (c) as an exercise. Its not very hard. Note, though,
that the database notion of a simple (non-compound) key does not
have the same semantics as 'InverseFunctionalInverse'.
Point (iv): OWL-lite is reasonably easy to implement (modulo the
fact that implementing equality is intrinsically difficult).
If we added two or three of the extensions that I would like to
see, it would still be easy to implement.
Point (v): RDF syntax is horrible. The OWL languages inherit
that horribleness. However, RDF has an escape from that
horribleness -- if you use something like N3, then you can
say the same things, and its quite attractive. Most of the
e-mail RDF discussions use triples syntax.
OWL-lite can pull the same trick -- one can use triple
syntax for saying things in OWL-lite.
Unfortunately, when you expand OWL-DL structures into
triples, you get something really awful. Not only
are they hard for people to read, they are difficult
to interpret by non-DL inference engines. When you
buy into OWL-DL, you may be kissing good-bye to
rule-based inference.
My recommendation is the following. Create a new language,
which for the moment I will call 'OWL-cool'. OWL-cool
is OWL-lite with extensions (a) annotations on classes
and properties, (b) subdomains, and (c) database-like keys
for classes, If no one but me likes (c), we could drop (c).
Either we rename 'FunctionalInverseProperty', or we invent
a synonym for it in OWL-cool.
Question: Have we now satisfied the five prerequisites that
I originally started with? Its impossible to categorically
assert that it doesn't leave out anything essential, so
here I'm claiming that it is a step in the right direction.
The key contribution is that it adds a couple of very
important capabilities without sacrificing (iv) ease of
implementation, and (v) readable syntax. The latter is
true because OWL-cool translates into readable triples.
OWL-cool has only one drawback -- its not upward-compatible
with OWL-DL.
Cheers, Bob
Received on Sunday, 6 April 2003 15:41:04 UTC