X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FAuthoritiesMarc.pm;h=e30c571b032f012ae292f601ab374041c313877f;hb=144c7f4e4e023f7a701a1e58524409628295343b;hp=703ea75a4fa4165a904d679cb762db3b351df654;hpb=a598b100613a37dc2710090cb381dce56eae2f26;p=koha.git
diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm
index 703ea75a4f..e30c571b03 100644
--- a/C4/AuthoritiesMarc.pm
+++ b/C4/AuthoritiesMarc.pm
@@ -26,12 +26,13 @@ use C4::AuthoritiesMarc::MARC21;
use C4::AuthoritiesMarc::UNIMARC;
use C4::Charset;
use C4::Log;
+use Koha::Authority;
use vars qw($VERSION @ISA @EXPORT);
BEGIN {
# set the version for version checking
- $VERSION = 3.01;
+ $VERSION = 3.07.00.049;
require Exporter;
@ISA = qw(Exporter);
@@ -46,14 +47,15 @@ BEGIN {
&DelAuthority
&GetAuthority
&GetAuthorityXML
-
+
&CountUsage
&CountUsageChildren
&SearchAuthorities
- &BuildSummary
- &BuildUnimarcHierarchies
- &BuildUnimarcHierarchy
+ &BuildSummary
+ &BuildAuthHierarchies
+ &BuildAuthHierarchy
+ &GenerateHierarchy
&merge
&FindDuplicateAuthority
@@ -199,22 +201,30 @@ sub SearchAuthorities {
}
} else {
my $query;
- my $attr;
+ my $qpquery = '';
+ my $QParser;
+ $QParser = C4::Context->queryparser if (C4::Context->preference('UseQueryParser'));
+ my $attr = '';
# the marclist may contain "mainentry". In this case, search the tag_to_report, that depends on
# the authtypecode. Then, search on $a of this tag_to_report
# also store main entry MARC tag, to extract it at end of search
my $mainentrytag;
##first set the authtype search and may be multiple authorities
- my $n=0;
- my @authtypecode;
- my @auths=split / /,$authtypecode ;
- foreach my $auth (@auths){
- $query .=" \@attr 1=authtype \@attr 5=100 ".$auth; ##No truncation on authtype
- push @authtypecode ,$auth;
- $n++;
- }
- if ($n>1){
- while ($n>1){$query= "\@or ".$query;$n--;}
+ if ($authtypecode) {
+ my $n=0;
+ my @authtypecode;
+ my @auths=split / /,$authtypecode ;
+ foreach my $auth (@auths){
+ $query .=" \@attr 1=authtype \@attr 5=100 ".$auth; ##No truncation on authtype
+ push @authtypecode ,$auth;
+ $n++;
+ }
+ if ($n>1){
+ while ($n>1){$query= "\@or ".$query;$n--;}
+ }
+ if ($QParser) {
+ $qpquery .= '(authtype:' . join('|| authtype:', @auths) . ')';
+ }
}
my $dosearch;
@@ -230,9 +240,6 @@ sub SearchAuthorities {
elsif ( @$tags[$i] eq "mainentry" ) {
$attr = " \@attr 1=Heading ";
}
- elsif ( @$tags[$i] eq "any" ) {
- $attr = " \@attr 1=Any ";
- }
elsif ( @$tags[$i] eq "match" ) {
$attr = " \@attr 1=Match ";
}
@@ -245,6 +252,9 @@ sub SearchAuthorities {
elsif ( @$tags[$i] eq "thesaurus" ) {
$attr = " \@attr 1=Subject-heading-thesaurus ";
}
+ else { # Assume any if no index was specified
+ $attr = " \@attr 1=Any ";
+ }
if ( @$operator[$i] eq 'is' ) {
$attr .= " \@attr 4=1 \@attr 5=100 "
; ##Phrase, No truncation,all of subfield field must match
@@ -263,12 +273,18 @@ sub SearchAuthorities {
else {
$attr .= " \@attr 5=1 \@attr 4=6 "
; ## Word list, right truncated, anywhere
+ if ($sortby eq 'Relevance') {
+ $attr .= "\@attr 2=102 ";
+ }
}
@$value[$i] =~ s/"/\\"/g; # Escape the double-quotes in the search value
$attr =$attr."\"".@$value[$i]."\"";
$q2 .=$attr;
$dosearch=1;
++$attr_cnt;
+ if ($QParser) {
+ $qpquery .= " $tags->[$i]:$value->[$i]";
+ }
}#if value
}
##Add how many queries generated
@@ -285,12 +301,25 @@ sub SearchAuthorities {
} elsif ($sortby eq 'HeadingDsc') {
$orderstring = '@attr 7=2 @attr 1=Heading 0';
} elsif ($sortby eq 'AuthidAsc') {
- $orderstring = '@attr 7=1 @attr 1=Local-Number 0';
+ $orderstring = '@attr 7=1 @attr 4=109 @attr 1=Local-Number 0';
} elsif ($sortby eq 'AuthidDsc') {
- $orderstring = '@attr 7=2 @attr 1=Local-Number 0';
+ $orderstring = '@attr 7=2 @attr 4=109 @attr 1=Local-Number 0';
+ }
+ if ($QParser) {
+ $qpquery .= ' all:all' unless $value->[0];
+
+ if ( $value->[0] =~ m/^qp=(.*)$/ ) {
+ $qpquery = $1;
+ }
+
+ $qpquery .= " #$sortby";
+
+ $QParser->parse( $qpquery );
+ $query = $QParser->target_syntax('authorityserver');
+ } else {
+ $query=($query?$query:"\@attr 1=_ALLRECORDS \@attr 2=103 ''");
+ $query="\@or $orderstring $query" if $orderstring;
}
- $query=($query?$query:"\@attr 1=_ALLRECORDS \@attr 2=103 ''");
- $query="\@or $orderstring $query" if $orderstring;
$offset=0 unless $offset;
my $counter = $offset;
@@ -351,6 +380,12 @@ sub SearchAuthorities {
$reported_tag .= '$' . $_->[0] . $_->[1];
}
}
+ my $thisauthtype = GetAuthType(GetAuthTypeCode($authid));
+ unless (defined $thisauthtype) {
+ $thisauthtype = GetAuthType($authtypecode) if $authtypecode;
+ }
+ $newline{authtype} = defined($thisauthtype) ?
+ $thisauthtype->{'authtypetext'} : '';
$newline{summary} = $summary;
$newline{even} = $counter % 2;
$newline{reported_tag} = $reported_tag;
@@ -393,7 +428,7 @@ sub CountUsage {
} else {
### ZOOM search here
my $query;
- $query= "an=".$authid;
+ $query= "an:".$authid;
my ($err,$res,$result) = C4::Search::SimpleSearch($query,0,10);
if ($err) {
warn "Error: $err from search $query";
@@ -693,17 +728,18 @@ sub AddAuthority {
if ($format eq "UNIMARCAUTH") {
$record->leader(" nx j22 ") unless ($record->leader());
- my $date=POSIX::strftime("%Y%m%d",localtime);
+ my $date=POSIX::strftime("%Y%m%d",localtime);
+ my $defaultfield100 = C4::Context->preference('UNIMARCAuthorityField100');
if (my $string=$record->subfield('100',"a")){
$string=~s/fre50/frey50/;
$record->field('100')->update('a'=>$string);
}
elsif ($record->field('100')){
- $record->field('100')->update('a'=>$date."afrey50 ba0");
+ $record->field('100')->update('a'=>$date.$defaultfield100);
} else {
$record->append_fields(
MARC::Field->new('100',' ',' '
- ,'a'=>$date."afrey50 ba0")
+ ,'a'=>$date.$defaultfield100)
);
}
}
@@ -844,19 +880,9 @@ Returns MARC::Record of the authority passed in parameter.
sub GetAuthority {
my ($authid)=@_;
- my $dbh=C4::Context->dbh;
- my $sth=$dbh->prepare("select authtypecode, marcxml from auth_header where authid=?");
- $sth->execute($authid);
- my ($authtypecode, $marcxml) = $sth->fetchrow;
- my $record=eval {MARC::Record->new_from_xml(StripNonXmlChars($marcxml),'UTF-8',
- (C4::Context->preference("marcflavour") eq "UNIMARC"?"UNIMARCAUTH":C4::Context->preference("marcflavour")))};
- return undef if ($@);
- $record->encoding('UTF-8');
- if (C4::Context->preference("marcflavour") eq "MARC21") {
- my ($auth_type_tag, $auth_type_subfield) = get_auth_type_location($authtypecode);
- C4::AuthoritiesMarc::MARC21::fix_marc21_auth_type_location($record, $auth_type_tag, $auth_type_subfield);
- }
- return ($record);
+ my $authority = Koha::Authority->get_from_authid($authid);
+ return unless $authority;
+ return ($authority->record);
}
=head2 GetAuthType
@@ -907,11 +933,19 @@ sub FindDuplicateAuthority {
$sth->finish;
# warn "record :".$record->as_formatted." auth_tag_to_report :$auth_tag_to_report";
# build a request for SearchAuthorities
- my $query='at='.$authtypecode.' ';
+ my $QParser;
+ $QParser = C4::Context->queryparser if (C4::Context->preference('UseQueryParser'));
+ my $op;
+ if ($QParser) {
+ $op = '&&';
+ } else {
+ $op = 'and';
+ }
+ my $query='at:'.$authtypecode.' ';
my $filtervalues=qr([\001-\040\!\'\"\`\#\$\%\&\*\+,\-\./:;<=>\?\@\(\)\{\[\]\}_\|\~]);
if ($record->field($auth_tag_to_report)) {
foreach ($record->field($auth_tag_to_report)->subfields()) {
- $_->[1]=~s/$filtervalues/ /g; $query.= " and he,wrdl=\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
+ $_->[1]=~s/$filtervalues/ /g; $query.= " $op he:\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
}
}
my ($error, $results, $total_hits) = C4::Search::SimpleSearch( $query, 0, 1, [ "authorityserver" ] );
@@ -926,9 +960,9 @@ sub FindDuplicateAuthority {
=head2 BuildSummary
- $text= &BuildSummary( $record, $authid, $authtypecode)
+ $summary= &BuildSummary( $record, $authid, $authtypecode)
-return HTML encoded Summary
+Returns a hashref with a summary of the specified record.
Comment : authtypecode can be infered from both record and authid.
Moreover, authid can also be inferred from $record.
@@ -936,176 +970,298 @@ Would it be interesting to delete those things.
=cut
-sub BuildSummary{
-## give this a Marc record to return summary
- my ($record,$authid,$authtypecode)=@_;
- my $dbh=C4::Context->dbh;
- my $summary;
- # handle $authtypecode is NULL or eq ""
- if ($authtypecode) {
- my $authref = GetAuthType($authtypecode);
- $summary = $authref->{summary};
- }
- # FIXME: should use I18N.pm
- my %language;
- $language{'fre'}="Français";
- $language{'eng'}="Anglais";
- $language{'ger'}="Allemand";
- $language{'ita'}="Italien";
- $language{'spa'}="Espagnol";
- my %thesaurus;
- $thesaurus{'1'}="Peuples";
- $thesaurus{'2'}="Anthroponymes";
- $thesaurus{'3'}="Oeuvres";
- $thesaurus{'4'}="Chronologie";
- $thesaurus{'5'}="Lieux";
- $thesaurus{'6'}="Sujets";
- #thesaurus a remplir
- my @fields = $record->fields();
- my $reported_tag;
- # if the library has a summary defined, use it. Otherwise, build a standard one
- # FIXME - it appears that the summary field in the authority frameworks
- # can work as a display template. However, this doesn't
- # suit the MARC21 version, so for now the "templating"
- # feature will be enabled only for UNIMARC for backwards
- # compatibility.
- if ($summary and C4::Context->preference('marcflavour') eq 'UNIMARC') {
- my @fields = $record->fields();
- # $reported_tag = '$9'.$result[$counter];
- my @stringssummary;
- foreach my $field (@fields) {
- my $tag = $field->tag();
- my $tagvalue = $field->as_string();
- my $localsummary= $summary;
- $localsummary =~ s/\[(.?.?.?.?)$tag\*(.*?)\]/$1$tagvalue$2\[$1$tag$2\]/g;
- if ($tag<10) {
- if ($tag eq '001') {
- $reported_tag.='$3'.$field->data();
+sub BuildSummary {
+ ## give this a Marc record to return summary
+ my ($record,$authid,$authtypecode)=@_;
+ my $dbh=C4::Context->dbh;
+ my %summary;
+ # handle $authtypecode is NULL or eq ""
+ if ($authtypecode) {
+ my $authref = GetAuthType($authtypecode);
+ $summary{authtypecode} = $authref->{authtypecode};
+ $summary{type} = $authref->{authtypetext};
+ $summary{summary} = $authref->{summary};
+ }
+ my $marc21subfields = 'abcdfghjklmnopqrstuvxyz68';
+ my %marc21controlrefs = ( 'a' => 'earlier',
+ 'b' => 'later',
+ 'd' => 'acronym',
+ 'f' => 'musical',
+ 'g' => 'broader',
+ 'h' => 'narrower',
+ 'n' => 'notapplicable',
+ 'i' => 'subfi',
+ 't' => 'parent'
+ );
+ my %unimarc_relation_from_code = (
+ g => 'broader',
+ h => 'narrower',
+ a => 'seealso',
+ );
+ my %thesaurus;
+ $thesaurus{'1'}="Peuples";
+ $thesaurus{'2'}="Anthroponymes";
+ $thesaurus{'3'}="Oeuvres";
+ $thesaurus{'4'}="Chronologie";
+ $thesaurus{'5'}="Lieux";
+ $thesaurus{'6'}="Sujets";
+ #thesaurus a remplir
+ my $reported_tag;
+# if the library has a summary defined, use it. Otherwise, build a standard one
+# FIXME - it appears that the summary field in the authority frameworks
+# can work as a display template. However, this doesn't
+# suit the MARC21 version, so for now the "templating"
+# feature will be enabled only for UNIMARC for backwards
+# compatibility.
+ if ($summary{summary} and C4::Context->preference('marcflavour') eq 'UNIMARC') {
+ my @fields = $record->fields();
+# $reported_tag = '$9'.$result[$counter];
+ my @stringssummary;
+ foreach my $field (@fields) {
+ my $tag = $field->tag();
+ my $tagvalue = $field->as_string();
+ my $localsummary= $summary{summary};
+ $localsummary =~ s/\[(.?.?.?.?)$tag\*(.*?)\]/$1$tagvalue$2\[$1$tag$2\]/g;
+ if ($tag<10) {
+ if ($tag eq '001') {
+ $reported_tag.='$3'.$field->data();
+ }
+ } else {
+ my @subf = $field->subfields;
+ for my $i (0..$#subf) {
+ my $subfieldcode = $subf[$i][0];
+ my $subfieldvalue = $subf[$i][1];
+ my $tagsubf = $tag.$subfieldcode;
+ $localsummary =~ s/\[(.?.?.?.?)$tagsubf(.*?)\]/$1$subfieldvalue$2\[$1$tagsubf$2\]/g;
+ }
+ }
+ push @stringssummary, $localsummary if ($localsummary ne $summary{summary});
}
- } else {
- my @subf = $field->subfields;
- for my $i (0..$#subf) {
- my $subfieldcode = $subf[$i][0];
- my $subfieldvalue = $subf[$i][1];
- my $tagsubf = $tag.$subfieldcode;
- $localsummary =~ s/\[(.?.?.?.?)$tagsubf(.*?)\]/$1$subfieldvalue$2\[$1$tagsubf$2\]/g;
+ my $resultstring;
+ $resultstring = join(" -- ",@stringssummary);
+ $resultstring =~ s/\[(.*?)\]//g;
+ $resultstring =~ s/\n/
/g;
+ $summary{summary} = $resultstring;
+ }
+ my @authorized;
+ my @notes;
+ my @seefrom;
+ my @seealso;
+ my @otherscript;
+ if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
+# construct UNIMARC summary, that is quite different from MARC21 one
+# accepted form
+ foreach my $field ($record->field('2..')) {
+ push @authorized, { heading => $field->as_string('abcdefghijlmnopqrstuvwxyz'), field => $field->tag() };
+ }
+# rejected form(s)
+ foreach my $field ($record->field('3..')) {
+ push @notes, { note => $field->subfield('a'), field => $field->tag() };
+ }
+ foreach my $field ($record->field('4..')) {
+ my $thesaurus = $field->subfield('2') ? "thes. : ".$thesaurus{"$field->subfield('2')"}." : " : '';
+ push @seefrom, { heading => $thesaurus . $field->as_string('abcdefghijlmnopqrstuvwxyz'), type => 'seefrom', field => $field->tag() };
+ }
+
+ # see :
+ @seealso = map {
+ my $type = $unimarc_relation_from_code{$_->subfield('5') || 'a'};
+ my $heading = $_->as_string('abcdefgjxyz');
+ {
+ field => $_->tag,
+ type => $type,
+ heading => $heading,
+ search => $heading,
+ authid => $_->subfield('9'),
+ }
+ } $record->field('5..');
+
+ # Other forms
+ @otherscript = map { {
+ lang => $_->subfield('8') || '',
+ term => $_->subfield('a'),
+ direction => 'ltr',
+ field => $_->tag,
+ } } $record->field('7..');
+
+ } else {
+# construct MARC21 summary
+# FIXME - looping over 1XX is questionable
+# since MARC21 authority should have only one 1XX
+ my $subfields_to_report;
+ foreach my $field ($record->field('1..')) {
+ my $tag = $field->tag();
+ next if "152" eq $tag;
+# FIXME - 152 is not a good tag to use
+# in MARC21 -- purely local tags really ought to be
+# 9XX
+ if ($tag eq '100') {
+ $subfields_to_report = 'abcdefghjklmnopqrstvxyz';
+ } elsif ($tag eq '110') {
+ $subfields_to_report = 'abcdefghklmnoprstvxyz';
+ } elsif ($tag eq '111') {
+ $subfields_to_report = 'acdefghklnpqstvxyz';
+ } elsif ($tag eq '130') {
+ $subfields_to_report = 'adfghklmnoprstvxyz';
+ } elsif ($tag eq '148') {
+ $subfields_to_report = 'abvxyz';
+ } elsif ($tag eq '150') {
+ $subfields_to_report = 'abvxyz';
+ } elsif ($tag eq '151') {
+ $subfields_to_report = 'avxyz';
+ } elsif ($tag eq '155') {
+ $subfields_to_report = 'abvxyz';
+ } elsif ($tag eq '180') {
+ $subfields_to_report = 'vxyz';
+ } elsif ($tag eq '181') {
+ $subfields_to_report = 'vxyz';
+ } elsif ($tag eq '182') {
+ $subfields_to_report = 'vxyz';
+ } elsif ($tag eq '185') {
+ $subfields_to_report = 'vxyz';
+ }
+ if ($subfields_to_report) {
+ push @authorized, { heading => $field->as_string($subfields_to_report), field => $tag };
+ } else {
+ push @authorized, { heading => $field->as_string(), field => $tag };
+ }
+ }
+ foreach my $field ($record->field('4..')) { #See From
+ my $type = 'seefrom';
+ $type = ($marc21controlrefs{substr $field->subfield('w'), 0, 1} || '') if ($field->subfield('w'));
+ if ($type eq 'notapplicable') {
+ $type = substr $field->subfield('w'), 2, 1;
+ $type = 'earlier' if $type && $type ne 'n';
+ }
+ if ($type eq 'subfi') {
+ push @seefrom, { heading => $field->as_string($marc21subfields), type => ($field->subfield('i') || ''), field => $field->tag() };
+ } else {
+ push @seefrom, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
+ }
+ }
+ foreach my $field ($record->field('5..')) { #See Also
+ my $type = 'seealso';
+ $type = ($marc21controlrefs{substr $field->subfield('w'), 0, 1} || '') if ($field->subfield('w'));
+ if ($type eq 'notapplicable') {
+ $type = substr $field->subfield('w'), 2, 1;
+ $type = 'earlier' if $type && $type ne 'n';
+ }
+ if ($type eq 'subfi') {
+ push @seealso, {
+ heading => $field->as_string($marc21subfields),
+ type => $field->subfield('i'),
+ field => $field->tag(),
+ search => $field->as_string($marc21subfields) || '',
+ authid => $field->subfield('9') || ''
+ };
+ } else {
+ push @seealso, {
+ heading => $field->as_string($marc21subfields),
+ type => $type,
+ field => $field->tag(),
+ search => $field->as_string($marc21subfields) || '',
+ authid => $field->subfield('9') || ''
+ };
+ }
+ }
+ foreach my $field ($record->field('6..')) {
+ push @notes, { note => $field->as_string(), field => $field->tag() };
+ }
+ foreach my $field ($record->field('880')) {
+ my $linkage = $field->subfield('6');
+ my $category = substr $linkage, 0, 1;
+ if ($category eq '1') {
+ $category = 'preferred';
+ } elsif ($category eq '4') {
+ $category = 'seefrom';
+ } elsif ($category eq '5') {
+ $category = 'seealso';
+ }
+ my $type;
+ if ($field->subfield('w')) {
+ $type = $marc21controlrefs{substr $field->subfield('w'), '0'};
+ } else {
+ $type = $category;
+ }
+ my $direction = $linkage =~ m#/r$# ? 'rtl' : 'ltr';
+ push @otherscript, { term => $field->as_string($subfields_to_report), category => $category, type => $type, direction => $direction, linkage => $linkage };
}
- }
- push @stringssummary, $localsummary if ($localsummary ne $summary);
}
- my $resultstring;
- $resultstring = join(" -- ",@stringssummary);
- $resultstring =~ s/\[(.*?)\]//g;
- $resultstring =~ s/\n/
/g;
- $summary = $resultstring;
- } else {
- my $heading = '';
- my $altheading = '';
- my $seealso = '';
- my $broaderterms = '';
- my $narrowerterms = '';
- my $see = '';
- my $seeheading = '';
- my $notes = '';
- my @fields = $record->fields();
+ $summary{mainentry} = $authorized[0]->{heading};
+ $summary{authorized} = \@authorized;
+ $summary{notes} = \@notes;
+ $summary{seefrom} = \@seefrom;
+ $summary{seealso} = \@seealso;
+ $summary{otherscript} = \@otherscript;
+ return \%summary;
+}
+
+=head2 GetAuthorizedHeading
+
+ $heading = &GetAuthorizedHeading({ record => $record, authid => $authid })
+
+Takes a MARC::Record object describing an authority record or an authid, and
+returns a string representation of the first authorized heading. This routine
+should be considered a temporary shim to ease the future migration of authority
+data from C4::AuthoritiesMarc to the object-oriented Koha::*::Authority.
+
+=cut
+
+sub GetAuthorizedHeading {
+ my $args = shift;
+ my $record;
+ unless ($record = $args->{record}) {
+ return unless $args->{authid};
+ $record = GetAuthority($args->{authid});
+ }
if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
- # construct UNIMARC summary, that is quite different from MARC21 one
- # accepted form
- foreach my $field ($record->field('2..')) {
- $heading.= $field->as_string('abcdefghijlmnopqrstuvwxyz');
- }
- # rejected form(s)
- foreach my $field ($record->field('3..')) {
- $notes.= ''.$field->subfield('a')."\n";
- }
- foreach my $field ($record->field('4..')) {
- if ($field->subfield('2')) {
- my $thesaurus = "thes. : ".$thesaurus{"$field->subfield('2')"}." : ";
- $see.= ''.$thesaurus.$field->as_string('abcdefghijlmnopqrstuvwxyz')." -- \n";
+# construct UNIMARC summary, that is quite different from MARC21 one
+# accepted form
+ foreach my $field ($record->field('2..')) {
+ return $field->as_string('abcdefghijlmnopqrstuvwxyz');
}
- }
- # see :
- foreach my $field ($record->field('5..')) {
-
- if (($field->subfield('5')) && ($field->subfield('a')) && ($field->subfield('5') eq 'g')) {
- $broaderterms.= ' '.$field->as_string('abcdefgjxyz')." -- \n";
- } elsif (($field->subfield('5')) && ($field->as_string) && ($field->subfield('5') eq 'h')){
- $narrowerterms.= ''.$field->as_string('abcdefgjxyz')." -- \n";
- } elsif ($field->subfield('a')) {
- $seealso.= ''.$field->as_string('abcdefgxyz')." -- \n";
+ } else {
+ foreach my $field ($record->field('1..')) {
+ my $tag = $field->tag();
+ next if "152" eq $tag;
+# FIXME - 152 is not a good tag to use
+# in MARC21 -- purely local tags really ought to be
+# 9XX
+ if ($tag eq '100') {
+ return $field->as_string('abcdefghjklmnopqrstvxyz68');
+ } elsif ($tag eq '110') {
+ return $field->as_string('abcdefghklmnoprstvxyz68');
+ } elsif ($tag eq '111') {
+ return $field->as_string('acdefghklnpqstvxyz68');
+ } elsif ($tag eq '130') {
+ return $field->as_string('adfghklmnoprstvxyz68');
+ } elsif ($tag eq '148') {
+ return $field->as_string('abvxyz68');
+ } elsif ($tag eq '150') {
+ return $field->as_string('abvxyz68');
+ } elsif ($tag eq '151') {
+ return $field->as_string('avxyz68');
+ } elsif ($tag eq '155') {
+ return $field->as_string('abvxyz68');
+ } elsif ($tag eq '180') {
+ return $field->as_string('vxyz68');
+ } elsif ($tag eq '181') {
+ return $field->as_string('vxyz68');
+ } elsif ($tag eq '182') {
+ return $field->as_string('vxyz68');
+ } elsif ($tag eq '185') {
+ return $field->as_string('vxyz68');
+ } else {
+ return $field->as_string();
+ }
}
- }
- # // form
- foreach my $field ($record->field('7..')) {
- my $lang = substr($field->subfield('8'),3,3);
- $seeheading.= ' En '.$language{$lang}.' : '.$field->subfield('a')."
\n";
- }
- $broaderterms =~s/-- \n$//;
- $narrowerterms =~s/-- \n$//;
- $seealso =~s/-- \n$//;
- $see =~s/-- \n$//;
- $summary = $heading."
".($notes?"$notes
":"");
- $summary.= '