Controles de calidad sobre bases bibliográficas MARC 21

Tipos de problemas que podemos detectar:

ausencia de elementos obligatorios

presencia de elementos incorrectos/inválidos

puntuación incorrecta

espacios en blanco?

Relevamiento de los campos y caracteres presentes, usando mxf0.

Subcampos?

Campos de control:

leader

005

008

Campos de datos:

020

022

1xx: a lo sumo uno, relación con 245 ind 1

250

260

300

440

504

505

7xx, subcampos $e, $4

8xx

856

x00: fechas en $d

Existencias:

859

Herramientas basadas en Perl

Ver http://home.inwave.com/eija/

MARC::Lint

Código fuente, versión 1.42: http://search.cpan.org/src/EIJABB/MARC-Lint-1.42/lib/MARC/Lint.pm

Necesita: MARC::Record, MARC::Field, MARC::Lint::CodeData

MARC::Errorchecks

Module for storing MARC error checking subroutines, based on MARC 21, AACR2, and LCRIs. These are used to find errors not easily checked by the MARC::Lint and MARC::Lintadditions modules, such as those that cross field boundaries.

Herramientas basadas en MX

Podemos construir algo similar (pero con menos capacidades) basado en MX.

Registros duplicados

Para detección de posibles duplicados, ver Detección de registros bibliográficos duplicados.

Múltiples campos 1xx

De acuerdo con las reglas AACR2, en un registro bibliográfico no podemos tener más de un campo 1xx (que corresponde al punto de acceso principal). Mediante el siguiente comando podemos detectar en cuáles registros se ha violado dicha restricción:

mx biblio "pft=if size(v100.1,v110.1,v111.1,v130.1) > 1 then 'MFN: ',mfn,x5,'Registro: ',v1/|100: |v100/ |110: |v110/ |111: |v111/ |130: |v130/# fi" now lw=500

También podemos hacer esa búsqueda desde Catalis, escribiendo esto en el formulario de búsqueda por condición booleana:

size(v100.1,v110.1,v111.1,v130.1) > 1

Fechas en campos x00

En el subcampo x00$d (x=1,6,7,8) a veces se encuentran fechas entre paréntesis, o una forma más completa del nombre (que debe ir al x00$q).

mx biblio "pft=if v100^d:'(' then 'mfn:'mfn,x3,'reg:'v1,x3,|100: |v100/ fi" lw=500 now
mx biblio "pft=( if v600^d:'(' then 'mfn:'mfn,x3,'reg:'v1[1],x3,|600: |v600/ fi )" lw=500 now
mx biblio "pft=( if v700^d:'(' then 'mfn:'mfn,x3,'reg:'v1[1],x3,|700: |v700/ fi )" lw=500 now
mx biblio "pft=( if v800^d:'(' then 'mfn:'mfn,x3,'reg:'v1[1],x3,|800: |v800/ fi )" lw=500 now

Campos x10 que deben ser x11

Nombres de conferencias (x11) cargados por error en un x10:

Atención: Es correcto usar un x10 para el nombre de una reunión, cuando el punto de acceso se establece usando el nombre de una entidad corporativa. Así que este método puede estar encontrando solamente falsos positivos.

mx biblio "pft=if v110:'^d' then 'mfn:'mfn,x3,'reg:'v1,/,|110: |v110/# fi" now lw=500
mx biblio "pft=( if v610:'^d' then 'mfn:'mfn,x3,'reg:'v1[1],/,|610: |v610/# fi )" now lw=500
mx biblio "pft=( if v710:'^d' then 'mfn:'mfn,x3,'reg:'v1[1],/,|710: |v710/# fi )" now lw=500
mx biblio "pft=( if v810:'^d' then 'mfn:'mfn,x3,'reg:'v1[1],/,|810: |v810/# fi )" now lw=500

Orden de subcampos

En un campo x00, el subcampo $d no puede estar ubicado antes de un subcampo $q:

mx biblio "pft=if v100:'^d' and v100:'^q' and instr(v100,'^d') < instr(v100,'^q') then 'mfn:'mfn,x3,'reg:'v1,/,|100: |v100/ fi" now lw=500
mx biblio "pft=( if v600:'^d' and v600:'^q' and instr(v600,'^d') < instr(v600,'^q') then 'mfn:'mfn,x3,'reg:'v1[1],/,|600: |v600/ fi )" now lw=500
mx biblio "pft=( if v700:'^d' and v700:'^q' and instr(v700,'^d') < instr(v700,'^q') then 'mfn:'mfn,x3,'reg:'v1[1],/,|700: |v700/ fi )" now lw=500
mx biblio "pft=( if v800:'^d' and v800:'^q' and instr(v800,'^d') < instr(v800,'^q') then 'mfn:'mfn,x3,'reg:'v1[1],/,|800: |v800/ fi )" now lw=500

Entidades HTML

mx biblio "text/show=&#" now

: explicar por qué se produce esto, qué efectos tiene, cómo se corrige, y cómo se puede evitar.

Verificación de URLs

Si bien puede haber URLs en otros campos, lo más común es que aparezcan en el 856. Aquí generamos un archivo HTML con los siguientes datos para cada registro que contiene un campo 856:

campo 001

campo 991 (ID del catalogador)

campo 245

todas las ocurrencias del campo 856

mx biblio "pft=if p(v856) then \
'<p>',v1,' ['v991']<br>'/, \
proc('a1000~',replace(v245*3,'^','~a1000~'),'~'), (x1,v1000*1),'<br>'/, \
( x1,v856^3|: |, |<a href='|v856^u|'>|v856^u|</a><br>|/ )#, \
'</p>'/ \
fi" \
now lw=300 > campo856.html

El archivo HTML resultante se puede analizar con cualquier herramienta para verificación de links, p.ej. http://validator.w3.org/checklink/