-%# $Id: full.mc,v 1.19 2006-12-06 13:00:40 mike Exp $
<%args>
$id
</%args>
<%perl>
-my $conn = new ZOOM::Connection("localhost:3313/IR-Explain---1");
+my $db = ZOOM::IRSpy::connect_to_registry();
+my $conn = new ZOOM::Connection($db);
$conn->option(elementSetName => "zeerex");
-my $qid = $id;
-$qid =~ s/"/\\"/g;
-my $query = qq[rec.id="$qid"];
+my $query = cql_target($id);
my $rs = $conn->search(new ZOOM::Query::CQL($query));
my $n = $rs->size();
if ($n == 0) {
[ Port => "e:serverInfo/e:port" ],
[ "Database Name" => "e:serverInfo/e:database" ],
[ "Type of Library" => "i:status/i:libraryType" ],
- [ "Username (if needed)" =>
- "e:serverInfo/e:authentication/e:user" ],
- [ "Password (if needed)" =>
- "e:serverInfo/e:authentication/e:password" ],
+# [ "Username (if needed)" => "e:serverInfo/e:authentication/e:user" ],
+# [ "Password (if needed)" => "e:serverInfo/e:authentication/e:password" ],
+ [ "Server ID" => 'i:status/i:serverImplementationId/@value' ],
+ [ "Server Name" => 'i:status/i:serverImplementationName/@value' ],
+ [ "Server Version" => 'i:status/i:serverImplementationVersion/@value' ],
[ Description => "e:databaseInfo/e:description",
lang => "en", primary => "true" ],
[ Author => "e:databaseInfo/e:author" ],
[ "Implementation ID" => "i:status/i:implementationId" ],
[ "Implementation Name" => "i:status/i:implementationName" ],
[ "Implementation Version" => "i:status/i:implementationVersion" ],
- [ "Reliability" => \&calc_reliability, $xc ],
+ [ "Reliability/reliability" => \&calc_reliability_wrapper, $xc ],
[ "Services" => \&calc_init_options, $xc ],
[ "Bib-1 Use attributes" => \&calc_ap, $xc, "bib-1" ],
[ "Dan-1 Use attributes" => \&calc_ap, $xc, "dan-1" ],
+ [ "Bath Profile searches" => \&calc_bath, $xc ],
[ "Operators" => \&calc_boolean, $xc ],
[ "Named Result Sets" => \&calc_nrs, $xc ],
[ "Record syntaxes" => \&calc_recsyn, $xc ],
[ "Explain" => \&calc_explain, $xc ],
+ [ "Multiple OPAC records" => \&calc_mor, $xc ],
);
+ my $title = $xc->find("e:databaseInfo/e:title");
</%perl>
- <h2><% xml_encode($xc->find("e:databaseInfo/e:title"), "") %></h2>
+ <h2><% xml_encode($title, "") %></h2>
<table class="fullrecord" border="1" cellspacing="0" cellpadding="5" width="100%">
<%perl>
foreach my $ref (@fields) {
my($caption, $xpath, @args) = @$ref;
- my $data;
+ my($data, $linkURL);
if (ref $xpath && ref($xpath) eq "CODE") {
- $data = &$xpath(@args);
+ ($data, $linkURL) = &$xpath($id, @args);
} else {
$data = $xc->find($xpath);
}
if ($data) {
+ print " <tr>\n";
+ $caption =~ s/\/(.*)//;
+ my $help = $1;
+ my($linkstart, $linkend) = ("", "");
+ if (defined $linkURL) {
+ $linkstart = '<a href="' . xml_encode($linkURL) . '">';
+ $linkend = "</a>";
+ }
</%perl>
- <tr>
- <th><% xml_encode($caption) %></th>
- <td><% xml_encode($data) %></td>
+ <th><% xml_encode($caption) %><%
+ !defined $help ? "" : $m->comp("/help/link.mc", help =>"info/$help")
+ %></th>
+ <td><% $linkstart . xml_encode($data) . $linkend %></td>
</tr>
% }
% }
</table>
+ <p>
+% my $target = irspy_identifier2target($id);
+% $target =~ s/^tcp://; # Apparently ZAP can't handle the leading "tcp:"
+ <a href="<% xml_encode("http://targettest.indexdata.com/targettest/search/index.zap?" .
+ join("&",
+ "target=" . uri_escape_utf8($target),
+ "name=" . uri_escape_utf8($title),
+ "attr=" . join(" ", _list_ap($xc, "bib-1")),
+ "formats=" . calc_recsyn($id, $xc, " ")))
+ %>">Search this target.</a>
+ </p>
% }
<%perl>
-sub calc_reliability {
- my($xc) = @_;
-
- my @allpings = $xc->findnodes("i:status/i:probe");
- my $nall = @allpings;
- return "[untested]" if $nall == 0;
- my @okpings = $xc->findnodes('i:status/i:probe[@ok = "1"]');
- my $nok = @okpings;
- return "$nok/$nall = " . int(100*$nok/$nall) . "%";
+sub calc_reliability_wrapper {
+ my($id, $xc) = @_;
+ return calc_reliability_string($xc);
}
sub calc_init_options {
- my($xc) = @_;
+ my($id, $xc) = @_;
my @ops;
my @nodes = $xc->findnodes('e:configInfo/e:supports/@type');
}
sub calc_ap {
- my($xc, $set) = @_;
+ my($id, $xc, $set) = @_;
- my $expr = 'e:indexInfo/e:index/e:map/e:attr[
- @set = "'.$set.'" and @type = "1"]';
- my @bib1nodes = $xc->findnodes($expr);
- my $nbib1 = @bib1nodes;
- return "[none]" if $nbib1 == 0;
+ my @aps = _list_ap($xc, $set);
+ my $n = @aps;
+ return "[none]" if $n == 0;
my $res = "";
my($first, $last);
- @bib1nodes = sort { $a->findvalue(".") <=> $b->findvalue(".") } @bib1nodes;
- foreach my $node (@bib1nodes) {
- my $ap .= $node->findvalue(".");
+ foreach my $ap (@aps) {
if (!defined $first) {
- $first = $ap;
- } elsif (!defined $last || $last == $ap-1) {
- $last = $ap;
+ $first = $last = $ap;
+ } elsif ($ap == $last+1) {
+ $last++;
} else {
# Got a complete range
$res .= ", " if $res ne "";
$res .= "$first";
- $res .= "-$last" if defined $last;
- $first = $ap;
- $last = undef;
+ $res .= "-$last" if $last > $first;
+ $first = $last = $ap;
}
}
if (defined $first) {
$res .= ", " if $res ne "";
$res .= "$first";
- $res .= "-$last" if defined $last;
+ $res .= "-$last" if $last > $first;
}
- return "$nbib1 access points: $res";
+ return ("$n access points: $res",
+ "/ap.html?id=$id&set=$set");
+}
+
+sub _list_ap {
+ my($xc, $set) = @_;
+
+ my $expr = 'e:indexInfo/e:index[@search = "true"]/e:map/e:attr[
+ @set = "'.$set.'" and @type = "1"]';
+ my @nodes = $xc->findnodes($expr);
+ return sort { $a <=> $b } map { $_->findvalue(".") } @nodes;
+}
+
+sub calc_bath {
+ my($id, $xc) = @_;
+
+ my @nodes = $xc->findnodes('i:status/i:search_bath[@ok = "1"]');
+ my $res = join(", ", map { $_->findvalue('@name') } @nodes);
+ $res = "[none]" if $res eq "";
+ return $res;
}
sub calc_boolean {
- my($xc) = @_;
+ my($id, $xc) = @_;
### Note that we are currently interrogating an IRSpy extension.
# The standard ZeeRex record should be extended with a
return $res;
}
-sub calc_nrs {
- my($xc) = @_;
+sub calc_nrs { _calc_boolean(@_, 'i:status/i:named_resultset[@ok = "1"]') }
+sub calc_mor { _calc_boolean(@_, 'i:status/i:multiple_opac[@ok = "1"]') }
+
+sub _calc_boolean {
+ my($id, $xc, $xpath) = @_;
- my @nodes = $xc->findnodes('i:status/i:named_resultset[@ok = "1"]');
+ my @nodes = $xc->findnodes($xpath);
return @nodes ? "Yes" : "No";
}
sub calc_recsyn {
- my($xc) = @_;
+ my($id, $xc, $sep) = @_;
+ $sep = ", " if !defined $sep;
my @nodes = $xc->findnodes('e:recordInfo/e:recordSyntax');
- my $res = join(", ", map { $_->findvalue('@name') } @nodes);
+ my $res = join($sep, map { $_->findvalue('@name') } @nodes);
$res = "[none]" if $res eq "";
return $res;
}
sub calc_explain {
- my($xc) = @_;
+ my($id, $xc) = @_;
my @nodes = $xc->findnodes('i:status/i:explain[@ok = "1"]');
my $res = join(", ", map { $_->findvalue('@category') } @nodes);
$res = "[none]" if $res eq "";
return $res;
}
-
</%perl>