From: Allyson L. <a.l...@ne...> - 2011-06-16 10:15:05
|
Hi all, I've been asked to make up a basic example of how we might do things in the annot package if we allowed OWL rather than just RDF. As OWL can be saved as RDF/XML, people who aren't interested in the annotation, or who are just interested in using a plain RDF parser can manage. We could still say in the proposal that any RDF is allowed, but then further specify (if we so decide) that MIRIAM annotations and other SBML-backed annotations are described using OWL, thus allowing things like negation. I'm not saying that we have to use OWL, or that we have to use these structures (and I have deliberately left the example minimalist, without much reference to the higher functions of OWL), but it would leave the door open for more complex statements in future, without losing the RDF structure many are familiar with. Happy to go with the general consensus, of course. Just thought I'd put this out there. By the way, I am sure there are other ways to do the examples, and there might be other ways to do the negation. Please feel free to put your own examples out, and definitely please comment on these. Attachments can be viewed in a normal text editor (they're very simple) or opened in Protege, where you get more of an idea of the shape of an OWL file. miriam-test.owl is the first example, and miriam-test-negation.owl is that example converted into a negation. Here are the examples. First, a simple bqb "is" qualifier. In SBML it looks like this (this entry is BIOMD0000000001): <rdf:RDF xmlns:rdf=" http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard=" http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol=" http://biomodels.net/biology-qualifiers/" xmlns:bqmodel=" http://biomodels.net/model-qualifiers/"> <rdf:Description rdf:about="#_000002"> <bqbiol:is> <rdf:Bag> <rdf:li rdf:resource="urn:miriam:obo.go:GO%3A0031594"/> </rdf:Bag> </bqbiol:is> </rdf:Description> </rdf:RDF> In the above example, we have the standard rdf:RDF element, which uses the bqbiol namespace and the bqmodel namespace. For a simple example (and based on how it's done in MFO to make life easier for me - http://cisban-silico.cs.ncl.ac.uk/MFO/), the OWL equivalent of the above annotation is below. In *bold* is the only major change to the internals of the rdf:RDF element - the rest of the changes are "xmlns" changes in the rdf:RDF tag: <rdf:RDF xmlns="http://www.sbml.org/sbml/level2/sbmll2v4/" xml:base="http://www.sbml.org/sbml/level2/sbmll2v4/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sbmll2v4="http://www.sbml.org/sbml/level2/sbmll2v4/"> <owl:Ontology rdf:about="http://www.sbml.org/sbml/level2/sbmll2v4/"/> *<owl:NamedIndividual rdf:about="#_000002"> <rdf:type rdf:resource="&sbmll2v4;MiriamAnnotation"/> <bqbIs rdf:datatype="&xsd;string">urn:miriam:obo.go:GO%3A0031594</bqbIs> </owl:NamedIndividual>* </rdf:RDF> Some notes on this example: 1. Not sure we'd need to name the ontology or not, so may not need the <owl:Ontology> element each time - certainly don't need it for simple RDF parsing. 2. In this example, we are treating the sbml element as an individual/instance of the class MiriamAnnotation. This may or may not be the right decision - it could be an anonymous individual or could be a class, for example. 3. Also, I'm ot sure *just* the metaid could go in the rdf:about field, though we do it in the SBML rdf annotation itself right now. Would need more experienced people for RDF or OWL to answer that. Otherwise, the rdf:about could point to a URI based on the model number and the metaid (e.g. http://www.sbml.org/sbml/level2/sbmll2v4/BIOMD0000000001_000002") The above OWL example isn't quite the full story: the xmlns that I have labelled sbmll2v4 would need to have, at a minimum, the following declarations in it, as they are used in the example: <!-- Definition of the datatype property bqb Is --> <owl:DatatypeProperty rdf:about="&sbmll2v4;bqbIs"> <rdfs:range rdf:resource="&xsd;string"/> </owl:DatatypeProperty> <!-- The class for which the example above is an instance of --> <owl:Class rdf:about="&sbmll2v4;MiriamAnnotation"/> As an aside, in MFO everything is converted to OWL, so the Species class is linked to the MiriamAnnotation class, which links through to the various bq qualifiers. We wouldn't need to do all of that here, as we only want the annotation in OWL. As negation seems such a hot topic, below is the extra lines required for the original example in order to add a second go term as a bqb is *not*. These lines would be added within the same rdf:RDF element in the annotation section: *<rdf:Description> <rdf:type rdf:resource="&owl;NegativePropertyAssertion"/> <owl:targetValue>urn:miriam:obo.go:GO%3A0031595</owl:targetValue> <owl:sourceIndividual rdf:resource="&sbmll2v4;_000002"/> <owl:assertionProperty rdf:resource="&sbmll2v4;bqbIs"/> </rdf:Description>* Remember, the examples are also attached to be viewed in their completeness either in an editor or in Protege. It's a first bash, anyway. Enjoy! -- Allyson Lister Please note the new email address of all...@ne..., although the old email address will still work. Newcastle University, http://www.ncl.ac.uk http://themindwobbles.wordpress.com |