BACKGROUND
controlled vocabularies and ontologies have evolved into essential tools in large-scale high-throughput scientific data annotation and retrieval.
they ensure data consistency and increase the efficiency and accuracy of queries by standardizing the wide variations in terminology that may exist in a particular field of study.
although this variability might be understandable by humans, it can hamper systematic searches through large volumes of data .
<cit>
the open biomedical ontologies project catalogues well-structured controlled vocabularies for shared use across different scientific domains  <cit> .
to date, ontologies exist to describe the anatomy, developmental processes, phenotypes and pathologies of several species, as well as those oriented towards experimental and physical properties.
for example, the gene ontology , one of the oldest and richest ontologies, provides consistent descriptions of gene products in different databases in terms of their associated biological processes, cellular components and molecular functions in a species-independent manner  <cit> .
the medical subject headings  thesaurus is another commonly used ontology produced by the national library of medicine and used for indexing, cataloguing, and searching for biomedical and health-related information and documents  <cit> .
while such a plethora of information is available to the scientific community, the tools to make efficient use of it are less forthcoming.
individual projects provide code bases and database schemas that have controlled vocabulary sub-schemas where ontologies can be loaded  project  <cit>  or the genomics unified schema   <cit> , for example).
however, the ontology segment is only one part of a larger and more complex toolkit, possibly creating a larger overhead than required.
each major ontology tends to have its own online browser  yet there has been little effort to integrate these ontologies into a single point of query.
one emerging project is the national center for biomedical ontology, which will be responsible for maintaining the obo library and creating biomedical data repositories and tools for accessing and using the data  <cit> .
the unified medical language system  <cit>  is another initiative providing interactive and programmatic access to vocabularies, classifications and coding systems, though its focus is more oriented towards biomedical and clinical information sources and requires a licensing agreement and registration.
the second version of distributed annotation system protocol   <cit>  proposes ontology queries using a standardized url scheme and xml responses.
it will allow das clients to retrieve information about ontologies and terms and perform basic queries.
however, the das/ <dig> specification is still being drafted.
servers and clients that will implement it are still in development.
one such server  <cit>  currently only has  <dig> ontologies available and requires an understanding of the das protocol to use.
the biomoby project  <cit>  is an interoperability system focusing on the integration of biological data and defines a protocol to link together distributed webservices to form workflows.
it uses internal ontologies to explicitly define the data type and the relationships between them.
services are registered in a central repository that can be queried by users wishing to discover which services are available for specific data types.
the biomoby ontologies are a means to define tool interoperability rather than being a data source.
ontology query services are provided by third parties who make them available via the moby central registry  <cit> .
however, the currently available services tend to be limited to either simple name queries, identifier queries or queries that return complex data types that are annotated with a given ontology term identifier.
the services available are also restricted to a single ontology at a time , generally the one being used by the party who provides the service.
there are to our knowledge no programmatic interfaces to allow for automated querying and interactive browsing of all obo ontologies from a single interface.
such interfaces would be useful in the creation of graphical user interface  widgets that could be integrated in the development of new tools and promote the use of ontologies in a simple yet powerful manner.
users would be more inclined to make use of controlled vocabulary terms if such data were available in applications used to generate, annotate or query scientific data.
implementation
overview
the ontology lookup service  is a platform independent system that makes use of open source components and is written in java.
it is built around a core object model that is linked to a database using an object-relational mapping layer.
automated loaders are run on a daily basis to keep the ontologies up-to-date.
database queries can be performed interactively through a web application or programmatically through a soap interface .
data loading
the database model was inspired by the relevant portion of the biosql database schema.
<cit>  versions of the database schema currently exist for mysql™ and oracle™.
ontology loaders feed the database by parsing obo-formatted flat-files and creating an object map that is persisted to the database using apache objectrelationalbridge  <cit> .
all relevant information is extracted from the obo file, including term accessions, names, synonyms, definitions, comments, relationships with other terms and cross-references with other ontologies and databases.
the ols does not do any curation on loaded ontologies, meaning that the data that is in the source flat-file is loaded faithfully.
the obo project maintains all of its ontologies in a cvs repository  <cit> , making it easy to keep the database up-to-date.
updated files are obtained on a daily basis and any modified ontology will be loaded to the database.
no loss of service is experienced during this process as the old version of the ontology is kept alive until the new one is fully loaded.
once loaded, the new version is set live and the old one is deleted.
once the ontology has been persisted, another process will create an apache lucene  <cit>  text index that will be used later on for case-insensitive full text queries.
terms are indexed on the preferred term name as well as on any annotated synonyms.
lucene has several advantages as a text-searching technology platform over rdbms-based queries.
it is very efficient at indexing and searching, it has a very powerful search syntax that can be used to limit and refine queries and it is platform independent, meaning that users do not need to rely on rdbms-specific technologies to obtain good performance.
web application
an interactive front-end was created using java server pages  in the struts framework.
from the ols homepage, users can search for ontology terms using an auto-completing form.
users can select a specific ontology or search across all loaded ontologies.
as users type a search term, a query is sent to a java servlet using asynchronous javascript and xml  once a search string is at least  <dig> characters long .
a collection of close matches are sent back to the user, which are displayed in a drop-down menu .
queries are done on the preferred term name as well as on any synonyms.
if the exact term is in the list, the user can select it to obtain the preferred term accession id.
once a term is selected, a further ajax request will return the definition for this term as well as any annotations associated with it .
if the number of possible terms matching the search term exceeds a cut-off limit, the user has the possibility to see the full list by selecting the "... and more" option .
users can also browse ontologies using a dynamically generated tree structure.
once an ontology is selected, the root terms of that ontology are displayed in the ontology browser.
clicking on a tree node will send an ajax request to a java servlet which will return the child terms for this parent term and update the browser .
selecting a term will display its definition and any annotations.
relationships between terms are colour-coded to quickly provide an additional level of information.
the three most significant relationships that comprise close to 98% of the relationships loaded in the ols  have been highlighted.
though several ontologies have defined custom relationship types, their usage is limited overall.
to keep the interface simple, these relationships are colour-coded as "others" but hovering the mouse cursor over these terms will display the relationship type in the browser.
users can also browse a subset of the ontology.
this can be done by clicking on the "browse" button from the main page after a term has been selected from the auto-completion selections or by clicking on the "zoom" button from the ontology browser.
this will re-root the browser on the selected term.
although it would have been possible to generate a complete, fully-browsable tree for small ontologies, this would rapidly become cumbersome and inefficient for large ontologies such as go, which have in excess of  <dig>  terms.
using ajax methodology, the tree is built up gradually as the user browses the ontology.
soap service
programmatic access to the database is available through a soap webservice.
the webservice is implemented in java and deployed using apache axis  <cit> .
though the service makes internal use of the object model classes, only primitive data types are returned to help in platform interoperability.
a server-side caching mechanism is implemented to store commonly accessed terms for increased performance.
a sample java client connection class is made available to download from sourceforge  <cit> .
the methods implemented in the webservice as well as detailed documentation of the webservice wsdl are available online at the ols website.
the ols core api javadoc is also available online.
RESULTS
to date,  <dig> ontologies have been loaded into the ols database, which account for close to  <dig>  terms.
a complete list of ontologies loaded into the ols can be found online  <cit> .
currently, only ontologies available in the obo flat-file format can be parsed into the ols data model and persisted to the database.
future work will aim to create parsers for ontologies in the owl format  <cit>  as well as other controlled vocabularies of biological interest, such as the newt taxonomy  <cit> .
having a centralized point of query has proven to be useful for multiple projects at the ebi.
this work started off as a requirement of the pride project  <cit> , which makes significant use of controlled vocabularies to annotate proteomic data sets  <cit> .
using ajax to perform term auto-completion and definition lookups allows reusability of these components in other web applications.
since transmitted data volume is quite low, the speed at which the list of suggestions is refreshed will closely match the typing speed of most users.
work is currently underway to incorporate these widgets into the pride and intact  <cit>  web interfaces at the ebi.
the programmatic soap interface is already being used by the pride project to query the ontologies and obtain constantly updated terms while importing and exporting datasets.
work is also underway to use the soap interface in annotation and curation tools to edit and maintain the data in pride.
CONCLUSIONS
the ontology lookup service provides interactive and programmatic access to multiple ontologies, using lightweight and consistent interfaces.
users can perform simple queries using an interactive suggest-as-you-type form and browse ontologies in a clear tree-like browser.
more sophisticated queries can be performed programmatically using a platform-independent soap interface.
the service currently holds  <dig> ontologies covering fields such as anatomy, pathology, development, genomics, proteomics and experimental methods, among others.
it is our hope that by providing generic, reusable code components, other projects in the bioinformatics community will make use of the ontology lookup service.
future work aims to increase the number of ontologies available to the general public and to enrich the soap interface from user feedback requirements.
users are encouraged to contact the authors to discuss feature requests to the interface.
the data model contains more information than was required for the initial release requirements and could be made available if requested.
finally, many biomedical ontologies are available in owl format and we hope to have owl loaders for the next major release of the ols.
availability and requirements
• project name: ontology lookup service
• project home page:
• operating system: platform independent
• programming language: java
• other requirements: java  <dig> , tomcat  <dig> , mysql or oracle
• license: apache license  <dig>
• any restrictions to use by non-academics: none
list of abbreviations
ajax asynchronous javascript and xml
cvs concurrent versioning system
das distributed annotation system
go gene ontology
gmod generic model organism database
gui graphical user interface
gus genomics unified schema
mesh medical subject headings
obo open biomedical ontologies
ojb object relational bridge
ols ontology lookup service
orm object relational mapping
owl web ontology language
po plant ontology
rdbms relational database management system
rfc request for comments
soap simple object access protocol
xml extensible markup language
authors' contributions
rc designed and implemented the data loading strategy, data indexing and querying as well as gui component design and implementation.
pj participated in the design of the overall architecture and the design of the data model and orm mapping.
all authors read and approved the final manuscript.

 controlled vocabularies and ontologies have evolved into essential tools in large-scale high-throughput scientific data annotation and retrieval. they ensure data consistency and increase the efficiency and accuracy of queries by standardizing the wide variations in terminology that may exist in a particular field of study. although this variability might be understandable by humans, it can hamper systematic searches through large volumes of data. the open biomedical ontologies project catalogues well-structured controlled vocabularies for shared use across different scientific domains. to date, ontologies exist to describe the anatomy, developmental processes, phenotypes and pathologies of several species, as well as those oriented towards experimental and physical properties. for example, the gene ontology, one of the oldest and richest ontologies, provides consistent descriptions of gene products in different databases in terms of their associated biological processes, cellular components and molecular functions in a species-independent manner. the medical subject headings thesaurus is another commonly used ontology produced by the national library of medicine and used for indexing, cataloguing, and searching for biomedical and health-related information and documents. while such a plethora of information is available to the scientific community, the tools to make efficient use of it are less forthcoming. individual projects provide code bases and database schemas that have controlled vocabulary sub-schemas where ontologies can be loaded project or the genomics unified schema, for example). however, the ontology segment is only one part of a larger and more complex toolkit, possibly creating a larger overhead than required. each major ontology tends to have its own online browser yet there has been little effort to integrate these ontologies into a single point of query. one emerging project is the national center for biomedical ontology, which will be responsible for maintaining the obo library and creating biomedical data repositories and tools for accessing and using the data. the unified medical language system is another initiative providing interactive and programmatic access to vocabularies, classifications and coding systems, though its focus is more oriented towards biomedical and clinical information sources and requires a licensing agreement and registration. the second version of distributed annotation system protocol proposes ontology queries using a standardized url scheme and xml responses. it will allow das clients to retrieve information about ontologies and terms and perform basic queries. however, the das/ specification is still being drafted. servers and clients that will implement it are still in development. one such server currently only has ontologies available and requires an understanding of the das protocol to use. the biomoby project is an interoperability system focusing on the integration of biological data and defines a protocol to link together distributed webservices to form workflows. it uses internal ontologies to explicitly define the data type and the relationships between them. services are registered in a central repository that can be queried by users wishing to discover which services are available for specific data types. the biomoby ontologies are a means to define tool interoperability rather than being a data source. ontology query services are provided by third parties who make them available via the moby central registry. however, the currently available services tend to be limited to either simple name queries, identifier queries or queries that return complex data types that are annotated with a given ontology term identifier. the services available are also restricted to a single ontology at a time, generally the one being used by the party who provides the service. there are to our knowledge no programmatic interfaces to allow for automated querying and interactive browsing of all obo ontologies from a single interface. such interfaces would be useful in the creation of graphical user interface widgets that could be integrated in the development of new tools and promote the use of ontologies in a simple yet powerful manner. users would be more inclined to make use of controlled vocabulary terms if such data were available in applications used to generate, annotate or query scientific data. implementation overview the ontology lookup service is a platform independent system that makes use of open source components and is written in java. it is built around a core object model that is linked to a database using an object-relational mapping layer. automated loaders are run on a daily basis to keep the ontologies up-to-date. database queries can be performed interactively through a web application or programmatically through a soap interface. data loading the database model was inspired by the relevant portion of the biosql database schema. versions of the database schema currently exist for mysql™ and oracle™. ontology loaders feed the database by parsing obo-formatted flat-files and creating an object map that is persisted to the database using apache objectrelationalbridge. all relevant information is extracted from the obo file, including term accessions, names, synonyms, definitions, comments, relationships with other terms and cross-references with other ontologies and databases. the ols does not do any curation on loaded ontologies, meaning that the data that is in the source flat-file is loaded faithfully. the obo project maintains all of its ontologies in a cvs repository, making it easy to keep the database up-to-date. updated files are obtained on a daily basis and any modified ontology will be loaded to the database. no loss of service is experienced during this process as the old version of the ontology is kept alive until the new one is fully loaded. once loaded, the new version is set live and the old one is deleted. once the ontology has been persisted, another process will create an apache lucene text index that will be used later on for case-insensitive full text queries. terms are indexed on the preferred term name as well as on any annotated synonyms. lucene has several advantages as a text-searching technology platform over rdbms-based queries. it is very efficient at indexing and searching, it has a very powerful search syntax that can be used to limit and refine queries and it is platform independent, meaning that users do not need to rely on rdbms-specific technologies to obtain good performance. web application an interactive front-end was created using java server pages in the struts framework. from the ols homepage, users can search for ontology terms using an auto-completing form. users can select a specific ontology or search across all loaded ontologies. as users type a search term, a query is sent to a java servlet using asynchronous javascript and xml once a search string is at least characters long. a collection of close matches are sent back to the user, which are displayed in a drop-down menu. queries are done on the preferred term name as well as on any synonyms. if the exact term is in the list, the user can select it to obtain the preferred term accession id. once a term is selected, a further ajax request will return the definition for this term as well as any annotations associated with it. if the number of possible terms matching the search term exceeds a cut-off limit, the user has the possibility to see the full list by selecting the "... and more" option. users can also browse ontologies using a dynamically generated tree structure. once an ontology is selected, the root terms of that ontology are displayed in the ontology browser. clicking on a tree node will send an ajax request to a java servlet which will return the child terms for this parent term and update the browser. selecting a term will display its definition and any annotations. relationships between terms are colour-coded to quickly provide an additional level of information. the three most significant relationships that comprise close to 98% of the relationships loaded in the ols have been highlighted. though several ontologies have defined custom relationship types, their usage is limited overall. to keep the interface simple, these relationships are colour-coded as "others" but hovering the mouse cursor over these terms will display the relationship type in the browser. users can also browse a subset of the ontology. this can be done by clicking on the "browse" button from the main page after a term has been selected from the auto-completion selections or by clicking on the "zoom" button from the ontology browser. this will re-root the browser on the selected term. although it would have been possible to generate a complete, fully-browsable tree for small ontologies, this would rapidly become cumbersome and inefficient for large ontologies such as go, which have in excess of terms. using ajax methodology, the tree is built up gradually as the user browses the ontology. soap service programmatic access to the database is available through a soap webservice. the webservice is implemented in java and deployed using apache axis. though the service makes internal use of the object model classes, only primitive data types are returned to help in platform interoperability. a server-side caching mechanism is implemented to store commonly accessed terms for increased performance. a sample java client connection class is made available to download from sourceforge. the methods implemented in the webservice as well as detailed documentation of the webservice wsdl are available online at the ols website. the ols core api javadoc is also available online.  to date, ontologies have been loaded into the ols database, which account for close to terms. a complete list of ontologies loaded into the ols can be found online. currently, only ontologies available in the obo flat-file format can be parsed into the ols data model and persisted to the database. future work will aim to create parsers for ontologies in the owl format as well as other controlled vocabularies of biological interest, such as the newt taxonomy. having a centralized point of query has proven to be useful for multiple projects at the ebi. this work started off as a requirement of the pride project, which makes significant use of controlled vocabularies to annotate proteomic data sets. using ajax to perform term auto-completion and definition lookups allows reusability of these components in other web applications. since transmitted data volume is quite low, the speed at which the list of suggestions is refreshed will closely match the typing speed of most users. work is currently underway to incorporate these widgets into the pride and intact web interfaces at the ebi. the programmatic soap interface is already being used by the pride project to query the ontologies and obtain constantly updated terms while importing and exporting datasets. work is also underway to use the soap interface in annotation and curation tools to edit and maintain the data in pride.  the ontology lookup service provides interactive and programmatic access to multiple ontologies, using lightweight and consistent interfaces. users can perform simple queries using an interactive suggest-as-you-type form and browse ontologies in a clear tree-like browser. more sophisticated queries can be performed programmatically using a platform-independent soap interface. the service currently holds ontologies covering fields such as anatomy, pathology, development, genomics, proteomics and experimental methods, among others. it is our hope that by providing generic, reusable code components, other projects in the bioinformatics community will make use of the ontology lookup service. future work aims to increase the number of ontologies available to the general public and to enrich the soap interface from user feedback requirements. users are encouraged to contact the authors to discuss feature requests to the interface. the data model contains more information than was required for the initial release requirements and could be made available if requested. finally, many biomedical ontologies are available in owl format and we hope to have owl loaders for the next major release of the ols. availability and requirements • project name: ontology lookup service • project home page: • operating system: platform independent • programming language: java • other requirements: java, tomcat, mysql or oracle • license: apache license • any restrictions to use by non-academics: none list of abbreviations ajax asynchronous javascript and xml cvs concurrent versioning system das distributed annotation system go gene ontology gmod generic model organism database gui graphical user interface gus genomics unified schema mesh medical subject headings obo open biomedical ontologies ojb object relational bridge ols ontology lookup service orm object relational mapping owl web ontology language po plant ontology rdbms relational database management system rfc request for comments soap simple object access protocol xml extensible markup language authors' contributions rc designed and implemented the data loading strategy, data indexing and querying as well as gui component design and implementation. pj participated in the design of the overall architecture and the design of the data model and orm mapping. all authors read and approved the final manuscript. 
