Here is a brief description of how the TCNJ New Library Acquisitions RSS feeds are created from a technical standpoint. If you want more details, please e-mail Yongming Wang at

The first step, Stage 1, in creating RSS feeds is to extract the appropriate data out of the library catalog and write it to a flat file. We use the pipe symbol (|) to separate the fields. At TCNJ, this is done using SQL*Plus. Each RSS Feed has its own SQL*Plus query which extracts the following fields:

Date: TCNJ adds three days to the Item create date for this field. The date used will vary depending on local work flow. We extract all records with an Item create date between 3 and 60 days ago for most feeds.

ISBN or BIBID: Our original feeds use the ISBN to create a link, via a canned search to the bibliographic record in the library catalog. We have since upgraded to a newer version of Voyager that allows us to create a canned search based on BIBID (Bibliographic Record Identification number). Newer feeds use the BIBID because it is more accurate and allows for the retrieval of new acquisitions that do not have an ISBN.

Brief Title: This is the brief title. It is used as the headline for the feed.

Title: This is typically the full title field (MARC 245) including the statement of responsibility. This is displayed as the first portion of the item summary.

Permanent Location Name: This is the name of the location where the item will be housed permanently.

Temporary Location Name: This is the temporary shelving location. Typically this only varies at TCNJ if the item is placed on reserve.

Call Number: The Call number is displayed along with the location so that a patron can find the item in the library.


The items are then sorted by date so that they are organized in the feed chronologically. Sample SQL*Plus queries are available to libraries who use the Ex Libris (formally Endeavor’s) Voyager Integrated Library System upon request. An item in the resulting flat file[1] looks like:

SUN, 03 SEP 2006 09:44:47 EDT|597543|Napoleon / |Napoleon / Paul Johnson. |General Collection||DC203 .J5 2002

In Stage 2 the flat file is turned into RSS feeds using a Perl Script the reads in the flat file and a configuration file. There are two versions of the script. The first one creates the hyper-link into the library catalog based on ISBN while the second one creates the hyper-link using BIBID. Before running the main Perl script, a simple one line Perl command is executed to remove any duplicate records. Since the fields are separated by the pipe symbol, the following command is used to do this:

/bin/perl -F'\|' -i.bak -ane 'print unless $seen{$F[1]}++' *.lst

Besides creating a flat file of all of the flat files (which are saved with a .lst extension) without duplicated BIBIDs or ISBNs, this also creates a backup of the original flat file with a .bak extension in case it is needed for troubleshooting.

Once the file is de-duped, the Perl script that actually creates the feeds is executed. This Perl script requires the XML::RSS, CGI qw{ escapeHTML }, and URI::Escape modules [2]. The Perl script reads in an initialization file that contains entries for each feed that it is supposed to create. For each feed, the initialization file contains three lines: The RSS channel title, the RSS channel description, and the name of the flat file. For example, the entry for our New Modern Languages Acquisitions [3] looks like:

channel-title="TCNJ Library - New Modern Languages Materials"
channel-description="This News feed lists new Modern Languages Materials"

In this example the Perl script [4, 5] will read in the modernlanguages.lst file and then create an RSS 2.0 file for the feed called modernlanguages.xml. The initialization file can include entries for all of the feeds you want to create.

The last stage of the process (Stage 3) is getting the feeds to display in the course management system, a subject guide, or elsewhere. From a library systems point of view, the main thing that is done at this point is copying the completed feeds to a public web server. You can see all of our feeds at (this page also has directions about how to add these feeds into SOCS or into an RSS reader). If you want to add the feeds to a web page, you will need some computer coding. At TCNJ we use javascript that was written by one of our developers to do this. If you wanted to do this at another institution and are not sure how to do this, I'd suggest looking at Feed2JS [6].

The three stages are held together with a shell script [7] that executes the SQL*Plus queries, the Perl scripts and copies the RSS 2.0 xml files to the web server. The shell script is launched via the UNIX cron utility approximately six times a day in order to keep the feeds up to date.

Additional Information:

Please see the following article and presentation materials for more information:

Corrado, Edward M. and Heather L. Moulaison (2006). Integrating RSS Feeds of New Books into the Campus Course Management System. Computers in Libraries, 26(9). Retrieved from

Corrado, Edward M., Heather L. Moulaison, and Eric Thul (2006, January 5). Integrating RSS Feeds of New Library Acquisitions into a Course Management System. Presented at VALE Users' / NJ ACRL/NJLA CUS Conference "All Together Now: Taking the Lead in Collaboration and Innovation", Piscataway, NJ.

Corrado, Edward M., Eric Thul and Heather L. Moulaison (2006, April 25). Library Outreach and the Course Management System: Using RSS Feeds to Advertise New Library Holdings. Presented at 2006 NJLA CONFERENCE: Advocacy, Alliances and Action. Ocean Place Conference Center, Long Branch, NJ.


[1] A complete flat file for New Modern Languages Acquisitions is available at
[2] The required Perl modules can be downloaded from CPAN. URI::Escape is available at and XML::RSS is available at
[3] A complete Initialization file for feeds can be viewed at
[4] The Perl script that creates hyper-links using ISBN is available under the Artistic License.
[5] The Perl script that creates hyper-links using BIBID is available under the Artistic License.
[6] More information about Feed2JS can be found on the Feed2js Web site
[7] A sample shell script is available at