Evite que `biber --tool` elimine campos no estándar en archivos .bib

Evite que `biber --tool` elimine campos no estándar en archivos .bib

Esta pregunta era sobre un efecto secundario encontrado enesta respuesta. Una forma de evitar este efecto secundario es no utilizar biber sino bibtool -biblatexcomo se indica enesta respuesta.

Estoy usando biber --toolpara eliminar automáticamente campos como ,, abstracty de las entradas biblatex en archivos .bib. Un efecto secundario de esto es que todos los campos no estándar¹ parecen eliminarse también, lo cual quiero evitar. Aquí hay un ejemplo mínimo:reviewgroupsfile

Esta es la entrada en el archivo .bib mybib.bib:

@Thesis{Author_18_TheThesis,
 author           = {Mr Author},
 title            = {The Thesis},
 type             = {Doctoral Dissertation},
 institution      = {Department of Documents, University of Stackexchange},
 year             = {2018},
 abstract         = {This is the abstract.},
 file             = {:author/Author_18_TheThesis.pdf:PDF},
 review           = {This is the review.},
 groups           = {publications},
 ispreprintpublic = {true},
}

Y este es el clean-bibfiles.confarchivo de configuración para biber --tool:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <output_fieldcase>lower</output_fieldcase>
    <output_indent>2</output_indent>
    <output_align>true</output_align>
    <sourcemap>
        <maps datatype="bibtex" map_overwrite="1">
            <map map_overwrite="1">
                <map_step map_field_set="abstract" map_null="1"/>
                <map_step map_field_set="review" map_null="1"/>
                <map_step map_field_set="groups" map_null="1"/>
                <map_step map_field_set="file" map_null="1"/>
            </map>
        </maps>
    </sourcemap>
</config>

La ejecución biber --tool --configfile=clean-bibfiles.conf mybib.bibproducirá un mybib_bibertool.bibarchivo que contiene esta entrada biblatex:

@thesis{Author_18_TheThesis,
  author      = {Author, Mr},
  institution = {Department of Documents, University of Stackexchange},
  date        = {2018},
  title       = {The Thesis},
  type        = {Doctoral Dissertation},
}

El campo no estándar ispreprintpublicha sido eliminado de la entrada. Para ser precisos, los campos groupsy reviewtambién se eliminarían incluso si no estuvieran en el mapa fuente, ya que ambos también son campos no estándar o están "prestados" del tipo de artículo, respectivamente. ¿Cómo evitar la eliminación automática de dichos campos cuando se utiliza biber --tool?


¹Consulte, por ejemplo, "2.1.1 Tipos regulares" y "4.2.4.1 Campos genéricos" en ladocumentación biblatex.

Respuesta1

De hecho, biberno maneja campos que no sean parte del modelo de datos, por lo que si su fuente de datos tiene campos o tipos de entrada no estándar, debe proporcionar biberun modelo de datos que los incluya.

Pero, antes de continuar con esta tarea, es una buena idea saber qué falta realmente en el modelo de datos predeterminado que necesita. Puedes hacerlo con la --validate-datamodelopción:

biber --tool --validate-datamodel mybib.bib

En un archivo .bib que contiene esa entrada suya, le brinda las siguientes advertencias:

WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'review' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'groups' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'ispreprintpublic' invalid in data model - ignoring

Lo que te permite saber con precisión que debes incluir los campos reviewy el modelo de datos.groupsispreprintpublic

(Por supuesto, agregar reviewy groupsal modelo de datos para luego colocarlos en el mapa fuente no sería lo "habitual". Solo lo hago aquí por razones de generalidad y procedimiento).

Para configurar su archivo personalizado biber-tool.conf(lo llamó clean-bibfiles.conf, mantengámoslo así, pero en general hay otras operaciones que se pueden lograr mediante este procedimiento), tendrá que ajustar el modelo de datos para incluir las líneas de su archivo no estándar. campo(s) dentro del <fields>...</fields>grupo. En su caso (asumiendo que aquí se trata de campos de tipo "literal"):

<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>

Y, dentro del grupo <entryfields><entrytype>thesis</entrytype>...</entryfields>agrega:

<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>

El resultado clean-bibfiles.confentonces debería ser:

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <output_fieldcase>title</output_fieldcase>
  <output_indent>2</output_indent>
  <output_align>true</output_align>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map map_overwrite="1">
        <map_step map_field_set="abstract" map_null="1"/>
        <map_step map_field_set="review" map_null="1"/>
        <map_step map_field_set="groups" map_null="1"/>
        <map_step map_field_set="file" map_null="1"/>
      </map>
    </maps>
  </sourcemap>
  <datamodel>
    <fields>
      <field fieldtype="field" datatype="literal">review</field>
      <field fieldtype="field" datatype="literal">groups</field>
      <field fieldtype="field" datatype="literal">ispreprintpublic</field>
    </fields>
    <entryfields>
      <entrytype>thesis</entrytype>
      <field>review</field>
      <field>groups</field>
      <field>ispreprintpublic</field>
    </entryfields>
  </datamodel>
</config>

Con este archivo de configuración, el comando:

biber --tool --validate-datamodel --configfile=clean-bibfiles.conf mybib.bib

saldrá mybib_bibertool.bibcon la entrada como se desee:

@Thesis{Author_18_TheThesis,
  Author           = {Author, Mr},
  Institution      = {Department of Documents, University of Stackexchange},
  Date             = {2018},
  Ispreprintpublic = {test},
  Title            = {The Thesis},
  Type             = {Doctoral Dissertation},
}

Para verificar el modelo de datos predeterminado y la configuración, puede encontrar la ubicación predeterminada biber-tool.confcon:

biber --tool-config

Puede que esto no sea especialmente sencillo. Pero, para citar a PLKcomentarioarriba: "Los beneficios de tener un modelo de datos en modo herramienta superan este tipo de problema".

información relacionada