The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Net::Z3950::Record::GRS1 - Perl package used to encode GRS-1 records.

SYNOPSIS

use Net::Z3950::GRS1;

my $a_grs1_record = new Net::Z3950::Record::GRS1;
my $another_grs1_record = new Net::Z3950::Record::GRS1;

$a_grs1_record->AddElement($type, $value, $content);
$a_grs1_record->Render();

DESCRIPTION

This Perl module helps you to create and manipulate GRS-1 records (generic record syntax). So far, you have only access to three methods:

new

Creates a new GRS-1 object,

my $grs1 = new Net::Z3950::GRS1;

AddElement

Lets you add entries to a GRS-1 object. The method should be called this way,

$grs1->AddElement($type, $value, $which, $content);

where $type should be an integer, and $value is free text. The $which argument should contain one of the constants listed in Appendix A. Finally, $content contains the "thing" that should be stored in this entry. The structure of $content should match the chosen element data type. For

$which == Net::Z3950::GRS1::ElementData::String;

$content should be some kind of scalar. If on the other hand,

$which == Net::Z3950::GRS1::ElementData::Subtree;

$content should be a GRS1 object.

Render

This method digs through the GRS-1 data structure and renders the record. You call it this way,

$grs1->Render();

If you want to access the rendered record through a variable, you can do it like this,

my $record_as_string;
$grs1->Render(POOL => \$record_as_string);

If you want it stored in a file, Render should be called this way,

$grs1->Render(FILE => 'record.grs1');

When no file name is specified, you can choose to stream the rendered record, for instance,

$grs1->Render(HANDLE => *STDOUT);		## or
$grs1->Render(HANDLE => *STDERR);		## or
$grs1->Render(HANDLE => *MY_HANDLE);

Hash2grs

This method converts a hash into a GRS-1 object. Scalar entries within the hash are converted into GRS-1 string elements. A hash entry can itself be a reference to another hash. In this case, the new referenced hash will be converted into a GRS-1 subtree. The method is called this way,

$grs1->Hash2grs($href, $mapping);

where $href is the hash to be converted and $mapping is referenced hash specifying the mapping between keys in $href and (type, value) pairs in the $grs1 object. The $mapping hash could for instance look like this,

  my $mapping =	{
			title	=>	[2, 1],
			author	=>	[1, 1],
			issn	=>	[3, 1]
		};

If the $grs1 object contains data prior to the invocation of Hash2grs, the new data represented by the hash is simply added.

APPENDIX A

These element data types are specified in the Z39.50 protocol:

Net::Z3950::GRS1::ElementData::Octets
Net::Z3950::GRS1::ElementData::Numeric
Net::Z3950::GRS1::ElementData::Date
Net::Z3950::GRS1::ElementData::Ext
Net::Z3950::GRS1::ElementData::String			<---
Net::Z3950::GRS1::ElementData::TrueOrFalse
Net::Z3950::GRS1::ElementData::OID
Net::Z3950::GRS1::ElementData::IntUnit
Net::Z3950::GRS1::ElementData::ElementNotThere
Net::Z3950::GRS1::ElementData::ElementEmpty
Net::Z3950::GRS1::ElementData::NoDataRequested
Net::Z3950::GRS1::ElementData::Diagnostic
Net::Z3950::GRS1::ElementData::Subtree		<---

Only the '<---' marked types are so far supported in this package.

AUTHOR

Anders Sønderberg Mortensen <sondberg@indexdata.dk> Index Data ApS, Copenhagen, Denmark. 2001/03/09

SEE ALSO

Specification of the GRS-1 standard, for instance in the Z39.50 protocol specification.