Print

Print


Hi Emily,

You asked for a protocol for obtaining holdings. I recently thought
about the same topic too. I copy my reply to the CODE4LIB mailing list
because it contains some technical implementations that might be more of
interest to other developers. You wrote:

> Sorry for the repost. I just wanted to clarify since people responded
> about pulling data out of OCLC-- I have three different catalogs I
> would like to bring together, including the holdings records. Is
> there a way of grabbing the holdings data and not just the bib data?

I suppose that 'wget' is a way of grabbing also the holdings data for
every web-catalog ;-)

But seriously: You probably want a way to get the data in a coherent
format or it will be of little use for you. Unfortunately according to
my research there is no simple format for holding data up to now. I'd be
happy to help out with a wrapper from German's largest union cataloge to
such a holding format to let other applications make use of it.

Have a look at WorldCat local:

http://uwashington.worldcat.org/oclc/155131850

the holdings are included to the page via AJAX:

http://uwashington.worldcat.org/wcpa/servlet/org.oclc.lac.deliveryresolverclient.AvailabilityFulfillmentServlet?oclcno=155131850

Unfortunately the result is not the holding data but a dirty chunk of
HTML that includes the holding data. You can strip down the data to
something like (this is my first ad-hoc-holding format):

<holdings>
   <locations>
     <location id="l1">University of Washington Libraries</location>
     <location id="l2">Summit Libraries</location>
     <location id="l3" parent="l2">Central Ore CC</location>
     <location id="l4" parent="l2">Central Wash U</location>
   </locations>
   <item>
     <location parent="l1">Children's Literature</location>
     <call-number>PZ7.R79835 Hak 2007</call-number>
     <status back="2008-04-08">DUE 04-08-08</status>
   </item>
   <item>
     <location parent="l1">Children's Literature</location>
     <call-number>ESL A 118</call-number>
     <status back="2008-01-18">DUE 01-18-08</status>
   </item>
   ...
   <item>
     <location parent="l3">COCC Second Floor</location>
     <call-number>PZ7.R79835 Hak 2007</call-number>
     <status>1 HOLD</status>
   </item>
   <item>
     <location parent="l4">Child Lit 4th Floor</location>
     <call-number>813 R8843had</call-number>
     <status>LOCAL USE ONLY</status>
   </item>
   ...
</holding>

Someone just has to define was 'holding' is and what information it must
carry, so we can define a simple holding interchange format that is not
as fuzzy and overblown as most of the library most other library
standards. As a sideline we implement another part of FRBR (a mapping
from frbr:manifestation to frbr:item)

> I want to create one federated search/union catalog; I don't know how
> to get to the 852 since my understanding is that it is not part of
> the z39.50 standard.

I bet you can get the data somehow from some catalouges by Z39.50 also.
You can get some of the data from our SRU-aware cataloges as shown in
this script which is part of the PICA::Server library at CPAN:

http://search.cpan.org/~voj/PICA-Record-0.32/

Ok, this script only print the holding libraries, so here is an extended
version:


#!/usr/bin/perl

=head1 NAME

gbvholdings.pl - get holding information in GBV union catalog for a
given ISBN

=cut

use PICA::Server;

my $isbn = shift @ARGV;

my @status;
if ($isbn) {
     my $server = PICA::Server->new(
         SRU => "http://gso.gbv.de/sru/DB=2.1/"
     );
     $server->cqlQuery( 'pica.isb=' . $isbn ,
         Record => sub {
             $record = shift;
             my @fields = $record->field('101@|209A/..');
             foreach my $f (@fields) {
                 if ($f->tag eq '101@') { # new library
                     print "Location: " . $f->subfield('d') . "\n";
                 } else {
                     print "  sublocation: " . $f->subfield('f') ."\n";
                     print "    call-number: " . $f->subfield('a') ."\n";
                 }
             }
         }
     );
} else {
     print "Usage: $0 <ISBN>\n";
}
__END__


To get the availability you have to query another database but it's also
possible for some of our libraries. I just have not fully implemented it
because there is no simple format for holding information. Maybe this is
a start to create one.

Greetings,
Jakob

--
Jakob Voß <[log in to unmask]>, skype: nichtich
Verbundzentrale des GBV (VZG) / Common Library Network
Platz der Goettinger Sieben 1, 37073 Göttingen, Germany
+49 (0)551 39-10242, http://www.gbv.de