- From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
- Date: Thu, 24 Jun 2004 09:06:16 -0400 (EDT)
- To: rhoadsnyc@mac.com
- Cc: www-rdf-logic@w3.org
Here are some quick comments on your questions.
Peter F. Patel-Schneider
Bell Labs Research
From: Stephen Rhoads <rhoadsnyc@mac.com>
Subject: Fwd: [protege-owl] Re: Protege-OWL Tutorial
Date: Wed, 23 Jun 2004 12:59:51 -0400
> Folks,
>
> I posted this message over in the Protege-OWL mailing list and I am posting
> it again over here in order to get input from the wider community.
>
> Regards,
>
> --- Stephen
>
>
> From: Stephen Rhoads <rhoadsnyc@mac.com>
> TO: <protege-owl@SMI.Stanford.EDU>
> CC:
> Date: Thu Jun 17, 2004 06:26:43 PM EDT
> Subject: [protege-owl] Re: Protege-OWL Tutorial
>
>
> Matthew,
>
> Thanks a million for this *excellent* tutorial. I was expecting 15 pages
> of glorified "Small Tutorial". This is closer to an O'Reilly book! (A
> hint to you maybe?) If I had had my mitts on this puppy three months ago,
> it would have saved me quite a bit of grief.
>
> Below are some followup questions which I hope that you and/or the
> community can answer. I have been struggling with 1 and 2 and hoped that
> they would be addressed but were not. 3 is a question arising from the
> tutorial and 4 is both a question and suggestion for a future revision.
>
> Again, thanks for all of your hard work. Thanks also to Holger and the
> rest of the CO-ODE group. Keep it up!
>
> --- Stephen
>
>
> 1. DLs for Datatype Properties?
>
> Does it make sense to use DLs with Datatype properties? By way of example,
> every "Person" has a "name". Is it advisable/recommended to create a
> Necessary restriction for class Person of someValuesFrom(hasName,
> xsd:string)?
Yes, to me this makes perfect sense. I would, in fact, go farther and have
both some and all restrictions, as in
DatatypeProperty ( hasName )
Class(Person partial restriction( hasName someValuesFrom (xsd:string)
allValuesFrom(hasName xsd:string) ) )
of these two, the first is the most suspect, as, depending on what you mean
by a Person, there may be People with no names (e.g., unbaptized infants).
> DLs seem to be great for logically describing intrinsic properties of
> classes of individuals, but at the "end of the day", the bulk of what we
> are doing with OWL is creating distributed knowledge bases containing
> metadata about *individuals* -- much of which is in the form of values for
> datatype properties. Take an example from my project: every Movie has a
> title (xsd:string), runtime (xsd:duration), various types of synopsis
> (xsd:string), copyrightNotice (xsd:string), episodeIndex
> (xsd:nonNegativeInteger) [if it's part of a series], and many others. What
> is considered to be Best Practice for dealing with these types of
> properties in the "DL Paradigm"?
I don't see a particular problem here. Make these all properties and
provide restrictions for them, as in
DatatypeProperty ( title )
Class(Movie partial restriction( title someValuesFrom (xsd:string)
allValuesFrom(hasName xsd:string) ) )
you might want to make title single-valued, via
Class(Movie partial restriction( title cardinality (1) ) )
similarly for the other properties.
> 2. Not-Quite-Necessary Conditions.
>
> Does it make sense to use DLs to describe (for lack of a better word)
> "optional" properties?
>
> Another example from my project. There are a multitude of musical
> instruments in the world only a few of which will be relevant to any given
> "Song". I have properties like "guitarsBy", "percussionBy", "pianoBy",
> "violinBy", "harpBy", "remixBy", "performedBy", "conductedBy" ... (you get
> the picture).
>
> What should one do with these types of properties? It doesn't make sense
> to include a Necessary restriction on class Song because, well, the
> properties aren't necessary. Some options (as I see it):
>
> -- Resort to a more traditional "frame-based" approach and add Song to the
> Domain of each property. This frightens me in the "Open World".
>
> -- Create special classes for each property: "SongWithGuitars" is the
> intersection of Song and restriction someValuesFrom(guitarsBy, Person).
> Well, I don't really want all of those classes in my Ontology; they don't
> add any value and the properties don't "show up" at class Song.
>
> -- Just define the properties with no restrictions and use them when/where
> appropriate. Then you have to manually add the properties to Individuals
> Forms in order to accommodate Knowledge Acquisition.
>
> -- Create custom Annotation properties like "ex:intendedDomain" and
> "ex:intendedRange" in order to hint to the intended usage. That might
> work, but it's not supported by Protege-OWL.
Again, this should work well in OWL DL. Do something like
ObjectProperty( guitarsBy range ( Person ) )
Class ( Song restriction ( guitarsBy allValuesFrom ( Person ) )
...
)
Note that I haven't make Song by the domain of guitarsBy, because there
might be some other kind of thing (e.g., a non-Song MusicalComposition)
that should have fillers for this property. Note also that the restriction
on guitarsBy in Song is not logically needed - however a (very) good UI
for populating songs could take this as a hint that it would be a good idea
to make it easy to add this information for songs.
> 3. Class or Individuals?
[...]
Not being familiar with this example, I'm not going to respond. However,
fixing the class/individual distinction appropriately can be tricky.
> 4. OWL Source Code
>
> In a future version of the tutorial [if you are so inclined to create one
> ;-)] it would be very helpful if you could display and explain the OWL code
> resulting from operations in the GUI.
>
> I, for one, am often confused by the underlying code. For example, I don't
> understand why it is always necessary to relate a "Named" class to its
> restrictions/axioms via "subClassOf" or "equivalentClass". I suspect that
> it has something to do with an Algebraic or logical equation. (And maybe
> it's time for me to go back and re-learn that stuff from High School).
>
> Take the SpicinessValuePartition, for example. The resultant OWL code
> looks like this (edited):
>
> <owl:Class rdf:ID="SpicinessValuePartition">
> <owl:equivalentClass>
> <owl:Class>
> <owl:unionOf rdf:parseType="Collection">
> <owl:Class rdf:about="#Mild"/>
> <owl:Class rdf:about="#Medium"/>
> <owl:Class rdf:about="#Hot"/>
> </owl:unionOf>
> </owl:Class>
> </owl:equivalentClass>
> </owl:Class>
>
> Why is the following not sufficient?
>
> <owl:Class rdf:ID="SpicinessValuePartition">
> <owl:unionOf rdf:parseType="Collection">
> <owl:Class rdf:about="#Mild"/>
> <owl:Class rdf:about="#Medium"/>
> <owl:Class rdf:about="#Hot"/>
> </owl:unionOf>
> </owl:Class>
These two appear to me to be logically equivalent.
[...]
peter
Received on Thursday, 24 June 2004 09:05:41 UTC