Technical Guide

+----------------+-----------------------------------------+----------+
| ![](medi       | ![](media/image4.wmf){width="2.5in"     |          |
| a/image2.png){ | height="1.5229166666666667in"}          |          |
| width="0.90984 |                                         |          |
| 25196850394in" | Center for Bioinformatics               |          |
| he             |                                         |          |
| ight="0.909055 |                                         |          |
| 1181102362in"} |                                         |          |
+----------------+-----------------------------------------+----------+
|                |                                         |          |
+----------------+-----------------------------------------+----------+
| ![](medi       |                                         |          |
| a/image5.wmf){ |                                         |          |
| width="0.90902 |                                         |          |
| 77777777778in" |                                         |          |
| he             |                                         |          |
| ight="1.018055 |                                         |          |
| 5555555555in"} |                                         |          |
+----------------+-----------------------------------------+----------+

This is a U.S. Government work. May 5, 2008

Credits and Resources

+-----------------------+----------+-------------+--------------------+
| caBIO Development     |          |             |                    |
|                       |          |             |                    |
| and Management Teams  |          |             |                    |
+-----------------------+----------+-------------+--------------------+
| Development           | T        |             | Program Management |
|                       | echnical |             |                    |
|                       | Guide    |             |                    |
+-----------------------+----------+-------------+--------------------+
| Hong Dang^3^          | Jill     |             | Juli Klemm^1^      |
|                       | Had      |             |                    |
|                       | field^1^ |             |                    |
+-----------------------+----------+-------------+--------------------+
| Sharon Gaheen^2^      | Konrad   |             | Krishnakant        |
|                       | Ro       |             | Shanbhag^1^        |
|                       | kicki^2^ |             |                    |
+-----------------------+----------+-------------+--------------------+
| Norval Johnson^5^     | Jim      |             | George             |
|                       | Sun^2^   |             | Komatsoulis^1^     |
+-----------------------+----------+-------------+--------------------+
| Sriram                | Lalitha  |             |                    |
| Kalyanasundaram^4^    | Visw     |             |                    |
|                       | anath^2^ |             |                    |
+-----------------------+----------+-------------+--------------------+
| Ying Long^2^          |          |             |                    |
+-----------------------+----------+-------------+--------------------+
| Konrad Rokicki^2^     |          |             |                    |
+-----------------------+----------+-------------+--------------------+
| Jim Sun^2^            |          |             |                    |
+-----------------------+----------+-------------+--------------------+
| Lalitha Viswanath^2^  |          |             |                    |
+-----------------------+----------+-------------+--------------------+
| Ye Wu^2^              |          |             |                    |
+-----------------------+----------+-------------+--------------------+
|                       |          |             |                    |
+-----------------------+----------+-------------+--------------------+
|                       |          |             |                    |
+-----------------------+----------+-------------+--------------------+
|                       |          |             |                    |
+-----------------------+----------+-------------+--------------------+
| ^1^ National Cancer   |          | ^2^ Science |                    |
| Institute Center for  |          | Application |                    |
| Bioinformatics        |          | In          |                    |
| (NCICB)               |          | ternational |                    |
|                       |          | Corporation |                    |
|                       |          | (SAIC)      |                    |
+-----------------------+----------+-------------+--------------------+
| ^3^ Alpha Gamma       |          | ^4^TerpSys  |                    |
| Technologies          |          |             |                    |
+-----------------------+----------+-------------+--------------------+

+----------------------+-----------------------------------------------+
| Contacts and Support |                                               |
+----------------------+-----------------------------------------------+
| NCICB Application    | <http://ncicb.nci.nih.gov/NCICB/support>      |
| Support              |                                               |
|                      | Telephone: 301-451-4384                       |
|                      |                                               |
|                      | Toll free: 888-478-4423                       |
+----------------------+-----------------------------------------------+

  ------------------ ------------------------------------------------------- -------------
  ***LISTSERV                                                                
  Facilities                                                                 
  Pertinent to                                                               
  caBIO***                                                                   

  LISTSERV           URL                                                     Name

  CABIO_USERS        <https://list.nih.gov/archives/cabio_users.html>        Users

  CABIO_DEVELOPERS   <https://list.nih.gov/archives/cabio_developers.html>   Developers
  ------------------ ------------------------------------------------------- -------------

GForge is a cross project collaboration site for NCICB caBIO developers
located at <http://gforge.nci.nih.gov/projects/cabiodb/>.

**Release Schedule**

This guide has been updated for the caBIO 4.1 release. It may be updated
between releases if errors or omissions are found. The current document
refers to the 4.1 version of caBIO, released in May 2008 by the NCICB

.

Table of Contents

[About This Guide 1](#__RefHeading___Toc196890002)

[Purpose 1](#purpose)

[Release Schedule 1](#release-schedule)

[New Features in BIO 4.1 1](#new-features-in-cabio-4.1)

[Audience 2](#audience)

[Additional caBIO Documentation 2](#additional-cabio-documentation)

[Organization of This guide 2](#organization-of-this-guide)

[Text Conventions Used 3](#text-conventions-used)

[Chapter 1 caCORE OverView 5](#cacore-overview)

[Architecture Overview 5](#architecture-overview)

[Components of caCORE 6](#components-of-cacore)

[Enterprise Vocabulary Services (EVS)
6](#enterprise-vocabulary-services-evs)

[Cancer Data Standards Repository (caDSR)
6](#cancer-data-standards-repository-cadsr)

[Cancer Bioinformatics Infrastructure Objects (caBIO)
6](#cancer-bioinformatics-infrastructure-objects-cabio)

[Common Security Model (CSM) 6](#common-security-model-csm)

[Common Logging Module (CLM) 6](#common-logging-module-clm)

[Chapter 2 caBIO Overview 9](#cabio-overview)

[General Overview 9](#general-overview)

[caBIO Data Overview 9](#cabio-data-overview)

[Architecture Overview 10](#architecture-overview-1)

[Chapter 3 caBIO Architecture 13](#cabio-architecture)

[caBIO System Architecture 13](#cabio-system-architecture)

[The Application Service Layer 14](#the-application-service-layer)

[The Data Source Delegation Layer 14](#the-data-source-delegation-layer)

[Object-Relational Mapping (ORM) 14](#object-relational-mapping-orm)

[Non-ORM Layer 14](#non-orm-layer)

[Client Technologies 14](#client-technologies)

[Major caBIO Domain Packages 15](#major-cabio-domain-packages)

[The caBIO System Packages 16](#the-cabio-system-packages)

[Chapter 4 Interacting with caBIO 19](#interacting-with-cabio)

[caBIO Service Interface Paradigm 19](#cabio-service-interface-paradigm)

[Java API 19](#java-api)

[Installation and Configuration 20](#installation-and-configuration)

[A Simple Example 22](#a-simple-example)

[Service Methods 23](#service-methods)

[Examples of Use 27](#examples-of-use)

[Utility Methods 38](#utility-methods)

[Web Services API 39](#web-services-api)

[Configuration 40](#configuration)

[Java WS Client 40](#java-ws-client)

[Operations 41](#operations)

[Examples of Use 43](#examples-of-use-1)

[Limitations 45](#limitations)

[XML-HTTP API 45](#xml-http-api)

[Service Location and Syntax 45](#service-location-and-syntax)

[Examples of Use 47](#examples-of-use-2)

[Working With Result Sets 48](#working-with-result-sets)

[Limitations 49](#limitations-1)

[Chapter 5 caBIO Utilities 51](#cabio-utilities)

[FreestyleLM 51](#freestylelm)

[Freestyle LM Java Client 51](#freestyle-lm-java-client)

[Grid Id Resolver 54](#grid-id-resolver)

[Grid Id Resolver Java API 54](#grid-id-resolver-java-api)

[Genome Range Queries 55](#genome-range-queries)

[Range Query Java API 55](#range-query-java-api)

[Array Annotation API 57](#array-annotation-api)

[SVG Manipulator 63](#svg-manipulator)

[Manipulating Pathway Diagrams 63](#manipulating-pathway-diagrams)

[Chapter 6 Cancer Bioinformatics Infrastructure Objects
67](#cancer-bioinformatics-infrastructure-objects)

[Introduction 67](#introduction)

[caBIO API 67](#cabio-api)

[Data Sources in the caBIO Database
79](#data-sources-in-the-cabio-database)

[caGrid Identifiers 85](#cagrid-identifiers)

[Classes to be indexed for FreeStyleLM Search
85](#classes-to-be-indexed-for-freestylelm-search)

[Appendix A References 90](#references)

[Technical Manuals/Articles 90](#technical-manualsarticles)

[Scientific Publications 90](#__RefHeading___Toc196890068)

[caBIG Material 92](#cabig-material)

[caCORE Material 92](#cacore-material)

[Modeling Concepts 92](#modeling-concepts)

[Applications Currently Using caBIO
93](#applications-currently-using-cabio)

[Index 94](#__RefHeading___Toc196890073)

[]{#__RefHeading___Toc196890002 .anchor}About This Guide

This section introduces you to the caBIO 4.1 Technical Guide. Topics in
this section include:

-   Purpose on this page

-   Release Schedule on this page

-   New Features in caBIO 4.1 on 2

-   Audience on page [2](#audience)

-   Additional caBIO Documentation on
    page[2](#additional-cabio-documentation)

-   Organization of This Guide on page [2](#organization-of-this-guide)

-   Document Text Conventions on page [3](#text-conventions-used)

## Purpose {#purpose .unnumbered}

The caBIO 4.1 Technical Guide describes the Cancer Bioinformatics
Infrastructure Objects (caBIO) model, the data represented by its
objects, and its application programming interfaces.

This guide describes:

-   the purpose, architecture and components of caBIO

-   the APIs for accessing the caBIO system including Java, Web
    services, and XML-HTTP

-   Additional utilities for accessing the data in caBIO

-   the data accessible through the caBIO APIs Audience

## Release Schedule {#release-schedule .unnumbered}

This guide is updated for each caBIO release. It may be updated between
releases if errors or omissions are found. The current document refers
to the 4.1 version of caBIO, which was released in May 2008 by NCI
CBIIT.

## New Features in caBIO 4.1 {#new-features-in-cabio-4.1 .unnumbered}

The 4.1 release of caBIO contains many significant updates. These
include:

-   Genome Range queries - The Range Query API provides an alternative
    way to search for genomic features on a chromosome, based on the
    physical locations. The API is capable of performing arbitrary range
    searches on any given chromosome (absolute search), or range
    searches around a feature of interest (relative search).

-   Array Annotation API - This client-side convenience API is intended
    for users of the Microarray annotations in caBIO. The API simplifies
    access to bulk microarray annotations such as reporters, genes and
    SNPs.

-   Model updates to support caBIG™ standards -- Portions of the caBIO
    domain model have been revised to allow reuse of the caBIG-standard
    Genomic Identifier CDEs.

-   Cancer Gene Index data -- The caBIO domain model has been expanded
    to support information from the Cancer Gene Data Curation project.
    Details of this project can be found at:
    http://ncicb.nci.nih.gov/NCICB/projects/cgdcp

-   UniSTS Marker Data - caBIO now serves Marker data from UniSTS, in
    the Marker and MarkerAlias objects

## Audience {#audience .unnumbered}

The primary audiences of this guide are:

-   The application developer who want to learn about the architecture
    and use of the caBIO APIs and utilities. These sections of the guide
    assume familiarity with the Java programming language and/or other
    programming languages, database concepts, and the Internet. If you
    intend to use caCORE resources in software applications, it assumes
    that you have experience with building and using complex data
    systems.

-   The scientist end-user who wants to understand the data provided in
    caBIO (Chapter 2) and/or use the Freestyle Lexical Mine search
    (described in Chapter 5).

## Additional caBIO Documentation {#additional-cabio-documentation .unnumbered}

The [caBIO 4.1 Release
Notes](http://ncicb.nci.nih.gov/NCICB/infrastructure/cacore_project_doc)
contain a description of the end user tool enhancements and bug fixes
included in this release.

The [caBIO 4.1
JavaDocs](http://ncicb.nci.nih.gov/NCICB/content/ncicblfs/caCORE3-2_JavaDocs)
contain the current caBIO API specification

The [caCORE SDK 4.0 Developer's
Guide](http://ncicb.nci.nih.gov/NCICB/infrastructure/cacoresdk#Documentation)
contains detailed instructions on the use of the SDK and how it helps
create a caCORE-like software system.

For more caBIO-related references, see Appendix A, References.

## Organization of This guide {#organization-of-this-guide .unnumbered}

This brief overview explains what you will find in each section of this
guide.

-   This chapter, introduces this guide.

-   Chapter 1 provides an overview of caCORE and caBIG™

-   Chapter 2 provides an overview of caBIO.

-   Chapter 3 describes the architecture of caBIO

-   Chapter 4 describes the various methods for accessing the data in
    caBIO.

-   Chapter 5 describes additional utilities provided by the caBIO API,
    which are not generated by the caCORE SDK.

-   Chapter 6 describes the Cancer Bioinformatics Infrastructure Objects
    (caBIO)

-   Appendix A includes a listing of references to provide the caBIO
    users with more in depth information about relevant topics.

-   Appendix B provides technical users with instructions how migrate
    systems that are using previous versions of caBIO.

##  Text Conventions Used {#text-conventions-used .unnumbered}

This section explains conventions used in this guide. The various
typefaces represent interface components, keyboard shortcuts, toolbar
buttons, dialog box options, and text that you type.

  -------------------------------------------------------------------------------
  Convention            Description                       Example
  --------------------- --------------------------------- -----------------------
  **Bold**              Highlights names of option        Click **Search**.
                        buttons, check boxes, drop-down   
                        menus, menu commands, command     
                        buttons, or icons.                

  URL                   Indicates a Web address.          http://domain.com

  text in [Small        Indicates a keyboard shortcut.    Press
  Caps]{.smallcaps}                                       [Enter]{.smallcaps}.

  text in [Small        Indicates keys that are pressed   Press
  Caps]{.smallcaps} +   simultaneously.                   [Shift]{.smallcaps} +
  text in [Small                                          [Ctrl]{.smallcaps}.
  Caps]{.smallcaps}                                       

  *Italics*             Highlights references to other    See *Figure 4.5*.
                        documents, sections, figures, and 
                        tables.                           

  ***Italic boldface    Represents text that you type.    In the **New Subset**
  monospace*** type                                       text box, enter
                                                          ***Proprietary
                                                          Proteins***.

  **Note:**             Highlights information of         **Note:** This concept
                        particular importance.            is used throughout this
                                                          document.

  { }                   Surrounds replaceable items.      Replace {last name,
                                                          first name} with the
                                                          Principal
                                                          Investigator's name.
  -------------------------------------------------------------------------------

# caCORE OverView

This chapter provides an overview of the NCICB caCORE infrastructure.

Topics in this chapter include:

-   Architecture Overview on this page

-   Components of caCORE on page [6](#components-of-cacore)

## Architecture Overview  {#architecture-overview .unnumbered}

The NCI Center for Bioinformatics (NCICB) provides biomedical
informatics support and integration capabilities to the cancer research
community. NCICB has created a core infrastructure called Cancer Common
Ontologic Representation Environment (caCORE), a data management
framework designed for researchers who need to be able to navigate
through a large number of data sources. By providing a common data
management framework, caCORE helps streamline the informatics
development throughout academic, government and private research labs
and clinics. The components of caCORE support the semantic consistency,
clarity, and comparability of biomedical research data and information.
caCORE is open-source enterprise architecture for NCI-supported research
information systems, built using formal techniques from the software
engineering and computer science communities. The four characteristics
of caCORE include:

-   Model Driven Architecture (MDA)

-   *n*-tier architecture with open Application Programming Interfaces
    (APIs)

-   Use of controlled vocabularies, wherever possible

-   Registered metadata

The use of MDA and *n*-tier architecture, both standard software
engineering practices, allows for easy access to data, particularly by
other applications. The use of controlled vocabularies and registered
metadata, less common in conventional software practices, requires
specialized tools, generally unavailable.

As a result, the NCICB (in cooperation with the NCI Office of
Communications) has developed the Enterprise Vocabulary Services (EVS)
system to supply controlled vocabularies, and the Cancer Data Standards
Repository (caDSR) to provide a dynamic metadata registry. When all four
development principles are addressed, the resulting system has several
desirable properties. Systems with these properties are said to be
"caCORE-like".

1.  The *n*-tier architecture with its open APIs frees the end user
    (whether human or machine) from needing to understand the
    implementation details of the underlying data system to retrieve
    information.

2.  The maintainer of the resource can move the data or change
    implementation details (Relational Database Management System, and
    so forth) without affecting the ability of remote systems to access
    the data.

3.  Most importantly, the system is 'semantically interoperable'; that
    is, there exists runtime-retrievable information that can provide an
    explicit definition and complete data characteristics for each
    object and attribute that can be supplied by the data system.

## Components of caCORE {#components-of-cacore .unnumbered}

The components that comprise caCORE are EVS, caDSR, caBIO, CSM, and CLM.
Each is described briefly below.

### Enterprise Vocabulary Services (EVS)  {#enterprise-vocabulary-services-evs .unnumbered}

EVS provides controlled vocabulary resources that support the life
sciences domain, implemented in a description logics framework. EVS
vocabularies provide the semantic \'raw material\' from which data
elements, classes, and objects are constructed.

### Cancer Data Standards Repository (caDSR)  {#cancer-data-standards-repository-cadsr .unnumbered}

The caDSR is a metadata registry, based upon the ISO/IEC 11179 standard,
used to register the descriptive information needed to render cancer
research data reusable and interoperable. The caBIO, EVS, and caDSR data
classes are registered in the caDSR, as are the data elements on
NCI-sponsored clinical trials case report forms.

### Cancer Bioinformatics Infrastructure Objects (caBIO)  {#cancer-bioinformatics-infrastructure-objects-cabio .unnumbered}

The caBIO model and architecture is the primary programmatic interface
to caCORE. Each of the caBIO domain objects represents an entity found
in biomedical research. Unified Modeling Language™ (UML) models of
biomedical objects are implemented in Java as middleware connected to
various cancer research databases to facilitate data integration and
consistent representation. Examining the relationships between these
objects can reveal biomedical knowledge that was previously buried in
the various primary data sources.

### Common Security Model (CSM)  {#common-security-model-csm .unnumbered}

CSM provides a flexible solution for application security and access
control with three main functions:

-   Authentication to validate and verify a user\'s credentials

-   Authorization to grant or deny access to data, methods, and objects

-   User Authorization Provisioning to allow an administrator to create
    and assign authorization roles and privileges.

### Common Logging Module (CLM)  {#common-logging-module-clm .unnumbered}

CLM provides a separate service under caCORE for Audit and Logging
Capabilities. It also comes with a web based locator tool. It can be
used by a client application directly, without the application using any
other components like CSM.

In September of 2007, the NCI CBIIT Infrastructure and Product
Management Team made the decision to separate the caCORE Components that
had previously been bundled and released together. This decision was
geared toward allowing each of the infrastructure product teams to be
more responsive in addressing specific needs of the user community. With
each component release there is a product specific Technical Guide. For
more details on the other components, refer to the caCORE Overview page
at <http://ncicb.nci.nih.gov:80/NCICB/infrastructure/cacore_overview>,
which directs you to other product specific Technical Guides.

# caBIO Overview

This chapter provides an overview of the caBIO data and infrastructure.

Topics in this chapter include:

-   General Overview on this page

-   caBIO Data Overview on this page

-   Architecture Overview on page [10](#architecture-overview-1)

## General Overview {#general-overview .unnumbered}

The cancer Bioinformatics Infrastructure Objects (caBIO) model and
architecture is a synthesis of software, vocabulary, and metadata models
for cancer research. Each of the caBIO domain objects represents an
entity found in biomedical research such as Gene, Chromosome, Nucleic
Acid Sequence, SNP, Library, Clone, and Pathway. Examining the
relationships between these objects can reveal biomedical knowledge that
was previously buried in the various primary data sources. Given the
dynamic nature of this information, the data in caBIO is updated on a
monthly basis through a series of ETL (Extract, Transform, and Load)
processes.

The caBIO data can be accessed via a variety of Application Programming
Interfaces (APIs) as well as a web user interface. The system also
provides a number of utilities to search for and manipulate data objects
programmatically.

## caBIO Data Overview {#cabio-data-overview .unnumbered}

The caBIO system is primarily a repository of molecular biology data,
and as such, the entities that concern the Central Dogma of Molecular
Biology are the core of this model. Data for these classes come from a
variety of sources. Gene, Chromosome, Nucleic Acid Sequence, and Taxon
comes from the NCBI UniGene data resource both directly and via the
Cancer Gene Anatomy Project (CGAP), an NCI activity that maintains
information about expression of genes in tumors based on EST sequencing
frequency. Cytogenetic location information, as well as EST and mRNA
sequence annotation data come from the University of California Santa
Cruz (UCSC) Genome Project. Protein data (including data about
sequences) is retrieved from the Protein Information Resource (PIR) at
Georgetown University.

The caBIO pathway data is primarily supplied from the BioCarta and its
Proteomics Pathways Project via the NCI Cancer Molecular Analysis
Project or CMAP. This pathway data is integrated into four primary
classes: 'Gene', 'Pathway', 'Taxon', and 'Histopathology'. The presence
of the latter class is designed to allow a relationship between a
pathway and a disease to be annotated. The Pathway object contains an
attribute that contains an image of the pathway as a Scalar Vector
Graphic (SVG).

Annotations from the most widely used human microarrays from Affymetrix
([http://www.affymetrix.com](http://www.affymetrix.com/)), Illumina
([http://www.illumina.com](http://www.illumina.com/)), and Aglient
([http://www.agilent.com](http://www.agilent.com/)) are stored in caBIO,
to allow the rich annotations provided by the manufacturers to be
integrated with the other caBIO data sources and served through a caCORE
interface. Data for these microarray annotations is distributed across
many of the caBIO classes; the core classes are Microarray and
ArrayReporter with subclasses SNPArrayReporter, ExpressionArrayReporter,
and TranscriptArrayReporter.

Single Nucleotide Polymorphism data are primarily supplied by dbSNP and
by Affymetrix ([http://www.affymetrix.com](http://www.affymetrix.com/)).
The core classes are SNP, PopulationFrequency, and GeneRelativeLocation.

The caBIO system provides information about libraries used as part of
EST sequencing efforts. This set of classes (which includes Library,
Tissue, and Protocol) are populated with data from the NCI CGAP
initiative. This group of classes provides an instructive example about
the necessity of grounding metadata in concept-based controlled
terminology. The Protocol object here represents the method used to
create a library from a tissue (NCI Thesaurus concept code C41111)
rather than the concept of a clinical trial protocol (C25320).

Clinical trial data in the caBIO system are obtained from the Cancer
Therapeutics Evaluation Program (CTEP) of the NCI. This part of the
model was originally driven by use cases from the NCI CMAP project, and
as such, the classes contain top level about ongoing clinical trials. In
addition, the caBIO system provides some very basic information on the
mechanism of action of drug compounds, variations found in disease and
the genetic targets of drug compounds.

## Architecture Overview {#architecture-overview-1 .unnumbered}

The caBIO system is an *n*-tier client-server architecture. The caBIO
application server, located at NCI
(<http://cabioapi.nci.nih.gov/cabio41>), provides a home page for
web-based searching and data retrieval, as well as access to a wide
variety of APIs for programmatic access.

The caBIO server interacts with a database backend on behalf of the user
to serve requested objects to the client. Hibernate-based
object-relational mapping (ORM) is used to populated caBIO domain
objects. Only object-oriented APIs are exposed to clients so that the
relational database backend is completely transparent to the user.

Many of the APIs rely on a query-by-example mechanism that takes a
partially-populated object in, and returns other objects like it back to
the user. This paradigm of interaction makes semantic interoperability
much easier.

The following APIs are available for programmatic data access:

-   Java API

-   Web Services API

-   REST API

-   Grid Service (The current grid service is for caBIO 3.2)

The system also provides several additional utilities for accessing the
data in caBIO:

-   Freestyle Lexical Mine (FreestyleLM) search

-   Genome Range Queries

-   Grid ID Resolver

-   Array Annotation APIs

-   XML Marshalling Utility for caBIO domain objects

-   Pathway image manipulation utility

# caBIO Architecture

This chapter describes the architecture of the caBIO system. It includes
information about the major components, such as database
object-relational mappings (ORM), client-server communication, and how
the system connects to non-ORM sources, such as FreestyleLM. It also
describes the layout of the caBIO system packages. Topics in this
chapter include:

-   caBIO System Architecture on this page

-   Client Technologies on page [14](#client-technologies)

-   Major caBIO Domain Packages on page
    [15](#major-cabio-domain-packages)

-   The caBIO System Packages on page [16](#the-cabio-system-packages)

## caBIO System Architecture {#cabio-system-architecture .unnumbered}

The caBIO infrastructure exhibits an n-tiered architecture with client
interfaces, server components, backend objects, data sources, and
additional backend systems (Figure 3.1). This n-tiered system divides
tasks or requests among different servers and data stores. This isolates
the client from the details of where and how data is retrieved from
different data stores. The system also performs common tasks such as
logging and provides a level of security.

Clients (browsers, applications) receive information from backend
objects. Java applications also communicate with backend objects via
domain objects packaged within cabio41-beans.jar. Non-Java applications
can communicate via SOAP (Simple Object Access Protocol). Back-end
objects communicate directly with data sources, either relational
databases (using Hibernate) or non-relational systems.

![](media/image6.wmf)

Figure 3‑1 caBIO Architectur

Most of the caBIO infrastructure is written in the Java programming
language and leverages reusable, third-party components.

The infrastructure is composed of the following layers.

### The Application Service Layer {#the-application-service-layer .unnumbered}

The Application Service layer consolidates incoming requests from
various interfaces and translates them to native query requests that are
then passed to the data layers. This layer is also responsible for
handling client authentication and access control using the Java API.
(This feature is currently disabled for the caBIO system running at
NCICB; all interfaces provide full, anonymous read-only access to all
data.)

### The Data Source Delegation Layer {#the-data-source-delegation-layer .unnumbered}

This layer is responsible for conveying each query that it receives to
the respective data source that can perform the query. The presence of
this layer enables multiple data sources to be exposed by a single
running instance of a caBIO server.

### Object-Relational Mapping (ORM) {#object-relational-mapping-orm .unnumbered}

The ORM mapping is implemented using Hibernate. Hibernate is a high
performance object/relational persistence and query service for Java.
Hibernate provides the ability to develop persistent classes following
common object-oriented (OO) design methodologies such as association,
inheritance, polymorphism, and composition.

The Hibernate Query Language (HQL), designed as a \"minimal\"
object-oriented extension to SQL, provides a bridge between the object
and relational databases. Hibernate allows for real world modeling of
biological entities without creating complete SQL-based queries to
represent them.

### Non-ORM Layer {#non-orm-layer .unnumbered}

The caBIO database is a relational database. A Lucene-based document
index is generated on the backend to facilitate the Lucene full-text
search feature. The caBIO API implements the non-ORM based Lucene search
as well as the ORM based Hibernate Lucene Search.

## Client Technologies {#client-technologies .unnumbered}

Applications using the Java programming language can access caBIO
directly through the domain objects provided by the cabio41-beans.jar
(see *[Chapter 3 caBIO Architecture]{.underline}*.) The network details
of the communication to the caCORE servers are abstracted away from the
developer. Hence, developers need not deal with issues such as network
and database communication, but can instead concentrate on the
biological problem domain.

The caBIO system also allows non-Java applications to use SOAP clients
to interface with caBIO web services. SOAP is a lightweight XML-based
protocol for the exchange of information in a decentralized, distributed
environment. It consists of an envelope that describes the message and a
framework for message transport. caBIO uses the open source Apache Axis
package to provide SOAP-based web services to users. This allows other
languages, such as Python or Perl to communicate with caBIO objects in a
straightforward manner.

The caBIO architecture includes a presentation layer that uses a J2SE
application server (such as Tomcat or JBoss). The JSPs (Java Server
Pages) are web pages with Java embedded in the HTML to incorporate
dynamic content in the page. caBIO also employs Java Servlets, which are
server-side Java programs that web servers can run to generate content
in response to client requests. All logic implemented by the
presentation layer uses Java Beans, which are reusable software
components that work with Java. All caBIO domain objects can be
transformed into XML, the eXtensible Markup Language, as a universal
format for structured data on the Web.

Communication between the client interfaces and the server components
occurs over the Internet using the HTTP protocol. The server components
are deployed in a web application container as a .war (Web archive) file
that communicates with the back-end relational database management
system that contains the actual data.

By using XSL/XSLT, the extensible stylesheet language for expressing
stylesheets and XSL Transformations (XSLT), as a language for
transforming XML documents, non-programmers can transform the
information in the caBIO objects for use in documents or other systems.

## Major caBIO Domain Packages {#major-cabio-domain-packages .unnumbered}

Table 3.1 shows the major caBIO domain packages from which you can
access the Java interfaces and classes. All of the objects in the domain
packages implement the java.io.Serializable interface. To view the
JavaDocs page for each package, go to
<http://cabioapi.nci.nih.gov/cabio41/docs>.

+-----------+----------------------------------------------------------+
| *Package* | *Description*                                            |
+===========+==========================================================+
| caBIO     | Contains the domain-specific classes in the caBIO object |
|           | package such as Gene, Chromosome, etc. For a list of the |
|           | domain objects and their descriptions, see Chapter 6     |
|           |                                                          |
|           | gov.nih.nci.cabio.domain                                 |
+-----------+----------------------------------------------------------+
| Common    | Contains a single class, DatabaseCrossReference, which   |
|           | is used by the caBIO domain package objects to provide   |
|           | links to related data hosted by other sources. Further   |
|           | details about this class are available in the next       |
|           | section and in Chapter 6.                                |
|           |                                                          |
|           | gov.nih.nci.common.domain                                |
+-----------+----------------------------------------------------------+
| P         | Contains classes that provide provenance (source)        |
| rovenance | metadata about the origin of data in caBIO objects.      |
|           | Further details about the classes in this package are    |
|           | available in Chapter 6.                                  |
|           |                                                          |
|           | gov.nih.nci.common.provenance.domain                     |
+-----------+----------------------------------------------------------+

## The caBIO System Packages {#the-cabio-system-packages .unnumbered}

Figure 3-2 displays a package for each application area in the caBIO
API, described below.

![](media/image7.png){width="4.395833333333333in" height="6.1875in"}

Figure 3‑2caBIO API packages

In addition to domain packages, the caBIO client API includes the
following framework packages:

  ----------------------------------------------------------------------------------------
  *Package*                                   *Description*
  ------------------------------------------- --------------------------------------------
  **gov.nih.nci.common**                      The common package contains utility classes
                                              for manipulating caBIO domain objects.

  **gov.nih.nci.indexgen**                    The indexgen package contains the classes
                                              that generate the Lucene indexes for the
                                              caBIO database.

  **gov.nih.nci.search**                      The search package contains domain objects
                                              for the FreestyleLM search component and
                                              Grid Ids. Clients can instantiate these
                                              objects and pass them to appropriate API
                                              methods to search the FreestyleLM indexes,
                                              Range Queries or the Grid Ids. For the range
                                              queries, it includes subclasses to search on
                                              a specific assembly of a genome as well as
                                              to search for locations relative to a
                                              genomic feature (defined by the subclass).
                                              It is possible to specify distances between,
                                              upstream and downstream of the feature.

  **gov.nih.nci.system**                      The system package has contains the
                                              client-side API, which communicates with the
                                              caBIO server, and helper classes for
                                              creating client-side proxies.

  **gov.nih.nci.system.applicationService**   The ApplicationService package contains
                                              classes that extend the SDK-provided
                                              functionality to provide caBIO-specific
                                              functionalities such as searching for a
                                              caBIO domain objects by passing Grid Id,
                                              RangeQuery or FreestyleLM SearchQuery
                                              object.

  **gov.nih.nci.system.client**               The client package consists of classes that
                                              are used to generate dynamic proxies. The
                                              Application Service proxy classes intercept
                                              all the calls to the actual
                                              ApplicationService and takes action to
                                              facilitate the lazy-loading mechanism for
                                              the caBIO API.

  **gov.nih.nci.system.dao (Data Access)**    The data access package is the layer at
                                              which the query is executed. This layer has
                                              implementation for querying ORM and non-ORM
                                              based data stores and as with the
                                              applicationServices, provides functionality
                                              to perform Grid Id, Range Query and
                                              FreestyleLM searches

  **gov.nih.nci.system.webservice**           The Web service package contains the Web
                                              service wrapper class that uses Apache\'s
                                              Axis and has been extended to provide
                                              caBIO-specific functionality like searching
                                              for domain objects using grid Ids.
  ----------------------------------------------------------------------------------------

Table 3‑1caBIO API framework client packages

# Interacting with caBIO

This chapter describes the service interface layer provided by the caBIO
architecture and gives examples of how to use each of the interface
APIs.

Topics in this chapter include:

-   caBIO Service Interface Paradigm on this page

-   Java API on this page

-   Web Services API on page [39](#web-services-api)

-   XML-HTTP API on page 44

## caBIO Service Interface Paradigm {#cabio-service-interface-paradigm .unnumbered}

The caBIO API is built on top of the caCORE SDK. The caCORE architecture
includes a service layer that provides a single, common access paradigm
to clients using any of the provided interfaces. As an object-oriented
middleware layer designed for flexible data access, caBIO relies heavily
on strongly-typed objects and an object-in/object-out mechanism. The
methodology used for obtaining data from the caBIO system is often
referred to as query-by-example, meaning that the inputs to the query
methods are themselves domain objects that provide the criteria for the
returned data. The major benefit of this approach is that it allows for
run-time semantic interoperability when used as part of the caCORE
infrastructure, which provides shared vocabularies and a metadata
registry.

The basic order of operations required to access and use the caBIO
system is as follows:

1.  Ensure that the client application has knowledge of the objects in
    the domain space.

```{=html}
<!-- -->
```
4.  Formulate the query criteria using the domain objects.

5.  Establish a connection to the server.

6.  Submit the query objects and specify the desired class of objects to
    be returned.

7.  Use and manipulate the result set as desired.

There are four primary application programming interfaces (APIs) native
to the caBIO system. Each of the available interfaces described below
uses this same paradigm to provide access to the caBIO domain model, but
with minor changes relating primarily to the syntax and structure of the
clients. The following sections describe each API, identify installation
and configuration requirements, and provide code examples.

## Java API {#java-api .unnumbered}

The Java API provides direct access to domain objects and all service
methods. Because caBIO is natively built in Java, this API provides the
fullest set of features and capabilities.

### Installation and Configuration {#installation-and-configuration .unnumbered}

The caBIO Java API uses the following on the client machine (Table 4-2).

  ------------------------------- --------------- -----------------------
  *Software*                      *Version*       *Required?*

  Java 2 Platform Standard        1.5.0_14 or     Yes
  Edition Software 5.0            higher          
  Development Kit (JDK 5.0)                       

  Apache Ant                      1.6.5 or higher Yes
  ------------------------------- --------------- -----------------------

Table 4‑2 caBIO Java API Client software

Accessing the caBIO system also requires an Internet connection.

To use the Java API, download the client package provided on the NCICB
web site (Figure 4-3). ![](media/image8.png){width="5.0625in"
height="3.6875in"}

Figure 4‑3 Downloads section on the NCICB website

1.  Open your browser and go to http://ncicb.nci.nih.gov.

```{=html}
<!-- -->
```
8.  Click the Download link on the menu bar.

9.  Scroll down to the section titled caBIO and click on the Download
    link.

10. In the provided form, enter your name, email address and institution
    name and click to Enter the Download Area.

11. Accept the license agreement.

12. On the caBIO downloads page, download the caBIO Zip file from the
    Primary Distribution section.

13. Extract the contents of the downloadable archive to a directory on
    your hard drive (for example, c:\\cabio on Windows or
    /usr/local/cabio on Linux). The extracted directories and files
    include those in Table 4-3.

  ---------------------------------------------------------------------------------
  Directories and Files           Description                 Component
  ------------------------------- --------------------------- ---------------------
  build.xml                       Ant build file              Build file

  Src directory                   Contains demo code          Sample code

  TestClient.java                 Java API client sample      SDK sample code

  TestGetXMLClient.java           REST client sample          

  TestXMLClient.java              XML marshalling sample      

  TechGuideExamples.java          Java API examples from this caBIO sample code
                                  guide                       

  TestQueries.java                Java API query examples     

  TestFreestyleLM.java            FreestyleLM search examples 

  TestCQL.java                    CQL API examples            

  TestSVG.java                    SVG pathway image examples  

  TestXML.java                    XML utility sample          

  lib directory                   contains required jar files Java Libraries

  cabio41-beans.jar               domain objects              caBIO API

  cabio41-client-framework.jar    caBIO API extensions to the 
                                  caCORE SDK Framework        

  Spring.jar                      Spring framework            HTTP Remoting

  hibernate\*.jar                 Hibernate                   ORM layer

  cglib-2.1.3.jar                 CGLIB proxy library         

  Log4j-1.2.13.jar                Log4j and Commons Logging   Logging Framework

  commons-logging.jar                                         

  commons-discovery-0.2.jar                                   

  castor-1.0.2.jar                Castor                      XML conversion
                                  serializer/deserializer     

  xercesImpl.jar                  Apache Xerces XML parser    

  *\*.xsd*                        XML schemas for objects     

  handle.jar                      Handle Service              Handle Service

  handlerservice.jar              Custom handle code          

  conf directory                  Configuration files         

  xml-mapping.xml                 XML serialization mapping   XML mapping
                                  configuration files         

  unmarshaller-xml-mapping.xml                                

  application-config-client.xml   Spring configuration for    Java API Spring
                                  client                      configuration

  Log4j.properties                Logging utilities           Logging configuration
                                  configuration properties    
  ---------------------------------------------------------------------------------

Table 4‑3 Extracted directories and files in caBIO Java client package

All of the jar files provided in the lib directory of the caBIO client
package in addition to the files in the conf directory are required to
use the Java API. These should be included in the Java classpath when
building applications. The build.xml file that is included demonstrates
how to do this when using Ant for command-line builds. If you are using
an integrated development environment (IDE) such as Eclipse, refer to
the tool\'s documentation for information on how to set the classpath.

### A Simple Example {#a-simple-example .unnumbered}

To run the simple example program after installing the caBIO client,
open a command prompt or terminal window from the directory where you
extracted the downloaded archive and enter ant rundemo. This will
compile and run the TechGuideExamples class; successfully running this
example indicates that you have properly installed and configured the
caCORE client. The following is a short segment of code from the
TechGuideExamples class along with an explanation of its functioning.

![](media/image1.wmf)

This code snippet creates an instance of a class that implements the
ApplicationService interface. This interface defines the service methods
used to access data objects. A criterion object is then created that
defines the attribute values for which to search. The search method of
the ApplicationService implementation is called with parameters that
indicate the type of objects to return, Gene.class, and the criteria
that returned objects must meet, defined by the gene object. The search
method returns objects in a List collection, which is iterated through
to print some basic information about the objects.

Although this is a simple example of the use of the Java API, a similar
sequence can be followed with more complex criteria to perform
sophisticated manipulation of the data provided by caBIO. Additional
information and examples are provided in the sections that follow.

### Service Methods {#service-methods .unnumbered}

The methods that provide programmatic access to the caBIO server are
located in the gov.nih.nci.system.applicationservice package. The
ApplicationServiceProvider class uses the factory design pattern to
return an implementation of the ApplicationService interface. The
provider class determines whether there is a locally running instance of
the caBIO system or whether it should use a remote instance. The
returned ApplicationService implementation exposes the service methods
that enable read/write operations on the domain objects.

**Note:** Although the infrastructure is capable of write operations,
this functionality has been disabled for caBIO because it is primarily
meant as a read-only data system.

The separation of the service methods from the domain classes is an
important architectural decision that insulates the domain object space
from the underlying service framework. As a result, new business methods
can be added without needing to update any of the domain model or the
associated metadata information from the object model. (This is critical
for ensuring semantic interoperability over multiple iterations of
architectural changes.)

Within the ApplicationService implementation, a variety of methods are
provided allowing users to query data based on the specific needs and
types of queries to be performed. In general, there are five types of
searches:

-   **Simple searches** are those that take one or more objects from the
    domain models as inputs and return a collection of objects from the
    data repositories that meet the criteria specified by the input
    objects.

-   **Nested searches** also take domain objects as inputs but determine
    the type of objects in the result set by traversing a known path of
    associations from the domain model.

-   **Detached criteria searches** use Hibernate detached criteria
    objects to provide a greater level of control over the results of a
    search (such as boolean operations, ranges of values, etc.)

-   **HQL searches** provide the ability to use the Hibernate Query
    Language for the greatest flexibility in forming search criteria.

-   **SDK Query Object criteria searches** were modeled similar to the
    Object representation of caBIG Query Language (CQL). The SDK Query
    Object criteria searches use syntax similar to the query by example
    (QBE) to specify the way results are to be retrieved. The system
    formulates the query based on the navigation path specified in the
    query search criteria. The query mechanism allows the user to search
    for the objects in platform independent query syntax.

+--------------+-------------------------------------------------------+
| **Method     | List search(                                          |
| Signature**  |                                                       |
|              | Class targetClass,                                    |
|              |                                                       |
|              | Object obj)                                           |
+--------------+-------------------------------------------------------+
| **Search     | Simple (One criteria object)                          |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection containing objects of type  |
| escription** | targetClass that conform to the criteria defined by   |
|              | obj                                                   |
+--------------+-------------------------------------------------------+
| **Example**  | search(Gene.class, gene)                              |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List search(                                          |
| Signature**  |                                                       |
|              | Class targetClass,                                    |
|              |                                                       |
|              | List objList)                                         |
+--------------+-------------------------------------------------------+
| **Search     | Simple (Criteria object collection)                   |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection containing objects of type  |
| escription** | targetClass that conform to the criteria defined by a |
|              | collection of objects in objList. The returned        |
|              | objects must meet ANY criteria in objList (i.e. a     |
|              | logical OR is performed).                             |
+--------------+-------------------------------------------------------+
| **Example**  | search(Gene.class, geneCollection)                    |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List search(                                          |
| Signature**  |                                                       |
|              | String path,                                          |
|              |                                                       |
|              | Object obj)                                           |
+--------------+-------------------------------------------------------+
| **Search     | Nested                                                |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection containing objects          |
| escription** | conforming to the criteria defined by obj and whose   |
|              | resulting objects are of the type reached by          |
|              | traversing the node graph specified by path           |
+--------------+-------------------------------------------------------+
| **Example**  | search(\"gov.nih.nci.cabio.domain.Protein,            |
|              | gov.nih.nci.cabio.domain.Gene\", nucleicAcidSequence) |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List search(                                          |
| Signature**  |                                                       |
|              | String path,                                          |
|              |                                                       |
|              | List objList)                                         |
+--------------+-------------------------------------------------------+
| **Search     | Nested                                                |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection containing objects          |
| escription** | conforming to the criteria defined by the objects in  |
|              | objList and whose resulting objects are of the type   |
|              | reached by traversing the node graph specified by     |
|              | path                                                  |
+--------------+-------------------------------------------------------+
| **Example**  | search(\"gov.nih.nci.cabio.domain.Protein,            |
|              | gov.nih.nci.cabio.domain.Gene\", sequenceList)        |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List query(                                           |
| Signature**  |                                                       |
|              | DetachedCriteria detachedCriteria)                    |
+--------------+-------------------------------------------------------+
| **Search     | Detached criteria                                     |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection conforming to the criteria  |
| escription** | specified by detachedCriteria.                        |
+--------------+-------------------------------------------------------+
| **Example**  | query(criteria)                                       |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List query(                                           |
| Signature**  |                                                       |
|              | Object criteria,                                      |
|              |                                                       |
|              | Integer firstRow,                                     |
|              |                                                       |
|              | String targetClassName)                               |
+--------------+-------------------------------------------------------+
| **Search     | Detached criteria                                     |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Identical to the previous query method, but allows    |
| escription** | for control over the size of the result set by        |
|              | specifying the row number of the first row.           |
+--------------+-------------------------------------------------------+
| **Example**  | query(criteria, 101, targetClassName)                 |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List query(                                           |
| Signature**  |                                                       |
|              | HQLCriteria hqlCriteria)                              |
+--------------+-------------------------------------------------------+
| **Search     | Hibernate Query Language                              |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection of objects that conform to  |
| escription** | the query in HQL syntax contained in hqlCriteria.     |
+--------------+-------------------------------------------------------+
| **Example**  | query(hqlCriteria)                                    |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | List query(                                           |
| Signature**  |                                                       |
|              | CQLQuery cqlQuery)                                    |
+--------------+-------------------------------------------------------+
| **Search     | Common Query Language                                 |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Returns a List collection of objects that conform to  |
| escription** | the query in SDK Query Object syntax contained in     |
|              | cqlQuery.                                             |
+--------------+-------------------------------------------------------+
| **Example**  | query(cqlQuery)                                       |
+--------------+-------------------------------------------------------+

In addition to the data access methods, the following helper methods are
available via the ApplicationService class that provide flexibility in
controlling queries and result sets.

+-------------+--------------------------------------------------------+
| **Method    | int getQueryRowCount(                                  |
| Signature** |                                                        |
|             | Object criteria,                                       |
|             |                                                        |
|             | String targetClassName                                 |
+-------------+--------------------------------------------------------+
| **De        | Gets the number of objects in a given query. This is   |
| scription** | useful in determining the size of the data before      |
|             | querying for data                                      |
+-------------+--------------------------------------------------------+
| **Example** | getQueryRowCount(criteria,                             |
|             | \"gov.nih.nci.cabio.domain.Gene\")                     |
+-------------+--------------------------------------------------------+

### Examples of Use {#examples-of-use .unnumbered}

This section includes a number of examples that demonstrate the use of
the caBIO APIs. Included with each example is a brief description of the
type of search being performed, a UML diagram depicting the domain
objects used, and the example code accompanied by explanatory text.

#### Example One: Simple Search (Single Criteria Object) {#example-one-simple-search-single-criteria-object .unnumbered}

In this example, a search is performed for all genes whose symbols start
with \'brca\'. The code iterates through the returned objects and prints
out the symbol and name of each object along with the name of an
associated object of type Taxon. The fetch of the associated Taxon
object is done in the background and is completely transparent to the
user.

![](media/image2.wmf){width="5.53125in" height="2.03125in"}

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*   *Description*
  --------- -------------------------------------------------------------
  1         Creates an instance of a class that implements the
            ApplicationService interface; this interface defines the
            service methods used to access data objects.

  2-3       Creates a criterion object that defines the attribute values
            for which to query.

  6         Calls the search method of the ApplicationService
            implementation and passes it the type of objects to return,
            Gene.class, and the criteria that returned objects must meet,
            defined by the gene object; the search method returns objects
            in a List collection.

  9         Casts an object from the result List and creates a variable
            reference to it of type Gene.

  10        Prints the symbol attribute.

  11        Prints the fullName attribute.

  12        Fetches an associated object of type Taxon and prints its
            scientificName attribute.
  -----------------------------------------------------------------------

#### Example Two: Simple Search (Criteria Object Collection) {#example-two-simple-search-criteria-object-collection .unnumbered}

This example demonstrates a search with multiple criteria objects that
are passed to the search() method. The result set will include all
objects of the specified type that match ANY of the criteria objects. In
this case, the search will return all objects of type Gene that are
associated with Taxon objects whose abbreviation attribute is either
\"hs\" or \"ms\". In biological terms, this search will return all human
and mouse genes.

![](media/image1.wmf)

  --------- -------------------------------------------------------------
  *Lines*   *Description*

  1-4       Creates two Taxon objects describing the search criteria.

  5-7       Creates a List collection containing the two Taxon objects.

  10        Searches for all Gene objects where the associated Taxon
            object matches ANY of the objects found in the taxonList
            collection.
  --------- -------------------------------------------------------------

#### Example Three: Simple Search (Compound Criteria Object) {#example-three-simple-search-compound-criteria-object .unnumbered}

In this example, the object that is passed to the search() method
contains criteria values that are found in associated objects and
collections of objects. This query will return those objects that match
all of the criteria in the compound object. Note the distinction between
this type of search and the previous example in which a collection of
objects is passed into the search method. In the last example, the
results will match ANY of the criteria objects. In this example,
however, where a single compound object is used, ALL criteria are
matched. In biological terms, this search will return all pathways
associated with the human Interleukin 5 gene.

![](media/image2.wmf){width="5.746527777777778in"
height="3.8152777777777778in"}

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*     *Description*
  ----------- -----------------------------------------------------------
  1-5         Creates a Gene object and sets the symbol to \"IL5\" and
              the associated Taxon to an object whose abbreviation is set
              to \"hs\".

  6-7         Because the Pathway and Gene classes are related by a
              many-to-many association, it is necessary to create a
              collection to contain the Gene object that will act as part
              of the compound criteria; multiple Gene objects could be
              added to this collection as needed.

  8-9         Creates a Pathway object and sets the value of its
              geneCollection to the geneList object just created.

  12          Searches for all Pathway objects whose geneCollection
              contains objects that match the set criteria (i.e. the
              symbol is \"IL5\" and the associated Taxon objects\'
              abbreviations are set to \"hs\").
  -----------------------------------------------------------------------

#### Example Four: Nested Search {#example-four-nested-search .unnumbered}

A nested search is one where a traversal of more than one class-class
association is required to obtain a set of result objects given the
criteria object. This example demonstrates one such search in which the
criteria object passed to the search method is of type Gene, and the
desired objects are of type ProteinSequence. Because there is no direct
association between these two classes, the path of the traversal is
passed to the search method enabling the query to be performed.

![](media/image2.wmf){width="5.875in" height="4.072916666666667in"}

![](media/image1.wmf)

  ------------ ----------------------------------------------------------
  *Lines*      *Description*

  1-2          Creates a Gene object and sets the symbol to \"TP53\".

  6            Defines search path as traversing from the criteria object
               of type Gene through Protein to ProteinSequence; note that
               the first element in the path is the desired class of
               objects to be returned, and that subsequent elements
               traverse back to the criteria object.

  7            Sets the criteria object to the previously-created Gene.
  ------------ ----------------------------------------------------------

#### Example Five: Detached Criteria Search {#example-five-detached-criteria-search .unnumbered}

This example demonstrates the use of Hibernate detached criteria objects
to formulate and perform more sophisticated searches. A detailed
description of detached criteria is beyond the scope of this document;
for more information, please consult the Hibernate documentation at
<http://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/DetachedCriteria.html>.

![](media/image2.wmf){width="2.2916666666666665in"
height="1.7291666666666667in"}

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*   *Description*
  --------- -------------------------------------------------------------
  1         Creates a DetachedCriteria object and sets the class on which
            the criteria will operate to PhysicalLocation.

  5         Sets a restriction on the objects which states that the
            attribute assembly must be equal to "reference".

  6         Sets a restriction on the objects that states that the
            attribute chromosomalStartPosition must be greater than
            (\"gt\") the value 86851632.

  7         Sets a restriction on the objects that states that the
            attribute chromosomalEndPosition must be less than (\"lt\")
            the value 86861632.

  8         Calls the query method of the ApplicationService
            implementation, passing the detached criteria object.
  -----------------------------------------------------------------------

#### Example Six: HQL Search {#example-six-hql-search .unnumbered}

In this example, a search is performed for all genes whose symbols start
with \'brca\'. This is identical to Example One but uses a Hibernate
Query Language (HQL) search string to form the query. For more
information on HQL syntax, consult the Hibernate documentation at
<http://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html>

![](media/image1.wmf).

Example Seven: SDK Query Object Search

*SDK Query Object Example One*

![](media/image1.wmf)

  ------------ ----------------------------------------------------------
  *Lines*      *Description*

  2            Creates a new CQLQuery Object.

  3-4          Creates a new search Target object (Gene).

  5-8          Creates a new attribute for the search target object whose
               value should be compared with the value in the database
               for given predicate.

  10           Sets the search target object in SDK Query Object Query.

  12-13        Sets the search criteria object to the previously-created
               CQLQuery.
  ------------ ----------------------------------------------------------

*SDK Query Object Example Two*

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*     *Description*
  ----------- -----------------------------------------------------------
  1           Creates a new CQLQuery Object.

  2-3         Creates a new search Target object (Gene).

  4-7         Sets attribute criteria for Target object

  9-15, 17-23 Creates a new associated object (Taxon) whose attribute
              value should be compared with the value in the database for
              a given predicate.

  25-30       Creates a group (collection) of objects and associates it
              to the search target object.

  31          Sets the search target object in SDK Query Object Query.

  33          Search using the previously-created CQLQuery.
  -----------------------------------------------------------------------

*SDK Query Object Example Three*

![](media/image1.wmf)

  ----------- -----------------------------------------------------------
  *Lines*     *Description*

  2           Creates a new CQLQuery Object.

  3-4         Creates a new search Target object (Pathway).

  5-12        Creates a new associated object (Gene) whose attribute
              value should be compared with the value in the database for
              a given predicate.

  13-20       Creates a new associated object (Taxon) whose attribute
              value should be compared with the value in the database for
              a given predicate.

  22          Creates a relationship between two objects (Gene and
              Taxon).

  26-27       Creates a relationship between a target object (Pathway)
              and its associated object (Gene). The role name is the name
              of the association used to retrieve the associated object.
              It is required in case it can not be determined by
              reflection.

  28          Sets the search target object in a SDK Query Object Query.

  31          Sets the search criteria object to the previously-created
              CQLQuery.
  ----------- -----------------------------------------------------------

*SDK Query Object Example Four*

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*     *Description*
  ----------- -----------------------------------------------------------
  2           Creates a new CQLQuery Object.

  3-4         Creates a new search Target object (ProteinSequence).

  5-12        Creates a new associated object (Gene) whose attribute
              value should be compared with the value in the database for
              a given predicate.

  14-15       Creates a new associated object (Protein).

  19-20       Creates a relationship between a source object (Protein)
              and its associated object (Gene). The role name is the name
              of the association used to retrieve the associated object.
              It is required in case it can not be determined by
              reflection.

  24-25       Creates a relationship between a target object
              (ProteinSequence) and its associated object (Protein).

  26          Sets the search target object in a SDK Query Object Query.

  29          Sets the search criteria object to the previously-created
              CQLQuery.
  -----------------------------------------------------------------------

### Utility Methods {#utility-methods .unnumbered}

#### XML Utility {#xml-utility .unnumbered}

The caBIO Java Client provides a convenience class called XMLUtility in
the gov.nih.nci.common.util package that provides a short cut to the
caCORE SDK's utility for converting domain objects between native Java
objects and XML serializations based on standard XML schemas. The XML
schemas for all domain objects in caBIO, directly generated from the UML
model, are included in the downloadable archive. Currently, the XML
generated using the XMLUtility class includes only the object
attributes; associated objects are not included.

The configuration used by the XML utility is stored in two files,
xml-mapping.xml and unmarshaller-xml-mapping.xml. These files define the
binding between class, attribute names and the corresponding XML element
and attribute names.

A default marshaller and unmarshaller are automatically registered by
the caBIO convenience class; Developers wishing to use their own should
bypass the caBIO class and instantiate the SDK's XMLUtility in the
gov.nih.nci.system.client.util.xml package.

In the following code, the XML utility is used to serialize an object
and save it to a file stream. A new object is then instantiated from the
file using the utility.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*      *Description*
  ------------ ----------------------------------------------------------
  2-3          Creates a new file stream where the XML serialization will
               be saved.

  4            Creates a new XMLUtility object; in this case, the default
               marshaller, and unmarshaller will be used.

  5            Serializes the myGene object to XML using the mapping file
               and writes the output to the file stream myGene.xml.

  6            Creates a new object called myNewGene by invoking the
               fromXML() method of the XMLUtility class and casting it to
               the proper type.

  7            The newly created Gene object is equivalent to the old
               one.
  -----------------------------------------------------------------------

For additional details, consult the caBIO JavaDocs at
<http://cabioapi.nci.nih.gov/cabio41/docs/>.

## Web Services API {#web-services-api .unnumbered}

The caBIO Web services API allows access to caBIO data from development
environments where the Java API cannot be used, or where use of XML Web
services is more desirable. This includes non-Java platforms and
languages such as Perl, C/C++, .NET Framework (C#, VB.Net), Python, etc.

The Web services interface can be used in any language-specific
application that provides a mechanism for consuming XML Web services
based on the Simple Object Access Protocol (SOAP). In these
environments, connecting to caBIO can be as simple as providing the
endpoint URL. Some platforms and languages require additional
client-side code to handle the implementation of the SOAP envelope and
the resolution of SOAP types. A list of packages catering to different
programming languages is available at <http://www.w3.org/TR/SOAP/> and
at <http://www.soapware.org/>.

To maximize standards-based interoperability, the caBIO Web service
conforms to the Web Services Interoperability Organization (WS-I) Basic
Profile. The WS-I Basic Profile provides a set of non-proprietary
specifications and implementation guidelines enabling interoperability
between diverse systems. More information about WS-I compliance is
available at [http://www.ws-i.org](http://www.ws-i.org/).

On the server side, Apache Axis is used to provide SOAP-based
inter-application communication. Axis provides the appropriate
serialization and deserialization methods for the Java beans to achieve
an application-independent interface. For more information about Axis,
visit <http://ws.apache.org/axis/>.

### Configuration {#configuration .unnumbered}

The caBIO WSDL file is located at
<http://cabioapi.nci.nih.gov/cabio41/services/caBIOService?wsdl>.

In addition to describing the protocols, ports and operations exposed by
the caBIO Web service, this file can be used by a number of IDEs and
tools to generate stubs for caBIO objects. This allows code on different
platforms to instantiate objects native to each for use as parameters
and return values for the Web service methods. Consult the specific
documentation for your platform for more information on how to use the
WSDL file to generate class stubs.

The caBIO Web services interface has a single endpoint called
caBIOService, which is located at
[http://cabioapi.nci.nih.gov/cabio41/services/caBIOService](../%20http://cabioapi.nci.nih.gov/cabio41/services/caBIOService).
Client applications should use this URL to invoke Web service methods.

### Java WS Client {#java-ws-client .unnumbered}

The Java WS client is a separate download from the Java API described
earlier. For installation instructions, see the Java API on page
[[19]{.mark}](#java-api). This distribution bundles the necessary Java
libraries and example code that shows how to use the caBIO Web Service
API.

  --------------------------------------------------------------------------------
  Directories and Files           Description                 Component
  ------------------------------- --------------------------- --------------------
  build.xml                       Ant build file              Build

  build.properties                Web Service configuration   Build

  src directory                   Contains demo code          Sample code

  TestClient.java                 SDK WS client sample        

  TestWS.java                     Web services Java sample    

  lib directory                   contains required jar files Java Libraries

  cabio41-beans.jar               domain objects              caBIO API

  hibernate-search.jar            Hibernate Search            ORM layer
                                  Annotations                 

  axis.jar                        Apache Axis                 Web Services

  saaj.jar                        SOAP API for Java           

  jaxrpc.jar                      Java API for XML-based RPC  

  wsdl4j-1.5.1.jar                WSDL for Java               

  commons-logging.jar             Log4j and Commons Logging   Logging Framework

  commons-discovery-0.2.jar                                   

  conf directory                  Configuration files         

  undeploy.wsdd                   XML serialization mapping   XML mapping
                                  configuration files         

  application-config-client.xml   Spring configuration for    Java API Spring
                                  client                      configuration

  Log4j.properties                Logging utilities           Logging
                                  configuration properties    configuration
  --------------------------------------------------------------------------------

Table 4‑4 Extracted directories and files in caBIO WS client package

All of the jar files provided in the lib directory of the caBIO client
package in addition to the files in the conf directory are required to
use the Java API. These should be included in the Java classpath when
building applications. The build.xml file that is included demonstrates
how to do this when using Ant for command-line builds. If you are using
an integrated development environment (IDE) such as Eclipse, refer to
the tool\'s documentation for information on how to set the classpath.

### Operations {#operations .unnumbered}

Through the caBIOService endpoint, developers have access to four
operations:

+-----------+----------------------------------------------------------+
| **Op      | queryObject                                              |
| eration** |                                                          |
+-----------+----------------------------------------------------------+
| **Input   | \<complexType\>                                          |
| Schema**  |                                                          |
|           | \<sequence\>                                             |
|           |                                                          |
|           | \<element name=\"in0\"                                   |
|           |                                                          |
|           | type=\"xsd:string\"/\>                                   |
|           |                                                          |
|           | \<element name=\"in1\"                                   |
|           |                                                          |
|           | type=\"xsd:anyType\"/\>                                  |
|           |                                                          |
|           | \</sequence\>                                            |
|           |                                                          |
|           | \</complexType\>                                         |
+-----------+----------------------------------------------------------+
| **Output  | \<sequence\>                                             |
| Schema**  |                                                          |
|           | \<element name=\"queryReturn\"type=\                     |
|           | \"ArrayOf_xsd_anyType\"/\>                               |
|           |                                                          |
|           | \</sequence\>                                            |
+-----------+----------------------------------------------------------+
| **Desc    | Performs a search for objects conforming to the criteria |
| ription** | defined by input parameter in1 and whose resulting       |
|           | objects are of the type reached by traversing the node   |
|           | graph specified by parameter in0; the result is a set of |
|           | serialized objects (the type ArrayOf_xsd_anyType         |
|           | resolves to a sequence of xsd:anyType elements)          |
+-----------+----------------------------------------------------------+

+-----------+----------------------------------------------------------+
| **Op      | Query                                                    |
| eration** |                                                          |
+-----------+----------------------------------------------------------+
| **Input   | \<complexType\>                                          |
| Schema**  |                                                          |
|           | \<sequence\>                                             |
|           |                                                          |
|           | \<element name=\"in0\" type=\"xsd:string\"/\>            |
|           |                                                          |
|           | \<element name=\"in1\" type=\"xsd:anyType\"/\>           |
|           |                                                          |
|           | \<element name=\"in2\" type=\"xsd:int\"/\>               |
|           |                                                          |
|           | \<element name=\"in3\" type=\"xsd:int\"/\>               |
|           |                                                          |
|           | \</sequence\>                                            |
|           |                                                          |
|           | \</complexType\>                                         |
+-----------+----------------------------------------------------------+
| **Output  | \<sequence\>                                             |
| Schema**  |                                                          |
|           | \<element name=\"queryReturn\"                           |
|           |                                                          |
|           | type=\"ArrayOf_xsd_anyType\"/\>                          |
|           |                                                          |
|           | \</sequence\>                                            |
+-----------+----------------------------------------------------------+
| **Desc    | Identical to the previous queryObject method, but allows |
| ription** | for control over the result set by specifying the row    |
|           | number of the first row (in2) and the maximum number of  |
|           | objects to return (in3)                                  |
+-----------+----------------------------------------------------------+

Developers should be aware of a significant behavioral decision that has
been made regarding the Web services interface. When a query is
performed with this interface, returned objects do not contain or refer
to their associated objects. This means that a separate query invocation
must be performed for each set of associated objects that need to be
retrieved. One of the examples below demonstrates this functionality.

### Examples of Use {#examples-of-use-1 .unnumbered}

#### Example One: Simple Search {#example-one-simple-search .unnumbered}

The following code demonstrates a simple query written in the Java
language that uses the Web services API. This example uses Apache Axis
on the client side to handle the type mapping, SOAP encoding, and
operation invocation.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  1-2           Defines a new Web service call.

  4-10          Maps a serialized object to its Java equivalent using the
                qualified name of the object from the WSDL file; in this
                case, the XML element Gene in the
                urn:ws.domain.cabio.nci.nih.gov namespace is mapped to
                the Java *Gene* class.

  12            Defines the service endpoint.

  14-18         Sets the call properties including the name of the
                operation to invoke, the input parameters that will be
                sent and the return type to expect.

  20-21         Creates a Gene criteria object and sets its symbol
                attribute to \"IL\*\"; note that the \*.ws.\* package is
                used.

  25-26         Invokes the Web service operation using an array of two
                objects (target class name and criteria object) as input
                parameters and expecting an object array as its result.

  32            Casts each object in the result array to type Gene.
  -----------------------------------------------------------------------

#### Example Two: Searching Associations {#example-two-searching-associations .unnumbered}

This example is similar to the previous one but demonstrates how to
search for associated elements by performing additional invocations of
the query or queryObject operation.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  15-16         A second operation invocation requests objects of type
                Taxon based on the same gene criteria used for the
                original query.

  19            Casts the objects resulting from the nested query as
                Taxon objects.
  -----------------------------------------------------------------------

### Limitations {#limitations .unnumbered}

-   By default, the queryObject operation limits the result set to 1000
    objects, even if the size of the result set is larger. To retrieve
    the objects past the 1000th record, you must use the query operation
    and specify the first object index (parameter in2) to be greater
    than 1000.

-   Result sets serialized and returned by the Web services interface do
    not currently include associations to related objects. A consequence
    of this behavior is that nested criteria objects with one-to-many
    associations that are passed to the query or queryObject operations
    will result in an exception being thrown.

The following code demonstrates a Web services invocation that would
fail:

![](media/image1.wmf)

Because the Web services invocation has an inherent timeout behavior,
queries that take a long time to execute may not complete. If this is
the case, use the query method to specify a smaller result count.

## XML-HTTP API {#xml-http-api .unnumbered}

The caCORE XML-HTTP API, based on the REST (Representational State
Transfer) architectural style, provides a simple interface using the
HTTP protocol. In addition to its ability to be invoked from most
internet browsers, developers can use this interface to build
applications that do not require any programming overhead other than an
HTTP client. This is particularly useful for developing web applications
using AJAX (asynchronous JavaScript and XML).

### Service Location and Syntax {#service-location-and-syntax .unnumbered}

The caBIO XML-HTTP interface uses the following URL syntax as described
in Table 5 4.

http://{server}/{servlet}?query={returnClass}&{criteria}&

resultCounter={counter}&startIndex={index}&

pageSize={pageSize}&pageNumber={pageNumber}

+------------+----------------------------+----------+----------------+
| *Element*  | *Meaning*                  | *R       | *Example*      |
|            |                            | equired* |                |
+============+============================+==========+================+
| server     | Name of the web server on  | Yes      | cab            |
|            | which the caBIO web        |          | io.nci.nih.gov |
|            | application is deployed.   |          |                |
+------------+----------------------------+----------+----------------+
| servlet    | URI and the name of the    | Yes      | cabio41        |
|            | servlet that will accept   |          | /server/GetXML |
|            | the HTTP GET requests      |          |                |
|            |                            |          | cabio41/       |
|            |                            |          | server/GetHTML |
+------------+----------------------------+----------+----------------+
| r          | Class name indicating the  | Yes      | query=Gene     |
| eturnClass | type of objects that this  |          |                |
|            | query should return        |          |                |
+------------+----------------------------+----------+----------------+
| criteria   | Search request criteria    | Yes      | Gene\[@id=2\]  |
|            | describing the requested   |          |                |
|            | objects                    |          |                |
+------------+----------------------------+----------+----------------+
| counter    | Number of top level        | No       | res            |
|            | objects returned by the    |          | ultCounter=500 |
|            | search                     |          |                |
+------------+----------------------------+----------+----------------+
| index      | Start index of the result  | No       | startIndex=25  |
|            | set                        |          |                |
+------------+----------------------------+----------+----------------+
| pageSize   | Number of records to       | No       | pageSize=50    |
|            | display on each \"page     |          |                |
+------------+----------------------------+----------+----------------+
| pageNumber | The number of the \"page\" | No       | pageNumber=3   |
|            | for which to display       |          |                |
|            | results                    |          |                |
+------------+----------------------------+----------+----------------+

Table 4‑5 URL syntax used by the caBIO XML-HTTP interface

The caBIO architecture currently provides two servlets that accept
incoming requests:

-   **GetXML** returns results in an XML format that can be parsed and
    consumed by most programming languages and many document authoring
    and management tools

-   **GetHTML** presents result using a simple HTML interface that can
    be viewed by most modern Internet browsers

Within the request string of the URL, the criteria element specifies the
search criteria using XQuery-like syntax (Table 4-6). Within this
syntax, square brackets (\"\[\" and \"\]\") represent attributes and
associated roles of a class, the \"at\" symbol (\"@\") signals an
attribute name/value pair, and a forward slash character (\"/\")
specifies nested criteria. Criteria statements within XML-HTTP queries
are generally of the following forms (although more complex statements
can also be formed):

{ClassName}\[@{attributeName}={value}\] \[@{attributeName}={value}\]...

{ClassName}\[@{attributeName}={value}\]/{ClassName}\[@{attributeName}={value}\]/...

  --------------- ------------------------------------ --------------------
  *Parameter*     *Meaning*                            *Example*

  ClassName       The name of a class                  Gene

  attributeName   The name of an attribute of the      symbol
                  return class or an associated class  

  Value           The value of an attribute            brca\*
  --------------- ------------------------------------ --------------------

Table 4‑6 Criteria statements within XML-HTTP queries

### Examples of Use {#examples-of-use-2 .unnumbered}

The following examples demonstrate use of the XML-HTTP interface. In
actual use, the queries shown here would either be submitted by a block
of code or entered in the address bar of an Internet browser. Also note
that the servlet name GetXML in each of the examples can be replaced
with GetHTML to view with layout and markup in a browser.

+------------+---------------------------------------------------------+
| **Query**  | http://                                                 |
|            | server/servlet/GetXML?query=Gene&Gene\[@symbol=brca\*\] |
+------------+---------------------------------------------------------+
| **S        | Find all objects of type Gene whose symbol starts with  |
| yntactic** | \'brca\'.                                               |
|            |                                                         |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+
| **B        | Find all BRCA genes.                                    |
| iological\ |                                                         |
| Meaning**  |                                                         |
+------------+---------------------------------------------------------+

+------------+---------------------------------------------------------+
| **Query**  | http://server/servlet/GetXML?query=                     |
|            | Gene&Gene\[@symbol=brca\*\]/Taxon\[@scientificName=homo |
|            | sapiens\]                                               |
+------------+---------------------------------------------------------+
| **S        | Find all objects of type Gene whose symbol starts with  |
| yntactic** | \'brca\' and which have an associated Taxon object      |
|            | whose scientificName is equal to \'homo sapiens\'.      |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+
| **Bi       | Find all human BRCA genes.                              |
| ological** |                                                         |
|            |                                                         |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+

+------------+---------------------------------------------------------+
| **Query**  | http://server/servlet/GetXML?                           |
|            | qu                                                      |
|            | ery=Tissue&Tissue\[@organ=eye\]\[@histology=neoplasia\] |
+------------+---------------------------------------------------------+
| **S        | Find all objects of type Tissue associated with         |
| yntactic** | attribute organ equal to \'eye\' and histology equal to |
|            | \'neoplasia\'.                                          |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+
| **Bi       | Find all tissues representing neoplasms of the eye.     |
| ological** |                                                         |
|            |                                                         |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+

+------------+---------------------------------------------------------+
| **Query**  | http://server/servlet/GetXML?                           |
|            | query=Gene&Chromosome\[@number=2\]/                     |
|            | Taxon\[@scientificName=homo sapiens\]                   |
+------------+---------------------------------------------------------+
| **S        | Find all objects of type Gene associated with           |
| yntactic** | Chromosome objects with number equal to 2 which         |
|            | themselves are related to Taxon objects with            |
| *          | scientificName equal to \'homo sapiens\'.               |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+
| **Bi       | Find all human genes on chromosome number 2             |
| ological** |                                                         |
|            |                                                         |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+

+------------+---------------------------------------------------------+
| **Query**  | http://server/servlet/GetXML?                           |
|            | query=G                                                 |
|            | ene&Chromosome\[@number=2\]/Taxon\[@scientificName=homo |
|            | sapiens\]                                               |
+------------+---------------------------------------------------------+
| **S        | Find all objects of type Gene associated with           |
| yntactic** | Chromosome objects with number equal to 2 which         |
|            | themselves are related to Taxon objects with            |
| *          | scientificName equal to \'homo sapiens\' in biological  |
| *Meaning** | terms                                                   |
+------------+---------------------------------------------------------+
| **Bi       | Find all human genes on chromosome number 2             |
| ological** |                                                         |
|            |                                                         |
| *          |                                                         |
| *Meaning** |                                                         |
+------------+---------------------------------------------------------+

### Working With Result Sets {#working-with-result-sets .unnumbered}

Because HTTP is a stateless protocol, the caBIO server has no knowledge
of the context of any incoming request. Consequently, each invocation of
GetXML or GetHTML must contain all of the information necessary to
retrieve the request, regardless of previous requests. Developers should
consider this when working with the XML-HTTP interface.

#### Retrieving Related Results using XLinks {#retrieving-related-results-using-xlinks .unnumbered}

When using the GetXML servlet to retrieve results as XML, associations
between objects are converted to XLinks within the XML. The link
notation, shown below, allows the client to make a subsequent request to
retrieve the associated objects.

\<class name=\"gov.nih.nci.cabio.domain.Gene\" recordNumber=\"1\"\>

...

\<field name=\"taxon\"

xlink:type=\"simple\"

xlink:href=

\"http://cabioapi.nci.nih.gov/cabio41/GetXML?query=Taxon&Gene\[@id=5\]\"\>

getTaxon

\</field\>

...

\</class\>

#### Controlling the Number of Items Returned {#controlling-the-number-of-items-returned .unnumbered}

The GetXML servlet provides a throttling mechanism to allow developers
to define the number of results returned on any single request and where
in the result set to start. For example, if a search request yields 500
results, specifying resultCounter=450 will return only the last 50
records. Similarly, specifying startIndex=50 will return only the first
50 records.

#### Paging Results {#paging-results .unnumbered}

In addition to controlling the number of results to display, the GetXML
servlet also provides a mechanism to support \"paging\". This concept,
common to many web sites, allows results to be displayed over a number
of pages, so that, for example, a request that yields 500 objects could
be displayed over 10 pages of 50 objects each. When the paging feature
is used, the GetXML servlet will include XLinks to each of the result
pages in an XML \<page/\> element. The element data of the \<page/\>
element is the number of the page, suitable for output as text or HTML
when using an XSL stylesheet:

\<page number=\"1\"

xlink:type=\"simple\"

xlink:href=\"http://cabioapi.nci.nih.gov/cabio41/GetXML?query=
{query}&pageNumber=4&resultCounter=1000&startIndex=0\"\> 4 \</page\>

### Limitations {#limitations-1 .unnumbered}

When specifying attribute values in the query string, use of the
following characters generates an error: \[ \] / \\ \# & %.

# caBIO Utilities

This chapter describes additional utilities provided by the caBIO API,
which are not generated by the caCORE SDK. These customizations

Topics in this chapter include:

• FreestyleLM on this page

• Grid Id Resolver on page [54](#grid-id-resolver)

• Genome Range Queries on page [55](#genome-range-queries)

• Array Annotation API on page [57](#array-annotation-api)

• SVG Manipulatoron page [63](#svg-manipulator)

## FreestyleLM {#freestylelm .unnumbered}

All of the search methods discussed in the previous chapter allow for
vertical searching in one caBIO domain object. In other words, one
domain object must be selected to be searched. The FreestyleLM
(Freestyle Lexical Mine) search component provides and interfaces and
APIs for conducting horizontal searches across caBIO domain objects.

FreestyleLM is build upon Hibernate and Apache Lucene full text search
engines, providing full text search (Google™-like search) capabilities
to the caBIO API. The classes and fields that are indexed are annotated
in the caBIO domain model. Usually, these attributes are non-numeric
fields with descriptions or identifiers. Thus, searching for "brca1"
will return any object that makes mention of the "brca1" gene in its
attributes, such as Genes, Proteins, Pathways, and so on.

The IndexGenerator utility within the caBIO API generates index files
for these annotations. FreestyleLM provides the ability to query these
indexes. The FreestyleLM search is facilitated by the classes listed
below:

-   gov.nih.nci.search.SearchQuery

-   gov.nih.nci.search.SearchResults

-   gov.nih.nci.search.Sort

-   gov.nih.nci.search.RangeFilter

The search term is set as a keyword within the SearchQuery object. One
or more words can be set as a keyword. Refer to the Lucene documentation
for more information on the search syntax
(<http://lucene.apache.org/java/docs/queryparsersyntax.html>).

### Freestyle LM Java Client {#freestyle-lm-java-client .unnumbered}

The CaBioApplicationService provides a special data access method to
perform the text based search.

  ----------------- --------------------------------------------------------
  **Method          List search(SearchQuery searchQuery)
  Signature**       

  **Search Type**   FreestyleLM Search

  **Description**   Returns a List collection containing objects conforming
                    to the criteria defined by the searchQuery.

  **Example**       Search(searchQuery);
  ----------------- --------------------------------------------------------

#### Example One: Full Text Search (Default) {#example-one-full-text-search-default .unnumbered}

In this example, a search is performed on the term 'brca\*'. The caBIO
FreestyleLM returns a set of SearchResults objects. The result set will
include reference to objects of different types that match the search
term. In this case, the search results consist of information regarding
Gene, Protein, Pathway, Tissue, GeneOntology and Library objects.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  1             Create a CaBioApplicationService instance.

  3-4           Instantiate a SearchQuery object and set the keyword to
                'brca\*'

  5             Call the CaBioApplicationService search method

  6-9           Iterate through the results
  -----------------------------------------------------------------------

#### Example Two: Hibernate Search {#example-two-hibernate-search .unnumbered}

A search is performed on the term 'brca\*' and the query type is
specified as 'HIBERNATE_SEARCH'. (The default query type is
FULL_TEXT_SEARCH). The caBIO FreestyleLM result set will include objects
of different types that match the search term. In this case, the search
results consist of Gene, Protein, Pathway, Tissue, GeneOntology and
Library objects.

![](media/image1.wmf)**Example Three: Sort Results**

The result set can be sorted by specifying a sort value in the
SearchQuery.

![](media/image1.wmf)**Freestyle LM Web Interface**

The caBIO API provides a simple web interface to perform text based
queries. This user interface is built upon the FreestyleLM Search API
(Figure 5-4Figure 3-1). The following URL can be used to access the
servlet:

<http://cabioapi.nci.nih.gov/cabio41/search>

![](media/image2.png){width="4.266666666666667in"
height="3.4291666666666667in"}

Figure 5‑4 Web interface for performing text based queries

## Grid Id Resolver {#grid-id-resolver .unnumbered}

Each caBIO object can be uniquely identified (even across classes) using
the Grid Id (bigid attribute). See Chapter 7 for more details on Grid
Identifiers. The API discussed here allows for simple retrieval of
objects using these identifiers.

### Grid Id Resolver Java API {#grid-id-resolver-java-api .unnumbered}

The CaBioApplicationService provides special data access methods to
perform Grid Id searches. The same methods are available in the web
services interface.

+--------------+-------------------------------------------------------+
| **Method     | boolean exist(String bigId)                           |
| Signature**  |                                                       |
+--------------+-------------------------------------------------------+
| **Search     | Grid Id Resolver                                      |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Check if the object specified by the given Grid Id    |
| escription** | exists in caBIO.                                      |
+--------------+-------------------------------------------------------+
| **Example**  | boolean exists =                                      |
|              |                                                       |
|              | exist(\"hdl://2500.1.PMEUQUCCL5/WX2PXQD7PB\")         |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | boolean getDataObject(String bigId)                   |
| Signature**  |                                                       |
+--------------+-------------------------------------------------------+
| **Search     | Grid Id Resolver                                      |
| Type**       |                                                       |
+--------------+-------------------------------------------------------+
| **D          | Retrieve the domain object specified by the given     |
| escription** | Grid Id.                                              |
+--------------+-------------------------------------------------------+
| **Example**  | Object obj =                                          |
|              |                                                       |
|              | getDataObject(\"hdl://2500.1.PMEUQUCCL5/WX2PXQD7PB\") |
+--------------+-------------------------------------------------------+

## Genome Range Queries {#genome-range-queries .unnumbered}

The Range Query API provides an alternative way to search for genomic
features on a chromosome, based on the physical locations. The API is
capable of performing arbitrary range searches on any given chromosome
(absolute search), or range searches around a feature of interest
(relative search).

The caBIO model contains a subclass of PhysicalLocation for every object
type which has PhysicalLocation data. For example, there is a
GenePhysicalLocation class for Gene location data. The Range Query API
takes advantage of these classes by allowing the user to specify which
subclass of PhysicalLocation to search for. If SNPPhysicalLocation is
specified as the target class, then only PhysicalLocations pertaining to
SNPs will be returned.

### Range Query Java API {#range-query-java-api .unnumbered}

The CaBioApplicationService provides a special data access methods to
perform range queries.

  ----------------- --------------------------------------------------------
  **Method          List search(RangeQuery rangeQuery)
  Signature**       

  **Search Type**   Genome Range Search

  **Description**   Returns a List collection containing objects conforming
                    to the criteria defined by the searchQuery.

  **Example**       search(rangeQuery);
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          List search(Class targetClass, RangeQuery rangeQuery)
  Signature**       

  **Search Type**   Genome Range Search

  **Description**   Returns a List collection containing objects of the type
                    specified by the targetClass, conforming to the criteria
                    defined by the given RangeQuery.

  **Example**       search(SNP.class,rangeQuery);
  ----------------- --------------------------------------------------------

#### Example One: Absolute Search  {#example-one-absolute-search .unnumbered}

In this example, a search for SNPs on an arbitrary range of the human
chromosome 1 is performed. The result set will only include SNP in the
given range. By default, the reference assembly is searched. An
alternative assembly may be specified with the rangeQuery.setAssembly()
method.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  1             Create a CaBioApplicationService instance.

  3-8           Retrieve the chromosome of interest

  9-12          Create and configure the AbsoluteRangeQuery

  13            Execute the RangeQuery with SNPPhysicalLocation as the
                target

  14-17         Iterate through the results
  -----------------------------------------------------------------------

#### Example Two: Relative Search  {#example-two-relative-search .unnumbered}

In this example, a search for SNPs on an arbitrary range of the human
chromosome 1 is performed. The result set will only include SNP in the
given range. By default, the reference assembly is searched. An
alternative assembly may be specified with the rangeQuery.setAssembly()
method.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  1             Create a CaBioApplicationService instance.

  3-5           Retrieve the SNP of interest

  6-9           Create and configure the FeatureRangeQuery

  10-11         Execute the RangeQuery with ArrayReporterPhysicalLocation
                as the target

  14-17         Iterate through the results
  -----------------------------------------------------------------------

## Array Annotation API {#array-annotation-api .unnumbered}

This client-side convenience API is intended for users of the Microarray
annotations in caBIO. The API simplifies access to bulk microarray
annotations such as reporters, genes and SNPs. The
ArrayAnnotationService class provides the following Java methods:

  ----------------- --------------------------------------------------------
  **Method          Map\<String, Collection\<String\>\>
  Signature**       getGenesForReporters(String arrayPlatform,
                    Collection\<String\> reporterIds)

  **Description**   Given an array and list of reporter names, return a
                    mapping of those reporter names to HUGO gene symbols.

  **Example**       getGenesForReporters(\"HG-U133_Plus_2\", reporterIds)
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          Map\<String, Collection\<String\>\>
  Signature**       getReportersForGenes(String arrayPlatform,
                    Collection\<String\> geneSymbols)

  **Description**   Given an array and a list of HUGO gene symbols, return a
                    mapping of those gene symbols to reporters on the
                    specified array.

  **Example**       getReportersForGenes(\"HG-U133_Plus_2\", geneSymbols)
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          Collection\<ArrayReporter\>
  Signature**       getReportersForPlatform(String arrayPlatform)

  **Description**   Returns all ArrayReporters on a given array platform.

  **Example**       getReportersForPlatform(\"HG-U133_Plus_2\")
  ----------------- --------------------------------------------------------

+--------------+-------------------------------------------------------+
| **Method     | Collection\<ExpressionArrayReporter\>                 |
| Signature**  | getExpressionReporterAnnotations(String               |
|              | arrayPlatform, Collection\<String\> reporterIds)      |
+--------------+-------------------------------------------------------+
| **D          | Given an array and list of reporter names, return the |
| escription** | ExpressionArrayReporter objects corresponding to the  |
|              | reporter names, populated with the following          |
|              | annotations:                                          |
|              |                                                       |
|              | -   gene                                              |
|              |                                                       |
|              | -   physicalLocationCollection.chromosome             |
|              |                                                       |
|              | -   cytogeneticLocationCollection                     |
|              |                                                       |
|              | -   cytogeneticLocationCollection.cytoband            |
+--------------+-------------------------------------------------------+
| **Example**  | getExpressionReporterAnnotations(\"HG-U133_Plus_2\",  |
|              | reporterIds)                                          |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | Collection\<ExonArrayReporter\>                       |
| Signature**  | getExonReporterAnnotations(String arrayPlatform,      |
|              | Collection\<String\> reporterIds)                     |
+--------------+-------------------------------------------------------+
| **D          | Given an array and list of reporter names, return the |
| escription** | ExonArrayReporter objects corresponding to the        |
|              | reporter names, populated with the following          |
|              | annotations:                                          |
|              |                                                       |
|              | -   geneCollection                                    |
|              |                                                       |
|              | -   physicalLocationCollection                        |
|              |                                                       |
|              | -   physicalLocationCollection.chromosome             |
|              |                                                       |
|              | -   cytogeneticLocationCollection                     |
|              |                                                       |
|              | -   cytogeneticLocationCollection.cytoband            |
+--------------+-------------------------------------------------------+
| **Example**  | getExonReporterAnnotations(\"HuEx-1_0-st-v2 \",       |
|              | reporterIds);                                         |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | Collection\<SNPArrayReporter\>                        |
| Signature**  | getSNPReporterAnnotations(String arrayPlatform,       |
|              | Collection\<String\> reporterIds)                     |
+--------------+-------------------------------------------------------+
| **D          | Given an array and list of reporter names, return the |
| escription** | SNPArrayReporter objects corresponding to the         |
|              | reporter names, populated with the following          |
|              | annotations:                                          |
|              |                                                       |
|              | -   SNP                                               |
|              |                                                       |
|              | -   physicalLocationCollection                        |
|              |                                                       |
|              | -   physicalLocationCollection.chromosome             |
|              |                                                       |
|              | -   cytogeneticLocationCollection                     |
|              |                                                       |
|              | -   cytogeneticLocationCollection.cytoband            |
+--------------+-------------------------------------------------------+
| **Example**  | getSNPReporterAnnotations(\"Mapping250K_Sty\",        |
|              | reporterIds)                                          |
+--------------+-------------------------------------------------------+

+--------------+-------------------------------------------------------+
| **Method     | Collection\<Gene\>                                    |
| Signature**  | getGeneAnnotations(Collection\<String\> geneSymbols)  |
+--------------+-------------------------------------------------------+
| **D          | Returns a collection of the requested genes,          |
| escription** | populated with the following annotations:             |
|              |                                                       |
|              | -   cytogeneticLocationCollection                     |
|              |                                                       |
|              | -   cytogeneticLocationCollection.startCytoband       |
|              |                                                       |
|              | -   databaseCrossReferenceCollection                  |
|              |                                                       |
|              | -   chromosome                                        |
+--------------+-------------------------------------------------------+
| **Example**  | getGeneAnnotations(geneSymbols)                       |
+--------------+-------------------------------------------------------+

  ----------------- --------------------------------------------------------
  **Method          List\<CytobandPhysicalLocation\>
  Signature**       getCytobandPositions(String chromosomeNumber)

  **Description**   Returns all the cytobands on the specified chromosome
                    (found on the reference assembly).

  **Example**       getCytobandPositions(\"1\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          List\<CytobandPhysicalLocation\>
  Signature**       getCytobandPositions(String chromosomeNumber, String
                    assembly)

  **Description**   Returns all the cytobands on the specified chromosome of
                    the given assembly.

  **Example**       getCytobandPositions(\"1\", \"Celera\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          Microarray getMicroarray(String platformName)
  Signature**       

  **Description**   Returns the Microarray with the given name.

  **Example**       getMicroarray(\"HG-U133_Plus_2\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          getGenesForSymbol(String hugoSymbol)
  Signature**       

  **Description**   Returns the genes with the given HUGO symbol.

  **Example**       getGenesForSymbol(\"IL5\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          Collection\<GeneAlias\> getAliasesForGene(String symbol)
  Signature**       

  **Description**   Returns the aliases associated with the given gene
                    sumbol.

  **Example**       getAliasesForGene(\"IL5\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          HashMap\<String, Collection\<String\>\>
  Signature**       getReportersForSnps(String arrayPlatform, List\<String\>
                    dbSnpIds)

  **Description**   Returns all reporter names for the specified SNP on the
                    given array.

  **Example**       getReportersForSnps(\"Mapping250K_Sty\", dbSnpIds)
  ----------------- --------------------------------------------------------

+--------------+-------------------------------------------------------+
| **Method     | Collection\<SNP\> getSNPAnnotations(List\<String\>    |
| Signature**  | dbSnpIds)                                             |
+--------------+-------------------------------------------------------+
| **D          | Returns the specified SNP preloaded with annotations. |
| escription** | The associations which are preloaded:                 |
|              |                                                       |
|              | -   physicalLocationCollection                        |
|              |                                                       |
|              | -   physicalLocationCollection.chromosome             |
|              |                                                       |
|              | -   cytogeneticLocationCollection                     |
|              |                                                       |
|              | -   cytogeneticLocationCollection.startCytoband       |
+--------------+-------------------------------------------------------+
| **Example**  | getSNPAnnotations(dbSnpIds)                           |
+--------------+-------------------------------------------------------+

  ----------------- --------------------------------------------------------
  **Method          Collection\<Gene\> getGenesForDbSnpId(String dbSnpId)
  Signature**       

  **Description**   Returns the genes associated with the given dBSNP id by
                    array annotations (relative locations).

  **Example**       getGenesForDbSnpId(\"rs200577\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          Collection\<SNP\> getSnpsNearGene(String symbol, Long
  Signature**       kbUpstream, Long kbDownstream, String assembly)

  **Description**   Returns all the SNPs within the specified range of the
                    given gene on the specified assembly.

  **Example**       getSnpsNearGene(\"A1CF\", 0L, 0L, \"Celera\")
  ----------------- --------------------------------------------------------

  ----------------- --------------------------------------------------------
  **Method          Collection\<SNP\> getSnpsNearGene(String symbol, Long
  Signature**       kbUpstream, Long kbDownstream)

  **Description**   Returns all the SNPs within the specified range of the
                    given gene, on the reference assembly.

  **Example**       getSnpsNearGene(\"A1CF\", 1000L, 1000L)
  ----------------- --------------------------------------------------------

#### Example One: Retrieve Gene Symbols for Reporters on the HGU-133 Array {#example-one-retrieve-gene-symbols-for-reporters-on-the-hgu-133-array .unnumbered}

In this example, a search for SNPs on an arbitrary range of the human
chromosome 1 is performed. The result set will only include SNP in the
given range. By default, the reference assembly is searched. An
alternative assembly may be specified with the rangeQuery.setAssembly()
method.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  1             Create a CaBioApplicationService instance.

  2             Create the ArrayAnnotationService instance.

  3-6           Create a list of reporter names.

  7-8           Execute the convenience method

  9-11          Iterate through the results
  -----------------------------------------------------------------------

#### Example Two: Retrieve SNPs with Pre-loaded Annotations  {#example-two-retrieve-snps-with-pre-loaded-annotations .unnumbered}

In this example, a search for SNPs on an arbitrary range of the human
chromosome 1 is performed. The result set will only include SNP in the
given range. By default, the reference assembly is searched. An
alternative assembly may be specified with the rangeQuery.setAssembly()
method.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  1             Create a CaBioApplicationService instance.

  2             Create the ArrayAnnotationService instance.

  3-6           Create a list of SNP ids

  7             Execute the convenience method to retrieve the SNP
                annotations

  8             Iterate through the results

  9-10          Follow preloaded associations. None of these method calls
                produce additional queries.
  -----------------------------------------------------------------------

## SVG Manipulator {#svg-manipulator .unnumbered}

The caBIO API includes a class (SVGManipulator) in the
gov.nih.nci.common.util package that provides useful services to
manipulate Scalable Vector Graphics (SVG) diagrams retrieved from the
caBIO Pathway domain object.

### Manipulating Pathway Diagrams {#manipulating-pathway-diagrams .unnumbered}

BioCarta and its Proteomic Pathway Project (P3) provide detailed
graphical renderings of pathway information. NCI\'s CMAP web site
captures pathway information from BioCarta, and transforms the
downloaded image data into Scalable Vector Graphics (SVG)
representations that support interactive manipulation of the online
images. The SVGManipulator utility class provides the capability to do
the following:

-   Change the display colors for each gene contained in an SVG diagram.

-   Modify the URL linking a gene in the SVG diagram to external gene
    information. The default gene URL links to the CMAP website.

-   Disable all genes or nodes within an SVG diagram.

-   Retrieve a gene's color.

-   Reset a gene or node to its original state.

-   Retrieve/set SVG diagram attributes via getter/setter methods

Figure 6 1 shows an example of how to use SVGManipulator class to modify
content of an SVG diagram.

![](media/image2.png){width="6.197222222222222in"
height="5.329166666666667in"}

Figure 5‑5 Sequence diagram using caBIO Pathway and Gene objects

#### SVG Diagram Manipulation Utility Example {#svg-diagram-manipulation-utility-example .unnumbered}

The following test client demonstrates how to use the SVGManipulation
class to change the appearance of a pathway diagram associated with a
given pathway.

![](media/image1.wmf)

  -----------------------------------------------------------------------
  *Lines*       *Description*
  ------------- ---------------------------------------------------------
  2-6           Retrieve "h_freePathway" and create a new SVManipulator
                instance to operate on it.

  7-15          Retrieve genes of interest in the pathway

  16-18         Create a parallel list of colors for the genes

  19            Set the colors for the genes

  20            Save the modified SVG image
  -----------------------------------------------------------------------

# Cancer Bioinformatics Infrastructure Objects

This chapter describes the Cancer Bioinformatics Infrastructure Objects
(caBIO) model and its application programming interfaces.

Topics in this chapter include:

-   Introduction on this page

-   caBIO API on this page

-   Data Sources in the caBIO Database on page
    [78](#data-sources-in-the-cabio-database)

-   caGrid Identifiers on page [84](#cagrid-identifiers)

## Introduction {#introduction .unnumbered}

The Cancer Bioinformatics Infrastructure Objects (caBIO) model and
architecture was the first of several model-driven information systems
that make up caCORE and continues to be an on-going effort to model the
genomic domain. The caBIO objects simulate the behavior of actual
genomic components such as genes, chromosomes, sequences, libraries,
clones, ontologies, etc. They provide access to a variety of genomic
data sources including GenBank, Unigene, LocusLink, Homologene,
Ensemble, UCSC Genome Sequencing Center's Annotations, NCI's CTEP
(Cancer Therapy Evaluation Program) and NCICB's CGAP (Cancer Genome
Anatomy Project) data repositories. The full list of data sources is
listed starting on page 61.

## caBIO API {#cabio-api .unnumbered}

Most of the domain objects defined in the caBIO API are objects that
specialize in bioinformatics applications. The caBIO domain objects are
implemented as Java beans in the gov.nih.nci.cabio.domain,
gov.nih.nci.common.domain and gov.nih.nci.common.provenance.domain
packages and include those classes that correspond to biological
entities and bioinformatic concepts.

The caBIO UML model is published as an EA (Enterprise Architect) in the
Files section of the caBIO GForge site
(https://gforge.nci.nih.gov/frs/?group_id=51). Table 6-7 and Table 6-8
list the classes in these packages along with a description. Detailed
descriptions about each class and its methods are present in the caBIO
4.1 JavaDocs.

+---------------------+------------------------------------------------+
| *caBIO Domain       | *Description*                                  |
| Object*             |                                                |
+=====================+================================================+
| [Agent](http://n    | An object representing a therapeutic agent     |
| cicb.nci.nih.gov/NC | (drug, intervention therapy) used in a         |
| ICB/content/ncicblf | clinical trial protocol. It provides the NSC   |
| s/caCORE3-2_JavaDoc | Number, name and source of the agent.          |
| s/gov/nih/nci/cabio |                                                |
| /domain/Agent.html) | An Agent provides access to the associated     |
|                     | protocols used in clinical trials              |
|                     | (ClinicalTrialProtocol) and associated genes   |
|                     | targeted (Targets) by that                     |
|                     | agent vi                                       |
|                     | a the getClinicalTrialProtocolCollection* *and |
|                     | getTargetCollection functionalities            |
|                     | respectively.                                  |
|                     |                                                |
|                     | While the data in the Agent object is largely  |
|                     | static, it has been updated to include Agents  |
|                     | studied as part of the Cancer Gene Data        |
|                     | Curation project at NCI.                       |
+---------------------+------------------------------------------------+
| [                   | An irregularity in either the expression of a  |
| Anomaly](http://nci | gene or its structure (i.e., a mutation). It   |
| cb.nci.nih.gov/NCIC | provides access to the associated              |
| B/content/ncicblfs/ | histopathological information (*Histology*) as |
| caCORE3-2_JavaDocs/ | well as the disease (DiseaseOntology) and      |
| gov/nih/nci/cabio/d | organ ontology *(*OrganOntology*)*.            |
| omain/Anomaly.html) |                                                |
|                     | A user can also retrieve the anomalies         |
|                     | *(*Anomaly*)* associated with a given gene     |
|                     | target using the getAnomalyCollection          |
|                     | functionality.                                 |
|                     |                                                |
|                     | The data in Anomaly is currently static.       |
+---------------------+------------------------------------------------+
| ArrayReporter       | A superclass for different kinds of array      |
|                     | reporters such as ExonArrayReporter,           |
|                     | SNPArrayReporter, TranscriptArrayReporter and  |
|                     | ExpressionArrrayReporter.                      |
|                     |                                                |
|                     | These objects get populated with annotations   |
|                     | from Affymetrix, Illumina and Agilent Arrays   |
|                     | such as the Affymetrix HG-U133, HG-U133 Plus2, |
|                     | HT-HG-U133 A, HT-HG-U133 A2.0 Arrays,          |
|                     | HuMapping 250kNsp, HuMapping 250kSty,          |
|                     | HuMapping 50kHind240, HuMapping Xba240 and     |
|                     | Exon Arrays, Agilent 44K and Acgh 244k arrays  |
|                     | and Illumina HumanHap Arrays and are           |
|                     | synchronized monthly with the latest releases  |
|                     | of the respective datasets.                    |
|                     |                                                |
|                     | In case of SNP Arrays such as Affymetrix       |
|                     | HuMapping and Illumina arrays, the location of |
|                     | a SNP relative to a Marker is available        |
|                     | through MarkerRelativeLocation and relative    |
|                     | through a Gene is available through            |
|                     | GeneRelativeLocation.                          |
+---------------------+------------------------------------------------+
| ArrayReporter       | An abstract class that provides cytogenetic    |
| CytogeneticLocation | starts and stops for array reporters in        |
|                     | ArrayReporter, where available. It exposes     |
|                     | cytogenetic starts and stops for Affymetrix    |
|                     | HG-U133, HG-U133 Plus2, HT-HG-U133A,           |
|                     | HG-HG-U133A 2.0, HuMapping 250k Nsp, HuMapping |
|                     | 250k Sty, HuMapping 50k Hind240, HuMapping 50k |
|                     | Xba 240, Agilent 44K and Agilent CGH 244K      |
|                     | arrays and gets populated with data provided   |
|                     | by the manufacturer.                           |
+---------------------+------------------------------------------------+
| ArrayRepor          | An abstract class that provides chromosomal    |
| terPhysicalLocation | starts and stops for array reporters in        |
|                     | ArrayReporter. It exposes chromosomal starts   |
|                     | and stops for Affymetrix HG-U133, HG-U133      |
|                     | Plus2, HT-HG-U133A, HG-HG-U133A 2.0, HuMapping |
|                     | 250k Nsp, HuMapping 250k Sty, HuMapping 50k    |
|                     | Hind240, HuMapping 50k Xba 240, Exon Arrays,   |
|                     | Agilent 44K and Agilent aCGH 244K arrays and   |
|                     | Illumina Human Hap Arrays and gets populated   |
|                     | with data provided by the manufacturer.        |
+---------------------+------------------------------------------------+
| [C                  | An object representing a specific chromosome   |
| hromosome](http://n | on a human or mouse; It provides access to all |
| cicb.nci.nih.gov/NC | known genes on the chromosome, as well as to   |
| ICB/content/ncicblf | the ChromosomalLocation and                    |
| s/caCORE3-2_JavaDoc | CytogeneticLocation of features such as SNP,   |
| s/gov/nih/nci/cabio | ESTs, mRNAs, Markers, ArrayReporters, etc      |
| /domain/Clone.html) | through the getLocationCollection              |
|                     | functionality.                                 |
|                     |                                                |
|                     | This ability to associate multiple features    |
|                     | with a chromosome aids in performing           |
|                     | range-query searches, described in greater     |
|                     | detail elsewhere.                              |
|                     |                                                |
|                     | The data in the chromosome table is static and |
|                     | as with data in caBIO, encompasses only human  |
|                     | and mouse chromosomes.                         |
+---------------------+------------------------------------------------+
| [ClinicalT          | The protocols and administrative information   |
| rialProtocol](http: | about the trial such as lead organization,     |
| //ncicb.nci.nih.gov | participants, current phase of the clinical    |
| /NCICB/content/ncic | trial, and associated NIH Administrative Id.   |
| blfs/caCORE3-2_Java |                                                |
| Docs/gov/nih/nci/ca | A ClinicalTrialProtocol object provides the    |
| bio/domain/CloneRel | user access to the associated agents,          |
| ativeLocation.html) | histopathology and disease ontologies through  |
|                     | the getAgentCollection,                        |
|                     | getDiseaseOntologyCollection and               |
|                     | getHistopathologyCollection functionalities    |
|                     | respectively. This object gets populated with  |
|                     | data from NCI's CTEP Program which gets        |
|                     | updated on a monthly basis.                    |
+---------------------+------------------------------------------------+
| [Clone](http://n    | An object used to hold information pertaining  |
| cicb.nci.nih.gov/NC | to I.M.A.G.E. clones associated with human and |
| ICB/content/ncicblf | mouse genes from Unigene's repository. A user  |
| s/caCORE3-2_JavaDoc | can access the associated sequences            |
| s/gov/nih/nci/cabio | (NucleicAcidSequence*)* using the              |
| /domain/Clone.html) | getNucleicAcidSequenceCollection               |
|                     | functionality.                                 |
|                     |                                                |
|                     | A clone is always associated with a            |
|                     | clone-library further details of which are     |
|                     | available through the associated *Library*     |
|                     | Object.                                        |
|                     |                                                |
|                     | The orientation of the clone along with the    |
|                     | associated sequence identifier is available    |
|                     | through the CloneRelativeLocation object that  |
|                     | provides further information regarding the     |
|                     | clone insert read.                             |
|                     |                                                |
|                     | The Clone object gets populated with clone     |
|                     | data from Unigene's human and mouse            |
|                     | annotations and that can be associated to      |
|                     | existing libraries in caBIO's Library Object.  |
|                     |                                                |
|                     | As indicated below, the Library object in turn |
|                     | gets populated with clone-library data from    |
|                     | CGAP who integrate information from ORESTES,   |
|                     | dbEST, Unigene and other such resources.       |
+---------------------+------------------------------------------------+
| [CloneRe            | Provides the orientation (5\'/3\') of a clone  |
| lativeLocation](htt | insert read, along with links to the           |
| p://ncicb.nci.nih.g | associated sequence information                |
| ov/NCICB/content/nc | (NucleicAcidSequence).                         |
| icblfs/caCORE3-2_Ja |                                                |
| vaDocs/gov/nih/nci/ | It gets populated with relative location of    |
| cabio/domain/Cytoge | clones in the Clone Object as available in     |
| neticLocation.html) | Unigene.                                       |
+---------------------+------------------------------------------------+
| Cytoband            | The Cyotband Object provides information such  |
|                     | as the name and location of cytobands in human |
|                     | and mouse available from UCSC's Genome         |
|                     | Sequencing Center for every new build of the   |
|                     | Human and Mouse Genome.                        |
|                     |                                                |
|                     | It also gets populated with human cytoband     |
|                     | information available in Unigene, Affymetrix   |
|                     | and Agilent array probeset to facilitate       |
|                     | retrieval of cytobands that identify the start |
|                     | and stop of a SNP, Gene and ArrayReporter in   |
|                     | SNPCytogeneticLocation,                        |
|                     | GeneCytogeneticLocation and                    |
|                     | ArrayReporterCytogeneticLocation respectively. |
+---------------------+------------------------------------------------+
| Cytob               | An abstract class that provides the            |
| andPhysicalLocation | chromosomal starts and stops of Cytobands. It  |
|                     | gets populated with data from UCSC's Genome    |
|                     | Sequence Center.                               |
+---------------------+------------------------------------------------+
| [C                  | An abstract superclass that provides           |
| ytogeneticLocation\ | cytogenetic starts and stops for different     |
| ](htt               | features such as SNP, Gene and ArrayReporters  |
| p://ncicb.nci.nih.g | through their respective subclasses,           |
| ov/NCICB/content/nc | SNPCytogeneticLocation,                        |
| icblfs/caCORE3-2_Ja | GeneCytogeneticLocation and                    |
| vaDocs/gov/nih/nci/ | ArrayReporterCytogeneticLocation respectively. |
| cabio/domain/Cytoge |                                                |
| neticLocation.html) | Each of these subclasses gets populated with   |
|                     | data from different sources as indicated       |
|                     | below.                                         |
+---------------------+------------------------------------------------+
| Dat                 | An object that cross-references caBIO Genes,   |
| abaseCrossReference | SNPs, and Proteins with identifiers from       |
|                     | different databanks.                           |
|                     |                                                |
|                     | For example, it associates caBIO genes         |
|                     | (Unigene) to Entrez and OMIM, caBIO SNPs       |
|                     | (dbSNP) to TSC and caBIO Proteins (Uniprot) to |
|                     | corresponding identifiers in Ensembl and       |
|                     | Enzyme Commission.                             |
|                     |                                                |
|                     | It uses references to Entrez-Gene and          |
|                     | LocusLink in Unigene's human and mouse data to |
|                     | associate Unigene, and uses Entrez-based       |
|                     | datasets to associate caBIO Genes with OMIM.   |
|                     |                                                |
|                     | It uses references to Ensembl and Enzyme       |
|                     | Commission Ids from Affymetrix SNP             |
|                     | array-annotations to associate caBIO Proteins  |
|                     | with Ensembl, RefSeq and EC identifiers.       |
+---------------------+------------------------------------------------+
| [DiseaseOntology]   | An object representing various oncological     |
| (http://ncicb.nci.n | disease ontologies. It provides access to the  |
| ih.gov/NCICB/conten | clinical trials associated with these diseases |
| t/ncicblfs/caCORE3- | (ClinicalTrialProtocol) and the associated     |
| 2_JavaDocs/gov/nih/ | histopathological (Histopathology).            |
| nci/cabio/domain/Di | Gene-Disease associations made through the     |
| seaseOntology.html) | Cancer Gene Index Project are available        |
|                     | through the getGeneFunctionAssociation         |
|                     | functionality.                                 |
|                     |                                                |
|                     | Apart from existing static data, this object   |
|                     | gets populated with data from CGDC Data.       |
+---------------------+------------------------------------------------+
| [DiseaseOntology\   | Provides a hierarchical relationship among     |
| ](http://ncic       | various diseases and associated ontologies.    |
| b.nci.nih.gov/NCICB | Thus it allows a user to obtain                |
| /content/ncicblfs/c | DiseaseOntologys that share a parent/child     |
| aCORE3-2_JavaDocs/g | relationship.                                  |
| ov/nih/nci/cabio/do |                                                |
| main/DiseaseOntolog | The data in this table is static.              |
| yRelationship.html) |                                                |
| Relationship        |                                                |
+---------------------+------------------------------------------------+
| Evidence            | Provides details of the scientific publication |
|                     | used to make the Gene-Agent or Gene-Disease    |
|                     | association through text-mining, as part of    |
|                     | NCI's CGDC Project.                            |
|                     |                                                |
|                     | It provides details such as the Pubmed         |
|                     | identifier, the sentence(s) from the           |
|                     | publication highlighting the association, the  |
|                     | status of the curation process, the            |
|                     | NCI-provided Evidence Code assigned to this    |
|                     | Evidence (that summarizes the role of the Gene |
|                     | in the disease or the interaction of the Agent |
|                     | with the Gene). It provides access to further  |
|                     | details about the assigned EvidenceCode        |
|                     | through the getEvidenceCode functionality.     |
+---------------------+------------------------------------------------+
| EvidenceCode        | Provides access to NCI-curated Evidence Codes  |
|                     | to represent status of Gene-Disease and        |
|                     | Gene-Agent associations made through the CGDC  |
|                     | Project.                                       |
|                     |                                                |
|                     | It gets populated with data from CGDC and      |
|                     | provides a link to the associated Evidence     |
|                     | (PubMed publications used to form the          |
|                     | Gene-Agent or Gene-Disease associations        |
|                     | through text-mining)                           |
+---------------------+------------------------------------------------+
| Exon                | An *Exon* represents an expressed part of a    |
|                     | gene. In caBIO, an exon constitutes part of a  |
|                     | *Transcript* that is used as a probe in        |
|                     | Affymetrix Exon Arrays.                        |
|                     |                                                |
|                     | It gets populated with data from Affymetrix    |
|                     | Human Exon Arrays.                             |
|                     |                                                |
|                     | Transcripts associated with this Exon, per     |
|                     | Affymetrix Exon Array annotations are          |
|                     | available through the Transcript Object, while |
|                     | the probesets themselves are available through |
|                     | ArrayReporter's ExonArrayReporter object.      |
+---------------------+------------------------------------------------+
| ExonArrayReporter   | One of the two 'transcript-array' objects in   |
|                     | caBIO, the other being                         |
|                     | ExpressionArrayReporter.                       |
|                     |                                                |
|                     | An object representing Affymetrix Exon Arrays  |
|                     | providing details such as the manufacturer's   |
|                     | PSR Id, the probe count and the strand         |
|                     | information for each probeset. A user can      |
|                     | retrieve the associated Exons, Transcripts and |
|                     | Genes using the getTranscriptCollection and    |
|                     | getGeneCollection methods respectively.        |
+---------------------+------------------------------------------------+
| E                   | A subclass of NucleicAcidSequence. It          |
| xpressedSequenceTag | represents short nucleotide sequences          |
|                     | (typically 400-600 bases) from one or both     |
|                     | ends of randomly selected cDNA clones and gets |
|                     | populated with data from Unigene's human and   |
|                     | mouse datasets.                                |
|                     |                                                |
|                     | It provides access to the same functionalities |
|                     | such as available through the parent           |
|                     | NucleicAcidSequence class, such as clones,     |
|                     | relative locations of these *Clones*, the      |
|                     | chromosomal start and stop                     |
|                     | (NucleicAcidPhysicalLocation), corresponding   |
|                     | *Genes* and hence any associated               |
|                     | ExpressionArray Reporters.                     |
+---------------------+------------------------------------------------+
| Gene                | Gene objects representing mRNA-based arrays in |
|                     | caBIO. It provides information on probesets in |
|                     | the Affymetrix Human U133, HG U133 Plus2, HT   |
|                     | HG U133 A and HT HG U133 A2.0 Arrays, and      |
|                     | NucleicAcidSequence respectively.              |
|                     |                                                |
|                     | A user can retrieve the associated *Gene*s and |
|                     | protein domains (ProteinDomain) through the    |
|                     | getGeneCollection and                          |
|                     | getProteinDomainCollection methods             |
|                     | respectively. The sequence information for the |
|                     | representative Mrna sequence of this           |
|                     | array-probe can be obtained from               |
|                     | *NucleicAcidSequence* using                    |
|                     | getNucleicAcidSequenceCollection method.       |
|                     |                                                |
|                     | The mRNA-transcripts used to form the array    |
|                     | probe itself is encapsulated in the Transcript |
|                     | object, along with such transcripts from       |
|                     | Affymetrix Human Exon Arrays.                  |
+---------------------+------------------------------------------------+
| Gene                | Gene objects are the effective portal to most  |
|                     | of the genomic information provided by the     |
|                     | caBIO data services; It provides access to     |
|                     |                                                |
|                     | a.  associated proteins (Protein)              |
|                     |                                                |
|                     | b.  gene-targets (Target)                      |
|                     |                                                |
|                     | c.  organs for which histopathological         |
|                     |     information of tumor-samples is available  |
|                     |     that implicates the gene (OrganOntology)   |
|                     |                                                |
|                     | d.  histopathologies (Histopathology)          |
|                     |     associated with c)                         |
|                     |                                                |
|                     | e.  curated gene-ontologies (GeneOntology)     |
|                     |                                                |
|                     | f.  BioCarta pathways (Pathway) involving the  |
|                     |     gene                                       |
|                     |                                                |
|                     | g.  aliases (GeneAlias) from HUGO and Entrez   |
|                     |                                                |
|                     | h.  clones (*Clone*) from Unigene              |
|                     |                                                |
|                     | i.  Mrna/EST-sequences (NucleicAcidSequence)   |
|                     |                                                |
|                     | j.  SNPs located on the Gene                   |
|                     |     (GeneRelativeLocation) as per Affymetrix   |
|                     |     array annotation data files.               |
|                     |                                                |
|                     | k.  chromosomal start and stop                 |
|                     |     (GenePhysicalLocation) from MapView        |
|                     |                                                |
|                     | l.  Agents it interacts with, per NCI's CGDC   |
|                     |     Text Mining Project (GeneAgentAssociation) |
|                     |                                                |
|                     | m.  Tumors it is implicated in                 |
|                     |     (GeneDiseaseAssociation) as per NCI's CGDC |
|                     |     Text Mining Project.                       |
|                     |                                                |
|                     | n.  Corresponding Identifiers from OMIM and    |
|                     |     Entrez in DatabaseCrossReference           |
|                     |                                                |
|                     | o.  UniSTS Markers corresponding to this gene  |
|                     |     in the *Marker* object                     |
|                     |                                                |
|                     | p.  Symbols from HUGO                          |
|                     |                                                |
|                     | The Gene object itself is populated with human |
|                     | and mouse data from Unigene. Other associated  |
|                     | objects (and hence their associations to       |
|                     | *Gene*) get populated from different sources.  |
+---------------------+------------------------------------------------+
| [Gene               | An alternative name for a gene; provides       |
| Alias](http://ncicb | descriptive information about the gene (as it  |
| .nci.nih.gov/NCICB/ | is known by this alias), as well as access to  |
| content/ncicblfs/ca | the primary Gene it refers to. It gets         |
| CORE3-2_JavaDocs/go | populated with data from HUGO, Entrez and CGAP |
| v/nih/nci/cabio/dom |                                                |
| ain/GeneAlias.html) |                                                |
+---------------------+------------------------------------------------+
| G                   | Agents interacting with a Gene as per results  |
| eneAgentAssociation | of text mining scientific publications from    |
|                     | PubMed in the CGDC Project. It provides an     |
|                     | association to details of the corresponding    |
|                     | publication through the Evidence object.       |
|                     |                                                |
|                     | It is a subclass of the                        |
|                     | GeneFunctionAssociation class.                 |
+---------------------+------------------------------------------------+
| Gene                | Start and stop of the Gene in terms of         |
| CytogeneticLocation | Cytobands. It provides details of the cytoband |
|                     | through the associated Cytoband object.        |
|                     |                                                |
|                     | It gets populated with data from Unigene.      |
+---------------------+------------------------------------------------+
| Gen                 | DiseaseOntologies associated with a Gene as    |
| eDiseaseAssociation | per results of text mining scientific          |
|                     | publications from PubMed in the CGDC Project.  |
|                     | It provides an association to details of the   |
|                     | corresponding publication through the Evidence |
|                     | object.                                        |
|                     |                                                |
|                     | It is a subclass of the                        |
|                     | GeneFunctionAssociation class.                 |
+---------------------+------------------------------------------------+
| Gene                | An abstract superclass of the                  |
| FunctionAssociation | GeneDiseaseAssociation and                     |
|                     | GeneAgentAssociation classes.                  |
+---------------------+------------------------------------------------+
| G                   | An object representing chromosomal starts and  |
| enePhysicalLocation | stops of genes. It gets populated with data    |
|                     | from NCBI's MapView application                |
+---------------------+------------------------------------------------+
| [GeneOntolo         | An object providing information on a *Gene*\'s |
| gy](http://ncicb.nc | position in the Gene Ontology Consortium\'s    |
| i.nih.gov/NCICB/con | controlled vocabularies. It provides access to |
| tent/ncicblfs/caCOR | *Gene*s corresponding to an ontological term   |
| E3-2_JavaDocs/gov/n | and to the relevant parent/child ontological   |
| ih/nci/cabio/domain | relationship, if any via the corresponding     |
| /GeneOntology.html) | GeneOntologyRelationship. It gets populated    |
|                     | with GO data from CGAP and is kept             |
|                     | synchronized with the parent GO Consortium     |
|                     | datasets.                                      |
+---------------------+------------------------------------------------+
| [GeneOntology\      | Specifies the parent/child relationship, if    |
| ](http://n          | any, for a given Gene Ontology and allows the  |
| cicb.nci.nih.gov/NC | user to retrieve such associated               |
| ICB/content/ncicblf | GeneOntologys. It gets populated with data     |
| s/caCORE3-2_JavaDoc | from CGAP, as with the GeneOntology object     |
| s/gov/nih/nci/cabio | above.                                         |
| /domain/GeneOntolog |                                                |
| yRelationship.html) |                                                |
| Relationship        |                                                |
+---------------------+------------------------------------------------+
| [GeneRel            | An object providing location of SNPs on Genes  |
| ativeLocation](http | such as whether the SNP is located in the 3'   |
| ://ncicb.nci.nih.go | UTR, 5' UTR, coding region of the *Gene*.      |
| v/NCICB/content/nci |                                                |
| cblfs/caCORE3-2_Jav | It gets populated with data from Affymetrix    |
| aDocs/gov/nih/nci/c | Human Mapping 250K Nsp and Sty, 50K Xba240 and |
| abio/domain/GeneRel | Hind240 and Illumina 550K genotyping arrays    |
| ativeLocation.html) | and provides a link to the associated Gene.    |
+---------------------+------------------------------------------------+
| [Histopathology     | Represents anatomical changes in a diseased    |
| ](http://ncicb.nci. | tissue sample associated with an expression    |
| nih.gov/NCICB/conte | experiment; captures the relationship between  |
| nt/ncicblfs/caCORE3 | an organ and disease. A user can also retrieve |
| -2_JavaDocs/gov/nih | any associated Pathways.                       |
| /nci/cabio/domain/H |                                                |
| istopathology.html) |                                                |
+---------------------+------------------------------------------------+
| [                   | Represents degrees of homology (as a           |
| H](http://ncicb.nci | percentage) amongst various genes in human and |
| .nih.gov/NCICB/cont | mouse, along with access to further details    |
| ent/ncicblfs/caCORE | about the *Genes* themselves.                  |
| 3-2_JavaDocs/gov/ni |                                                |
| h/nci/cabio/domain/ | It is populated with human and mouse data from |
| HomologousAssociati | CGAP.                                          |
| on.html)[omologous\ |                                                |
| ](http://nci        |                                                |
| cb.nci.nih.gov/NCIC |                                                |
| B/content/ncicblfs/ |                                                |
| caCORE3-2_JavaDocs) |                                                |
| Association         |                                                |
+---------------------+------------------------------------------------+
| [                   | An object representing a CGAP library;         |
| Library](http://nci | provides access to information about: the      |
| cb.nci.nih.gov/NCIC | tissue sample and its method of preparation,   |
| B/content/ncicblfs/ | the library protocol that was used, the clones |
| caCORE3-2_JavaDocs/ | contained in the library, and the sequence     |
| gov/nih/nci/cabio/d | information derived from the library.          |
| omain/Library.html) |                                                |
|                     | CGAP in turn amalgamates data from a variety   |
|                     | of different Clone Libraries such as dbEST,    |
|                     | ORESTES, Unigene, etc.                         |
+---------------------+------------------------------------------------+
| [Lo                 | Super class for \<Feature\>PhysicalLocation    |
| cation](http://ncic | and \<Feature\>CytogenicLocation objects.      |
| b.nci.nih.gov/NCICB | Provides start and stop locations interms of   |
| /content/ncicblfs/c | chromosomes and cytobands for                  |
| aCORE3-2_JavaDocs/g |                                                |
| ov/nih/nci/cabio/do | a.  Genes : GenePhysicalLocation and           |
| main/Location.html) |     GeneCytogeneticLocation                    |
|                     |                                                |
|                     | ```{=html}                                     |
|                     | <!-- -->                                       |
|                     | ```                                            |
|                     | q.  SNPs : SNPPhysicalLocation and             |
|                     |     SNPCytogeneticLocation                     |
|                     |                                                |
|                     | r.  Markers : MarkerPhysicalLocation           |
|                     |                                                |
|                     | s.  Exons : ExonPhysicalLocation               |
|                     |                                                |
|                     | t.  Transcripts : TranscriptPhysicalLocation   |
|                     |                                                |
|                     | u.  ArrayReporters :                           |
|                     |     ArrayReporterPhysicalLocation and          |
|                     |     ArrayReporterCytogeneticLocation           |
|                     |                                                |
|                     | v.  NucleicAcidSequnce (ESTs and MRNAs) :      |
|                     |     NucleicAcidPhysicalLocation                |
|                     |                                                |
|                     | w.  Cytobands : CytobandPhysicalLocation       |
+---------------------+------------------------------------------------+
| Marker              | An object representing different kinds of      |
|                     | Markers such as 5'/3' Primers, Microsatellites |
|                     | and SNPs.                                      |
|                     |                                                |
|                     | It gets populated with human and mouse primers |
|                     | from UniSTS, microsatellite markers from       |
|                     | Affymetrix HuMapping Arrays and SNPs from TSC. |
|                     |                                                |
|                     | The location of a SNP relative to a marker is  |
|                     | available through MarkerRelativeLocation and   |
|                     | is populated with data from Affymetrix         |
|                     | HuMapping arrays.                              |
|                     |                                                |
|                     | Chromosomal start and stop of a Marker is      |
|                     | available through MarkerPhysicalLocation       |
+---------------------+------------------------------------------------+
| MarkerAlias         | An object representing different aliases or    |
|                     | names for a Marker. It gets populated with     |
|                     | data from UniSTS                               |
+---------------------+------------------------------------------------+
| Mar                 | Class that provides the chromosomal start and  |
| kerPhysicalLocation | stop of the Marker. It gets populated with     |
|                     | data from NCBI's MapView.                      |
+---------------------+------------------------------------------------+
| Mar                 | An object providing location of SNP from       |
| kerRelativeLocation | Affymetrix HuMapping Arrays relative to a      |
|                     | Microsatellite Marker from these same arrays.  |
|                     |                                                |
|                     | The associated probeset information is         |
|                     | available through ArrayReporter                |
+---------------------+------------------------------------------------+
| MicroArray          | An object representing various microrrays in   |
|                     | caBIO such as the Affymetrix Human Mapping,    |
|                     | HG-U133, HG-U133 Plus2, HT-HG-U133, HT-HG-U133 |
|                     | A 2.0 and Illumina HumanHap 550K               |
|                     | 'SNP'/genotyping arrays, Affymetrix 'Exon'     |
|                     | Arrays and 'oligo' arrays such as the Agilent  |
|                     | Human Genome 44k and aCGH 244k arrays.         |
+---------------------+------------------------------------------------+
| NucleicA            | An abstract class that provides chromosomal    |
| cidPhysicalLocation | start and stop of an mRNA or an EST, as        |
|                     | provided by UCSC's Genome Sequencing Center.   |
+---------------------+------------------------------------------------+
| [NucleicAcidS       | An object representation of a gene sequence;   |
| equence](http://nci | provides access to the clones from which it    |
| cb.nci.nih.gov/NCIC | was derived, the ASCII representation of the   |
| B/content/ncicblfs/ | residues it contains, and any                  |
| caCORE3-2_JavaDocs/ | ExpressionArrayReporters for which it is a     |
| gov/nih/nci/cabio/d | representative sequence.                       |
| omain/Pathway.html) |                                                |
|                     | It is populated with data pertaining to human  |
|                     | and mouse from Unigene.                        |
|                     |                                                |
|                     | Its chromosomal start and stop is available    |
|                     | through NucleicAcidPhysicalLocation            |
+---------------------+------------------------------------------------+
| [OrganOntolog       | A representation of an organ whose name occurs |
| y](http://ncicb.nci | in a controlled vocabulary; provides access to |
| .nih.gov/NCICB/cont | any associated histopathological information,  |
| ent/ncicblfs/caCORE | and anomalies. Because it is \"ontolog-able",  |
| 3-2_JavaDocs/gov/ni | It provides access to any associated           |
| h/nci/cabio/domain/ | ontologies that it shares a parent/child       |
| OrganOntology.html) | relationship with, through the linked          |
|                     | OrganOntologyRelationship.                     |
|                     |                                                |
|                     | Data in this table is static.                  |
+---------------------+------------------------------------------------+
| [OrganOntologyRela  | An object that describes parent/child          |
| tion](http://ncicb. | relationships, if any, amongst OrganOntologys. |
| nci.nih.gov/NCICB/c |                                                |
| ontent/ncicblfs/caC | Data in this table is static.                  |
| ORE3-2_JavaDocs/gov |                                                |
| /nih/nci/cabio/doma |                                                |
| in/OrganOntologyRel |                                                |
| ationship.html)ship |                                                |
+---------------------+------------------------------------------------+
| [                   | An object representation of a                  |
| Pathway](http://nci | molecular/cellular pathway in human and mouse  |
| cb.nci.nih.gov/NCIC | compiled by BioCarta. It provides access to    |
| B/content/ncicblfs/ | further details about the associated *Gene*s   |
| caCORE3-2_JavaDocs/ | and any available histopathological            |
| gov/nih/nci/cabio/d | information for genes involved in clinical     |
| omain/Pathway.html) | trials through getGeneCollection and           |
|                     | getHistopathologyCollection methods.           |
|                     |                                                |
|                     | It gets populated with data from CGAP and is   |
|                     | composed of BioCarta Pathways. It provides     |
|                     | links to genes associated with every pathway   |
|                     | as well as histopathological information       |
|                     | pertaining to these Genes through the          |
|                     | associated Histopathology object.              |
+---------------------+------------------------------------------------+
| [PhysicalLocation]( | Provides chromosomal start and stop positions  |
| http://ncicb.nci.ni | for *SNP*s, ESTs, MRNAs, Markers and           |
| h.gov/NCICB/content | Cytobands. Further details for the SNP can be  |
| /ncicblfs/caCORE3-2 | obtained from the SNP object. The sequence     |
| _JavaDocs/gov/nih/n | associated with the ESTs and MRNAs can be      |
| ci/cabio/domain/Phy | obtained from the linked NucleicAcidSequence   |
| sicalLocation.html) | object.                                        |
|                     |                                                |
|                     | The SNP Data is obtained from NCBI's dbSNP,    |
|                     | while the latter are obtained from UCSC's      |
|                     | Genome Sequencing Center for every Human and   |
|                     | Mouse Genome build.                            |
+---------------------+------------------------------------------------+
| [Popul              | Represents the major and minor alleles of a    |
| ationFrequency](htt | SNP and their respective frequencies in        |
| p://ncicb.nci.nih.g | different populations.                         |
| ov/NCICB/content/nc |                                                |
| icblfs/caCORE3-2_Ja |                                                |
| vaDocs/gov/nih/nci/ |                                                |
| cabio/domain/Popula |                                                |
| tionFrequency.html) |                                                |
+---------------------+------------------------------------------------+
| [                   | An object representation of a protein;         |
| Protein](http://nci | provides access to the encoding Gene via its   |
| cb.nci.nih.gov/NCIC | [GenBank](http://www.ncbi.nih.gov/Genbank/)    |
| B/content/ncicblfs/ | ID, the Taxon in which this instance of the    |
| caCORE3-2_JavaDocs/ | protein occurs, and references to homologous   |
| gov/nih/nci/cabio/d | proteins in other species. It is populated     |
| omain/Protein.html) | with data from Uniprot-Swissprot.              |
+---------------------+------------------------------------------------+
| [ProteinAli         | An alternate name for a protein. This data is  |
| as](http://ncicb.nc | obtained from Uniprot-Swissprot.               |
| i.nih.gov/NCICB/con |                                                |
| tent/ncicblfs/caCOR |                                                |
| E3-2_JavaDocs/gov/n |                                                |
| ih/nci/cabio/domain |                                                |
| /ProteinAlias.html) |                                                |
+---------------------+------------------------------------------------+
| ProteinDomain       | An object representing protein domains from    |
|                     | Interpro. This object is populated with        |
|                     | Interpro protein domains associated with       |
|                     | probesets from Affymetrix HG-U133, HG-U133     |
|                     | Plus2, HT-HG-U133 and HT-HG-U133A 2.0 Array    |
|                     | annotations.                                   |
+---------------------+------------------------------------------------+
| [ProteinSequence]   | The sequence of a protein from Swissprot.      |
| (http://ncicb.nci.n |                                                |
| ih.gov/NCICB/conten |                                                |
| t/ncicblfs/caCORE3- |                                                |
| 2_JavaDocs/gov/nih/ |                                                |
| nci/cabio/domain/Pr |                                                |
| oteinSequence.html) |                                                |
+---------------------+------------------------------------------------+
| [Pr                 | An object representation of the protocol used  |
| otocol](http://ncic | in assembling a clone library. It is populated |
| b.nci.nih.gov/NCICB | with data from NCI's CTEP (Cancer Therapy      |
| /content/ncicblfs/c | Evaluation Program)                            |
| aCORE3-2_JavaDocs/g |                                                |
| ov/nih/nci/cabio/do |                                                |
| main/Protocol.html) |                                                |
+---------------------+------------------------------------------------+
| [Proto              | An association class relating                  |
| colAssociation](htt | ClinicalTrialProtocols to Diseases.            |
| p://ncicb.nci.nih.g |                                                |
| ov/NCICB/content/nc |                                                |
| icblfs/caCORE3-2_Ja |                                                |
| vaDocs/gov/nih/nci/ |                                                |
| cabio/domain/Protoc |                                                |
| olAssociation.html) |                                                |
+---------------------+------------------------------------------------+
| RelativeLocation    | An abstract super class for                    |
|                     | MarkerRelativeLocation and                     |
|                     | GeneRelativeLocation that provides the         |
|                     | relative locations of SNPs with regards to     |
|                     | Genes and Markers. These classes get populated |
|                     | with data from Affymetrix HuMapping arrays and |
|                     | Illumina HapMap SNP Arrays.                    |
+---------------------+------------------------------------------------+
| SNP                 | An object representing a Single Nucleotide     |
|                     | Polymorphism; It provides the two most common  |
|                     | substitutions at that position and the offset  |
|                     | of the SNP in the parent sequence.             |
|                     |                                                |
|                     | A reference to related SNPs from The SNP       |
|                     | Consortium (TSC) is available through          |
|                     | DatabaseCrossReference.                        |
|                     |                                                |
|                     | It provides a link to the associated           |
|                     | Population Frequencies. The location of a SNP  |
|                     | is available through the PhysicalLocation and  |
|                     | Location Objects as well as through the        |
|                     | SNPPhysicalLocation object. Location of SNPs   |
|                     | in terms of cytogenetic starts and stops is    |
|                     | available through the SNPCytogeneticLocation   |
|                     | object.                                        |
+---------------------+------------------------------------------------+
| SNPArrayReporter    | An object representing probeset information    |
|                     | for genotyping arrays such as Affymetrix Human |
|                     | Mapping Arrays and Illumina HumanHap 550k      |
|                     | Arrays; It provides details on the             |
|                     | corresponding SNP through the linked *SNP*     |
|                     | object.                                        |
+---------------------+------------------------------------------------+
| SNP                 | Provides start and stops for SNPs in the SNP   |
| CytogeneticLocation | object in terms of cytobands. It gets          |
|                     | populated with data from Affymetrix HuMapping  |
|                     | array annotations.                             |
+---------------------+------------------------------------------------+
| SNPPhysicalLocation | Provides chromosomal start and stop for SNPs   |
|                     | in the SNP object. Gets populated with data    |
|                     | from NCBI's dbSNP                              |
+---------------------+------------------------------------------------+
| [Target](http://nc  | A gene thought to be at the root of a disease  |
| icb.nci.nih.gov/NCI | etiology, and which is targeted for            |
| CB/content/ncicblfs | therapeutic intervention in a clinical trial.  |
| /caCORE3-2_JavaDocs |                                                |
| /gov/nih/nci/cabio/ | Data in this object is static. Each target     |
| domain/Target.html) | links to the associated Gene object through    |
|                     | which further details of the Target are        |
|                     | available.                                     |
+---------------------+------------------------------------------------+
| [Taxon](http://n    | An object representing the various names       |
| cicb.nci.nih.gov/NC | (scientific, common, abbreviated, etc.) for    |
| ICB/content/ncicblf | human and mouse genomes. It can be used to     |
| s/caCORE3-2_JavaDoc | retrieve the associated Genes, Chromosomes,    |
| s/gov/nih/nci/cabio | Pathways if any, Proteins, or Tissues.         |
| /domain/Taxon.html) |                                                |
|                     | Data in this object is static                  |
+---------------------+------------------------------------------------+
| [Tissue](http://nc  | A group of similar cells united to perform a   |
| icb.nci.nih.gov/NCI | specific function.                             |
| CB/content/ncicblfs |                                                |
| /caCORE3-2_JavaDocs | Data in this object is static                  |
| /gov/nih/nci/cabio/ |                                                |
| domain/Tissue.html) |                                                |
+---------------------+------------------------------------------------+
| Transcript          | An object representation of a collection of    |
|                     | Exons, that constitutes a probe in an          |
|                     | Affymetrix Exon Array. It can be used to       |
|                     | retrieve the associated Exons,                 |
|                     | ExonArrayReporters and Genes. It gets          |
|                     | populated with data from Affymetrix HuExon     |
|                     | Arrays                                         |
+---------------------+------------------------------------------------+
| Tran                | An abstract superclass for                     |
| scriptArrayReporter | ExpressionArrayReporter and ExonReporter.      |
+---------------------+------------------------------------------------+
| Transcr             | Chromosomal Start and Stop of a Transcript     |
| iptPhysicalLocation | obtained from Affymetrix HuExon Arrays         |
+---------------------+------------------------------------------------+
| [Vocabu             | A collection of terms associated with a given  |
| lary](http://ncicb. | Anomaly.                                       |
| nci.nih.gov/NCICB/c |                                                |
| ontent/ncicblfs/caC | Data in this object is static                  |
| ORE3-2_JavaDocs/gov |                                                |
| /nih/nci/cabio/doma |                                                |
| in/Vocabulary.html) |                                                |
+---------------------+------------------------------------------------+

Table 6‑7 caBIO domain objects and descriptions

  -----------------------------------------------------------------------------
  *Provenance Objects*        *Description*
  --------------------------- -------------------------------------------------
  Provenance                  An object modeling the provenance of various
                              entities such as SNP, Gene, NucleicAcidSequence
                              and Protein data in caBIO. It exposes information
                              such as the source of the data (dbSNP, Unigene,
                              LocusLink, Uniprot, etc) along with the class
                              name modeling that object in caBIO, evidence
                              code, etc.

  InternetSource              An object modeling details of the primary data
                              source providers for *SNP*, *Gene*, etc in caBIO

  PublicationSource           An object modeling details of publications
                              associated with caBIO data such as the author,
                              date of publication, etc.

  ResearchInstitutionSource   An object modeling details of the research
                              institution such as name, address, contact
                              information, etc from where caBIO data is
                              obtained.

  Source                      An object modeling the primary data source for
                              objects like SNP, Gene, Protein, etc in caBIO

  SourceReference             An object providing web-enabled access to further
                              details regarding Genes, Proteins, SNPs, and
                              other caBIO objects from their primary data
                              sources.

  URLSourceReference          An object providing web-enabled access to obtain
                              further details regarding Genes, Proteins, SNPs,
                              and other caBIO objects from their primary data
                              sources.
  -----------------------------------------------------------------------------

Table 6‑8 Provenance objects and descriptions

## Data Sources in the caBIO Database {#data-sources-in-the-cabio-database .unnumbered}

This section describes the internal and external data sources for caBIO
and how the information these sources provide can be accessed via caBIO
objects.

The caBIO application programming interfaces were developed primarily in
response to the need for programmatic access to the information at
several NCI web sites, including:

-   Cancer Genome Anatomy Project (CGAP)

-   Cancer Therapy Evaluation Program (CTEP)

-   CGAP Genetic Annotation Initiative (GAI)

-   Cancer Molecular Analysis Project (CMAP)

-   Affymetrix, Agilent and Illumina MicroArrays

-   Genome Sequencing Center at University of California, Santa Cruz
    (UCSC)

-   SNP Annotations from NCBI

-   Protein Data from Uniprot-Swissprot

-   SNP Annotations from SNP Consortium

-   NCI's Cancer Gene Index Data Project

-   NCBI's MapViewer data

-   UniSTS

-   HUGO

-   and others

While this information is, in theory, available from multiple public
sites, the number of links to traverse and the extent of collation that
would have to be performed is daunting. The CGAP, CMAP, and GAI web
sites have distilled this information from both internal and public
databases, and the caBIO data warehouses have optimized it for access
with respect to the types of queries defined in the APIs.

While the caBIO data are extracted from many sources that include
information from a wide variety of species, we emphasize that only
genomic data pertaining to human and mouse are available from caBIO.

caBIO provides access to curated data from both internal (NCI) and
external sites. Table 6.3 contains data source internal to NCI and Table
6.4 contains data sources from sites outside of NCI.

+--------------+-------------------------------------------------------+
| *NCI Data    | *Description*                                         |
| Source*      |                                                       |
+==============+=======================================================+
| [CGAP](h     | CGAP (Cancer Genome Anatomy Project) provides a       |
| ttp://cgap.n | collection of gene expression profiles of normal,     |
| ci.nih.gov/) | pre-cancer, and cancer cells taken from various       |
|              | tissues. The CGAP interface allows users to browse    |
|              | these profiles by various search criteria, including  |
|              | histology type, tissue type, library protocol, and    |
|              | sample preparation methods. The goal at NCI is to     |
|              | exploit such expression profile information for the   |
|              | advancement of improved detection, diagnosis, and     |
|              | treatment for the cancer patient. Researchers have    |
|              | access to all CGAP data and biological resources for  |
|              | human and mouse, including ESTs, gene expression      |
|              | patterns, SNPs, cluster assemblies, and cytogenetic   |
|              | information.                                          |
|              |                                                       |
|              | The CGAP web site provides a powerful set of          |
|              | interactive data-mining tools to explore these data,  |
|              | and the caBIO project was initially conceived as a    |
|              | programmatic interface to these tools and data.       |
|              | Accordingly, most of the data that are available from |
|              | CGAP can also be accessed through the caBIO objects.  |
|              | Exceptions are those data sets having proprietary     |
|              | restrictions, such as the Mitleman Chromosome         |
|              | Aberration database.                                  |
|              |                                                       |
|              | CGAP also provides access to lists of                 |
|              | sequence-verified human and mouse cDNA IMAGE clones   |
|              | supplied by                                           |
|              | [Invitrogen](http:                                    |
|              | //www.invitrogen.com/content.cfm?pageid=3&nv=1&ix=1). |
+--------------+-------------------------------------------------------+
| [CMAP](h     | CMAP (Cancer Molecular Analysis Project) is powered   |
| ttp://cmap.n | by caCORE. The goal of CMAP is to enable researchers  |
| ci.nih.gov/) | to identify and evaluate molecular targets in cancer. |
|              |                                                       |
|              | The CMAP Profile Query tool finds genes with the      |
|              | highest or lowest expression levels (using SAGE and   |
|              | microarray data) for a given tissue and histology.    |
|              | Selecting a gene from the resulting table then leads  |
|              | to a Gene Info page. This page provides information   |
|              | about cytogenetic location, chromosome aberrations,   |
|              | protein similarities, curated and computed orthologs, |
|              | and sequence-verified as well as full-length MGC      |
|              | clones, along with links to various other databases.  |
+--------------+-------------------------------------------------------+
| [CTEP](      | CTEP (Cancer Therapy Evaluation Program) funds an     |
| http://ctep. | extensive national program of basic and clinical      |
| cancer.gov/) | research to evaluate new anti-cancer agents, with a   |
|              | particular emphasis on translational research to      |
|              | elucidate molecular targets and drug mechanisms. In   |
|              | response to this emergent need for translational      |
|              | research, there has been a groundswell of             |
|              | translational support tools defining controlled       |
|              | vocabularies and registered terminologies to enhance  |
|              | electronic data exchange in areas that have           |
|              | heretofore been relatively non-computational. The     |
|              | caCORE trials data are updated with new CTEP data on  |
|              | a quarterly basis, and many of the objects are        |
|              | designed to support translational research.           |
|              |                                                       |
|              | For example, a caCORE *Target* object represents a    |
|              | molecule of special diagnostic or therapeutic         |
|              | interest for cancer research, and an Anomaly object   |
|              | is an observed deviation in the structure or          |
|              | expression of a *Target*. An *Agent* is a drug or     |
|              | other intervention that is effective in the presence  |
|              | of one or more specific Targets. The                  |
|              | *ClinicalTrialProtocol* object organizes              |
|              | administrative information pertaining to that         |
|              | protocol.                                             |
|              |                                                       |
|              | Data from CTEP are used to populate the *Protocols,   |
|              | ProtocolAgents* and *ProtocolDiseases* objects.       |
+--------------+-------------------------------------------------------+
| [GAI](       | GAI (CGAP Genetic Annotation Initiative) is an NCI    |
| http://gai.n | research program to explore and apply technology for  |
| ci.nih.gov/) | identification and characterization of genetic        |
|              | variation in genes important in cancer. The GAI       |
|              | utilizes data-mining to identify \"candidate\"        |
|              | variation sites from publicly available DNA           |
|              | sequences, as well as laboratory methods to search    |
|              | for variations in cancer-related genes. All GAI       |
|              | candidate, validated, and confirmed genetic variants  |
|              | are available directly from the GAI web site, and all |
|              | validated SNPs have been submitted to the NCBI dbSNP  |
|              | database as well that are in turn available through   |
|              | the *SNP* .                                           |
+--------------+-------------------------------------------------------+
| [            | HomoloGene is an NCBI resource for curated and        |
| HomoloGene]( | calculated gene homologs. The caBIO data sources      |
| http://www.n | capture only the calculated homologs stored by        |
| cbi.nlm.nih. | HomoloGene. These calculated homologs are the result  |
| gov/entrez/q | of nucleotide sequence comparisons performed between  |
| uery.fcgi?db | each pair of organisms represented in UniGene         |
| =homologene) | clusters.                                             |
|              |                                                       |
|              | caBIO provides this information via                   |
|              | *HomologousAssociation* and updates this data on a    |
|              | monthly basis.                                        |
+--------------+-------------------------------------------------------+
| [LocusLink   | LocusLink contains curated sequence and descriptive   |
| ](http://www | information associated with a gene. Each entry        |
| .ncbi.nlm.ni | includes information about the gene\'s nomenclature,  |
| h.gov/LocusL | aliases, sequence accession numbers, phenotypes,      |
| ink/)/Entrez | UniGene cluster IDs, OMIM IDs, gene homologies,       |
| Gene         | associated diseases, map locations, and a list of     |
|              | related terms in the [Gene Ontology                   |
|              | Consortium\'s](http://www.geneontology.org/)          |
|              | ontology. Sequence accessions include a subset of     |
|              | GenBank accessions for a locus, as well as the NCBI   |
|              | Reference Sequence.                                   |
|              |                                                       |
|              | The LocusLink Identifier corresponding to a caBIO     |
|              | Gene is available in *DatabaseCrossReference*.        |
+--------------+-------------------------------------------------------+
| MapView      | Entrez Genomes presents a unified graphical view of   |
|              | maps (genetic and physical) and sequence data for a   |
|              | selected organism.                                    |
|              |                                                       |
|              | The Entrez Map Viewer, is a software component of     |
|              | Entrez Genomes which provides an organism\'s complete |
|              | genome, integrated maps (when available) for each     |
|              | chromosome, and sequence data for a region of         |
|              | interest.                                             |
|              |                                                       |
|              | Data from MapView is used to populate                 |
|              | GenePhysicalLocation and MarkerPhysicalLocation       |
|              | objects.                                              |
+--------------+-------------------------------------------------------+
| db[          | In collaboration with the National Human Genome       |
| SNP](http:// | Research Institute, the NCBI has established the      |
| www.ncbi.nlm | dbSNP database to serve as a central repository for   |
| .nih.gov/SNP | both single base nucleotide substitutions and short   |
| /index.html) | deletion and insertion polymorphisms. Once            |
|              | discovered, these polymorphisms could be used by      |
|              | additional laboratories, using the sequence           |
|              | information around the polymorphism and the specific  |
|              | experimental conditions. (Note that dbSNP takes the   |
|              | looser \'variation\' definition for SNPs, so there is |
|              | no requirement or assumption about minimum allele     |
|              | frequency.) The data from dbSNP is updated            |
|              | approximately every 3-4 months.                       |
|              |                                                       |
|              | Relevant information is available through SNP,        |
|              | Provenance, Source, URLSourceReference,               |
|              | SourceReference, PhysicalLocation , Location,         |
|              | SNPPhysicalLocation, SNPCytogeneticLocation,          |
|              | GeneRelativeLocation and MarkerRelativeLocation       |
|              | objects.                                              |
+--------------+-------------------------------------------------------+
| UniSTS       | Database at the National Center for Biotechnology     |
|              | Information providing \"a unified, non-redundant view |
|              | of sequence tagged sites                              |
|              | ([STS\'s                                              |
|              | ](http://genome.chop.edu/access/pages/def/sts.html)). |
|              | UniSTS integrates marker and mapping data from a      |
|              | variety of public resources.\" Used in eGenome as a   |
|              | source of                                             |
|              | [STS\'                                                |
|              | s](http://genome.chop.edu/access/pages/def/sts.html), |
|              | and to collect and manage                             |
|              | [element](                                            |
|              | http://genome.chop.edu/access/pages/def/element.html) |
|              | names Data from UniSTS is used to populate Marker and |
|              | MarkerAlias objects.                                  |
+--------------+-------------------------------------------------------+
| [UniGen      | Unigene provides a nonredundant partitioning of the   |
| e](http://ww | genetic sequences contained in GenBank into gene      |
| w.ncbi.nlm.n | clusters. Each cluster has a unique UniGene ID and a  |
| ih.gov/entre | list of the mRNA and EST sequences that are included  |
| z/query.fcgi | in that cluster. Related information stored with the  |
| ?db=unigene) | cluster includes tissue types in which the gene has   |
|              | been expressed, mapping information, and the          |
|              | associated LocusLink, OMIM, and HomoloGene IDs, thus  |
|              | providing access to related information in those NCBI |
|              | databases as well through DatabaseCrossReference.     |
|              |                                                       |
|              | Because the information in UniGene is centered around |
|              | genes, access to Unigene is provided via the caBIO    |
|              | *Gene* objects. Specifically, the method getClusterId |
|              | associated with a *Gene* object can be used to fetch  |
|              | the gene\'s UniGene ID. The corresponding IDs to      |
|              | cross-reference these genes into the NCBI OMIM and    |
|              | LocusLink databanks, Enzyme Commission, Ensembl and   |
|              | RefSeq databases can be obtained from                 |
|              | DatabaseCrossReference using the                      |
|              | getDatabaseCrossReferenceCollection method. While     |
|              | there is no explicit caBIO object corresponding to a  |
|              | Unigene cluster, all of the information associated    |
|              | with the cluster is available directly via the caBIO  |
|              | Gene object\'s methods.                               |
|              |                                                       |
|              | The sequences are available via NucleicAcidSequence   |
|              | and the associated aliases are available in the       |
|              | GeneAlias. Corresponding clone library and its        |
|              | location information is exposed via *Clone* and       |
|              | CloneRelativeLocation.                                |
|              |                                                       |
|              | Appropriate 'provenance' information is available in  |
|              | *Provenance, Source,* URLSourceReference and          |
|              | SourceReference objects.                              |
|              |                                                       |
|              | Markers associated with a Gene are available through  |
|              | the Marker Object whereas its chromosomal and         |
|              | cytogenetic start-stops are available through         |
|              | GenePhysicalLocation and GeneCytogeneticLocation      |
|              | objects.                                              |
|              |                                                       |
|              | Associated Histopathological and Pathway information  |
|              | are available through Histopathology and Pathway      |
|              | respectively.                                         |
|              |                                                       |
|              | Unigene data is updated on a monthly basis.           |
+--------------+-------------------------------------------------------+
| Cancer Gene  | The Cancer Gene Data Curation Pilot is an attempt to  |
| Indec        | create a database of associations between genes and   |
| Project      | diseases and genes and drug compounds derived from    |
|              | the biomedical literature. The project involves a     |
|              | mixture of automatic text mining, semi-automatic      |
|              | verification, and manual validation/scoring of        |
|              | results.                                              |
|              |                                                       |
|              | Data from this project is exposed through caBIO's     |
|              | Evidence, *EvidenceCode*, GeneDiseaseAssociation and  |
|              | GeneAgentAssociation objects                          |
+--------------+-------------------------------------------------------+

Table 6‑9 NCI-related data sources in the caBIO database

External data sources in the caBIO database:

+----------+-----------------------------------------------------------+
| *        | *Description*                                             |
| External |                                                           |
| Data     |                                                           |
| source*  |                                                           |
+==========+===========================================================+
| Af       | Affymetrix provides the majority of Microarray data for   |
| fymetrix | caBIO.                                                    |
|          |                                                           |
|          | The data provides information on allele frequencies of    |
|          | the SNP in different populations, and is represented by   |
|          | the PopulationFrequency object.                           |
|          |                                                           |
|          | The probeset information is available through             |
|          | ArrayReporter, ExpressionArrayReporter and                |
|          | SNPArrayReporter objects, amongst others.                 |
|          |                                                           |
|          | Details regarding the arrays exposed in caBIO are         |
|          | available through Microarray                              |
|          |                                                           |
|          | The GeneRelativeLocation object provides the location     |
|          | (intron, upstream, downstream etc.) of a SNP referenced   |
|          | in SNP Array datasets with respect to its associated      |
|          | genes. The validation status for a SNP comes from NCBI.   |
|          | The SNP Consortium (TSC) Ltd. a non-profit foundation     |
|          | provides the TSC id\'s for SNPs in                        |
|          | DatabaseCrossReference.                                   |
+----------+-----------------------------------------------------------+
| Agilent  | Data from Agilent's Whole Human Genome 44K Arrays and     |
|          | aCGH 244K Arrays are exposed through ArrayReporter,       |
|          | MicroArray and ExpressionArrayReporter. Associated        |
|          | Interpro Protein Domains and Unigene Genes are available  |
|          | through ProteinDomain and Gene objects.                   |
+----------+-----------------------------------------------------------+
| [Bio     | BioCarta and its Proteomic Pathway Project (P3) provide   |
| Carta](h | detailed graphical renderings of pathway information      |
| ttp://ww | concerning adhesion, apoptosis, cell activation, cell     |
| w.biocar | signaling, cell cycle regulation, cytokines/chemokines,   |
| ta.com/) | developmental biology, hematopoeisis, immunology,         |
|          | metabolism, and neuroscience. NCI\'s CMAP web site        |
|          | captures pathway information from BioCarta, and           |
|          | transforms the downloaded image data into Scalable Vector |
|          | Graphics ([SVG](http://www.w3.org/TR/SVG/))               |
|          | representations that support interactive manipulation of  |
|          | the online images. The CMAP web site displays BioCarta    |
|          | pathways selected by the user and provides options for    |
|          | highlighting *anomalies*, which include under- or over    |
|          | expressed genes as well as mutations.                     |
|          |                                                           |
|          | The pathway information is available via the *Pathway*    |
|          | object in caBIO.                                          |
|          |                                                           |
|          | caBIO provides a class for manipulating SVG diagrams,     |
|          | which is described in SVG Manipulator on page             |
|          | [63](#svg-manipulator).                                   |
+----------+-----------------------------------------------------------+
| Illumina | One of the SNP-Arrays in caBIO. Data from Illumina is     |
|          | used to populate *MicroArray* and                         |
|          | *ExpressionArrayReporter*, amongst others.                |
+----------+-----------------------------------------------------------+
| [U       | Universal Protein Resource (UniProt) is a complete        |
| ](http:/ | annotated protein sequence database and is a central      |
| /www.ebi | repository of protein sequence and function created by    |
| .ac.uk/) | joining the information contained in Swiss-Prot, TrEMBL,  |
| [niProt] | and PIR. The UniProt Knowledge base provides access to    |
| (http:// | extensive curated protein information, including the      |
| www.ebi. | amino acid sequence, protein name or description,         |
| uniprot. | taxonomic data and protein aliases.                       |
| org/inde |                                                           |
| x.shtml) | caBIO exposes information from the Swissprot databanks    |
|          | through *ProteinSequence* and *ProteinAlias* objects.     |
| [        |                                                           |
| PIR](htt | Mappings to RefSeq Ids are available through              |
| p://pir. | *DatabaseCrossReference.*                                 |
| georgeto |                                                           |
| wn.edu/) | Provenance-related information is available through       |
|          | *Provenance, Source, SourceReference* and                 |
|          | *URLSourceReference* objects.                             |
|          |                                                           |
|          | Protein Domain information from Interpro is exposed       |
|          | through *ProteinDomain* object                            |
+----------+-----------------------------------------------------------+
| [Gene    | The Gene Ontology Consortium provides a controlled        |
| Ontolog  | vocabulary for the description of molecular functions,    |
| y](http: | biological processes, and cellular components of gene     |
| //www.ge | products. The terms provided by the consortium define the |
| neontolo | recognized attributes of gene products and facilitate     |
| gy.org/) | uniform queries across collaborating databases.           |
| Co       |                                                           |
| nsortium | In general, each gene is associated with one or more      |
|          | biological processes, and each of these processes may in  |
|          | turn be associated with many genes. In addition, the GO   |
|          | ontologies define many parent/child relationships among   |
|          | terms. For example, a branch of the ontology tree under   |
|          | biological process contains the term "cell cycle          |
|          | control", which in turn bifurcates into the \"child\"     |
|          | terms cell cycle arrest, cell cycle checkpoint, control   |
|          | of mitosis, etc.                                          |
|          |                                                           |
|          | caBIO does not extract ontology terms directly from the   |
|          | Gene Ontology Consortium but, instead, extracts those     |
|          | terms stored with the LocusLink entry for that gene.      |
|          |                                                           |
|          | This information is available via *GoClosure, GoGenes*,   |
|          | *GeneOntology* and *GeneOntologyRelationship* objects.    |
+----------+-----------------------------------------------------------+
| [SNP     | The SNP Consortium Ltd. is a non-profit foundation        |
| C        | organized for providing public genomic data. Its mission  |
| onsortiu | is to develop up to 300,000 SNPs distributed evenly       |
| m](http: | throughout the human genome and to make the information   |
| //snp.cs | related to these SNPs available to the public without     |
| hl.org/) | intellectual property restrictions.                       |
|          |                                                           |
|          | The TSC Ids corresponding to a SNP from dbSNP are         |
|          | available through DatabaseCrossReference*.*               |
+----------+-----------------------------------------------------------+
| [UC      | UCSC (University of California, Santa Cruz Distributed    |
| SC](mess | Annotation System) provides the data for the Chromosomal  |
| ageurlht | start and end positions of mRNA, EST and Cytoband         |
| tp://gen | sequences.                                                |
| ome.ucsc |                                                           |
| .edu/ind | This data is used to populate the PhysicalLocation,       |
| ex.html) | Location*,* Cytoband*,* CytogeneticLocation and Location  |
|          | objects with the locations of ESTs, MRNAs and Cytobands   |
|          | respectively.                                             |
|          |                                                           |
|          | The ESTs and MRNAs in PhysicalLocation and Location are   |
|          | linked with the corresponding sequence identifiers from   |
|          | NucleicAcidSequence                                       |
+----------+-----------------------------------------------------------+

Table 6‑10 External data sources in the caBIO database

## caGrid Identifiers  {#cagrid-identifiers .unnumbered}

The functionality provided by caGrid's Identifier Services Framework and
the integration in caBIO is to have "identifiers" for each caBIO domain
object. The identifier is essentially a forever globally unique name for
the caBIO data-object such that it can be unambiguously used to refer to
the data from different application contexts.

This identifier, obtained from the caGrid Identifier Service Framework,
is essentially a string and a forever globally unique name for the caBIO
domain object. Furthermore, the identifier can be (globally) resolved to
the associated caBIO domain object.

In order to abstract the identifier's object properties, the data
service implementations and the resolution mechanisms, the identifier's
value must be treated as a "meaningless" opaque string by the consumer
applications. Any leaking of design and implementation choices for the
identifier framework in the applications is undesirable from an
architecture point of view as it makes the implementations brittle and
susceptible to future changes. Of course resolution information will
have to be embedded in identifier name, but this should only be
meaningful for resolution service related components that are layered
below the application.

## Classes to be indexed for FreeStyleLM Search {#classes-to-be-indexed-for-freestylelm-search .unnumbered}

The FreestyleLM (Freestyle Lexical Mine) search component, provides and
interfaces and APIs for conducting horizontal searches across caBIO
domain objects and is described in greater detail in Chapter 5.

FreeStyleLM is build upon Hibernate and Apache Lucene full text search
engines, providing full text search (Google™-like search) capabilities
to the caBIO API. The classes and fields that are indexed are annotated
in the caBIO domain model. Usually, these attributes are non-numeric
fields with descriptions or identifiers. Thus, searching for "brca1"
will return any object that makes mention of the "brca1" gene in its
attributes, such as Genes, Proteins, Pathways, and so on.

The following classes are indexed as part of FreeStyleLM Indexing
application:

+--------------------------+-------------------------------------------+
| *Class*                  | *Attribute*                               |
+==========================+===========================================+
| Agent                    | Id                                        |
|                          |                                           |
|                          | Comment                                   |
|                          |                                           |
|                          | EVSId                                     |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | NSCNumber                                 |
|                          |                                           |
|                          | Source                                    |
+--------------------------+-------------------------------------------+
| Anomaly                  | Id                                        |
|                          |                                           |
|                          | Description                               |
+--------------------------+-------------------------------------------+
| Chromosome               | Id                                        |
|                          |                                           |
|                          | Number                                    |
+--------------------------+-------------------------------------------+
| ClinicalTrialProtocol    | Id                                        |
|                          |                                           |
|                          | CurrentStatus                             |
|                          |                                           |
|                          | DocumentNumber                            |
|                          |                                           |
|                          | LeadOrganizationId                        |
|                          |                                           |
|                          | LeadOrganizationName                      |
|                          |                                           |
|                          | NIHAdminCode                              |
|                          |                                           |
|                          | ParticipationType                         |
|                          |                                           |
|                          | PDQIdentifier                             |
|                          |                                           |
|                          | Phase                                     |
|                          |                                           |
|                          | Title                                     |
+--------------------------+-------------------------------------------+
| Cytoband                 | Id                                        |
|                          |                                           |
|                          | Name                                      |
+--------------------------+-------------------------------------------+
| DiseaseOntology          | Id                                        |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | EVSId                                     |
+--------------------------+-------------------------------------------+
| EvidenceCode             | Id                                        |
|                          |                                           |
|                          | EvidenceCode                              |
+--------------------------+-------------------------------------------+
| ExpressionArrayReporter  | Id                                        |
|                          |                                           |
|                          | SequenceSource                            |
|                          |                                           |
|                          | SequenceType                              |
|                          |                                           |
|                          | TargetDescription                         |
+--------------------------+-------------------------------------------+
| Gene                     | Id                                        |
|                          |                                           |
|                          | ClusterId                                 |
|                          |                                           |
|                          | FullName                                  |
|                          |                                           |
|                          | Symbol                                    |
+--------------------------+-------------------------------------------+
| GeneAlias                | Id                                        |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | Type                                      |
+--------------------------+-------------------------------------------+
| GeneOntology             | Id                                        |
|                          |                                           |
|                          | Name                                      |
+--------------------------+-------------------------------------------+
| GeneFunctionAssociation  | Id                                        |
|                          |                                           |
|                          | Role                                      |
+--------------------------+-------------------------------------------+
| Histopathology           | Id                                        |
|                          |                                           |
|                          | AgeOfOnset                                |
|                          |                                           |
|                          | Comments                                  |
|                          |                                           |
|                          | GrossDescription                          |
|                          |                                           |
|                          | MicroscopicDescription                    |
+--------------------------+-------------------------------------------+
| Library                  | Id                                        |
|                          |                                           |
|                          | CloneProducer                             |
|                          |                                           |
|                          | CloneVector                               |
|                          |                                           |
|                          | CloneVectorType                           |
|                          |                                           |
|                          | Description                               |
|                          |                                           |
|                          | Keyword                                   |
|                          |                                           |
|                          | LabHost                                   |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | UniGeneId                                 |
+--------------------------+-------------------------------------------+
| Microarray               | Id                                        |
|                          |                                           |
|                          | Manufacturer                              |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | Type                                      |
+--------------------------+-------------------------------------------+
| OrganOntology            | Id                                        |
|                          |                                           |
|                          | Name                                      |
+--------------------------+-------------------------------------------+
| ProteinAlias             | Id                                        |
|                          |                                           |
|                          | Name                                      |
+--------------------------+-------------------------------------------+
| ProtocolAssociation      | Id                                        |
|                          |                                           |
|                          | CTEPName                                  |
|                          |                                           |
|                          | DiseaseCategory                           |
|                          |                                           |
|                          | DiseaseSubCategory                        |
+--------------------------+-------------------------------------------+
| Protein                  | Id                                        |
|                          |                                           |
|                          | Keywords                                  |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | PrimaryAccession                          |
|                          |                                           |
|                          | SecondaryAccession                        |
|                          |                                           |
|                          | UniProtCode                               |
+--------------------------+-------------------------------------------+
| Protocol                 | Id                                        |
|                          |                                           |
|                          | Description                               |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | Type                                      |
+--------------------------+-------------------------------------------+
| ProteinDomain            | Id                                        |
|                          |                                           |
|                          | AccessionNumber                           |
|                          |                                           |
|                          | Description                               |
|                          |                                           |
|                          | Source                                    |
+--------------------------+-------------------------------------------+
| Pathway                  | Id                                        |
|                          |                                           |
|                          | Description                               |
|                          |                                           |
|                          | DisplayValue                              |
|                          |                                           |
|                          | Name                                      |
+--------------------------+-------------------------------------------+
| Tissue                   | Id                                        |
|                          |                                           |
|                          | CellLine                                  |
|                          |                                           |
|                          | CellType                                  |
|                          |                                           |
|                          | Description                               |
|                          |                                           |
|                          | DevelopmentalStage                        |
|                          |                                           |
|                          | Histology                                 |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | Organ                                     |
|                          |                                           |
|                          | Supplier                                  |
|                          |                                           |
|                          | Type                                      |
+--------------------------+-------------------------------------------+
| Taxon                    | Id                                        |
|                          |                                           |
|                          | Abbreviation                              |
|                          |                                           |
|                          | CommonName                                |
|                          |                                           |
|                          | EthnicityStrain                           |
|                          |                                           |
|                          | ScientificName                            |
+--------------------------+-------------------------------------------+
| Target                   | Id                                        |
|                          |                                           |
|                          | Name                                      |
|                          |                                           |
|                          | Type                                      |
+--------------------------+-------------------------------------------+
| Vocabulary               | Id                                        |
|                          |                                           |
|                          | CoreTerm                                  |
|                          |                                           |
|                          | GeneralTerm                               |
+--------------------------+-------------------------------------------+

Table 6‑11Classes indexed in FreeStyleLM

######### References

## Technical Manuals/Articles {#technical-manualsarticles .unnumbered}

1.  []{#__RefHeading___Toc196890068 .anchor}National Cancer Institute.
    caCORE SDK 4.0 Developer's Guide
    <http://ncicb.nci.nih.gov/NCICB/infrastructure/cacoresdk#Documentation>

    2\. Java Bean Specification:
    <http://java.sun.com/products/javabeans/docs/spec.html>

    3\. Foundations of Object-Relational Mapping:
    <http://www.chimu.com/publications/objectRelational/>

```{=html}
<!-- -->
```
4.  Object-Relational Mapping articles and products:
    <http://www.service-architecture.com/object-relational-mapping/>

    5\. Hibernate Reference
    Documentation:<http://www.hibernate.org/5.html>

    6\. Basic O/R Mapping:
    <http://www.hibernate.org/hib_docs/v3/reference/en/html/mapping.html>

```{=html}
<!-- -->
```
7.  Java Programming: <http://java.sun.com/learning/new2java/index.html>

```{=html}
<!-- -->
```
14. Jalopy User Manual:
    <http://jalopy.sourceforge.net/existing/manual.html>

15. Javadoc tool: <http://java.sun.com/j2se/javadoc/>

16. JUnit: <http://junit.sourceforge.net/>

17. Extensible Markup Language: <http://www.w3.org/TR/REC-xml/>

18. XML Metadata Interchange:
    <http://www.omg.org/technology/documents/formal/xmi.htm>

19. Ehcache: <http://ehcache.sourceforge.net/documentation/>

## Scientific Publications {#scientific-publications .unnumbered}

1.  Ansher SS and Scharf R (2001). The Cancer Therapy Evaluation Program
    (CTEP) at the National Cancer Institute: industry collaborations in
    new agent development. Ann N Y Acad Sci 949:333-40.

```{=html}
<!-- -->
```
20. Boon K, Osorio EC, Greenhut SF, Schaefer CF, Shoemaker J, Polyak K,
    Morin PJ, Buetow KH, Strausberg RL, De Souza SJ, and Riggins GJ
    (2002). An anatomy of normal and malignant gene expression. Proc
    Natl Acad Sci U S A 2002 Jul 15.

21. Buetow KH, Klausner RD, Fine H, Kaplan R, Singer DS, and Strausberg
    RL (2002). Cancer Molecular Analysis Project: Weaving a rich cancer
    research tapestry. Cancer Cell 1(4):315-8.

22. Boguski & Schuler (1995). ESTablishing a human transcript map.
    Nature Genetics 10: 369-71.

23. Clifford R, Edmonson M, Hu Y, Nguyen C, Scherpbier T, and Buetow KH
    (2000). Expression-based genetic/physical maps of single-nucleotide
    polymorphisms identified by the Cancer Genome Anatomy Project.
    Genome Res 10(8):1259-65.

24. Covitz P.A., Hartel F., Schaefer C., De Coronado S., Sahni H.,
    Gustafson S., Buetow K. H. (2003). caCORE: A common infrastructure
    for cancer informatics. Bioinformatics. 19: 2404-2412.

25. Dowell RD, Jokerst RM, Day A, Eddy SR, Stein L. The Distributed
    Annotation System. BMC Bioinformatics 2(1):7.

26. The Gene Ontology Consortium. (2000). Gene ontology: tool for the
    unification of biology. Nature Genetics 25:25-9.

27. The Gene Ontology Consortium. (2001). Creating the gene ontology
    resource: design and implementation. Genome Res 11:1425-33.

28. Hartel FW and de Coronado S (2002). Information standards within
    NCI. In: Cancer Informatics: Essential Technologies for Clinical
    Trials. Silva JS, Ball MJ, Chute CG, Douglas JV, Langlotz C, Niland
    J and Scherlis W, eds. Springer-Verlag.

29. Pruitt KD, Katz KS, Sicotte H, and Maglott DR (2000). Introducing
    RefSeq and LocusLink: curated human genome resources at the NCBI.
    Trends Genet 16(1):44-7.

30. Pruitt KD, and Maglott DR (2001). RefSeq and LocusLink: NCBI
    gene-centered resources. Nucleic Acids Res 29(1):137-40.

31. Schuler et al. (1996). A gene map of the human genome. Science 274:
    540-6.

32. Schuler (1997). Pieces of the puzzle: expressed sequence tags and
    the catalog of human genes. J Mol Med 75(10):694-8.

33. Strausberg RL (1999). The Cancer Genome Anatomy Project: building a
    new information and technology platform for cancer research. In:
    Molecular Pathology of Early Cancer (Srivastava S, Henson DE, Gazdar
    A, eds. IOS Press, 365-70.

34. Strausberg RL (2001). The Cancer Genome Anatomy Project: new
    resources for reading the molecular signatures of cancer. J Pathol
    195:31-40.

35. Zhang, Schwartz, Wagner, and Miller (2000). A Greedy algorithm for
    aligning DNA sequences. J Comp Biol 7(1-2):203-14.

36. Sherry ST, Ward MH, Kholodov M, Baker J, Phan L, Smigielski EM,
    Sirotkin K (2001). dbSNP: the NCBI database of genetic variation.
    Nucleic Acids Res. 1;29(1):308-11.

37. Karolchik D, Baertsch R, Diekhans M, Furey TS, Hinrichs A, Lu YT,
    Roskin KM, Schwartz M, Sugnet CW, Thomas DJ, Weber RJ, Haussler D
    and Kent WJ(2003) The UCSC Genome Browser Database. Nucl. Acids Res
    31(1), 51-54

38. Lennon G, Auffray C, Polymeropoulos M, Soares MB(1996) The
    I.M.A.G.E. Consortium: an integrated molecular analysis of genomes
    and their expression. Genomics. 33(1):151-2

39. Wheeler DL, Barrett T, Benson DA, Bryant SH, Canese K, Chetvernin V,
    Church DM, DiCuccio M, Edgar R, Federhen S, Geer LY, Kapustin Y,
    Khovayko O, Landsman D, Lipman DJ, Madden TL, Maglott DR, Ostell J,
    Miller V, Pruitt KD, Schuler GD, Sequeira E, Sherry ST, Sirotkin K,
    Souvorov A, Starchenko G, Tatusov RL, Tatusova TA, Wagner L,
    Yaschenko E.(2007) Epub(2006) Database resources of the National
    Center for Biotechnology Information. Nucleic Acids Res. 35(Database
    issue):D5-12

40. Pontius JU, Wagner L, Schuler GD (2003) UniGene: a unified view of
    the transcriptome In: The NCBI Handbook. Bethesda (MD): National
    Center for Biotechnology Information.

41. Schuler GD (1997) Pieces of the puzzle: expressed sequence tags and
    the catalog of human genes. J Mol Med 75:694-698

42. Schuler GD, et al (1996) A gene map of the human genome. Science
    274:540-546.

43. Boguski MS, Schuler GD (1995) ESTablishing a human transcript map.
    Nature Genetics 10: 369-371.

44. Thorisson GA, Stein LD (2003) The SNP Consortium website: past,
    present and future. Nucleic Acids Res. 31(1):124-7.

## caBIG Material {#cabig-material .unnumbered}

1.  caBIG: <http://cabig.nci.nih.gov/>

```{=html}
<!-- -->
```
45. caBIG Compatibility Guidelines:
    <http://cabig.nci.nih.gov/guidelines_documentation>

## caCORE Material {#cacore-material .unnumbered}

1.  caCORE:
    <http://ncicb.nci.nih.gov/NCICB/infrastructure/cacore_overview>

```{=html}
<!-- -->
```
46. caBIO:
    <http://ncicb.nci.nih.gov/NCICB/infrastructure/cacore_overview/caBIO>

47. caDSR:
    <http://ncicb.nci.nih.gov/NCICB/infrastructure/cacore_overview/cadsr>

48. EVS:
    <http://ncicb.nci.nih.gov/NCICB/infrastructure/cacore_overview/vocabulary>

49. CSM:
    <http://ncicb.nci.nih.gov/NCICB/infrastructure/cacore_overview/csm>

## Modeling Concepts {#modeling-concepts .unnumbered}

1.  Enterprise Architect Online Manual:
    <http://www.sparxsystems.com.au/EAUserGuide/index.html>

```{=html}
<!-- -->
```
50. OMG Model Driven Architecture (MDA) Guide Version 1.0.1:
    <http://www.omg.org/docs/omg/03-06-01.pdf>

51. Object Management Group: <http://www.omg.org/>

## Applications Currently Using caBIO {#applications-currently-using-cabio .unnumbered}

1.  BIO Browser: <http://www.jonnywray.com/java/index.html>

```{=html}
<!-- -->
```
52. caPathway: <http://cgap.nci.nih.gov/Pathways>

[]{#__RefHeading___Toc196890073 .anchor}Index

A

Affymetrix · 83

Agilent · 83

Apache Axis · 14, 39

Application Service layer · 14

Array Annotation API

description · 57

use examples · 62, 63

B

BioCarta · 84

C

caBIG Query Language · 24

caBIO

API · 67

architecture overview · 10

data overview · 9

data sources · 79

features · 1

general overview · 9

model described · 67

package · 15, 17

system architecture · 13

utilities · 63

caCORE

architecture overview · 5

caBIO · 6

caDSR · 6

CLM · 6

components · 6

CSM · 6

EVS · 6

caDSR, caCORE component · 6

caGrid, identifier service · 85

CGAP · 80

Clinical trial data · 10

CLM, caCORE component · 6

CMAP · 80

Common package · 15, 17

CSM, caCORE component · 6

CTEP · 81

D

Data Source Delegation layer · 14

data sources, caBIO · 79

dbSNP · 82

E

Eclipse · 41

EST data · 10

EVS, caCORE component · 6

Examples

Java API, simple example · 22

Java API, use examples · 27, 28, 29, 30, 32, 33

Web Services API, use examples · 42, 44

XML utility · 38

F

Framework packages

gov.nih.nci.search · 17

FreeStyleLM

classes for search · 85

description · 51

java client · 51

use examples · 52, 53

web interface · 53

G

GAI · 81

Gene Ontology Consortium · 84

Genome range queries

description · 55

Java API · 55

use examples · 56, 57

Grid ID Resolver

description · 54

Java API · 54

H

Hibernate · 13, 24, 32

Hibernate Query Language · 14

HomoloGene · 81

I

Illumina · *84*

integrated development environment · 41

J

Java API

archive files · 21

configuration · 20

description · 19

installation · 20

jar files · 22

search types · 23

service methods · 23

simple example · 22

use examples · 27

Java Bean · 15

Java Server Page · 15

Java Servlet · 15

JBoss · 15

L

LocusLink · 81

M

Model driven architecture · 5

N

Non-ORM layer · 14

N-tier architecture · 5

O

Object Relational Mapping · 14

P

PIR · 84

Proteomic Pathway Project · 84

Provenance package · 15, 17

purpose of guide · 1

R

references

applications using caBIO · 92

caBIG material · 92

caCORE material · 92

modeling concepts · 92

scientific publications · 90

technical manuals · 90

REST · 45

S

Scalar Vector Graphic · *See* SVG

Service interface paradigm · 19

SNP Consortium · 85

SNP data · 10

SOAP · 13, 14, 39

SVG · 84

manipulation utility, description · 63

manipulation utility, pathway diagrams · 63

pathway object · 9

SVG Diagram Manipulation

use examples · *65*

System architecture

client technologies · 14

overview · 13

System architecture:layers · 14

T

text conventions, guide · 3

Tomcat · 15

TrEMBL · 84

U

UCSC · 85

Unigene · 82

UniProt · 84

Utility Methods

SVG Manipulation Utility · 63

XML Utility · 38

W

war · 15

Web Services API

caBIOService endpoint operations · 41

configuration · 39

description · 39

endpoint URL · 40

Java client · 40

limitations · 44

operations · 40

use examples · 42

WSDL file · 39

X

XML utility · 38

XML-HTTP API

description · 45

limitations · 49

results sets · 48

service location · 45

syntax · 45

use examples · 47

XSLT · 15