Tipos de problemas que podemos detectar:
Relevamiento de los campos y caracteres presentes, usando mxf0.
Subcampos?
Campos de control:
Campos de datos:
Existencias:
Ver la discusión unwanted (bogus) characters in marc, en code4lib: http://serials.infomotions.com/code4lib/archive/2010/201010/index.html
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
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.
Podemos construir algo similar (pero con menos capacidades) basado en MX.
Para detección de posibles duplicados, ver Detección de registros bibliográficos duplicados.
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
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
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
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
mx biblio "text/show=&#" now
: explicar por qué se produce esto, qué efectos tiene, cómo se corrige, y cómo se puede evitar.
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:
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/