Objetivo
Implementar validações para o elemento <ref-list> conforme a especificação SPS 1.10 e Critérios SciELO Brasil, aumentando a conformidade de X% para 70% (14 de 20 regras).
Nota: Algumas validações para <ref-list> podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10 e Critérios SciELO Brasil.
Contexto
O elemento <ref-list> representa o conjunto de referências bibliográficas de um documento. Para SciELO Brasil, é obrigatório em todos os documentos indexáveis (exceto errata, retratação, adendo, manifestação de preocupação e parecer). Cada referência deve conter <mixed-citation> (apresentação) e <element-citation> (dados estruturados para métricas). Validações corretas garantem conformidade com critérios SciELO Brasil, presença de elementos obrigatórios, e qualidade dos metadados bibliográficos.
Conformidade atual: X de 20 regras implementadas (X%)
Meta após implementação: 14 de 20 regras (70%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.reflist
Regras principais conforme SPS 1.10 e Critérios SciELO Brasil:
Ocorrência:
<ref-list> aparece em <back> uma ou mais vezes
Pode aparecer aninhado dentro de <ref-list>
Obrigatoriedade (Critério SciELO Brasil):
<ref-list> é obrigatório em documentos indexáveis
Exceções: errata, retratação, adendo, manifestação de preocupação, parecer
Estrutura obrigatória:
<ref-list> deve conter pelo menos um <ref>
<ref> deve conter <mixed-citation> E <element-citation>
Atributo obrigatório em <element-citation>:
@publication-type (obrigatório)
Valores permitidos para @publication-type:
book - Livros, capítulos de livros
confproc - Atas, anais, proceedings de eventos
data - Dados de pesquisa (datasets)
database - Bases de dados
journal - Artigos de periódicos científicos
legal-doc - Normas jurídicas
letter - Cartas e comunicações pessoais
newspaper - Artigos de jornal
patent - Patentes
preprint - Preprints
report - Relatórios técnicos
software - Software
thesis - Monografias, dissertações, teses
webpage - Sites, blogs
other - Tipos não previstos
Restrições em <element-citation>:
Proibido: dois ou mais <ext-link>
Proibido: pontuação entre elementos (ponto, vírgula, etc.)
Proibido: <comment> abarcando apenas <ext-link>
Proibido: formatação completa em <italic> ou <bold>
Restrições em <mixed-citation>:
Proibido: dois ou mais <ext-link>
Permitido apenas tags de formatação: <bold>, <italic>, <sup>, <sub>
Elementos esperados em <element-citation>:
<source> - Título da fonte (esperado em todas as referências)
<year> - Ano (esperado em todas as referências)
Regras de elementos específicos:
Quando há <fpage>, <lpage> é obrigatório
<size> deve ter @units="pages"
<date-in-citation> deve ter @content-type="access-date"
<person-group> deve ter @person-group-type quando presente
<name> dentro de <person-group> deve ter <surname>
Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
#
Regra
Nível
Descrição
1
Validar presença de <ref-list> em documentos indexáveis
CRITICAL
<ref-list> é obrigatório em <back> para documentos indexáveis (exceto errata, retratação, adendo, manifestação de preocupação, parecer)
2
Validar presença de <ref>
CRITICAL
<ref-list> deve conter pelo menos um elemento <ref>
3
Validar presença de <mixed-citation>
CRITICAL
Cada <ref> deve conter <mixed-citation>
4
Validar presença de <element-citation>
CRITICAL
Cada <ref> deve conter <element-citation>
5
Validar presença de @publication-type
CRITICAL
O atributo @publication-type é obrigatório em <element-citation>
6
Validar valores permitidos de @publication-type
ERROR
O valor de @publication-type deve estar na lista de valores permitidos
7
Validar ausência de múltiplos <ext-link> em <element-citation>
ERROR
É proibida a ocorrência de dois ou mais <ext-link> em <element-citation>
8
Validar ausência de múltiplos <ext-link> em <mixed-citation>
ERROR
É proibida a ocorrência de dois ou mais <ext-link> em <mixed-citation>
P1 – Importantes (implementar se possível)
#
Regra
Nível
Descrição
9
Validar presença de <source> em <element-citation>
WARNING
Espera-se que todas as referências tenham <source> (título da fonte)
10
Validar presença de <year> em <element-citation>
WARNING
Espera-se que todas as referências tenham pelo menos <year>
11
Validar <lpage> quando há <fpage>
ERROR
Quando houver <fpage>, o elemento <lpage> é obrigatório
12
Validar @units="pages" em <size>
ERROR
O elemento <size> deve ter obrigatoriamente @units="pages"
13
Validar @content-type="access-date" em <date-in-citation>
ERROR
O elemento <date-in-citation> deve ter obrigatoriamente @content-type="access-date"
14
Validar <surname> em <name>
ERROR
Quando <person-group> contém <name>, o elemento <surname> é obrigatório
P2 – Futuras (fora do escopo deste Issue)
#
Regra
Motivo de exclusão
15
Validar ausência de pontuação entre elementos em <element-citation>
Alta complexidade - requer análise de texto entre tags XML
16
Validar que <comment> não abarca apenas <ext-link>
Média complexidade - requer análise de estrutura de <comment>
17
Validar ausência de formatação completa em italic/bold
Média complexidade - requer análise de conteúdo completo
18
Validar elementos apropriados por tipo de publicação
Alta complexidade - regras específicas por tipo
19
Validar presença de @person-group-type em <person-group>
Baixa prioridade - parte de validação de person-group
20
Validar tags permitidas em <mixed-citation>
Baixa prioridade - schema JATS já restringe parcialmente
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/references.py ou ref_list.py – Verificar se modelo existe
packtools/sps/validation/references.py ou ref_list.py – Verificar validações existentes
packtools/sps/validation/rules/ref_list_rules.json ou similar – Verificar configuração
Criar (se não existirem):
packtools/sps/models/ref_list.py – Modelo de extração de dados
packtools/sps/validation/ref_list.py – Validações
packtools/sps/validation/rules/ref_list_rules.json – Configuração de níveis de erro
tests/sps/validation/test_ref_list.py – Testes unitários
Referenciar (implementações similares):
packtools/sps/validation/article_contribs.py – Validação de person-group
packtools/sps/validation/utils.py – Funções auxiliares (build_response)
Exemplos de XML
XML Válido (deve passar sem erros):
<!-- Exemplo 1: Artigo de periódico -->
<back >
<ref-list >
<title >Referências</title >
<ref id =" B1" >
<mixed-citation >Benchimol M, Souza W de. Endocytosis in anaerobic parasitic protists. Mem Inst Oswaldo Cruz. 2024;119:e240058.</mixed-citation >
<element-citation publication-type =" journal" >
<person-group person-group-type =" author" >
<name >
<surname >Benchimol</surname >
<given-names >M</given-names >
</name >
<name >
<surname >Souza</surname >
<given-names >W de</given-names >
</name >
</person-group >
<article-title >Endocytosis in anaerobic parasitic protists</article-title >
<source >Mem Inst Oswaldo Cruz</source >
<year >2024</year >
<volume >119</volume >
<elocation-id >e240058</elocation-id >
<pub-id pub-id-type =" doi" >10.1590/0074-02760240058</pub-id >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 2: Livro completo -->
<back >
<ref-list >
<ref id =" B2" >
<label >2</label >
<mixed-citation >Hamric, Ann B.; Spross, Judith A.; Hanson, Charlene M. Advanced practice nursing: an integrative approach. 3rd ed. St. Louis (MO): Elsevier Saunders; c2005. 979 p.</mixed-citation >
<element-citation publication-type =" book" >
<person-group person-group-type =" author" >
<name >
<surname >Hamric</surname >
<given-names >Ann B.</given-names >
</name >
<name >
<surname >Spross</surname >
<given-names >Judith A.</given-names >
</name >
<name >
<surname >Hanson</surname >
<given-names >Charlene M.</given-names >
</name >
</person-group >
<source >Advanced practice nursing: an integrative approach</source >
<edition >3rd ed</edition >
<publisher-loc >St. Louis (MO)</publisher-loc >
<publisher-name >Elsevier Saunders</publisher-name >
<year >c2005</year >
<size units =" pages" >979 p</size >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 3: Capítulo de livro com fpage e lpage -->
<back >
<ref-list >
<ref id =" B3" >
<mixed-citation >Calkins BM, Mendeloff AI. The epidemiology of idiopathic inflammatory bowel disease. In: Kirsner JB, Shorter RG, eds. Inflammatory bowel disease, 4th ed. Baltimore: Williams & Wilkins. 1995:31-68.</mixed-citation >
<element-citation publication-type =" book" >
<person-group person-group-type =" author" >
<name >
<surname >Calkins</surname >
<given-names >BM</given-names >
</name >
<name >
<surname >Mendeloff</surname >
<given-names >AI</given-names >
</name >
</person-group >
<part-title >The epidemiology of idiopathic inflammatory bowel disease</part-title >
<person-group person-group-type =" editor" >
<name >
<surname >Kirsner</surname >
<given-names >JB</given-names >
</name >
<name >
<surname >Shorter</surname >
<given-names >RG</given-names >
</name >
</person-group >
<source >Inflammatory bowel disease</source >
<edition >4th</edition >
<publisher-loc >Baltimore</publisher-loc >
<publisher-name >Williams & Wilkins</publisher-name >
<year >1995</year >
<fpage >31</fpage >
<lpage >68</lpage >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 4: Dataset (dados de pesquisa) -->
<back >
<ref-list >
<ref id =" B4" >
<mixed-citation >Lucas Leão; Perobelli, Fernando Salgueiro; Ribeiro, Hilton Manoel Dias, 2024, Data for: Ação Coletiva Institucional, DOI: 10.48331/scielodata.5Z4TMP, SciELO Data, V1.</mixed-citation >
<element-citation publication-type =" data" >
<person-group person-group-type =" author" >
<name >
<surname >Leão</surname >
<given-names >Lucas</given-names >
</name >
<name >
<surname >Perobelli</surname >
<given-names >Fernando Salgueiro</given-names >
</name >
<name >
<surname >Ribeiro</surname >
<given-names >Hilton Manoel Dias</given-names >
</name >
</person-group >
<data-title >Data for: Ação Coletiva Institucional e Consórcio Públicos Intermunicipais no Brasil</data-title >
<version >V1</version >
<year >2024</year >
<source >SciELO Data</source >
<pub-id pub-id-type =" doi" >10.48331/scielodata.5Z4TMP</pub-id >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 5: Website com data de acesso -->
<back >
<ref-list >
<ref id =" B5" >
<mixed-citation >COB - Comitê Olímpico Brasileiro. Desafio para o corpo. Disponível em: http://www.cob.org.br/esportes/esporte.asp?id=39. (Acesso em 10 abr 2010)</mixed-citation >
<element-citation publication-type =" webpage" >
<person-group person-group-type =" author" >
<collab >COB - Comitê Olímpico Brasileiro</collab >
</person-group >
<source >Desafio para o corpo</source >
<ext-link ext-link-type =" uri" xlink : href =" http://www.cob.org.br/esportes/esporte.asp?id=39" >http://www.cob.org.br/esportes/esporte.asp?id=39</ext-link >
<date-in-citation content-type =" access-date" >10 abr 2010</date-in-citation >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 6: Proceedings de conferência -->
<back >
<ref-list >
<ref id =" B6" >
<mixed-citation >Furton EJ, Dort V, editors. Addiction and compulsive behaviors. Proceedings of the 17th Workshop for Bishops; 1999; Dallas, TX. Boston: National Catholic Bioethics Center (US); 2000. 258 p.</mixed-citation >
<element-citation publication-type =" confproc" >
<person-group person-group-type =" editor" >
<name >
<surname >Furton</surname >
<given-names >EJ</given-names >
</name >
<name >
<surname >Dort</surname >
<given-names >V</given-names >
</name >
</person-group >
<source >Addiction and compulsive behaviors</source >
<conf-name >Proceedings of the 17th Workshop for Bishops</conf-name >
<conf-num >17</conf-num >
<conf-date >1999</conf-date >
<conf-loc >Dallas, TX</conf-loc >
<publisher-loc >Boston</publisher-loc >
<publisher-name >National Catholic Bioethics Center (US)</publisher-name >
<year >2000</year >
<size units =" pages" >258 p</size >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 7: Tese -->
<back >
<ref-list >
<ref id =" B7" >
<mixed-citation >Jones DL. The role of physical activity on the need for revision total knee arthroplasty [dissertation]. [Pittsburgh (PA)]: University of Pittsburgh; 2001. 436 p.</mixed-citation >
<element-citation publication-type =" thesis" >
<person-group person-group-type =" author" >
<name >
<surname >Jones</surname >
<given-names >DL</given-names >
</name >
</person-group >
<source >The role of physical activity on the need for revision total knee arthroplasty</source >
<publisher-loc >Pittsburgh (PA)</publisher-loc >
<publisher-name >University of Pittsburgh</publisher-name >
<year >2001</year >
<size units =" pages" >436 p</size >
</element-citation >
</ref >
</ref-list >
</back >
<!-- Exemplo 8: Múltiplas referências -->
<back >
<ref-list >
<title >Referências</title >
<ref id =" B1" >
<mixed-citation >Author A. Title. Journal. 2020;1:1-10.</mixed-citation >
<element-citation publication-type =" journal" >
<person-group person-group-type =" author" >
<name >
<surname >Author</surname >
<given-names >A</given-names >
</name >
</person-group >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
<ref id =" B2" >
<mixed-citation >Author B. Book Title. Publisher; 2021.</mixed-citation >
<element-citation publication-type =" book" >
<person-group person-group-type =" author" >
<name >
<surname >Author</surname >
<given-names >B</given-names >
</name >
</person-group >
<source >Book Title</source >
<publisher-name >Publisher</publisher-name >
<year >2021</year >
</element-citation >
</ref >
</ref-list >
</back >
XML Inválido – Caso 1: Sem em documento indexável (CRITICAL)
<article article-type =" research-article" >
<front >
<!-- conteúdo do front -->
</front >
<back >
<!-- sem ref-list -->
</back >
</article >
Erro esperado: Elemento <ref-list> é obrigatório em <back> para documentos indexáveis (Critério SciELO Brasil)
XML Inválido – Caso 2: sem (CRITICAL)
<back >
<ref-list >
<title >Referências</title >
<!-- sem ref -->
</ref-list >
</back >
Erro esperado: <ref-list> deve conter pelo menos um elemento <ref>
XML Inválido – Caso 3: sem (CRITICAL)
<back >
<ref-list >
<ref id =" B1" >
<element-citation publication-type =" journal" >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Elemento <ref> deve conter <mixed-citation>
XML Inválido – Caso 4: sem (CRITICAL)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Title. Journal. 2020.</mixed-citation >
</ref >
</ref-list >
</back >
Erro esperado: Elemento <ref> deve conter <element-citation>
XML Inválido – Caso 5: sem @publication-type (CRITICAL)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Title. Journal. 2020.</mixed-citation >
<element-citation >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Atributo @publication-type é obrigatório em <element-citation>
XML Inválido – Caso 6: @publication-type com valor inválido (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Title. Journal. 2020.</mixed-citation >
<element-citation publication-type =" article" >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Valor "article" não está na lista de valores permitidos para @publication-type. Use journal para artigos de periódicos.
XML Inválido – Caso 7: Múltiplos em (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Reference text.</mixed-citation >
<element-citation publication-type =" journal" >
<source >Journal</source >
<year >2020</year >
<ext-link ext-link-type =" uri" xlink : href =" http://example.com" >http://example.com</ext-link >
<ext-link ext-link-type =" doi" xlink : href =" https://doi.org/10.1234/example" >https://doi.org/10.1234/example</ext-link >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: É proibida a ocorrência de dois ou mais <ext-link> em <element-citation>
XML Inválido – Caso 8: Múltiplos em (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Reference. <ext-link xlink : href =" http://example.com" >http://example.com</ext-link > and <ext-link xlink : href =" http://other.com" >http://other.com</ext-link ></mixed-citation >
<element-citation publication-type =" journal" >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: É proibida a ocorrência de dois ou mais <ext-link> em <mixed-citation>
XML Inválido – Caso 9: Sem (WARNING)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Title. 2020.</mixed-citation >
<element-citation publication-type =" journal" >
<person-group person-group-type =" author" >
<name >
<surname >Author</surname >
<given-names >A</given-names >
</name >
</person-group >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: (WARNING) Espera-se que todas as referências tenham <source> (título da fonte citada)
XML Inválido – Caso 10: Sem (WARNING)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Title. Journal.</mixed-citation >
<element-citation publication-type =" journal" >
<person-group person-group-type =" author" >
<name >
<surname >Author</surname >
<given-names >A</given-names >
</name >
</person-group >
<source >Journal</source >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: (WARNING) Espera-se que todas as referências tenham pelo menos <year>
XML Inválido – Caso 11: sem (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Chapter. In: Book. 1995:31.</mixed-citation >
<element-citation publication-type =" book" >
<source >Book</source >
<year >1995</year >
<fpage >31</fpage >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Quando houver <fpage>, o elemento <lpage> é obrigatório
XML Inválido – Caso 12: sem @Units ="pages" (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Book Title. Publisher; 2020. 300 p.</mixed-citation >
<element-citation publication-type =" book" >
<source >Book Title</source >
<year >2020</year >
<size >300</size >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Elemento <size> deve ter obrigatoriamente @units="pages"
XML Inválido – Caso 13: com @Units incorreto (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Author. Book Title. Publisher; 2020. 300 p.</mixed-citation >
<element-citation publication-type =" book" >
<source >Book Title</source >
<year >2020</year >
<size units =" page" >300</size >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Valor de @units deve ser "pages". Valor encontrado: "page"
XML Inválido – Caso 14: sem @Content-Type (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Website. Accessed 10 Apr 2010.</mixed-citation >
<element-citation publication-type =" webpage" >
<source >Website</source >
<date-in-citation >10 Apr 2010</date-in-citation >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Elemento <date-in-citation> deve ter obrigatoriamente @content-type="access-date"
XML Inválido – Caso 15: com @Content-Type incorreto (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Website. Accessed 10 Apr 2010.</mixed-citation >
<element-citation publication-type =" webpage" >
<source >Website</source >
<date-in-citation content-type =" accessed" >10 Apr 2010</date-in-citation >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Valor de @content-type deve ser "access-date". Valor encontrado: "accessed"
XML Inválido – Caso 16: sem (ERROR)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >John. Article. Journal. 2020.</mixed-citation >
<element-citation publication-type =" journal" >
<person-group person-group-type =" author" >
<name >
<given-names >John</given-names >
</name >
</person-group >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Quando <person-group> contém <name>, o elemento <surname> é obrigatório
XML Inválido – Caso 17: Atributos vazios (CRITICAL)
<back >
<ref-list >
<ref id =" B1" >
<mixed-citation >Reference.</mixed-citation >
<element-citation publication-type =" " >
<source >Journal</source >
<year >2020</year >
</element-citation >
</ref >
</ref-list >
</back >
Erro esperado: Atributo @publication-type não pode estar vazio
Padrão de Implementação
Diretrizes Gerais:
Seguir padrões existentes no repositório:
Consultar implementações similares como article_contribs.py (validação de person-group)
Usar estrutura de classes já estabelecida no packtools
IMPORTANTE: Verificar se já existem validações parciais para <ref-list> e integrá-las ou complementá-las
Internacionalização (i18n):
OBRIGATÓRIO: Todas as mensagens devem suportar internacionalização
Usar advice_text e advice_params em build_response()
Consultar conversas anteriores sobre implementação de i18n no packtools
Referência: validações em article_contribs.py que já implementam i18n completo
Validações condicionais:
Validações que dependem de contexto devem retornar None quando não aplicável
Exemplo: validação de <ref-list> obrigatório não se aplica para errata, retratação, etc.
Exemplo: validação de <lpage> só se aplica quando há <fpage>
Usar filter_results() nos testes para remover None
Uso de build_response():
Sempre usar parent=self.data (dict completo, nunca string)
Campo response deve conter: "OK", "WARNING", "ERROR", "CRITICAL"
Sempre fornecer advice_text e advice_params para i18n
Modelo de dados:
Criar propriedade que retorna lista de dicionários (um para cada <ref>)
Cada dict deve conter: ref_id, has_mixed_citation, has_element_citation, publication_type, has_source, has_year, ext_link_count_element, ext_link_count_mixed, has_fpage, has_lpage, parent, parent_id, parent_lang
Detecção de tipo de artigo:
Verificar @article-type para determinar se documento é indexável
Tipos não indexáveis: correction, retraction, addendum, expression-of-concern, reviewer-report
Usar XPath ou navegação DOM para acessar elemento raiz
Contagem de <ext-link>:
Contar elementos <ext-link> dentro de <element-citation>
Contar elementos <ext-link> dentro de <mixed-citation>
Alertar se count > 1
Validação de elementos condicionais:
<lpage> só é obrigatório quando há <fpage>
<surname> só é obrigatório quando há <name> dentro de <person-group>
Lista de valores permitidos:
Criar constante com valores de @publication-type: ["book", "confproc", "data", "database", "journal", "legal-doc", "letter", "newspaper", "patent", "preprint", "report", "software", "thesis", "webpage", "other"]
Testes Esperados
Casos de teste obrigatórios:
Presença de :
Estrutura de :
Estrutura de :
Atributo @publication-type:
Contagem de :
Elementos esperados:
Paginação:
Elemento :
Elemento :
Elemento e :
Tipos de publicação:
Múltiplas referências:
Casos de borda:
Total esperado: ~70 testes unitários
Estrutura de testes:
Usar filter_results() para remover None dos resultados
Asserções devem usar campo response (não is_valid)
Testes devem ser autocontidos e descritivos
Agrupar testes por categoria (presença, estrutura, atributos, elementos, paginação)
Critérios de Aceite
O PR será aceito quando:
Referências
Documentação SPS:
Critérios SciELO Brasil:
Padrões JATS:
Padrões externos:
Referências internas packtools:
Internacionalização: Consultar conversas anteriores sobre implementação de i18n
Implementações similares: article_contribs.py (validação de person-group)
Funções auxiliares: utils.py (build_response)
Labels Sugeridas
enhancement validation SPS-1.10 scielo-brasil good-first-issue
Impacto Esperado
Antes:
Conformidade SPS 1.10 e Critérios SciELO Brasil para <ref-list>: X% (verificar validações existentes)
Referências podem estar ausentes em documentos indexáveis
Estrutura obrigatória (mixed + element citation) pode estar incompleta
Atributo @publication-type pode estar ausente ou incorreto
Múltiplos <ext-link> podem passar sem detecção
Elementos esperados (source, year) podem estar ausentes
Regras de elementos condicionais não aplicadas
Depois:
Conformidade SPS 1.10 e Critérios SciELO Brasil para <ref-list>: 70% (14 de 20 regras)
Validação CRITICAL de presença de <ref-list> em documentos indexáveis
Validação CRITICAL de estrutura obrigatória (mixed + element citation)
Validação CRITICAL de @publication-type obrigatório
Validação ERROR de valores permitidos de @publication-type
Validação ERROR de múltiplos <ext-link>
Validação WARNING de elementos esperados (source, year)
Validação ERROR de regras condicionais (fpage/lpage, atributos obrigatórios)
~70 testes unitários garantindo qualidade
Internacionalização completa (PT/EN/ES)
Benefícios:
Garante conformidade com Critérios SciELO Brasil
Assegura presença de referências em documentos indexáveis
Melhora qualidade de metadados bibliográficos
Detecta estruturas incompletas antes da publicação
Previne uso de valores incorretos de @publication-type
Alerta sobre múltiplos links (problema de estrutura)
Facilita geração de métricas bibliométricas
Melhora interoperabilidade com sistemas de citação
Garante qualidade de dados para indexadores
Facilita manutenção e depuração de XMLs
Observações importantes:
Implementar internacionalização ajustando as respostas das validações ao formato da função build_response em packtools/sps/validation/utils.py;
Verificar e adicionar as validações no orquestrador: packtools/sps/validation/xml_validations.py e packtools/sps/validation/xml_validator.py
Verificar a corretude dos testes exsitentes para a validação e complementar caso necessário;
Realizar ajustes, caso necessário, nos modelos que são utilizados pelas validações, garantindo que o ajuste não interfira em possíveis usos atuais desses modelos.
Objetivo
Implementar validações para o elemento
<ref-list>conforme a especificação SPS 1.10 e Critérios SciELO Brasil, aumentando a conformidade de X% para 70% (14 de 20 regras).Nota: Algumas validações para
<ref-list>podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10 e Critérios SciELO Brasil.Contexto
O elemento
<ref-list>representa o conjunto de referências bibliográficas de um documento. Para SciELO Brasil, é obrigatório em todos os documentos indexáveis (exceto errata, retratação, adendo, manifestação de preocupação e parecer). Cada referência deve conter<mixed-citation>(apresentação) e<element-citation>(dados estruturados para métricas). Validações corretas garantem conformidade com critérios SciELO Brasil, presença de elementos obrigatórios, e qualidade dos metadados bibliográficos.Conformidade atual: X de 20 regras implementadas (X%)
Meta após implementação: 14 de 20 regras (70%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.reflist
Regras principais conforme SPS 1.10 e Critérios SciELO Brasil:
Ocorrência:
<ref-list>aparece em<back>uma ou mais vezes<ref-list>Obrigatoriedade (Critério SciELO Brasil):
<ref-list>é obrigatório em documentos indexáveisEstrutura obrigatória:
<ref-list>deve conter pelo menos um<ref><ref>deve conter<mixed-citation>E<element-citation>Atributo obrigatório em
<element-citation>:@publication-type(obrigatório)Valores permitidos para
@publication-type:book- Livros, capítulos de livrosconfproc- Atas, anais, proceedings de eventosdata- Dados de pesquisa (datasets)database- Bases de dadosjournal- Artigos de periódicos científicoslegal-doc- Normas jurídicasletter- Cartas e comunicações pessoaisnewspaper- Artigos de jornalpatent- Patentespreprint- Preprintsreport- Relatórios técnicossoftware- Softwarethesis- Monografias, dissertações, teseswebpage- Sites, blogsother- Tipos não previstosRestrições em
<element-citation>:<ext-link><comment>abarcando apenas<ext-link><italic>ou<bold>Restrições em
<mixed-citation>:<ext-link><bold>,<italic>,<sup>,<sub>Elementos esperados em
<element-citation>:<source>- Título da fonte (esperado em todas as referências)<year>- Ano (esperado em todas as referências)Regras de elementos específicos:
<fpage>,<lpage>é obrigatório<size>deve ter@units="pages"<date-in-citation>deve ter@content-type="access-date"<person-group>deve ter@person-group-typequando presente<name>dentro de<person-group>deve ter<surname>Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
<ref-list>em documentos indexáveis<ref-list>é obrigatório em<back>para documentos indexáveis (exceto errata, retratação, adendo, manifestação de preocupação, parecer)<ref><ref-list>deve conter pelo menos um elemento<ref><mixed-citation><ref>deve conter<mixed-citation><element-citation><ref>deve conter<element-citation>@publication-type@publication-typeé obrigatório em<element-citation>@publication-type@publication-typedeve estar na lista de valores permitidos<ext-link>em<element-citation><ext-link>em<element-citation><ext-link>em<mixed-citation><ext-link>em<mixed-citation>P1 – Importantes (implementar se possível)
<source>em<element-citation><source>(título da fonte)<year>em<element-citation><year><lpage>quando há<fpage><fpage>, o elemento<lpage>é obrigatório@units="pages"em<size><size>deve ter obrigatoriamente@units="pages"@content-type="access-date"em<date-in-citation><date-in-citation>deve ter obrigatoriamente@content-type="access-date"<surname>em<name><person-group>contém<name>, o elemento<surname>é obrigatórioP2 – Futuras (fora do escopo deste Issue)
<element-citation><comment>não abarca apenas<ext-link><comment>@person-group-typeem<person-group><mixed-citation>Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/references.pyouref_list.py– Verificar se modelo existepacktools/sps/validation/references.pyouref_list.py– Verificar validações existentespacktools/sps/validation/rules/ref_list_rules.jsonou similar – Verificar configuraçãoCriar (se não existirem):
packtools/sps/models/ref_list.py– Modelo de extração de dadospacktools/sps/validation/ref_list.py– Validaçõespacktools/sps/validation/rules/ref_list_rules.json– Configuração de níveis de errotests/sps/validation/test_ref_list.py– Testes unitáriosReferenciar (implementações similares):
packtools/sps/validation/article_contribs.py– Validação de person-grouppacktools/sps/validation/utils.py– Funções auxiliares (build_response)Exemplos de XML
XML Válido (deve passar sem erros):
XML Inválido – Caso 1: Sem em documento indexável (CRITICAL)
Erro esperado: Elemento
<ref-list>é obrigatório em<back>para documentos indexáveis (Critério SciELO Brasil)XML Inválido – Caso 2: sem (CRITICAL)
Erro esperado:
<ref-list>deve conter pelo menos um elemento<ref>XML Inválido – Caso 3: sem (CRITICAL)
Erro esperado: Elemento
<ref>deve conter<mixed-citation>XML Inválido – Caso 4: sem (CRITICAL)
Erro esperado: Elemento
<ref>deve conter<element-citation>XML Inválido – Caso 5: sem @publication-type (CRITICAL)
Erro esperado: Atributo
@publication-typeé obrigatório em<element-citation>XML Inválido – Caso 6: @publication-type com valor inválido (ERROR)
Erro esperado: Valor
"article"não está na lista de valores permitidos para@publication-type. Usejournalpara artigos de periódicos.XML Inválido – Caso 7: Múltiplos em (ERROR)
Erro esperado: É proibida a ocorrência de dois ou mais
<ext-link>em<element-citation>XML Inválido – Caso 8: Múltiplos em (ERROR)
Erro esperado: É proibida a ocorrência de dois ou mais
<ext-link>em<mixed-citation>XML Inválido – Caso 9: Sem (WARNING)
Erro esperado: (WARNING) Espera-se que todas as referências tenham
<source>(título da fonte citada)XML Inválido – Caso 10: Sem (WARNING)
Erro esperado: (WARNING) Espera-se que todas as referências tenham pelo menos
<year>XML Inválido – Caso 11: sem (ERROR)
Erro esperado: Quando houver
<fpage>, o elemento<lpage>é obrigatórioXML Inválido – Caso 12: sem @Units="pages" (ERROR)
Erro esperado: Elemento
<size>deve ter obrigatoriamente@units="pages"XML Inválido – Caso 13: com @Units incorreto (ERROR)
Erro esperado: Valor de
@unitsdeve ser"pages". Valor encontrado:"page"XML Inválido – Caso 14: sem @Content-Type (ERROR)
Erro esperado: Elemento
<date-in-citation>deve ter obrigatoriamente@content-type="access-date"XML Inválido – Caso 15: com @Content-Type incorreto (ERROR)
Erro esperado: Valor de
@content-typedeve ser"access-date". Valor encontrado:"accessed"XML Inválido – Caso 16: sem (ERROR)
Erro esperado: Quando
<person-group>contém<name>, o elemento<surname>é obrigatórioXML Inválido – Caso 17: Atributos vazios (CRITICAL)
Erro esperado: Atributo
@publication-typenão pode estar vazioPadrão de Implementação
Diretrizes Gerais:
Seguir padrões existentes no repositório:
article_contribs.py(validação de person-group)<ref-list>e integrá-las ou complementá-lasInternacionalização (i18n):
advice_texteadvice_paramsembuild_response()article_contribs.pyque já implementam i18n completoValidações condicionais:
Nonequando não aplicável<ref-list>obrigatório não se aplica para errata, retratação, etc.<lpage>só se aplica quando há<fpage>filter_results()nos testes para removerNoneUso de
build_response():parent=self.data(dict completo, nunca string)responsedeve conter:"OK","WARNING","ERROR","CRITICAL"advice_texteadvice_paramspara i18nModelo de dados:
<ref>)ref_id,has_mixed_citation,has_element_citation,publication_type,has_source,has_year,ext_link_count_element,ext_link_count_mixed,has_fpage,has_lpage,parent,parent_id,parent_langDetecção de tipo de artigo:
@article-typepara determinar se documento é indexávelcorrection,retraction,addendum,expression-of-concern,reviewer-reportContagem de
<ext-link>:<ext-link>dentro de<element-citation><ext-link>dentro de<mixed-citation>Validação de elementos condicionais:
<lpage>só é obrigatório quando há<fpage><surname>só é obrigatório quando há<name>dentro de<person-group>Lista de valores permitidos:
@publication-type:["book", "confproc", "data", "database", "journal", "legal-doc", "letter", "newspaper", "patent", "preprint", "report", "software", "thesis", "webpage", "other"]Testes Esperados
Casos de teste obrigatórios:
Presença de :
<ref-list>(OK)<ref-list>(CRITICAL)<ref-list>(OK - exceção)<ref-list>(OK - exceção)<ref-list>(OK - exceção)<ref-list>(OK - exceção)<ref-list>(OK - exceção)Estrutura de :
<ref-list>com pelo menos um<ref>(OK)<ref-list>sem<ref>(CRITICAL)<ref-list>vazio (CRITICAL)Estrutura de :
<ref>com<mixed-citation>e<element-citation>(OK)<ref>sem<mixed-citation>(CRITICAL)<ref>sem<element-citation>(CRITICAL)<ref>sem nenhum dos dois (CRITICAL)Atributo @publication-type:
<element-citation>com@publication-typeválido (OK)<element-citation>sem@publication-type(CRITICAL)@publication-typevazio (CRITICAL)"article"(ERROR)"review"(ERROR)"Journal"(ERROR - case-sensitive)Contagem de :
<element-citation>sem<ext-link>(OK)<element-citation>com um<ext-link>(OK)<element-citation>com dois<ext-link>(ERROR)<element-citation>com três ou mais<ext-link>(ERROR)<mixed-citation>sem<ext-link>(OK)<mixed-citation>com um<ext-link>(OK)<mixed-citation>com dois<ext-link>(ERROR)Elementos esperados:
<element-citation>com<source>(OK)<element-citation>sem<source>(WARNING)<element-citation>com<year>(OK)<element-citation>sem<year>(WARNING)<source>e<year>(OK)<source>nem<year>(WARNING - ambos)Paginação:
<fpage>e<lpage>(OK)<fpage>sem<lpage>(ERROR)<lpage>sem<fpage>(OK - lpage opcional)Elemento :
<size units="pages">(OK)<size>sem@units(ERROR)<size units="page">(ERROR - valor incorreto)<size units="p">(ERROR - valor incorreto)Elemento :
<date-in-citation content-type="access-date">(OK)<date-in-citation>sem@content-type(ERROR)<date-in-citation content-type="accessed">(ERROR - valor incorreto)Elemento e :
<name>com<surname>(OK)<name>sem<surname>(ERROR)<name>com apenas<given-names>(ERROR)<person-group>com<collab>(OK - autoria institucional)Tipos de publicação:
Múltiplas referências:
<ref-list>com uma referência (OK)<ref-list>com múltiplas referências (OK)<ref-list>com 100+ referências (OK - sem limite)Casos de borda:
<ref-list>aninhado (OK - permitido)<mixed-citation>com formatação (OK - permitido)Total esperado: ~70 testes unitários
Estrutura de testes:
filter_results()para removerNonedos resultadosresponse(nãois_valid)Critérios de Aceite
O PR será aceito quando:
<ref-list>foi analisado e integrado ou substituído adequadamenteref_list_rules.jsoncriado com todos os níveis de errobuild_response,filter_results, validações condicionais)<ref-list>obrigatório (exceções para errata, etc.)@publication-type<ext-link><lpage>quando há<fpage>Referências
Documentação SPS:
<ref-list>: Lista de ReferênciasCritérios SciELO Brasil:
Padrões JATS:
<ref-list><ref><mixed-citation><element-citation><person-group>Padrões externos:
Referências internas packtools:
article_contribs.py(validação de person-group)utils.py(build_response)Labels Sugeridas
enhancementvalidationSPS-1.10scielo-brasilgood-first-issueImpacto Esperado
Antes:
<ref-list>: X% (verificar validações existentes)@publication-typepode estar ausente ou incorreto<ext-link>podem passar sem detecçãoDepois:
<ref-list>: 70% (14 de 20 regras)<ref-list>em documentos indexáveis@publication-typeobrigatório@publication-type<ext-link>Benefícios:
@publication-typeObservações importantes:
packtools/sps/validation/utils.py;packtools/sps/validation/xml_validations.pyepacktools/sps/validation/xml_validator.py