X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=web%2Fhtdocs%2Fdetails%2Ffull.mc;h=1e19a8b6e41672fac8b902c6a68eef6069eaf573;hp=b1b5f3a66daf0eb915cc00fcb0a6171199ef8066;hb=25e217feb6b3c709ab51acac74827443342fc823;hpb=22b72da58083aeda259ab7cb79f50f32106dc1b9 diff --git a/web/htdocs/details/full.mc b/web/htdocs/details/full.mc index b1b5f3a..1e19a8b 100644 --- a/web/htdocs/details/full.mc +++ b/web/htdocs/details/full.mc @@ -1,10 +1,7 @@ -%# $Id: full.mc,v 1.8 2006-11-06 17:01:03 mike Exp $ +%# $Id: full.mc,v 1.19 2006-12-06 13:00:40 mike Exp $ <%args> $id -<%once> -use ZOOM; - <%perl> my $conn = new ZOOM::Connection("localhost:3313/IR-Explain---1"); $conn->option(elementSetName => "zeerex"); @@ -17,24 +14,26 @@ if ($n == 0) { $m->comp("/details/error.mc", title => "Error", message => "No such ID '$id'"); } else { - my $rec = $rs->record(0); - my $xc = irspy_xpath_context($rec); + my $xc = irspy_xpath_context($rs->record(0)); my @fields = ( + [ Name => "e:databaseInfo/e:title", + lang => "en", primary => "true" ], + [ Country => "i:status/i:country" ], [ "Last Checked" => "i:status/i:probe[last()]" ], [ Protocol => "e:serverInfo/\@protocol" ], [ Host => "e:serverInfo/e:host" ], [ 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" ], - [ Title => "e:databaseInfo/e:title", - lang => "en", primary => "true" ], [ Description => "e:databaseInfo/e:description", lang => "en", primary => "true" ], [ Author => "e:databaseInfo/e:author" ], [ Contact => "e:databaseInfo/e:contact" ], + [ "URL to Hosting Organisation" => "i:status/i:hostURL" ], [ Extent => "e:databaseInfo/e:extent" ], [ History => "e:databaseInfo/e:history" ], [ "Language of Records" => "e:databaseInfo/e:langUsage" ], @@ -44,14 +43,16 @@ if ($n == 0) { [ "Implementation Name" => "i:status/i:implementationName" ], [ "Implementation Version" => "i:status/i:implementationVersion" ], [ "Reliability" => \&calc_reliability, $xc ], - [ "Services" => sub { "### IRSpy does not yet check for search, present, delSet, concurrentOperations, namedResultSets, etc. and store the information is a usable form." } ], - [ "Bib-1 Use attributes" => \&calc_bib1, $xc ], - [ "Operators" => sub { "### and, or, not" } ], - [ "Record syntaxes" => sub { "### SUTRS, USmarc, Danmarc" } ], - [ "Explain" => sub { "### CategoryList, TargetInfo, DatabaseInfo, RecordSyntaxInfo, AttributeSetInfo, AttributeDetails" } ], + [ "Services" => \&calc_init_options, $xc ], + [ "Bib-1 Use attributes" => \&calc_ap, $xc, "bib-1" ], + [ "Dan-1 Use attributes" => \&calc_ap, $xc, "dan-1" ], + [ "Operators" => \&calc_boolean, $xc ], + [ "Named Result Sets" => \&calc_nrs, $xc ], + [ "Record syntaxes" => \&calc_recsyn, $xc ], + [ "Explain" => \&calc_explain, $xc ], ); -

<% xml_encode($xc->find("e:databaseInfo/e:title")) %>

+

<% xml_encode($xc->find("e:databaseInfo/e:title"), "") %>

<%perl> foreach my $ref (@fields) { @@ -85,11 +86,27 @@ sub calc_reliability { return "$nok/$nall = " . int(100*$nok/$nall) . "%"; } -sub calc_bib1 { +sub calc_init_options { my($xc) = @_; - my @bib1nodes = $xc->findnodes('e:indexInfo/e:index/e:map/e:attr[ - @set = "bib-1" and @type = "1"]'); + my @ops; + my @nodes = $xc->findnodes('e:configInfo/e:supports/@type'); + foreach my $node (@nodes) { + my $type = $node->value(); + if ($type =~ s/^z3950_//) { + push @ops, $type; + } + } + + return join(", ", @ops); +} + +sub calc_ap { + my($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; @@ -122,4 +139,41 @@ sub calc_bib1 { return "$nbib1 access points: $res"; } +sub calc_boolean { + my($xc) = @_; + + ### Note that we are currently interrogating an IRSpy extension. + # The standard ZeeRex record should be extended with a + # "supports" type for this. + my @nodes = $xc->findnodes('i:status/i:boolean[@ok = "1"]'); + my $res = join(", ", map { $_->findvalue('@operator') } @nodes); + $res = "[none]" if $res eq ""; + return $res; +} + +sub calc_nrs { + my($xc) = @_; + + my @nodes = $xc->findnodes('i:status/i:named_resultset[@ok = "1"]'); + return @nodes ? "Yes" : "No"; +} + +sub calc_recsyn { + my($xc) = @_; + + my @nodes = $xc->findnodes('e:recordInfo/e:recordSyntax'); + my $res = join(", ", map { $_->findvalue('@name') } @nodes); + $res = "[none]" if $res eq ""; + return $res; +} + +sub calc_explain { + my($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; +} +