From 1897481175d63c5964ff30ac1f43f620bf5c639f Mon Sep 17 00:00:00 2001 From: Jason Stephenson Date: Sat, 30 Aug 2014 22:21:20 -0400 Subject: [PATCH] NCIP::Item and friends. Modify NCIP::Item to hold the data for the Item Information field and add necessary objects for most of its subfields. Signed-off-by: Jason Stephenson --- lib/NCIP/Item.pm | 111 +++++++++++++-- lib/NCIP/Item/BibliographicDescription.pm | 158 ++++++++++++++++++++++ lib/NCIP/Item/BibliographicItemId.pm | 55 ++++++++ lib/NCIP/Item/BibliographicRecordId.pm | 81 +++++++++++ lib/NCIP/Item/ComponentId.pm | 53 ++++++++ lib/NCIP/Item/Description.pm | 71 ++++++++++ lib/NCIP/Item/OptionalFields.pm | 105 ++++++++++++++ lib/NCIP/Item/PhysicalCondition.pm | 54 ++++++++ 8 files changed, 677 insertions(+), 11 deletions(-) create mode 100644 lib/NCIP/Item/BibliographicDescription.pm create mode 100644 lib/NCIP/Item/BibliographicItemId.pm create mode 100644 lib/NCIP/Item/BibliographicRecordId.pm create mode 100644 lib/NCIP/Item/ComponentId.pm create mode 100644 lib/NCIP/Item/Description.pm create mode 100644 lib/NCIP/Item/OptionalFields.pm create mode 100644 lib/NCIP/Item/PhysicalCondition.pm diff --git a/lib/NCIP/Item.pm b/lib/NCIP/Item.pm index 93cfcaf..61ac61a 100644 --- a/lib/NCIP/Item.pm +++ b/lib/NCIP/Item.pm @@ -1,20 +1,109 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- package NCIP::Item; -use base qw(Class::Accessor); +use parent qw(Class::Accessor); -# Make accessors for the ones that makes sense -NCIP::Item->mk_accessors(qw(itemid ils)); +=head1 NAME -# Call the apppropriate subroutine in the ILS specific code and get the data +Item - Defined as ItemInformation in z39.83-1-2012 -sub itemdata { - my $self = shift; - my $ils = $self->ils; - my ( $itemdata, $error ) = $ils->itemdata( $self->itemid ); +=head1 SYNOPSIS -# add anything NCIP specific not handled by the ILS to the itemdata object at this point, if no error - return $itemdata, $error; -} + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 ItemId + +Optional NCIP::Item::Id object. + +=head2 RequestId + +Optional array of NCIP::RequestId objects. + +This field occurs only if Problem is not present in the same Item +Information. + +=head2 CurrentBorrower + +Optional NCIP::User::Id object specifying the user to whom the item is +currently charged. + +=head2 DateDue + +Optional date/time indicating the due date of the item. + +=head2 DateRecalled + +Optional date/time indicating the date and time of an item recall. + +=head2 HoldPickupDate + +Optional date/time indicating when a hold expires for the given item +and user. + +=head2 ItemTransaction + +Not currently implemented. + +=head2 ItemOptionalFields + +Optional NCIP::Item::OptionalFields object. + +This field occurs only if Problem is not present in the same Item +Information. + +=head2 ItemNote + +Text string that provides data additional to that provide in other +data elements that comprise Item Information. + +Occurs 0 or 1 time but only if Problem is not present in the same Item +Information. + +=head2 Problem + +Optional NCIP::Problem object to describe some problem with the item request. + +Occurs 0 or more times but only if Request Id, Current Borrower, +Current Requester, Date Due, Date Recalled, Hold Pickup Date, Item +Transaction, Item Optional Fields, and Item Note are not present in +the same Item Information element. + +=cut + +NCIP::Item->mk_accessors( + qw( + ItemId + RequestId + CurrentBorrower + DateDue + DateRecalled + HoldPickupDate + ItemTransaction + ItemOptionalFields + ItemNote + Problem + ) +); 1; diff --git a/lib/NCIP/Item/BibliographicDescription.pm b/lib/NCIP/Item/BibliographicDescription.pm new file mode 100644 index 0000000..c29f93e --- /dev/null +++ b/lib/NCIP/Item/BibliographicDescription.pm @@ -0,0 +1,158 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::BibliographicDescription; + +use parent qw(Class::Accessor); + +=head1 NAME + +BibliographicDescription - As defined in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 Author + +Optional text string for the name of person or corporate body +responsible for the intellectual or artistic content of an Item, +including composers, creators, or originators of an Item. + +=head2 AuthorOfComponent + +Optional text string for the name of the author of a bibliographic +item that is a component part of another item. + +=head2 BibliographicItemId + +Optional NCIP::Item::BibliographicItemId object. + +=head2 BibliographicRecordId + +Optional NCIP::Item::BibliographicRecordId object. + +=head2 ComponentId + +Optional NCIP::Item::ComponentId object. + +=head2 Edition + +Optional text string for the edition statement that identifies all the +copies of an item produced from one master copy or substantially the +same type image, having the same contents, and, in the case of +non-book materials, issued by a particular publishing agency or group +of such agencies. + +=head2 Pagination + +Optional text string that gives number of pages or leaves in an item +or a component part of an item. + +=head2 PlaceOfPublication + +Optional text string that gives geographic location of the publisher, +or failing this, of the printer, distributor, or manufacturer. + +=head2 PublicationDate + +Optional text string that gives date of issue of an item as designated +by the publisher. + +=head2 PublicationDateOfComponent + +Optional text string that gives publication date assigned by the +publisher to the component of an item. + +=head2 Publisher + +Optional text string to indicate the name of the publisher of an item. + +=head2 SeriesTitleNumber + +Optional text string representing the name given to a group of +separate publications related to one another by the fact that each +bears a collective title applying to the group or subgroup as a whole +as well as its own title, and the number within that series assigned +to one of the pieces. + +=head2 Title + +Optional text giving the title of the item. + +=head2 TitleOfComponent + +Optional text string for the title of an item that is a component part +of another item, such as a chapter of a book, or a journal article, +etc. + +=head2 BibliographicLevel + +Optional text string for the bibliographic description of the item: +monograph, serial, collection. + +=head2 SponsoringBody + +Optional text string for the name of the body sponsoring the work. + +=head2 ElectronicDataFormatType + +Option text string identifying the format of electronic data: tiff, +rtf, jpeg, mpeg, etc. + +=head2 Language + +Optional text string that identifies the language of the item. + +=head2 MediumType + +Optional text string for the medium on the item has been produced: +audio tape, book, machine-readable computer file, compact disc, etc. + +=cut + +NCIP::Item::BibliographicDescription->mk_accessors( + qw( + Author + AuthorOfComponent + BibliographicItemId + BibliographicRecordId + ComponentId + Edition + Pagination + PlaceOfPublication + PublicationDate + PublicationDateOfComponent + Publisher + SeriesTitleNumber + Title + TitleOfComponent + BibliographicLevel + SponsoringBody + ElectronicDataFormatType + Language + MediumType + ) +); + + +1; diff --git a/lib/NCIP/Item/BibliographicItemId.pm b/lib/NCIP/Item/BibliographicItemId.pm new file mode 100644 index 0000000..613604c --- /dev/null +++ b/lib/NCIP/Item/BibliographicItemId.pm @@ -0,0 +1,55 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::BibliographicItemId; + +use parent qw(Class::Accessor); + +=head1 NAME + +BibliographicItemId - As defined in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 BibliographicItemIdentifier + +Text string that provides a resource identifier for the bibliographic +item. + +=head2 BibliographicItemIdentifierCode + +Optional text string that identifies the source of resource identifier +associated with the bibliographic item: ISBN, ISSN, ISRC, ISMN, UPC, +GTIN, Legal Deposit Number, Government Publication Number, etc. + +=cut + +NCIP::Item::BibliographicItemId->mk_accessors( + qw( + BibliographicItemIdentifier + BibliographicItemIdentifierCode + ) +); + +1; diff --git a/lib/NCIP/Item/BibliographicRecordId.pm b/lib/NCIP/Item/BibliographicRecordId.pm new file mode 100644 index 0000000..b1ee472 --- /dev/null +++ b/lib/NCIP/Item/BibliographicRecordId.pm @@ -0,0 +1,81 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::BibliographicRecordId; + +use parent qw(Class::Accessor); + +=head1 NAME + +BibliographicRecordId - As defined in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +Bibliographic Record Id consists of Bibliographic Record Identifier +and a choice of either Bibliographic Record Identifier Code OR Agency +Id. + +Occurs 0 or more times. + +None of these component elements are repeatable. + +=head1 FIELDS + +=head2 BibliographicRecordIdentifier + +Text string that identifies the machine-readable record that describes +a bibliographic item. + +Occurs 1 and only 1 time. + +=head2 AgencyId + +In this context, identifies the Agency that is the source of the +bibliographic record when that Agency is not listed explicitly as a +value in the Bibliographic Record Identifier Code. + +Occurs 1 and only 1 time, but only if Bibliographic Record Identifier +Code is not present. + +=head2 BibliographicRecordIdentifierCode + +Text string to identify the numbering scheme that uniquely identifies +a bibliographic record. Code values are usually associated with +national bibliographies or bibliographic utilities. + +Occurs 1 and only 1 time, but only if Agency Id is not present. + +Examples: ANBN (Australian National Bibliography Number), BNBN +(British National Bibliography Number), LCCN (Library of Congress +Control Number) + +=cut + +NCIP::Item::BibliographicRecordId->mk_accessors( + qw( + BibliographicRecordIdentifier + AgencyId + BibliographicRecordIdentifierCode + ) +); + +1; diff --git a/lib/NCIP/Item/ComponentId.pm b/lib/NCIP/Item/ComponentId.pm new file mode 100644 index 0000000..fc30c2d --- /dev/null +++ b/lib/NCIP/Item/ComponentId.pm @@ -0,0 +1,53 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::ComponentId; + +use parent qw(Class::Accessor); + +=head1 NAME + +ComponentId - As defined in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 ComponentIdentifierType + +Text string that identifies a component part of a bibliographic item. + +=head2 ComponentIdentifier + +Text string that identifies component part of another bibliographic +item. + +=cut + +NCIP::Item::ComponentId->mk_accessors( + qw( + ComponentIdentifierType + ComponentIdentifier + ) +); + +1; diff --git a/lib/NCIP/Item/Description.pm b/lib/NCIP/Item/Description.pm new file mode 100644 index 0000000..c7cdbaa --- /dev/null +++ b/lib/NCIP/Item/Description.pm @@ -0,0 +1,71 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::Description; + +use parent qw(Class::Accessor); + +=head1 NAME + +Description - As described in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 CallNumber + +Optional text string for the call number of the item. + +=head2 CopyNumber + +Optional text string to identify the copy number of the item. + +=head2 ItemDescriptionLevel + +Optional text string to indicate the level at which the item is +described, for example: work, copy or piece. + +=head2 HoldingsInformation + +This optional field is not supported by NCIPServer at this time. If +you fill in any information for it, that information will be ignored. + +=head2 NumberOfPieces + +Optional integer to specify the number of pieces that comprise this +item. + +=cut + +NCIP::Item::Description->mk_accessors( + qw( + CallNumber + CopyNumber + ItemDescriptionLevel + HoldingsInformation + NumberOfPieces + Ext + ) +); + +1; diff --git a/lib/NCIP/Item/OptionalFields.pm b/lib/NCIP/Item/OptionalFields.pm new file mode 100644 index 0000000..a5d8482 --- /dev/null +++ b/lib/NCIP/Item/OptionalFields.pm @@ -0,0 +1,105 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::OptionalFields; + +use parent qw(Class::Accessor); + +=head1 NAME + +OptionalFields - As defined in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 BibliographicDescription + +Optional NCIP::Item::BibliographicDescription object. + +=head2 ItemUseRestrictionType + +Optional text string to indicate special usage rules or restrictions +on the item. + +=head2 CirculationStatus + +Optional text string to indicate the current availability of a +bibliographic item: available, on loan, lost, etc. + +=head2 HoldQueueLength + +Optional, non-negative integer for the number of user who currently +have a hold on the item. + +=head2 DateDue + +Optional date value that specifies the time when the loan of an item +will end. + +=head2 ItemDescription + +Optional NCIP::Item::Description object. + +=head2 Location + +Not currently implemented. + +=head2 PhysicalCondition + +Optional NCIP::Item::PhysicalCondition object. + +=head2 ElectronicResource + +Not currently implemented. + +=head2 SecurityMarker + +Optional text sting to specify the type of security used on an item. + +=head2 SensitizationFlag + +Set to 1 when the item should be desensitized or re-sensitized during +check out and check in. + +=head2 Ext + +=cut + +NCIP::Item::OptionalFields->mk_accessors( + qw( + BibliographicDescription + ItemUseRestrictionType + CirculationStatus + HoldQueueLength + DateDue + ItemDescription + Location + PhysicalCondition + ElectronicResource + SecurityMarker + SensitizationFlag + Ext + ) +); + +1; diff --git a/lib/NCIP/Item/PhysicalCondition.pm b/lib/NCIP/Item/PhysicalCondition.pm new file mode 100644 index 0000000..242dbe7 --- /dev/null +++ b/lib/NCIP/Item/PhysicalCondition.pm @@ -0,0 +1,54 @@ +# --------------------------------------------------------------- +# Copyright © 2014 Jason J.A. Stephenson +# +# This file is part of NCIPServer. +# +# NCIPServer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# NCIPServer is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with NCIPServer. If not, see . +# --------------------------------------------------------------- +package NCIP::Item::PhysicalCondition; + +use parent qw(Class::Accessor); + +=head1 NAME + +PhysicalCondition - As defined in z39.83-1-2012 + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +=head1 FIELDS + +=head2 PhysicalConditionType + +Required text string that describes the physical condition of the +item. + +=head2 PhysicalConditionDetails + +Optional text string to provide more details about the physical +condition of the item. + +=cut + +NCIP::Item::PhysicalCondition->mk_accessors( + qw( + PhysicalConditionType + PhysicalConditionDetails + ) +); + +1; -- 2.43.2