[Koha-cvs] CVS: koha/marc File.pm,NONE,1.1 USMARC.pm,NONE,1.1 fill_usmarc.pl,1.1,1.2 marcschema.sql,1.14,1.15
Paul POULAIN
tipaul at users.sourceforge.net
Wed Jul 24 17:52:55 CEST 2002
- Previous message: [Koha-cvs] CVS: koha-html/intranet-html/includes/templates/default/marcimport AcceptBiblioitem.tmpl,NONE,1.1 marcimportdetail.tmpl,NONE,1.1 AcceptMarcUpload.tmpl,NONE,1.1 mainmenu.tmpl,NONE,1.1 AcceptItemCopy.tmpl,NONE,1.1 ListFileRecords.tmpl,NONE,1.1 uploadmarc.tmpl,NONE,1.1
- Next message: [Koha-cvs] CVS: koha/C4 Output.pm,1.13,1.14 Database.pm,1.4,1.5 Biblio.pm,1.4,1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/koha/koha/marc
In directory usw-pr-cvs1:/tmp/cvs-serv22490
Modified Files:
fill_usmarc.pl marcschema.sql
Added Files:
File.pm USMARC.pm
Log Message:
1st scripts for MARC-DB.
WARNING : YOU MUST DO THE FOLLOWING IF YOU EXPECT THE MAIN-BRANCH TO WORK.
* install MARC::Record package, from cpan or sourceforge
* OVERWRITE File.pm and USMARC.pm. The original misses 1 functionnality we absolutly need in koha (reading a MARC from a variable, not from a file). Thanks to Steve, who modified MARC::Record.
* modify your DB by adding marcschema.sql tables
* populate new tables by launching fill_usmarc.pl
Then, it should work...
What works exactly will come in the next commit, in a few minuts (hitchcock suspens...)
--- NEW FILE ---
package MARC::File;
=head1 NAME
MARC::File - Base class for files of MARC records
=cut
use 5.6.0;
use strict;
use integer;
use vars qw( $VERSION $ERROR );
=head1 VERSION
Version 0.93
$Id: File.pm,v 1.1 2002/07/24 15:52:53 tipaul Exp $
=cut
our $VERSION = '0.93';
=head1 SYNOPSIS
use MARC::File::USMARC;
my $file = MARC::File::USMARC->in( $filename );
while ( my $marc = $file->next() ) {
# Do something
}
$file->close();
undef $file;
=head1 EXPORT
None.
=head1 METHODS
=head2 in()
Opens a file for input.
=cut
sub in {
my $class = shift;
my $filename = shift;
my $self = {
filename => $filename,
};
bless $self, $class;
if ( !open( $self->{fh}, "<", $filename ) ) {
undef $self;
$MARC::File::ERROR = "Couldn't open $filename: $!";
}
return $self;
} # new()
sub indata {
my $class = shift;
my $data = shift;
my $self = {
fh => '',
data => $data,
pointer => 0,
};
bless $self, $class;
# if ( !open( $self->{fh}, "<", $filename ) ) {
# undef $self;
# $MARC::File::ERROR = "Couldn't open $filename: $!";
# }
return $self;
} # new()
sub out {
die "Not yet written";
}
=head2 next()
Reads the next record from the file handle passed in.
=cut
sub next {
my $self = shift;
my $rec = $self->_next();
return $rec ? $self->decode($rec) : undef;
}
=head2 skip
Skips over the next record in the file. Same as C<next()>,
without the overhead of parsing a record you're going to throw away
anyway.
Returns 1 or undef.
=cut
sub skip {
my $self = shift;
my $rec = $self->_next();
return $rec ? 1 : undef;
}
sub close {
my $self = shift;
close( $self->{fh} );
delete $self->{fh};
return;
}
sub _unimplemented() {
my $self = shift;
my $method = shift;
warn "Method $method must be overridden";
}
sub write { $_[0]->_unimplemented("write"); }
sub decode { $_[0]->_unimplemented("decode"); }
# NOTE: _gripe can be called as an object method, or not. Your choice.
sub _gripe(@) {
if ( @_ ) {
shift if ref($_[0]) =~ /^MARC::File/; # Skip first parm if it's a $self
$ERROR = join( "", @_ );
}
return undef;
}
1;
__END__
=head1 RELATED MODULES
L<MARC::Record>
=head1 TODO
=over 4
=item * C<out()> method
We only handle files for input right now.
=back
=cut
=head1 LICENSE
This code may be distributed under the same terms as Perl itself.
Please note that these modules are not products of or supported by the
employers of the various contributors to the code.
=head1 AUTHOR
Andy Lester, E<lt>marc at petdance.comE<gt> or E<lt>alester at flr.follett.comE<gt>
=cut
--- NEW FILE ---
package MARC::File::USMARC;
=head1 NAME
MARC::File::USMARC - USMARC-specific file handling
=cut
use 5.6.0;
use strict;
use integer;
use vars qw( $VERSION $ERROR );
=head1 VERSION
Version 0.93
$Id: USMARC.pm,v 1.1 2002/07/24 15:52:53 tipaul Exp $
=cut
our $VERSION = '0.93';
use MARC::File;
our @ISA = qw( MARC::File );
use MARC::Record qw( LEADER_LEN );
use constant SUBFIELD_INDICATOR => "\x1F";
use constant END_OF_FIELD => "\x1E";
use constant END_OF_RECORD => "\x1D";
use constant DIRECTORY_ENTRY_LEN => 12;
=head1 SYNOPSIS
use MARC::File::USMARC;
my $file = MARC::File::USMARC::in( $filename );
while ( my $marc = $file->next() ) {
# Do something
}
$file->close();
undef $file;
=head1 EXPORT
None.
=head1 METHODS
=for internal
Internal function to get the next raw record out of a file.
=cut
sub _next {
my $self = shift;
if ($self->{fh}) {
my $fh = $self->{fh};
my $reclen;
read( $fh, $reclen, 5 )
or return $self->_gripe( "Error reading record length: $!" );
$reclen =~ /^\d{5}$/
or return $self->_gripe( "Invalid record length \"$reclen\"" );
my $usmarc = $reclen;
read( $fh, substr($usmarc,5), $reclen-5 )
or return $self->_gripe( "Error reading $reclen byte record: $!" );
return $usmarc;
} elsif (defined($self->{data})) {
my $data=$self->{data};
my $pointer=$self->{pointer};
my $reclen;
$reclen=substr($data,$pointer,5);
$reclen=~/^\d{5}$/
or return $self->_gripe( "Invalid record length \"$reclen\"" );
my $usmarc=substr($data,$pointer,$reclen);
$self->{pointer}=$pointer+$reclen;
return $usmarc;
}
}
=head2 decode()
Constructor for handling data from a USMARC file. This function takes care of all
the tag directory parsing & mangling.
Any warnings or coercions can be checked in the C<warnings()> function.
=cut
sub decode {
my $text = shift;
$text = shift if (ref($text)||$text) =~ /^MARC::File/;
my $marc = MARC::Record->new();
# Check for an all-numeric record length
($text =~ /^(\d{5})/)
or return $marc->_gripe( "Record length \"", substr( $text, 0, 5 ), "\" is not numeric" );
my $reclen = $1;
($reclen == length($text))
or return $marc->_gripe( "Invalid record length: Leader says $reclen bytes, but it's actually ", length( $text ) );
$marc->leader( substr( $text, 0, LEADER_LEN ) );
my @fields = split( END_OF_FIELD, substr( $text, LEADER_LEN ) );
my $dir = shift @fields or return _gripe( "No directory found" );
(length($dir) % 12 == 0)
or return $marc->_gripe( "Invalid directory length" );
my $nfields = length($dir)/12;
my $finalfield = pop @fields;
# Check for the record terminator, and ignore it
($finalfield eq END_OF_RECORD)
or $marc->_warn( "Invalid record terminator: \"$finalfield\"" );
# Walk thru the directories, and shift off the fields while we're at it
# Shouldn't be any non-digits anywhere in any directory entry
my @directory = unpack( "A3 A4 A5" x $nfields, $dir );
my @bad = grep /\D/, @directory;
if ( @bad ) {
return $marc->_gripe( "Non-numeric entries in the tag directory: ", join( ", ", map { "\"$_\"" } @bad ) );
}
my $databytesused = 0;
while ( @directory ) {
my $tagno = shift @directory;
my $len = shift @directory;
my $offset = shift @directory;
my $tagdata = shift @fields;
# Check directory validity
($tagno =~ /^\d\d\d$/)
or return $marc->_gripe( "Invalid field number in directory: \"$tagno\"" );
($len == length($tagdata) + 1)
or $marc->_warn( "Invalid length in the directory for tag $tagno" );
($offset == $databytesused)
or $marc->_warn( "Directory offsets are out of whack" );
$databytesused += $len;
if ( $tagno < 10 ) {
$marc->add_fields( $tagno, $tagdata )
or return undef; # We're relying on add_fields() having set $MARC::Record::ERROR
} else {
my @subfields = split( SUBFIELD_INDICATOR, $tagdata );
my $indicators = shift @subfields
or return $marc->_gripe( "No subfields found." );
my ($ind1,$ind2);
if ( $indicators =~ /^([0-9 ])([0-9 ])$/ ) {
($ind1,$ind2) = ($1,$2);
} else {
$marc->_warn( "Invalid indicators \"$indicators\" forced to blanks\n" );
($ind1,$ind2) = (" "," ");
}
# Split the subfield data into subfield name and data pairs
my @subfield_data = map { (substr($_,0,1),substr($_,1)) } @subfields;
$marc->add_fields( $tagno, $ind1, $ind2, @subfield_data )
or return undef;
}
} # while
# Once we're done, there shouldn't be any fields left over: They should all have shifted off.
(@fields == 0)
or return $marc->_gripe( "I've got leftover fields that weren't in the directory" );
return $marc;
}
=head2 update_leader()
If any changes get made to the MARC record, the first 5 bytes of the
leader (the length) will be invalid. This function updates the
leader with the correct length of the record as it would be if
written out to a file.
=cut
sub update_leader() {
my $self = shift;
my (undef,undef,$reclen,$baseaddress) = $self->_build_tag_directory();
$self->_set_leader_lengths( $reclen, $baseaddress );
}
=head2 _build_tag_directory()
Function for internal use only: Builds the tag directory that gets
put in front of the data in a MARC record.
Returns two array references, and two lengths: The tag directory, and the data fields themselves,
the length of all data (including the Leader that we expect will be added),
and the size of the Leader and tag directory.
=cut
sub _build_tag_directory {
my $marc = shift;
$marc = shift if (ref($marc)||$marc) =~ /^MARC::File/;
die "Wanted a MARC::Record but got a ", ref($marc) unless ref($marc) eq "MARC::Record";
my @fields;
my @directory;
my $dataend = 0;
for my $field ( $marc->fields() ) {
# Dump data into proper format
my $str = $field->as_usmarc;
push( @fields, $str );
# Create directory entry
my $len = length $str;
my $direntry = sprintf( "%03d%04d%05d", $field->tag, $len, $dataend );
push( @directory, $direntry );
$dataend += $len;
}
my $baseaddress =
LEADER_LEN + # better be 24
( @directory * DIRECTORY_ENTRY_LEN ) +
# all the directory entries
1; # end-of-field marker
my $total =
$baseaddress + # stuff before first field
$dataend + # Length of the fields
1; # End-of-record marker
return (\@fields, \@directory, $total, $baseaddress);
}
=head2 encode()
Returns a string of characters suitable for writing out to a USMARC file,
including the leader, directory and all the fields.
=cut
sub encode() {
my $marc = shift;
$marc = shift if (ref($marc)||$marc) =~ /^MARC::File/;
my ($fields,$directory,$reclen,$baseaddress) = _build_tag_directory($marc);
$marc->set_leader_lengths( $reclen, $baseaddress );
# Glomp it all together
return join("",$marc->leader, @$directory, END_OF_FIELD, @$fields, END_OF_RECORD);
}
1;
__END__
=head1 RELATED MODULES
L<MARC::Record>
=head1 TODO
Make some sort of autodispatch so that you don't have to explicitly
specify the MARC::File::X subclass, sort of like how DBI knows to
use DBD::Oracle or DBD::Mysql.
=head1 LICENSE
This code may be distributed under the same terms as Perl itself.
Please note that these modules are not products of or supported by the
employers of the various contributors to the code.
=head1 AUTHOR
Andy Lester, E<lt>marc at petdance.comE<gt> or E<lt>alester at flr.follett.comE<gt>
=cut
Index: fill_usmarc.pl
===================================================================
RCS file: /cvsroot/koha/koha/marc/fill_usmarc.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** fill_usmarc.pl 16 May 2002 16:20:40 -0000 1.1
--- fill_usmarc.pl 24 Jul 2002 15:52:53 -0000 1.2
***************
*** 10,26 ****
my $tag;
my $subfield;
my $reqtag=$dbh->prepare("insert into marc_tag_structure (tagfield,liblibrarian,repeatable) values (?,?,?)");
my $reqsubfield=$dbh->prepare("insert into marc_subfield_structure (tagfield,tagsubfield,liblibrarian,repeatable) values (?,?,?,?)");
foreach $tag (sort keys %$fields) {
$reqtag->execute($tag,$fields->{$tag}->{"name"},$fields->{$tag}->{"repeating"});
foreach $subfield (sort keys %{$fields->{$tag}->{"subfields"}}) {
! $reqsubfield->execute(
! $tag,
! $subfield,
! $fields->{$tag}->{"subfields"}->{$subfield}->{"description"}?$fields->{$tag}->{"subfields"}->{$subfield}->{"description"}:"Unknown",
! $fields->{$tag}->{"subfields"}->{$subfield}->{"repeating"}
! );
}
}
sub marcdefs {
--- 10,93 ----
my $tag;
my $subfield;
+ $dbh->do("delete from marc_tag_structure");
+ $dbh->do("delete from marc_subfield_structure");
my $reqtag=$dbh->prepare("insert into marc_tag_structure (tagfield,liblibrarian,repeatable) values (?,?,?)");
my $reqsubfield=$dbh->prepare("insert into marc_subfield_structure (tagfield,tagsubfield,liblibrarian,repeatable) values (?,?,?,?)");
+ my $description;
foreach $tag (sort keys %$fields) {
$reqtag->execute($tag,$fields->{$tag}->{"name"},$fields->{$tag}->{"repeating"});
foreach $subfield (sort keys %{$fields->{$tag}->{"subfields"}}) {
! if ($fields->{$tag}->{"subfields"}->{$subfield}->{"description"}) {
! $description=$fields->{$tag}->{"subfields"}->{$subfield}->{"description"};
! } else {
! $description=$fields->{$tag}->{"subfields"}->{$subfield}->{"name"};
! }
! $reqsubfield->execute(
! $tag,
! $subfield,
! $description?$description:"Unknown",
! $fields->{$tag}->{"subfields"}->{$subfield}->{"repeating"}
! );
}
}
+ #---- now we populate the tables with the link between koha-DB and MARC-DB
+ # items
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.title' where tagfield='245' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.subtitle' where tagfield='245' and tagsubfield='b'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.unititle' where tagfield='246' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.seriestitle' where tagfield='440' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.copyrightdate' where tagfield='245' and tagsubfield='f'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.copyrightdate' where tagfield='260' and tagsubfield='c'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.notes' where tagfield='504' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.author' where tagfield='100' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.author' where tagfield='100' and tagsubfield='b'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.author' where tagfield='100' and tagsubfield='c'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.author' where tagfield='100' and tagsubfield='d'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.subject' where tagfield='650' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblio.biblionumber' where tagfield='090' and tagsubfield='c'");
+ # biblioitems
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.biblioitemnumber' where tagfield='090' and tagsubfield='d'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.volume' where tagfield='440' and tagsubfield='v'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.number' where tagfield='440' and tagsubfield='n'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.itemtype' where tagfield='852' and tagsubfield='k'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.isbn' where tagfield='020' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.issn' where tagfield='022' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.dewey' where tagfield='082' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.subclass' where tagfield='852' and tagsubfield='m'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.place' where tagfield='260' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.publishercode' where tagfield='260' and tagsubfield='b'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.publicationyear' where tagfield='260' and tagsubfield='c'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.pages' where tagfield='300' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.size' where tagfield='300' and tagsubfield='c'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.notes' where tagfield='500' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='biblioitems.lccn' where tagfield='010' and tagsubfield='a'");
+ # items
+ $dbh->do("update marc_subfield_structure set kohafield='items.itemnumber' where tagfield='890' and tagsubfield='c'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.multivolumepart' where tagfield='XXX' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.barcode' where tagfield='852' and tagsubfield='p'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.dateaccessioned' where tagfield='876' and tagsubfield='d'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.booksellerid' where tagfield='876' and tagsubfield='e'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.homebranch' where tagfield='876' and tagsubfield='b'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.replacementprice' where tagfield='876' and tagsubfield='c'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.price' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.replacementpricedate' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.datelastborrowed' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.datelastseen' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.multivolume' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.stack' where tagfield='XXX' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.notforloan' where tagfield='876' and tagsubfield='h'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.itemlost' where tagfield='876' and tagsubfield='j'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.wthdrawn' where tagfield='876' and tagsubfield='k'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.bulk' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.issues' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.renewals' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.reserves' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.restricted' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.binding' where tagfield='XXX' and tagsubfield='a'");
+ $dbh->do("update marc_subfield_structure set kohafield='items.itemnotes' where tagfield='876' and tagsubfield='z'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.holdingbranch' where tagfield='XXX' and tagsubfield='a'");
+ #$dbh->do("update marc_subfield_structure set kohafield='items.interim' where tagfield='XXX' and tagsubfield='a'");
+ # additional authors
+ $dbh->do("update marc_subfield_structure set kohafield='additionalauthors.additionalauthors' where tagfield='700' and tagsubfield='a'");
sub marcdefs {
***************
*** 5250,5260 ****
$fields->{'090'}->{'firstindicator'}="Undefined";
$fields->{'090'}->{'secondindicator'}="Undefined";
! $fields->{'090'}->{'subfields'}->{"a"}->{'name'}="Itemtype (NR)";
$fields->{'090'}->{'subfields'}->{"a"}->{'repeating'}=0;
! $fields->{'090'}->{'subfields'}->{"b"}->{'name'}="Dewey Subclass (NR)";
$fields->{'090'}->{'subfields'}->{"b"}->{'repeating'}=0;
! $fields->{'090'}->{'subfields'}->{"c"}->{'name'}="biblionumber (NR)";
$fields->{'090'}->{'subfields'}->{"c"}->{'repeating'}=0;
! $fields->{'090'}->{'subfields'}->{"d"}->{'name'}="biblioitemnumber (NR)";
$fields->{'090'}->{'subfields'}->{"d"}->{'repeating'}=0;
$fields->{'091'}->{'name'}="MICROFILM SHELF LOCATION (AM) [OBSOLETE]";
--- 5317,5327 ----
$fields->{'090'}->{'firstindicator'}="Undefined";
$fields->{'090'}->{'secondindicator'}="Undefined";
! $fields->{'090'}->{'subfields'}->{"a"}->{'name'}="Koha Itemtype (NR)";
$fields->{'090'}->{'subfields'}->{"a"}->{'repeating'}=0;
! $fields->{'090'}->{'subfields'}->{"b"}->{'name'}="Koha Dewey Subclass (NR)";
$fields->{'090'}->{'subfields'}->{"b"}->{'repeating'}=0;
! $fields->{'090'}->{'subfields'}->{"c"}->{'name'}="Koha biblionumber (NR)";
$fields->{'090'}->{'subfields'}->{"c"}->{'repeating'}=0;
! $fields->{'090'}->{'subfields'}->{"d"}->{'name'}="Koha biblioitemnumber (NR)";
$fields->{'090'}->{'subfields'}->{"d"}->{'repeating'}=0;
$fields->{'091'}->{'name'}="MICROFILM SHELF LOCATION (AM) [OBSOLETE]";
***************
*** 9813,9816 ****
--- 9880,9885 ----
$fields->{'876'}->{'subfields'}->{"p"}->{'name'}="Piece designation (R)";
$fields->{'876'}->{'subfields'}->{"p"}->{'repeating'}=1;
+ $fields->{'876'}->{'subfields'}->{"z"}->{'name'}="Note (R)";
+ $fields->{'876'}->{'subfields'}->{"z"}->{'repeating'}=1;
$fields->{'876'}->{'subfields'}->{"8"}->{'name'}="Field link and sequence number (R)";
$fields->{'876'}->{'subfields'}->{"8"}->{'repeating'}=1;
***************
*** 9842,9845 ****
--- 9911,9920 ----
$fields->{'886'}->{'subfields'}->{"2"}->{'name'}="Source of data (NR) $a-z - Foreign MARC subfield (R) $0-9 - Foreign MARC subfield (R)";
$fields->{'886'}->{'subfields'}->{"2"}->{'repeating'}=0;
+ $fields->{'890'}->{'name'}="KOHA item number";
+ $fields->{'890'}->{'repeating'}=1;
+ $fields->{'890'}->{'firstindicator'}="Undefined";
+ $fields->{'890'}->{'secondindicator'}="Undefined";
+ $fields->{'890'}->{'subfields'}->{"c"}->{'name'}="Koha biblio number";
+ $fields->{'890'}->{'subfields'}->{"c"}->{'repeating'}=1;
;
Index: marcschema.sql
===================================================================
RCS file: /cvsroot/koha/koha/marc/marcschema.sql,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** marcschema.sql 4 Jun 2002 08:13:31 -0000 1.14
--- marcschema.sql 24 Jul 2002 15:52:53 -0000 1.15
***************
*** 2,5 ****
--- 2,18 ----
#
# $Log$
+ # Revision 1.15 2002/07/24 15:52:53 tipaul
+ # 1st scripts for MARC-DB.
+ #
+ # WARNING : YOU MUST DO THE FOLLOWING IF YOU EXPECT THE MAIN-BRANCH TO WORK.
+ #
+ # * install MARC::Record package, from cpan or sourceforge
+ # * OVERWRITE File.pm and USMARC.pm. The original misses 1 functionnality we absolutly need in koha (reading a MARC from a variable, not from a file). Thanks to Steve, who modified MARC::Record.
+ # * modify your DB by adding marcschema.sql tables
+ # * populate new tables by launching fill_usmarc.pl
+ #
+ # Then, it should work...
+ # What works exactly will come in the next commit, in a few minuts (hitchcock suspens...)
+ #
# Revision 1.14 2002/06/04 08:13:31 tipaul
# ouuppsss... forget the 1.13 version, i made a mistake. This version works and should be the last
***************
*** 27,35 ****
CREATE TABLE marc_biblio (
bibid bigint(20) unsigned NOT NULL auto_increment,
datecreated date NOT NULL default '0000-00-00',
datemodified date default NULL,
origincode char(20) default NULL,
PRIMARY KEY (bibid),
! KEY origincode (origincode)
) TYPE=MyISAM;
--- 40,50 ----
CREATE TABLE marc_biblio (
bibid bigint(20) unsigned NOT NULL auto_increment,
+ biblionumber int(20) unsigned NOT NULL,
datecreated date NOT NULL default '0000-00-00',
datemodified date default NULL,
origincode char(20) default NULL,
PRIMARY KEY (bibid),
! KEY origincode (origincode),
! KEY biblionumber (biblionumber)
) TYPE=MyISAM;
- Previous message: [Koha-cvs] CVS: koha-html/intranet-html/includes/templates/default/marcimport AcceptBiblioitem.tmpl,NONE,1.1 marcimportdetail.tmpl,NONE,1.1 AcceptMarcUpload.tmpl,NONE,1.1 mainmenu.tmpl,NONE,1.1 AcceptItemCopy.tmpl,NONE,1.1 ListFileRecords.tmpl,NONE,1.1 uploadmarc.tmpl,NONE,1.1
- Next message: [Koha-cvs] CVS: koha/C4 Output.pm,1.13,1.14 Database.pm,1.4,1.5 Biblio.pm,1.4,1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Koha-cvs
mailing list