feat(pubmed): implementar GroupList/Group/GroupName/IndividualName#1246
Open
Rossi-Luciano wants to merge 4 commits into
Open
feat(pubmed): implementar GroupList/Group/GroupName/IndividualName#1246Rossi-Luciano wants to merge 4 commits into
Rossi-Luciano wants to merge 4 commits into
Conversation
Implementa add_suffix e add_collective_name em
packtools/sps/formats/pubmed.py, usando dados já expostos pelo model
article_contribs.Contrib (contrib_name["suffix"] e collab).
A DTD do PubMed exige que <Author> tenha nome pessoal
(FirstName/MiddleName/LastName/Suffix) OU CollectiveName, nunca os
dois: (((FirstName, MiddleName?, LastName, Suffix?, Initials?) |
CollectiveName), affiliation, Identifier*). xml_pubmed_author_list
agora respeita essa exclusividade: contribs com <collab> (sem <name>)
geram só CollectiveName, os demais geram FirstName/LastName/Suffix
como antes.
Corrige também um bug em get_affiliations: contribs sem afiliação
vinculada (comum no caso de CollectiveName, cujo único xref costuma
ser para author-notes) não tinham a chave "affs" no dict, causando
TypeError ao iterar author_reg.get("affs"). Agora usa
`or []` como fallback.
Refs scieloorg#1226, scieloorg#1236
Para autoria em grupo no padrão SPS 1.10:
<contrib-group>
<contrib contrib-type="author" id="collab">
<collab>The SciELO Group</collab>
</contrib>
</contrib-group>
<contrib-group content-type="collab-list">
<contrib contrib-type="author" rid="collab">
<name>...</name>
</contrib>
...
</contrib-group>
xml_pubmed_author_list agora exclui de AuthorList os contribs de
contrib-group[@Content-Type="collab-list"] (antes ficavam achatados
como Author comuns, duplicando a autoria do grupo). Uma nova função
xml_pubmed_group_list monta GroupList/Group/GroupName/IndividualName
a partir desses mesmos contribs, reaproveitando add_first_name,
add_last_name, add_suffix, add_affiliations e add_orcid (mesma forma
de dict usada em AuthorList, já expõe contrib-group-type via
article_contribs.TextContribs.main_contribs).
GroupName vem do <collab> do contrib-group irmão (sem
content-type). Segue a ordem exigida pela DTD do PubMed dentro de
Article: AuthorList?, GroupList?, PublicationType*.
Refs scieloorg#1226, scieloorg#1237
3 tasks
Collaborator
Author
|
Validado localmente contra a DTD oficial do PubMed (
(O validador linkado na issue-mãe #1226 não serve para este formato — ver comentário em #1226.) |
A DTD do PubMed exige FirstName e LastName sempre juntos em Author (nenhum dos dois é opcional isoladamente): Author (((FirstName, MiddleName?, LastName, Suffix?, Initials?) | CollectiveName), ...) Encontrado ao validar a saída da CLI em lote (scieloorg#1241) contra a DTD real usando tests/samples/example.xml: um contrib tem <given-names> mas não tem <surname>, gerando <Author><FirstName>...</FirstName>...</Author> sem <LastName> — inválido segundo a DTD (confirmado empiricamente: Author só com FirstName ou só com LastName sempre falha a validação). add_first_name e add_last_name agora caem para o outro campo quando o esperado está ausente, duplicando o único nome disponível em ambos — preserva a identificação do autor em vez de descartá-lo ou gerar XML inválido. Refs scieloorg#1226, scieloorg#1236
Collaborator
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Nota: esta branch parte de
feat/1236-pubmed-suffix-collective-name(PR #1245, ainda não mergeado), porque depende diretamente da lógica de exclusividadeAuthor(nome pessoal vs.CollectiveName) implementada lá. O diff abaixo inclui os commits do #1245 até ele ser mergeado emmaster— depois disso, o diff deste PR encolhe automaticamente para só as mudanças novas deGroupList.O que esse PR faz?
Implementa
GroupList/Group/GroupName/IndividualNameno conversor SPS → PubMed XML para artigos com autoria em grupo, seguindo o padrão SPS 1.10:Antes deste PR,
xml_pubmed_author_listachatava os membros docollab-listcomoAuthorcomuns dentro deAuthorList, duplicando a autoria do grupo sem nenhuma referência ao grupo em si. Agora:xml_pubmed_author_listexclui daAuthorListos contribs comcontrib-group-type == "collab-list"(mantém neles apenas oAuthorcomCollectiveName, do PR feat(pubmed): adicionar Suffix e CollectiveName em AuthorList #1245).xml_pubmed_group_listmontaGroupList/Group/GroupName/IndividualNamea partir desses mesmos contribs, reaproveitandoadd_first_name,add_last_name,add_suffix,add_affiliations,add_orcid— o dado já vem com a chavecontrib-group-typeexposta pelo modelarticle_contribs.TextContribs.main_contribs, não precisou alterar nenhum model.xml_pubmed_group_listinserida logo apósxml_pubmed_author_listno pipeline, seguindo a ordem exigida pela DTD do PubMed (AuthorList?, GroupList?, PublicationType*).Limitação conhecida: se um artigo tiver mais de um grupo de autoria simultâneo (mais de um
<collab>isolado), este PR não distingue qualcollab-listpertence a qual grupo — todos os membros do(s)collab-listsão colocados sob um únicoGroup. Não há exemplo desse cenário nem no guia SPS 1.10 nem nos arquivos de teste; o padrão observado sempre tem um grupo só por artigo.Onde a revisão poderia começar?
packtools/sps/formats/pubmed.py:xml_pubmed_author_list(filtro adicionado no início), e as funções novasget_group_members,get_group_name,add_individual_name,xml_pubmed_group_list.Como este poderia ser testado manualmente?
source .venv/bin/activate && python -m pytest tests/sps/formats/test_pubmed.py -v(51 passed: 48 do PR feat(pubmed): adicionar Suffix e CollectiveName em AuthorList #1245 + 3 novos aqui).AuthorListcom um únicoAuthor/CollectiveName, eGroupList/GroupcomGroupName+ 2IndividualName(Felipe Esteves, Joyce Souza), cada um com afiliação e ORCID quando disponível.tests/samples/0034-7094-rba-69-03-0227.xml) para confirmar queAuthorListnão muda eGroupListsimplesmente não é gerado.Algum cenário de contexto que queira dar?
Última peça da quebra de autoria da #1226/#1236 em sub-issues.
Quais são tickets relevantes?
Closes #1237. Depende de #1245 (#1236). Relacionado a #1226 (issue-mãe).
Referências
GroupList (Group+),Group (GroupName?, IndividualName+),IndividualName (FirstName, MiddleName?, LastName, Suffix?, affiliation, Identifier*)— https://dtd.nlm.nih.gov/ncbi/pubmed/in/PubMed.dtd<contrib>: exemplo "Autores pertencentes a um grupo"