Lang: owl:ontolgy (was RE: LANG: syntactic version for imports (and other things))

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