- 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:26 UTC