Impedir que `biber --tool` remova campos não padrão em arquivos .bib

Impedir que `biber --tool` remova campos não padrão em arquivos .bib

Esta pergunta era sobre um efeito colateral encontrado emesta resposta. Uma maneira de evitar esse efeito colateral é não usar biber, mas bibtool -biblatexconforme indicado emesta resposta.

Estou usando biber --toolpara remover automaticamente campos como abstract, review, groupse filede entradas biblatex em arquivos .bib. Um efeito colateral disso é que todos os campos não padrão¹ também parecem ter sido removidos, o que quero evitar. Aqui está um exemplo mínimo:

Esta é a entrada no arquivo .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},
}

E este é o clean-bibfiles.confarquivo de configuração 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>

A execução biber --tool --configfile=clean-bibfiles.conf mybib.bibproduzirá um mybib_bibertool.bibarquivo que contém esta entrada do biblatex:

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

O campo não padrão ispreprintpublicfoi removido da entrada. Para ser mais preciso, os campos groupse reviewtambém seriam removidos mesmo que não estivessem no mapa de origem, pois ambos também são campos não padrão ou são "emprestados" do tipo de artigo, respectivamente. Como evitar a remoção automática de tais campos ao usar biber --tool?


¹Veja, por exemplo, "2.1.1 Tipos Regulares" e "4.2.4.1 Campos Genéricos" nadocumentação biblatex.

Responder1

Na verdade, bibernão lida com campos que não fazem parte do modelo de dados; portanto, se sua fonte de dados tiver campos ou tipos de entrada não padrão, você deverá fornecer biberum modelo de dados que os inclua.

Mas, antes de prosseguir com esta tarefa, é uma boa ideia saber o que realmente está faltando no modelo de dados padrão que você precisa. Você pode fazer isso com a --validate-datamodelopção:

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

Em um arquivo .bib contendo essa sua entrada, você recebe os seguintes avisos:

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

O que permite saber exatamente que você deve incluir os campos reviewe o modelo de dados.groupsispreprintpublic

(É claro que adicionar reviewe groupsao modelo de dados para depois soltá-los no mapa de origem não seria o "usual". Estou apenas fazendo isso aqui por uma questão de generalidade e procedimento.)

Para definir seu biber-tool.confarquivo personalizado (você o chamou de clean-bibfiles.conf, vamos mantê-lo assim, mas em geral existem outras operações que podem ser realizadas através deste procedimento), você terá que ajustar o modelo de dados para incluir a(s) linha(s) do seu arquivo não-padrão. campo(s) dentro do <fields>...</fields>grupo. No seu caso (assumindo aqui que estes são campos do tipo "literal"):

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

E, dentro do grupo <entryfields><entrytype>thesis</entrytype>...</entryfields>adicione:

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

O resultado clean-bibfiles.confdeverá então 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>

Com este arquivo de configuração, o comando:

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

irá gerar mybib_bibertool.biba entrada conforme desejado:

@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 o modelo de dados e a configuração padrão, você pode encontrar o local do padrão biber-tool.confcom:

biber --tool-config

Isto pode não ser especialmente simples. Mas, para citar PLKComenteacima: "Os benefícios de ter um modelo de dados no modo ferramenta superam esse tipo de problema."

informação relacionada