Skip to content

Bug: pipeline_pubmed gera <ArticleIdList/> vazio quando a referência não possui IDs #1214

@Rossi-Luciano

Description

@Rossi-Luciano

Descrição

Em packtools/sps/formats/pubmed.py, a função xml_pubmed_citations adiciona um elemento <ArticleIdList/> vazio para referências (<ref>) que não possuem IDs (PMID/PMCID/DOI), quando o esperado é não adicionar o elemento nesse caso.

Causa

def xml_pubmed_citations(xml_pubmed, xml_tree):
    ...
    for ref in refs:
        ref_el = ET.Element("Reference")
        citation = ET.Element("Citation")
        citation.text = ref.get("mixed_citation")
        ref_el.append(citation)
        ids = ref.get("citation_ids")
        if ids is not None:
            ref_el.append(add_element_citation_id(ids))
        xml.append(ref_el)

Quando a referência não possui IDs, ref.get("citation_ids") retorna {} (dict vazio), não None. Como a checagem é if ids is not None, o código entra no if e chama add_element_citation_id({}), que retorna um <ArticleIdList/> sem filhos — gerando <Reference><Citation>...</Citation><ArticleIdList/></Reference> em vez de <Reference><Citation>...</Citation></Reference>.

Como reproduzir

.venv/bin/python -m pytest tests/sps/formats/test_pubmed.py::PipelinePubmed::test_xml_pubmed_citations_without_article_list_id -q
AssertionError: '<Art[173 chars]ion><ArticleIdList/></Reference>...' != '<Art[173 chars]ion></Reference>...'

Sugestão de correção

Trocar if ids is not None: por if ids: (checagem de truthiness), para não criar <ArticleIdList> quando o dicionário de IDs estiver vazio.

Contexto

Identificado durante revisão/execução da suíte tests/sps/formats (conversor SciELO → PubMed).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions