- From: Jim Hendler <hendler@cs.umd.edu>
- Date: Thu, 12 Sep 2002 15:39:06 -0400
- To: "Smith, Michael K" <michael.smith@eds.com>, "Peter F. Patel-Schneider" <pfps@research.bell-labs.com>, www-webont-wg@w3.org
Seems to me today's phone call revealed a problem. We want to be
able to define an ontology as a "container" in which a set of
statements lives. This doesn't necessarily imply that this container
is either closed or immutable (this message doesn't want to address
those issues) but rather to give you a place that makes statements
about the ontology (heretofore called its metadata) and also to say
what URIs are in it (not necessarily uniquely). I've been discussing
this with a researcher in my lab, Bijan Parsia, and he's come up with
a solution that is relatively elegant, consistent with the RDF
approach to the world, and has a precedent in RSS, a widely used
language. I think this is similar to what Mike Smith was talking
about today with using XMLbase, but might be more RDF friendly and
also a little easier to implement (since everything can stay in the
graph)
The idea is that we can simply extend the owl:ontology to define its
classes in a manner similar to how RSS defines a channel (for those
who know that) -- that is, we create an owl:ontology statement that
includes a pointer to the set of URIs which it includes (could be
just class definitions, could be more). This would look something
like this:
<rdf:RDF {namespaces} >
<owl:class rdf:ID="foo">
<restriction ... (etc) />
</owl:class>
<owl:class rdf:ID="bar">
<restriction ... (etc) />
</owl:class>
<owl:class rdf:ID="baz">
<restriction ... (etc) />
</owl:class>
<owl:Ontology rdf:ID="OntologyName">
<owl:ontologyDefines rdf:parsetype="collection">
<owl:ontologyClass :foo />
<owl:ontologyClass :bar />
<owl:ontologyClass :baz />
</owl:ontologyDefines>
<dc:creator rdf:ID="me" />
{other metadata}
</owl:Ontology>
</rdf:RDF>
The beauty of this is that I could now handle imports in various ways
- I could import an entire ontology with an imports statement within
this
<owl:Ontology ...>
<owl:imports URI2 />
and extend it
<owl:Defines ...>
<owl:ontologyClass :notInURI2>
</owl:defines>
...
<owl:Ontology>
I could include classes from other ontologies (Without importing the
whole thing) by simply including them in my owl:ontologyDefines
collection
<owl:OntologyClass cyc:dog>
and I get for free some new properties that seem quite desirable - in
particular, I could create multiple ontologies in a document by
including pointers to different subsets
<owl:ontology rdf:ID="Pets">
...
<owl:ontologyDefines>
... dog
... cat
</owl:ontologyDefines></owl:ontology>
<owl:ontology rdf:ID="Felines">
...
<owl:ontologyDefines>
... lion
cat
tiger
</owl:ontologyDefines></owl:ontology>
I think that version info could also be handled in here, although
still working on details.
I also think this works syntactically whether we put ontologies into
the domain of discourse or not -- I personally wouldn't prefer to,
but could go either way.
-JH
p.s. For the RDFS fans, the owl:ontologyDefines would be invertible
into rdfs:isDefinedBy statements - which is a nice bonus.
p.p.s. If we really want to get fancy, we could let the
owl:ontologyDefines statement be any RDF collection, meaning an
ontology designer could use either a collection, making it closed, or
a bag, making it open - thus letting the user have some ability to
control how extensible the solution is.
--
Professor James Hendler hendler@cs.umd.edu
Director, Semantic Web and Agent Technologies 301-405-2696
Maryland Information and Network Dynamics Lab. 301-405-6707 (Fax)
Univ of Maryland, College Park, MD 20742 240-731-3822 (Cell)
http://www.cs.umd.edu/users/hendler
Received on Thursday, 12 September 2002 15:39:22 UTC