- From: Mary Montoya <mhm@ncgr.org>
- Date: Tue, 10 Oct 2006 23:08:52 -0600
- To: semantic-web@w3.org, public-semweb-lifesci@w3.org
I have a question about using the OpenBiomedicalOntologies such as the SequenceOntology in owl format to describe data resident in my local biological database. It seems desirable to leverage subclass relationships of terms in the hierarchy of the SequenceOntology and to have all the terms there rooted in a common parent obo:Term class. OBO defines certain information to be provided for all OBO terms such as name, id, definition, etc. These provide descriptive information of the class itself not properties of members of the class. So it seems all obo:Terms would have "class values" for a name, id, def, etc. I would then expect to find classes in SequenceOntology that are defined as subClassOf obo:Term and reflect the hierachical structure of those SequenceOntology terms, for example, so:Gene as a subClassOf so:Region which is a subClassOf so:Located_sequence_feature which is a subClassOf obo:Term. The problem is that the owl class definitions I've seen for OBO terms don't also include property definitions for individuals of the class. So an individual of so:Gene doesn't have a property for name, id, def, etc that I can provide values for from my database. There are only these class description properties often defined using rdfs:label, rdfs:comment or as annotation type properties. My question is: How can I use these publicly available ontologies to hold values for my data? They seem poised for interoperability if these properties were available to individuals of these classes. Here is one sequence ontology definition I found for gene in owl format ( others I've seen look similar ) <owl:Class rdf:ID="SO_0000704"> <rdfs:label xml:lang="en">gene</rdfs:label> <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string">A locatable region of genomic sequence, corresponding to a unit of inheritance, which is associated with regulatory regions, transcribed regions and/or other functional sequence regions</rdfs:comment> <rdfs:subClassOf rdf:resource="#SO_0000001"/> </owl:Class> I thought something like this would be more useful: <owl:Class rdf:about="&so;SO_0000704"> <obo:classId>SO:0000704</obo:classId> <obo:className>gene</obo:className> <obo:classDef> "A locatable region of genomic sequence, corresponding to a unit of inheritance, which is associated with regulatory regions, transcribed regions and/or other functional sequence regions" [SO:rd] </obo:classDef> <rdfs:subClassOf rdf:resource="&so;SO_0000001"/> </owl:Class> with the root parent Term defined within an obo namespace as <owl:Class rdf:about="&obo;Term"> <obo:classId>OBO:Term</obo:classId> <obo:className>term</obo:className> <obo:classDef> Term is a blah, blah </obo:classDef> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&obo;name"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&obo;id"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&obo;def"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 0 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> Then I could do something like this: <owl:Class rdf:about="&mystuff;MyGene"> <rdfs:subClassOf rdf:resource="&so;SO_0000704"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&mystuff;chromosomeNumber"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&mystuff;startCoordinate"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&mystuff;endCoordinate"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="&mystuff;sequence"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> so now I have defined a class MyGene that extends from obo to sequence ontology and I can define individuals with property values for the following from my database: obo:name obo:id obo:def mystuff:sequence mystuff:endCoordinate mystuff:startCoordinate mystuff:chromosomeNumber It seems presumptuous to define properties for individuals ( name, id, etc ) as well as class properties ( className, classID, etc ) for public ontologies such as obo ontologies but possibly quite useful for interoperability sake. Any comments would be welcome. Mary Montoya VPIN project team NCGR
Received on Wednesday, 11 October 2006 11:28:24 UTC