- From: Christopher Rose <chrisrose.chrisrose@gmail.com>
- Date: Wed, 19 Dec 2007 15:20:28 -0500
- To: public-owl-dev@w3.org
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