W3C home > Mailing lists > Public > public-semweb-lifesci@w3.org > October 2006

Re: [SPAM] Re: using OBO in owl format to describe data

From: Leonid Ototsky <leo@mgn.ru>
Date: Thu, 12 Oct 2006 15:38:24 +0600
Message-ID: <747826562.20061012153824@mgn.ru>
To: Joanne Luciano <jluciano@genetics.med.harvard.edu>
CC: Xiaoshu Wang <wangxiao@musc.edu>, "'Mary Montoya'" <mhm@ncgr.org>, semantic-web@w3.org, <public-semweb-lifesci@w3.org>

Joanne and all.
Many of the questions in the mailing list show that we are at a
"stariting point" of "more intellectual Web" . Suppose there are some
foundations which must be taken into account as well. Look at the
"To keep abreast of the 21st Century" paper -
http://ototsky.mgn.ru/it/21abreast.htm

Best,
Leonid Ototsky - http://ototsky.mgn.ru/it

Вы писали 12 октября 2006 г., 13:42:57:


> Xiaoshu,

> You raise the issue of open vs closed world, which has been on my  
> mind whenever any
> translation to OWL comes up.  I have ahead of me some databases in  
> OBO that I will be
> looking to convert to OWL. I intend to build constructs that enable
> reasoners to tell me
> new things about the data.

> Having had many surprises in learning how the open world works and  
> how OWL works
> I'm curious to know how this is handled.  I have not yet taken on   
> the task to learn
> OBO as I hope not have to. I would like to feel confident that I can
> convert a file into
> OWL and use it, however I can't see how an automated translator,  
> without some
> user interaction or settings can know, for example, that a set of  
> subclasses must
> be disjoint, for example.  Is the translation primarily syntactic?

> What I can't imagine is how an OBO converter would know if that is  
> what I meant when
> we didn't even know.  That's my main question.

> By the way, I also agree with your suggestion in response to Mary's
> question and
> the criticism of BioPAX. Open world and OWL are technologies that  
> require a lot
> of careful thinking and getting used to.  It takes some very  
> different kind of thinking
> to get it right. We didn't fully appreciate this in the early days of
> BioPAX and we didn't get it right.
> In fact, For the first release of Level 1 didn't make the physical  
> entity classes disjoint.
> Which is the most common mistake beginners make when going from
> closed world to open world modeling.

> Now a quick plug for two papers I still think are the most  
> enlightening for anyone
> embarking on OWL.  Matthew Horridge's Progege OWL Tutorial
> (http://www.co-ode.org/resources/tutorials/ProtegeOWLTutorial.pdf) and
> The OWL Pizza - common errors
> (http://www.co-ode.org/resources/papers/ 
> ekaw2004.pdf).
> I just re-read that one yesterday morning.

> On BioPAX we are still learning about OWL and how to best use it and
> reasoning technology.
> We are working to correct the errors and mistakes we know about and
> further educating ourselves
> to hopefully get it right in future releases.

> Sincerely,
> Joanne


> On Oct 11, 2006, at 2:47 PM, Xiaoshu Wang wrote:

>>
>> --Mary,
>>
>> I am not familiar with OBO, but what you are suggesting is actually
>> what
>> should be avoided in RDF.  RDF is based on open world assumption.
>> But to
>> have one superclass for the purpose of enforcing certain annotation
>> property
>> is a closed world thinking in Object Oriented world.
>>
>> In your case, I wonder if there is any concrete criteria that makes
>> one
>> resource an obo:Term but the other not?  If not, why invent another
>> term for
>> it? And doing so will at least make the statement very odd to  
>> understand.
>> For instance, assume there is an instance of gene class Y named x.
>> Then, we
>> can say,
>>
>> @prefix gene: <http://example.com/genes#> .
>> gene:Y rdfs:subClassOf obo:Term .
>>
>> Then it is natural to say,
>>
>> _:x a gene:Y .
>>
>> but it would be very odd to say,
>>
>> _:x a obo:Term .
>>
>> In addition, it will incur unnecessary computation complexity for RDF
>> engine.
>>
>> This kind of pseudo-Superclass pattern is also used. Everything in
>> MGED is
>> an MGED:Ontology and everything in BIO-PAX is a bio-pax:entity. But
>> the main
>> purpose of this super-class is to enforce certain  
>> AnnotationProperty or
>> grouping terms. No offense to those groups, but I think the design
>> is wrong
>> and should be avoided.
>>
>> To design a superclass is different form designing certain  
>> properties, like
>> obo:name, obo:id etc., because it is still natural to say that  
>> something is
>> a gene but has certain name and id etc., like the following,
>>
>> _:x a gene:Y ;
>>    obo:name "Some gene" ;
>>    obo:id   "12345" .
>>
>> And best of all, you shouldn't invent those properties, because each
>> resource should have a URI and rdfs:label can be used for name. And
>> there
>> are other ontology like Dublin Core at your dispense as well.
>>
>> You probably wondered then, how can interoperability to be ensured
>> if there
>> is no way to constrain it. My take to this is to think it in long  
>> term.
>> Overtime, a few commonly used ontology would be shared by people  
>> who have
>> the same interest.  Take economy as an analogy, controled market  
>> have short
>> term stability but destine to collapse big time some time.  But  
>> free market
>> economy have occassional turmoil, especially at the beginning but  
>> is more
>> robust and stable in the long run.  So, don't worry about how  
>> others will do
>> in the future.  Just think about if there is any ontologies that  
>> can help
>> you adequately describe your data.
>>
>> Xiaoshu
>>
>>
>>> -----Original Message-----
>>> From: semantic-web-request@w3.org
>>> [mailto:semantic-web-request@w3.org] On Behalf Of Mary Montoya
>>> Sent: Wednesday, October 11, 2006 1:09 AM
>>> To: semantic-web@w3.org; public-semweb-lifesci@w3.org
>>> Subject: using OBO in owl format to describe data
>>>
>>>
>>> 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
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>





-- 
С уважением,
 Leonid                          mailto:leo@mgn.ru
Received on Thursday, 12 October 2006 09:38:49 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:00:45 GMT