Jakob mentions Z39.50, and holdings format.
I don't know exactly what catalogs you want to access, but if they do
support Z39.50 they should support
the holdings format defined for that protocol.
The Library of Congress is the repository for these standards.
here is a sample interaction, with the yaz command line client:
Z> open catalog.loc.gov:7090/voyager
Connecting...OK.
Sent initrequest.
Connection accepted by v3 target.
ID : 34
Name : Voyager LMS - Z39.50 Server (YAZ Proxy)
Version: 2003.1.1/1.2.1.1
Options: search present
Elapsed: 0.034440
Z> f lycanthropy
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 10
records returned: 0
Elapsed: 0.149534
Z> format opac
Z> show 2
Sent presentRequest (2+1).
Records: 1
[VOYAGER]Record type: OPAC
Record type: USmarc
001 4296716
005 19870128000000.0
008 860630s1986 nyua b 001 0 eng
035 $9 (DLC) 86014443
906 $a 7 $b cbc $c orignew $d 1 $e ocip $f 19 $g y-gencatlg
010 $a 86014443
020 $a 0815623836 (alk. paper)
020 $a 0815623844 (pbk. : alk. paper)
040 $a DLC $c DLC $d DLC
050 00 $a GR830.W4 $b L93 1986
082 00 $a 398/.369974442 $2 19
245 02 $a A Lycanthropy reader : $b werewolves in Western culture / $c
edited by Charlotte F. Otten.
250 $a 1st ed.
260 $a Syracuse, N.Y. : $b Syracuse University Press, $c 1986.
300 $a xvi, 337 p. : $b ill. ; $c 24 cm.
500 $a "Medical cases, diagnoses, descriptions; trial records,
historical accounts, sightings; philosophical and theological approaches
to metamorphosis; critical essays on lycanthropy; myths and legends;
allegory."
504 $a Bibliography: p. 321-324.
500 $a Includes index.
650 0 $a Werewolves.
700 1 $a Otten, Charlotte F.
991 $b c-GenColl $h GR830.W4 $i L93 1986 $p 00008521918 $t Copy 1 $w
BOOKS
Data holdings 0
typeOfRecord: u
encodingLevel: u
receiptAcqStatus: 0
generalRetention: |
completeness: 0
dateOfReport: 000000
nucCode: c-GenColl
localLocation: Jefferson or Adams Bldg General or Area Studies Reading Rms
callNumber: GR830.W4 L93 1986
copyNumber: Copy 1
circulation 0
availableNow: 1
itemId: 4026845
renewable: 0
onHold: 0
Data holdings 1
typeOfRecord: u
encodingLevel: u
receiptAcqStatus: 0
generalRetention: |
completeness: 0
dateOfReport: 000000
nucCode: s-FM/GC
localLocation: Main or Science/Business Reading Rms - STORED OFFSITE
callNumber: GR830.W4 L93 1986
copyNumber: Copy 2
circulation 0
availableNow: 1
itemId: 13316230
renewable: 0
onHold: 0
nextResultSetPosition = 3
Elapsed: 0.070881
Jakob Voss wrote:
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
--
******************************
Enrico Silterra
Software Engineer
501 Olin Library
Cornell University
Ithaca NY 14853
Voice: 607-255-6851
Fax: 607-255-6110
E-mail: [EMAIL PROTECTED]
http://www.library.cornell.edu/cts/
"Qui Audet Vincit" -- Motto of the SAS
******************************