The description of the ontology package from the FuGE specification is shown below. *********************** Ontology package The Ontology package provides a mechanism for referencing external ontologies or controlled vocabularies (Figure 1). The OntologyIndividual class can represent ontological classes, instances of classes (individuals) and terms from simple controlled vocabularies. The source of a term SHOULD be specified by the association to OntologySource. The term attribute stores the term itself (or the name of the ontology class) and termAccession stores the identifier or accession assigned to the ontology term within the source ontology. If no such accession is available, the ontology term SHOULD be repeated as the accession (by default). The inherited identifier attribute stores a unique identifier for the instance of the term used within the scope of the current FuGE document or instance. Figure 1 The Ontology package provides slots for referencing classes or properties from external ontologies or controlled vocabularies. In an ontology, classes can be related to each other through associations. Such associations are modeled in FuGE by the abstract class OntologyProperty. If the association is between two terms, ObjectProperty models the association from the parent ontology class to the child ontology class that is also modeled by OntologyIndividual. A second type of association exists in ontologies, modeled by DataProperty, which specifies that a data value can be entered by the user in a slot provided in the ontology. In various parts of the FuGE model there are defined associations to OntologyTerm for capturing ontological information, which allow the user to import an ontology class or instance (OntologyTerm), an ontology property (OntologyProperty) or a data property (DataProperty). It is expected that in the majority of instances, the associations will be used to associate with ontology classes or instances, using OntologyIndividual. Simple ontology example for the term “hour” from the unit ontology (http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo): <OntologyIndividual identifier="ex001:OntologyIndividual0" term="hour" termAccession="UO:0000032"OntologySource_ref="ex001:OntologySource2"/> … <OntologySource ontologyURI="http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/ unit.obo" identifier="ex001:OntologySource2" name="OBO-unit"/> Ontology example for “a measurement of 20 minutes” encoded using the MGED Ontology (http://mged.sourceforge.net/ontologies/index.php): <OntologyIndividual term="Measurement" termAccession="http://mged.sourceforge.net/ontologies/MGEDontology.php# Measurement" identifier="ex01:OntologyIndividual1" OntologySource_ref="OntologySource:MO"> <DataProperty term="has_value" termAccession="http://mged.sourceforge.net/ontologies/MGEDontology.php# has_value" identifier="ex01:DataProperty1" value="20"/> <ObjectProperty term="has_units" termAccession="http://mged.sourceforge.net/ontologies/MGEDontology.php# has_units" identifier="ex01:ObjectProperty1"> <OntologyIndividual term="minutes" termAccession="http://mged.sourceforge.net/ontologies/MGEDontology.php# minutes" identifier="ex01:OntologyIndividual2"/> </OntologyIndividual> … <OntologySource ontologyURI=" http://mged.sourceforge.net/ontologies/MGEDontology.php" identifier="OntologySource:MO" name="MGED Ontology"/> ************************ XML Schema The equivalent part of the XML Schema is as shown below. Note that the OntologyIndividual, ObjectProperty and DataProperty inherit from OntologyClass. OntologyClass and OntologySource inherit from Identifiable in FuGE (http://fuge.sourceforge.net/Version1InProcess/FuGE-v1-RefManual-InProcess.html#Identifiable), which enables every object to be assigned a unique identifier so it can be referenced anywhere in a FuGE instance, and an optionally a human-readable name. The inheritance hierarchy in FuGE also provides additional functionality that may not relevant here (e.g. for adding bibliographic references, auditing and so on). Without implementing the entire of FuGE, the ontology package could be used by incorporating the following XML Schema, and simply adding an identifier attribute to OntologySource. Where OntologyIndividiual is required elsewhere in the data format, a reference could be given in the XML Schema to the OntologyIndividual complexType. Technical note: There is an implementation choice here. In FuGE, all instances of OntologyIndividual appear once with a (local FuGE) unique identifier, collected together under the <OntologyCollection> node. Where a term is used in the format, a reference is given to the unique identifier of this term. Example 1 (true FuGE-compliant) <AtomicValue value="15"> <unit OntologyTerm_ref="ex001:OntologyIndividual0"/> </AtomicValue> Reference to… <OntologyIndividual identifier="ex001:OntologyIndividual0" term="hour" termAccession ="UO:0000032" OntologySource_ref="ex001:OntologySource2"/> with a further reference to ... < OntologySource= "http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo?view=log" identifier ="ex001:OntologySource1" name="OBO-unit"/> If the Ontology package is used outside the context of FuGE, it would be possible to embed a direct reference to an ontology term in the file (such that ontology terms are not re-used) without using unique identifiers Example 2 (FuGE-like) <AtomicValue value="15"> <unit> <OntologyIndividual term="hour" termAccession="UO:0000032" OntologySource_ref="ex001:OntologySource2"/> </unit> </AtomicValue> Schema: <xsd:complexType name="FuGE.Common.Ontology.OntologyIndividualType" abstract="false"> <xsd:annotation> <xsd:documentation> An instance of an Ontology class. </xsd:documentation> </xsd:annotation> <xsd:complexContent> <xsd:extension base="fuge:FuGE.Common.Ontology.OntologyTermType"> <xsd:sequence> <xsd:element ref="fuge:OntologyProperty" minOccurs="0" maxOccurs="unbounded"> <xsd:annotation> <xsd:documentation> A list of properties associated with the Individual. If based on an external Ontology, the list should be able to be validated against that Ontology. </xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="FuGE.Common.Ontology.OntologyPropertyType" abstract="true"> <xsd:annotation> <xsd:documentation> Base class for instances of Ontology properties </xsd:documentation> </xsd:annotation> <xsd:complexContent> <xsd:extension base="fuge:FuGE.Common.Ontology.OntologyTermType"> <xsd:sequence/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="FuGE.Common.Ontology.DataPropertyType" abstract="false"> <xsd:annotation> <xsd:documentation> An instance of an Ontology data property. So an individual of Age might be restricted to a value of 8. </xsd:documentation> </xsd:annotation> <xsd:complexContent> <xsd:extension base="fuge:FuGE.Common.Ontology.OntologyPropertyType"> <xsd:sequence/> <xsd:attribute name="dataType" type="xsd:string"> <xsd:annotation> <xsd:documentation> An optional data type attribute which should be either one of the CORBA Any types or one of the XML Schema simple types. If the Parent Individual is associated with a has_datatype property, instead of stating that property explicity, it could be used as the value of the datatype attribute, or the datatype can be provided as a hint to applications on how to store the value. </xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="value" type="xsd:string"> <xsd:annotation> <xsd:documentation> The value associated with the DataProperty instance. </xsd:documentation> </xsd:annotation> </xsd:attribute> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="FuGE.Common.Ontology.ObjectPropertyType" abstract="false"> <xsd:annotation> <xsd:documentation> An instance of an Ontology object property that restricts the parent individual to its child individual. So an Age individual may be restricted to an Individual unit of years. </xsd:documentation> </xsd:annotation> <xsd:complexContent> <xsd:extension base="fuge:FuGE.Common.Ontology.OntologyPropertyType"> <xsd:sequence> <xsd:element ref="fuge:OntologyIndividual" maxOccurs="unbounded"> <xsd:annotation> <xsd:documentation> The instance(s) of the child OntologyIndividuals referenced by the parent OntologyIndividual. </xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="FuGE.Common.Ontology.OntologyTermType" abstract="true"> <xsd:annotation> <xsd:documentation> A single entry from an ontology or a controlled vocabulary. If it is a simple controlled vocabulary, there may be no formal accession for the term. In these cases the local name should be repeated in both term and termAccession. If the term has a value, the OntologyIndividual will have a single DataProperty whose value was the value for the property. For instance, for an OntologyIndividual based on the MO ontology the attributes might be: The term would be what is usually called the local name in the Ontology, for instance 'Age'; The termAccession could be 'http://mged.sourceforge.net/ontologies/MGEDOntology.owl#Age' or a an arbitrary accession if one exists; The identifier is a unique identifier for individuals in the scope of the FuGE instance; The inherited name attribute should not be used; The ontologyURI of OntologySource could be 'http://mged.sourceforge.net/ontologies/MGEDOntology.owl". The OntologyTerm subclasses are instances of Ontology classes and properties, not the actual terms themselves. An OntologyIndividual, if based on an existing Ontology, can be considered a statement that can be validated against the referenced ontology. The subclasses and their associations are based on the Ontology Definition Model, ad/2005-04-13, submitted to the OMG as a response to RFP ad/2003-03-40, Copyright © 2005 DSTC Pty Ltd. Copyright © 2005 IBM Copyright © 2005 Sandpiper Software, Inc under the standard OMG license terms. </xsd:documentation> </xsd:annotation> <xsd:complexContent> <xsd:extension base="fuge:FuGE.Common.IdentifiableType"> <xsd:sequence/> <xsd:attribute name="term" type="xsd:string" use="required"> <xsd:annotation> <xsd:documentation> The ontology term itself, also known as the local name in some ontologies. </xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="termAccession" type="xsd:string" use="required"> <xsd:annotation> <xsd:documentation> The accession number assigned to the ontology term in the source ontology. If there is no explicit accession assigned, then the term (localname) must be repeated (i.e. the term is the unique accession). </xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="OntologySource_ref" type="xsd:string"> <xsd:annotation> <xsd:documentation> The source ontology or controlled vocabulary list that ontology terms have been obtained from. </xsd:documentation> </xsd:annotation> </xsd:attribute> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="FuGE.Common.Ontology.OntologySourceType" abstract="false"> <xsd:annotation> <xsd:documentation> The source ontology or controlled vocabulary list that ontology terms have been obtained from. </xsd:documentation> </xsd:annotation> xsd:complexContent>