we saw the need for a centralized location to perform controlled vocabulary queries that would offer both a lightweight web-accessible user interface as well as a consistent, unified soap interface for automated queries. the ontology lookup service was created to integrate publicly available biomedical ontologies into a single database. a list of currently loaded ontologies is available online. the service is described by a wsdl descriptor file available online.
 with the vast amounts of biomedical data being generated by high-throughput analysis methods, controlled vocabularies and ontologies are becoming increasingly important to annotate units of information for ease of search and retrieval. each scientific community tends to create its own locally available ontology. the interfaces to query these ontologies tend to vary from group to group. we saw the need for a centralized location to perform controlled vocabulary queries that would offer both a lightweight web-accessible user interface as well as a consistent, unified soap interface for automated queries.  the ontology lookup service was created to integrate publicly available biomedical ontologies into a single database. all modified ontologies are updated daily. a list of currently loaded ontologies is available online. the database can be queried to obtain information on a single term or to browse a complete ontology using ajax. auto-completion provides a user-friendly search mechanism. an ajax-based ontology viewer is available to browse a complete ontology or subsets of it. a programmatic interface is available to query the webservice using soap. the service is described by a wsdl descriptor file available online. a sample java client to connect to the webservice using soap is available for download from sourceforge. all ols source code is publicly available under the open source apache licence.  the ols provides a user-friendly single entry point for publicly available ontologies in the open biomedical ontology format. it can be accessed interactively or programmatically at. 