Neophyte question - modelling Alpha Taxonomies in RDF and Owl

Hello All,

Please forgive what may be a neophyte question, I hope I've found a
forum where this question is relevant.  It's particularly a question
about formulating ontologies in Owl and RDF.

I'm modelling an actual scientific taxonomy of living creatures.  I
want to model elements at each level of the taxonomy (a.k.a. taxa) as
Owl classes, such that restrictions on properties I place on taxa at
higher levels of the hierarchy are passed down to lower levels.  For
instance I might have a restriction that every member of class Aves
(which is a taxonomic class as well as on Owl Class) has wings, and I
would expect then that a Class Strigiformes (strigiformes is the
taxonomic order containing actual owls, the kind with wings) which I
might later define to be subClassOf rdf:resource="#Aves" would have
the same restriction.  This seems natural, to follow the intention of
the language, and to model the expectations that human taxonomers (or
'systematists') might have.

But there is a lot of information regarding the class Aves which does
not represent restrictions on the individuals (or subclasses) who may
be members.  Much of that information is related to the class itself -
a reference to the relevant papers defining the class (Linnaeus,
1758), common names associated with it, a serial number for the
taxonomic unit bestowed by various scientific organizations, their
level of acceptance of that taxon, etc.

But if I understand Owl syntax correctly, I cannot simply use it to say

<owl:Class rdf:ID="Aves">
  <rdfs:hasaSerialNumber rdf:about="174371">
  <subclassOf rdf:resource="#Vertebrata">
</owl:Class>

even if I do also define a property called hasaSerialNumber.  I can
only place restrictions on properties in the class definition.   If I
then instead write;

<owl:Class rdf:ID="Aves">
  <rdfs:subClassOf rdf:resource="#Vertebrata"/>
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasaSerialNumber"/>
      <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">
      174371
      </owl:cardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

This class will likely be empty, if I understand Owl correctly.  That
is because any other taxa which I try to define as Classes, and make
as subClassOf Aves, will certainly have their own serial numbers which
will by definition be different, and therefore outside the restriction
of the parent class.

I can see that what I am really wishing for is that Owl classes might
be more similar to OODBs, where I might define a class of taxonomic
classes, and define slots or attributes on that class, which each
taxonomic class might fill in differently.

I guess I could define a different property for a serial number at
each level of the taxonomic hierarchy, but this is cumbersome (there
are lots of them, more than the 8 you learned in school) and feels
artificial, as the serial numbers are serial to all taxa, rather than
to just the taxa at a specific level (the orders, or the classes,
say.)  An even worse compromise would be to stuff the serial number
and other information about the class itself in comments in the Owl
Class.
Another option that occured to me was to create RDF Element to hold
all of this data that is specifically about the individual Owl Class;

<rdf:Description rdf:ID="Aves">
   <uni:serialNumberITIS>174371</serialNumberITIS>
   <uni:hasaParentClass rdf:resource="#Vertebrata"/>
   <uni:hasLimbs>
     <rdf:Bag>
        <rdf:_1 rdf:resource="#wings"/>
        <rdf:_2 rdf:resource="#legs"/>
     </rdf:Bag>
   </uni:hasLimbs>(etc.)

and then somehow (?) associate each of the Owl Classes with the more
general and capacious RDF description.  But again I feel like this is
a contrivance that is forced on me by the syntax, and certainly not
respresentative of how a human taxonomer would organize her own
thoughts.

It's certainly possible my frustration with this may stem from my
incomplete (or inaccurate) understanding of the syntax of XML, RDF,
RDF Schema, and Owl, and/or the intent of each of these.  But also it
may come from these each being defined separately, and over a period
of time, where an OOP language (C++, or Ruby, say) is defined all in a
single stroke (I'm simplifying here, I realize.)   Also it seems as
though a lot of modelling facility has been sacrificed in order to
make Owl and RDF more easily digestible to reasoners (the software
kind).

Any instruction or suggestions would be heartily appreciated.

Thanks sincerely,Chris

Received on Thursday, 20 December 2007 03:39:59 UTC