package Net::Z3950::GRS1;
+## $Id: GRS1.pm,v 1.6 2004-05-28 20:14:28 sondberg Exp $
+##
+## Copyright (c) 2000-2004, Index Data.
+##
+## Permission to use, copy, modify, distribute, and sell this software and
+## its documentation, in whole or in part, for any purpose, is hereby granted,
+## provided that:
+##
+## 1. This copyright and permission notice appear in all copies of the
+## software and its documentation. Notices of copyright or attribution
+## which appear at the beginning of any file must remain unchanged.
+##
+## 2. The name of Index Data or the individual authors may not be used to
+## endorse or promote products derived from this software without specific
+## prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+## WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+## IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+## INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
+## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
+## NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+## LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+## OF THIS SOFTWARE.
+##
+
use strict;
use IO::Handle;
use Carp;
bless $self, $class;
if (defined($href) && ref($href) eq 'HASH') {
if (!defined($map)) {
- croak "Usage: new Net::Z3950::GRS1($href, $map);";
+ croak 'Usage: new Net::Z3950::GRS1($href, $map);';
}
- $self->Hash2grs($href);
+ $self->Hash2grs($href, $map);
}
return $self;
my $key;
my $content;
my $aref;
+ my $issue;
$mapping = defined($mapping) ? $mapping : $self->{MAP};
+ $self->{MAP} = $mapping;
foreach $key (keys %$href) {
$content = $href->{$key};
+ next unless defined($content);
if (!defined($aref = $mapping->{$key})) {
print STDERR "Hash2grs: Unmapped key: '$key'\n";
next;
}
if (ref($content) eq 'HASH') { ## Subtree?
- my $subtree = new Net::Z3950::GRS1($content);
+ my $subtree = new Net::Z3950::GRS1($content, $mapping);
$self->AddElement($aref->[0], $aref->[1], &Net::Z3950::GRS1::ElementData::Subtree, $subtree);
- } elsif (ref($content) eq '') { ## Regular string?
+ } elsif (!ref($content)) { ## Regular string?
$self->AddElement($aref->[0], $aref->[1], &Net::Z3950::GRS1::ElementData::String, $content);
+ } elsif (ref($content) eq 'ARRAY') {
+ my $issues = new Net::Z3950::GRS1;
+ foreach $issue (@$content) {
+ my $entry = new Net::Z3950::GRS1($issue, $mapping);
+ $issues->AddElement(5, 1, &Net::Z3950::GRS1::ElementData::Subtree, $entry);
+ }
+ $self->AddElement($aref->[0], $aref->[1], &Net::Z3950::GRS1::ElementData::Subtree, $issues);
} else {
print STDERR "Hash2grs: Unsupported content type\n";
next;
}
}
}
+
+
sub GetElementList {
my $self = shift;
Specification of the GRS-1 standard, for instance in the Z39.50 protocol specification.
=cut
-
-#$Log: GRS1.pm,v $
-#Revision 1.4 2001-05-17 14:07:06 sondberg
-#Added some documentation.
-#
-#Revision 1.3 2001/05/17 13:43:04 sondberg
-#Added method Hash2grs into GRS1 module.
-#
-#Revision 1.2 2001/03/13 14:53:15 sondberg
-#Added a few lines of documentation into GRS1.pm.
-#
-#Revision 1.1 2001/03/13 14:17:15 sondberg
-#Added support for GRS-1.
-#
-