NCBIConnect.js
Introduction
NCBIConnect.js is a client-side JavaScript library that provides a simple, hassle-free interface to some of the National Center for Biotechnology Information's databases.
Right now, the nucleotide (nuccore) and protein databases are supported (you can search for nucleic acid or protein sequences by name). Support for gene data should arrive in the next build.
Primary Objective
The primary objective of this project is to encourage talented bioinformaticians and web developers to find more common ground and begin taking more projects to the beautiful, dynamic, modern web with JavaScript.
NCBIConnect can be used as a starting point to develop webapps that rely on NCBI's databases without having to set up a server environment - all processing is done client-side.
NCBIConnect can also be used to write simple data collection scripts (in much fewer lines) that can be shared easily as .html files. No Perl required!
(You can also consider writing your own data processing applications and scripts without having to save or load from local data!)
Installation
Simply download ncbiconnect.js
and incorporate it into your webpage using:
<script src="ncbiconnect.js"></script>
Voila! (Make sure it's in the same directory, otherwise specify the relative path.)
Example Usage
Let's say I'm interested in the genome of a specific virus. In this case, it's the much-studied bacteriophage T4.
I want to grab the top 5 hits from NCBI's nucleotide database for T4's genome, and store it in a single FASTA file.
Easy!
var nucDB = new NCBIConnect('nucleotide');
nucDB.query(
'Bacteriophage T4', // My search term
{'limit': 5, 'offset': 0}, // Give 5 results, starting at 0
function(err, result) {
if(err) { throw err; }
result.getFASTA(function(err, fasta) {
if(err) { throw err; }
fasta.save();
});
}
);
Assuming we don't hit any errors with NCBI's servers, a file should
automatically be downloaded to our computer's Downloads
folder when we run
this script.
What about listing results?
Simple!
nucDB.query(
'Bacteriophage T4', // My search term
{'limit': 5, 'offset': 0}, // Give 5 results, starting at 0
function(err, result) {
if(err) { throw err; }
result.each(function(row) {
console.log(row.get('id') + ', ' + row.get('name'));
});
}
);
We now see a lovely output in our console:
29366675, Enterobacteria phage T4, complete genome
422934005, Enterobacteria phage Bp7, complete genome
161622381, Enterobacteria phage JS98, complete genome
291290213, Enterobacteria phage AR1 DNA, complete genome
345450514, Enterobacteria phage Bp7, complete genome
New to HTML?
You may have written some Perl but you're unfamiliar with
throwing together a webpage. No problem! Included with this package is
index.html
, a sample index page containing the latter example above.
It will execute on page load so make sure you have your web console open to see it work!
There are also a number of useful methods to be used with results (and FASTA files). Explore them in the documentation!
Happy building!
Documentation
NCBIConnect.js contains the following objects:
NCBIConnect
is the main connection object, it manages queries to NCBI's
servers
NCBIConnectRow
is a result row (from a query to NCBI's databases)
NCBIConnectSet
is a set of NCBIConnectRow
s
NCBIConnectResult
inherits from NCBIConnectSet
and is the result
object that contains one or many results of a specific query from NCBIConnect
NCBIConnectCollection
inherits from NCBIConnectSet
and can contain
any collection of results from a number of queries
NCBIConnectFASTA
is a special interface that provides some nifty tools for
dealing with FASTA files
NCBIConnect
Constructor
Instantiate using var myConn = new NCBIConnect('[database]')
where
[database] is one of: nucleotide, protein.
Methods
query
query(
str_searchTerm,
obj_filters,
fn_callback [ context NCBIConnect, params [ Error, NCBIConnectResult ] ]
)
Supported filters are limit
to provide a max number of records to return,
and offset
to indicate which record to begin at.
queryFASTA
queryFASTA(
str_id OR arr_idList,
str_fileIdentifier,
fn_callback [ context NCBIConnect, params [ Error, NCBIConnectFASTA ] ]
)
id
is a specific gene identifier (Gi) or an array of them, and
fileIdentifer
should be a unique string that can be used to identify the
file.
createCollection
createCollection()
Creates an empty NCBIConnectCollection
which can then be used to store
result sets for future use.
NCBIConnectRow
Constructor
Inaccessible, created only as a result of a query from NCBIConnect
Methods
set
set(
str_field,
var_value
)
Sets a given field of the row to a specific value.
get
get(
str_field,
var_defaultValue
)
Gets the value of the row associated with a specific field. If no value is present, defaultValue is returned.
getFASTA
getFASTA(
fn_callback [ context NCBIConnect, params [ Error, NCBIConnectFASTA ] ]
)
Alias for NCBIConnect.queryFASTA
for this specific result row.
NCBIConnectSet
Constructor
Inaccessible, created only as a result of selecting values from
NCBIConnectResult
or NCBIConnectCollection
Methods
each
each(
fn_callback [ context NCBIConnect, params [ NCBIConnectRow ] ]
)
Executes a provided callback function for each row in the set, starting with the first result.
count
count()
Returns the number of items in the set.
item
item(
int_index
)
Returns the item at index
from the set (NCBIConnectRow
).
first
first()
Returns the first item of the set. Throws an error if the set is empty.
last
last()
Returns the last item of the set. Throws an error if the set is empty.
range
range(
int_start,
int_end
)
Returns NCBIConnectSet
with values beginning at index start
and
ending at index end
(inclusive).
subset
subset(
int_start,
int_length
)
Returns NCBIConnectSet
with values beginning at index start
that is
length
items long.
toArray
toArray()
Converts the set into a native Array of native Objects. (These objects are not copies! They contain referential row data.)
list
list(
str_field
)
Returns a native Array of all values associated with field
for each
row in the set.
getFASTA
getFASTA(
fn_callback [ context NCBIConnect, params [ Error, NCBIConnectFASTA ] ]
)
Alias for NCBIConnect.queryFASTA
for all rows in the set - returns
an aggregated (multi-FASTA) file.
NCBIConnectResult
Inherits
This Object inherits from NCBIConnectSet
Constructor
Inaccessible, returned as a result of NCBIConnect.query
NCBIConnectCollection
Inherits
This Object inherits from NCBIConnectSet
Constructor
Inaccessible, returned as a result of NCBIConnect.createCollection
Methods
add
add(
[NCBIConnectRow
or NCBIConnectSet
or NCBIConnectResult
or NCBIConnectCollection],
...
)
Accepts any number of arguments of the above specified kinds. Adds the rows from these objects, in order, to the collection. Returns current collection.
remove
remove(
int_index
)
Removes the row at specified index from the current collection, and returns the current collection.
NCBIConnectFASTA
Constructor
Inaccessible, returned as a result of NCBIConnect.queryFASTA
's callback.
Methods
size
size()
Returns the total size, in bytes, of the raw FASTA (or multiFASTA) file.
raw
raw()
Returns a string containing the raw FASTA (or multiFASTA) file.
data
data(
opt_int_index
)
If index
is supplied, provides a native Object containing both the header
(comments) and content data of the FASTA file at the specified index (useful
for multiFASTA files). Otherwise provides a native Array containing all such
Objects. (Single FASTA files will use an index of 0).
header
header(
opt_int_index
)
Similar to data()
, but provides the specific header (comment) information
for FASTA file at specified index.
content
content(
opt_int_index
)
Similar to header
, but provides the specific content information
for FASTA file at specified index. (No whitespace.)
save
save(
opt_str_name
)
Automatically saves the full FASTA or multiFASTA file to the user's
browser-specified "Downloads" folder. If name
is provided, it will
attempt to save the file as name + '.seq'
, otherwise the name will be
automatically generated.
Thanks
Thanks for checking out NCBIConnect.js :)
You can check out my other projects on my GitHub account: http://github.com/keithwhor
View my personal website at: http://keithwhor.com
Or follow me on Twitter: @keithwhor http://twitter.com/keithwhor
Cheers!