feat(pubmed): envolver saída em ArticleSet/DOCTYPE e corrigir ordem dos elementos#1243
Open
Rossi-Luciano wants to merge 1 commit into
Open
Conversation
…os elementos pipeline_pubmed() gerava um <Article> solto, sem o envelope <ArticleSet> e DOCTYPE exigidos pela DTD do PubMed. Extrai a construção do <Article> para build_pubmed_article() e adiciona pipeline_pubmed_set() para agrupar múltiplos artigos num único <ArticleSet> (pré-requisito da scieloorg#1241). Validação contra a DTD oficial (lxml.etree.DTD + https://dtd.nlm.nih.gov/ncbi/pubmed/in/PubMed.dtd) expôs 2 bugs no pipeline, corrigidos aqui: Abstract/OtherAbstract precisavam vir antes de CopyrightInformation/CoiStatement/ObjectList/ReferenceList, e VernacularTitle nunca era chamado apesar de implementado e testado. Refs scieloorg#1226, scieloorg#1234
3 tasks
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.
O que esse PR faz?
Adiciona o envelope
<!DOCTYPE ArticleSet ...>+<ArticleSet>exigido pela DTD do PubMed à saída depacktools/sps/formats/pubmed.py, que hoje gera um<Article>solto e inválido segundo a DTD oficial.<Article>(antes inline empipeline_pubmed) parabuild_pubmed_article(xml_tree).pipeline_pubmed_set(xml_trees, pretty_print=True), que agrupa N artigos num único<ArticleSet>— pré-requisito para o processamento em lote da CLI (Pubmed XML: CLI em lote (.zip) e registro como comando instalável #1241).pipeline_pubmed(xml_tree, pretty_print=True)com a assinatura original (delega parapipeline_pubmed_set([xml_tree], ...)), então nenhum código que já chama essa função quebra.Ao validar a saída contra a DTD oficial real do PubMed (não o validador web citado na issue-mãe, que é para outro formato — ver seção de contexto), apareceram 2 bugs no pipeline existente, corrigidos neste PR:
Abstract/OtherAbstractprecisavam vir antes deCopyrightInformation/CoiStatement/ObjectList/ReferenceListno<Article>— a DTD exige essa ordem (Abstract?, OtherAbstract*, CopyrightInformation?, CoiStatement?, ObjectList?, ReferenceList*), e o pipeline gerava na ordem inversa.xml_pubmed_vernacular_title_pipenunca era chamado dentro do pipeline, apesar de implementado e coberto por teste próprio (test_xml_pubmed_vernacular_title_pipe) — código morto por falta de wiring.Onde a revisão poderia começar?
packtools/sps/formats/pubmed.py, a partir da constantePUBMED_DOCTYPEaté o fim do arquivo:xml_pubmed_article_set_pipe,build_pubmed_article,pipeline_pubmed_set,pipeline_pubmed. Nenhuma função de pipe individual (xml_pubmed_X_pipe) foi alterada — só a orquestração e ordem em volta delas.Como este poderia ser testado manualmente?
source .venv/bin/activate && python -m pytest tests/sps/formats/test_pubmed.py -v(48 passed: 46 originais + 2 novos cobrindo o envelope).DOCTYPE+<ArticleSet><Article>...</Article></ArticleSet>, não um<Article>solto.VALID: True, tanto para artigo único quanto parapipeline_pubmed_setcom 2 artigos no mesmoArticleSet.Algum cenário de contexto que queira dar?
A #1226 pede um conversor completo SPS 1.10 → PubMed XML. O módulo já existia (
pubmed.py/pubmed_generator.py, 46 testes) mas não do zero — o trabalho foi quebrado em 8 sub-issues (#1234–#1241), sendo esta a primeira (#1234), pré-requisito estrutural para o processamento em lote (#1241).O link do validador referenciado na #1226 (
ncbi.nlm.nih.gov/projects/linkout/doc/file-validator.html) é para XML de LinkOut (outro sistema NCBI, de outro formato) — colar a saída deste pipeline lá retorna "Unknown file content", que não é sinal de erro no XML gerado. A validação real precisa ser feita contra a DTD do PubMed ArticleSet (https://dtd.nlm.nih.gov/ncbi/pubmed/in/PubMed.dtd, a mesma referenciada noDOCTYPEque este PR adiciona), vialxml.etree.DTDouxmllint --dtdvalid. Foi assim que os 2 bugs de ordenação/wiring corrigidos aqui foram encontrados.Um terceiro achado da validação (
Journal/PubDateobrigatório na DTD, mas ausente quando o artigo fonte não tem data reconhecida) ficou fora do escopo deste PR e virou a #1242.Screenshots
Não se aplica — mudança em geração de XML, sem interface gráfica.
Quais são tickets relevantes?
Closes #1234. Relacionado a #1226 (issue-mãe), #1241 (depende deste PR), #1242 (achado durante a validação, escopo separado).
Referências