Skip to content

feat(pubmed): adicionar Object[@Type=grant] (financiamento) em ObjectList#1248

Open
Rossi-Luciano wants to merge 1 commit into
scieloorg:masterfrom
Rossi-Luciano:feat/1239-pubmed-object-grant
Open

feat(pubmed): adicionar Object[@Type=grant] (financiamento) em ObjectList#1248
Rossi-Luciano wants to merge 1 commit into
scieloorg:masterfrom
Rossi-Luciano:feat/1239-pubmed-object-grant

Conversation

@Rossi-Luciano

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Estende xml_pubmed_object_list (packtools/sps/formats/pubmed.py), que hoje só cobre Object[@Type="keyword"], para também gerar Object[@Type="grant"] a partir dos dados de financiamento do artigo, usando o model já existente funding_group.FundingGroup.award_groups (expõe funding-source e award-id por <award-group>).

Regras de mapeamento:

  • Cada award-id de um <award-group> vira um Object[@Type="grant"] próprio, com Param[@Name="id"].
  • Os funding-source do mesmo <award-group> viram Param[@Name="grantor"]; quando há mais de um (comum nos dados SciELO — ex. financiamento conjunto FAPESP+CAPES), são concatenados com "; ", já que o Object do PubMed só aceita um grantor por vez.
  • acronym e country (outros Param aceitos pelo PubMed para grants) não têm fonte nos dados SciELO e ficam de fora.

De quebra, corrige um bug latente: xml_pubmed_object_list criava <ObjectList> sempre que havia alguma keyword no XML, mesmo que nenhuma fosse em inglês (a única condição que efetivamente gera um Object) — podendo emitir <ObjectList/> vazio. Agora só anexa ObjectList se houver pelo menos um Object (keyword ou grant).

Onde a revisão poderia começar?

packtools/sps/formats/pubmed.py: get_award_groups, add_grant_objects (novas), e xml_pubmed_object_list (reescrita para combinar keywords + grants e só anexar ObjectList quando não vazio).

Como este poderia ser testado manualmente?

  1. Rodar a suíte: source .venv/bin/activate && python -m pytest tests/sps/formats/test_pubmed.py -v (49 passed: 46 originais + 3 novos).
  2. Testar com o padrão de financiamento do guia SPS 1.10 (múltiplos funding-source por award-group):
    from lxml import etree as ET
    from packtools.sps.formats import pubmed
    
    xml_tree = ET.fromstring('''
    <article xmlns:mml="http://www.w3.org/1998/Math/MathML"
             xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article"
             dtd-version="1.1" specific-use="sps-1.9" xml:lang="en">
      <front><article-meta>
        <funding-group>
          <award-group>
            <funding-source>FAPESP</funding-source>
            <award-id>04/08142-0</award-id>
          </award-group>
          <award-group>
            <funding-source>FAPESP</funding-source>
            <funding-source>CAPES</funding-source>
            <award-id>05/07183-0</award-id>
          </award-group>
        </funding-group>
      </article-meta></front>
    </article>
    ''')
    xml_pubmed = ET.fromstring('<Article/>')
    pubmed.xml_pubmed_object_list(xml_pubmed, xml_tree)
    print(ET.tostring(xml_pubmed, pretty_print=True).decode())
    Resultado esperado: 2 Object[@Type="grant"], o segundo com grantor = "FAPESP; CAPES".
  3. Rodar contra um artigo real sem financiamento (tests/samples/0034-7094-rba-69-03-0227.xml) para confirmar que ObjectList continua só com as keywords, sem mudança de comportamento.

Algum cenário de contexto que queira dar?

Parte da quebra da #1226 em sub-issues. Independente das demais.

Quais são tickets relevantes?

Closes #1239. Relacionado a #1226 (issue-mãe).

Referências

  • DTD oficial do PubMed: Object (Param)*, Object[@Type] sem lista fechada de valores, Param[@Name] livre — https://dtd.nlm.nih.gov/ncbi/pubmed/in/PubMed.dtd
  • Guia SciELO SPS 1.10, seção <funding-group>/<award-group>: exemplos com múltiplos funding-source por award-id

…List

Estende xml_pubmed_object_list, que hoje só cobre Object[@type=keyword],
usando funding_group.FundingGroup.award_groups (já expõe
funding-source e award-id por award-group).

Para cada award-group: funding-source(s) viram Param[@name="grantor"]
(concatenados com "; " quando há mais de um, ex. "FAPESP; CAPES", já
que o Object do PubMed só aceita um grantor por vez); cada award-id
vira um Object[@type=grant] próprio com Param[@name="id"]. acronym e
country não têm fonte nos dados SciELO, ficam de fora.

De quebra, corrige um bug latente: xml_pubmed_object_list criava
<ObjectList> sempre que havia kwd_list, mesmo sem nenhuma keyword em
inglês — podendo gerar <ObjectList/> vazio. Agora só anexa ObjectList
se houver pelo menos um Object (keyword ou grant).

Refs scieloorg#1226, scieloorg#1239
@Rossi-Luciano

Copy link
Copy Markdown
Contributor Author

Validado localmente contra a DTD oficial do PubMed (https://dtd.nlm.nih.gov/ncbi/pubmed/in/PubMed.dtd, via lxml.etree.DTD), combinando esta branch com o #1243 (#1234, necessário porque a DTD exige a raiz ArticleSet):

(O validador linkado na issue-mãe #1226 não serve para este formato — ver comentário em #1226.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pubmed XML: adicionar Object[@Type=grant] (financiamento) em ObjectList

2 participants