Re: using OBO in owl format to describe data

Hi Mary

I invite you to submit your comments to the obo-format list, where we  
are close to finalising a new version of the obof->owl mapping

http://www.bioontology.org/wiki/index.php/OboInOwl:Main_Page

On Oct 10, 2006, at 10:08 PM, Mary Montoya wrote:

>
> 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 15:02:29 UTC