Objetivo
Implementar validações para o elemento <xref> conforme a especificação SPS 1.10 e Critérios SciELO Brasil, aumentando a conformidade de X% para 70% (7 de 10 regras).
Nota: Algumas validações para <xref> 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 <xref> é usado para referência cruzada relacionando informações no texto. Para SciELO Brasil, é obrigatória a presença de pelo menos uma <xref> com @ref-type="bibr" (referência bibliográfica) no documento. Validações corretas garantem presença de atributos obrigatórios, valores válidos, e correspondência entre @rid e @id.
Conformidade atual: X de 10 regras implementadas (X%)
Meta após implementação: 7 de 10 regras (70%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.xref
Regras principais conforme SPS 1.10 e Critérios SciELO Brasil:
-
Ocorrência:
<xref> pode aparecer zero ou mais vezes em: <article-title>, <attrib>, <contrib>, <p>, <td>, <th>, <trans-title>, <sec>, <verse-line>
-
Obrigatoriedade (Critério SciELO Brasil):
<xref> com @ref-type="bibr" deve ocorrer pelo menos uma vez no documento
-
Atributos obrigatórios:
@rid - Contém identificador do elemento referenciado (obrigatório)
@ref-type - Especifica tipo de referência cruzada (obrigatório)
-
Valores permitidos para @ref-type:
aff - Afiliação
app - Apêndice
author-notes - Notas relacionadas ao autor
bibr - Referência bibliográfica
bio - Bibliografia do autor
boxed-text - Caixa de texto
contrib - Autoria
corresp - Autor correspondente
disp-formula - Fórmula/Equação
fig - Figura ou grupo de figuras
fn - Nota
list - Lista ou item da lista
sec - Seção
supplementary-material - Material suplementar
table - Tabela ou grupo de tabelas
table-fn - Nota de rodapé de tabelas
-
Correspondência @rid e @id:
- Todo
@rid obrigatoriamente deve ter @id correspondente no XML
- Um
@id pode ou não ter @rid correspondente
-
Regra especial para transcrição:
<xref ref-type="sec" @rid> é obrigatório quando existe <sec sec-type="transcript">
-
Regra especial para afiliação:
- Para afiliação sem identificação de etiqueta no PDF: usar
<xref ref-type="aff" rid="aff1"/> (self-closing)
-
Regra de <sup>:
<sup> não pode abarcar <xref> quando não há caracteres textuais
- Neste caso
<sup> deve estar dentro de <xref>
-
Menção obrigatória:
- Para valores exceto
aff, deve ocorrer menção ou etiqueta correspondente no texto
Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
| # |
Regra |
Nível |
Descrição |
| 1 |
Validar presença de @rid |
CRITICAL |
O atributo @rid é obrigatório em <xref> |
| 2 |
Validar presença de @ref-type |
CRITICAL |
O atributo @ref-type é obrigatório em <xref> |
| 3 |
Validar valores permitidos de @ref-type |
ERROR |
O valor de @ref-type deve estar na lista de valores permitidos |
| 4 |
Validar presença de pelo menos um @ref-type="bibr" |
ERROR |
Documento deve conter pelo menos uma <xref> com @ref-type="bibr" (Critério SciELO Brasil) |
| 5 |
Validar correspondência @rid e @id |
ERROR |
Todo @rid em <xref> deve ter @id correspondente no documento |
P1 – Importantes (implementar se possível)
| # |
Regra |
Nível |
Descrição |
| 6 |
Validar presença de <xref> para transcrição |
WARNING |
Quando há <sec sec-type="transcript">, deve haver <xref ref-type="sec"> referenciando-a |
| 7 |
Validar formato de afiliação sem label |
INFO |
Para @ref-type="aff" sem conteúdo textual, recomenda-se usar elemento self-closing <xref ... /> |
P2 – Futuras (fora do escopo deste Issue)
| # |
Regra |
Motivo de exclusão |
| 8 |
Validar que <sup> não abarca <xref> sem texto |
Alta complexidade - requer análise de estrutura e conteúdo textual |
| 9 |
Validar presença de menção/etiqueta no texto |
Alta complexidade - requer análise semântica do texto |
| 10 |
Validar formatação consistente de citações |
Baixa prioridade - formato livre permitido |
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/xref.py ou similar – Verificar se modelo existe
packtools/sps/validation/xref.py – Verificar validações existentes
packtools/sps/validation/rules/xref_rules.json ou similar – Verificar configuração
Criar (se não existirem):
packtools/sps/models/xref.py – Modelo de extração de dados
packtools/sps/validation/xref.py – Validações
packtools/sps/validation/rules/xref_rules.json – Configuração de níveis de erro
tests/sps/validation/test_xref.py – Testes unitários
Referenciar (implementações similares):
packtools/sps/validation/article_ids.py – Validação de IDs
packtools/sps/validation/utils.py – Funções auxiliares (build_response)
Exemplos de XML
XML Válido (deve passar sem erros):
<!-- Exemplo 1: Referência bibliográfica (numérica) -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>According to Smith <xref ref-type="bibr" rid="B1">1</xref>, this is correct.</p>
</body>
<back>
<ref-list>
<ref id="B1">
<mixed-citation>Smith J. Article. Journal. 2020.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
<!-- Exemplo 2: Referência bibliográfica (autor-data) -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>Studies show <xref ref-type="bibr" rid="B13">John 2003</xref> that results vary.</p>
</body>
<back>
<ref-list>
<ref id="B13">
<mixed-citation>John A. Study. Science. 2003.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
<!-- Exemplo 3: Referência a figura -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="fig" rid="f1">Figure 1</xref> for details.</p>
<fig id="f1">
<label>Figure 1</label>
<caption>
<title>Sample figure</title>
</caption>
</fig>
</body>
</article>
<!-- Exemplo 4: Referência a tabela -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>Results are shown in <xref ref-type="table" rid="t1">Table 1</xref>.</p>
<table-wrap id="t1">
<label>Table 1</label>
<caption>
<title>Results</title>
</caption>
<table>
<tbody>
<tr>
<td>Data</td>
</tr>
</tbody>
</table>
</table-wrap>
</body>
</article>
<!-- Exemplo 5: Referência a afiliação (com label) -->
<article>
<front>
<article-meta>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Silva</surname>
<given-names>João</given-names>
</name>
<xref ref-type="aff" rid="aff1">1</xref>
</contrib>
</contrib-group>
<aff id="aff1">
<label>1</label>
<institution>University</institution>
</aff>
</article-meta>
</front>
</article>
<!-- Exemplo 6: Referência a afiliação (sem label - self-closing) -->
<article>
<front>
<article-meta>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Silva</surname>
<given-names>João</given-names>
</name>
<xref ref-type="aff" rid="aff1"/>
</contrib>
</contrib-group>
<aff id="aff1">
<institution>University</institution>
</aff>
</article-meta>
</front>
</article>
<!-- Exemplo 7: Referência a seção (para transcrição) -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<media mimetype="video" mime-subtype="mp4" xlink:href="video.mp4">
<label>Interview</label>
<long-desc>Interview description</long-desc>
<xref ref-type="sec" rid="TR1"/>
</media>
<sec sec-type="transcript" id="TR1">
<title>Interview Transcript</title>
<p>Transcript content.</p>
</sec>
</body>
</article>
<!-- Exemplo 8: Múltiplas referências bibliográficas -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>Studies <xref ref-type="bibr" rid="B1">1</xref>, <xref ref-type="bibr" rid="B2">2</xref>, and <xref ref-type="bibr" rid="B3">3</xref> confirm this.</p>
</body>
<back>
<ref-list>
<ref id="B1">
<mixed-citation>Author 1. Title. 2020.</mixed-citation>
</ref>
<ref id="B2">
<mixed-citation>Author 2. Title. 2021.</mixed-citation>
</ref>
<ref id="B3">
<mixed-citation>Author 3. Title. 2022.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
<!-- Exemplo 9: Referência sobrescrita -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>According to literature<xref ref-type="bibr" rid="B1"><sup>1</sup></xref>.</p>
</body>
<back>
<ref-list>
<ref id="B1">
<mixed-citation>Smith. Article. 2020.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
<!-- Exemplo 10: Referência a nota de rodapé -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>This is important<xref ref-type="fn" rid="fn1">*</xref>.</p>
<fn id="fn1">
<p>Additional information.</p>
</fn>
</body>
</article>
<!-- Exemplo 11: Referência a material suplementar -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="supplementary-material" rid="suppl1">Supplementary Material 1</xref>.</p>
<sec sec-type="supplementary-material">
<title>Supplementary Materials</title>
<supplementary-material id="suppl1">
<label>Supplementary material 1</label>
<media mimetype="application" mime-subtype="pdf" xlink:href="supplement.pdf"/>
</supplementary-material>
</sec>
</body>
</article>
<!-- Exemplo 12: Referência a apêndice -->
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>Details in <xref ref-type="app" rid="app1">Appendix A</xref>.</p>
</body>
<back>
<app-group>
<app id="app1">
<label>Appendix A</label>
<p>Appendix content.</p>
</app>
</app-group>
</back>
</article>
XML Inválido – Caso 1: Sem @Rid (CRITICAL)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="fig">Figure 1</xref>.</p>
</body>
</article>
Erro esperado: Atributo @rid é obrigatório em <xref>
XML Inválido – Caso 2: Sem @ref-type (CRITICAL)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref rid="f1">Figure 1</xref>.</p>
</body>
</article>
Erro esperado: Atributo @ref-type é obrigatório em <xref>
XML Inválido – Caso 3: @ref-type com valor inválido (ERROR)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="image" rid="f1">Figure 1</xref>.</p>
</body>
</article>
Erro esperado: Valor "image" não está na lista de valores permitidos para @ref-type. Use fig para figuras.
XML Inválido – Caso 4: Sem nenhuma referência bibliográfica (ERROR)
<article article-type="research-article">
<front>
<!-- metadados -->
</front>
<body>
<p>This is a research article without any bibliographic references.</p>
<p>See <xref ref-type="fig" rid="f1">Figure 1</xref>.</p>
</body>
<back>
<ref-list>
<ref id="B1">
<mixed-citation>Citation exists but not referenced.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
Erro esperado: Documento deve conter pelo menos uma <xref> com @ref-type="bibr" (Critério SciELO Brasil)
XML Inválido – Caso 5: @Rid sem @id correspondente (ERROR)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="fig" rid="f999">Figure 999</xref>.</p>
</body>
</article>
Erro esperado: @rid="f999" em <xref> não tem @id correspondente no documento
XML Inválido – Caso 6: Transcrição sem xref (WARNING)
<article>
<front>
<!-- metadados -->
</front>
<body>
<media mimetype="video" mime-subtype="mp4" xlink:href="video.mp4">
<label>Interview</label>
<long-desc>Interview description</long-desc>
</media>
<sec sec-type="transcript" id="TR1">
<title>Interview Transcript</title>
<p>Transcript content.</p>
</sec>
</body>
</article>
Erro esperado: (WARNING) Quando há <sec sec-type="transcript">, recomenda-se <xref ref-type="sec"> referenciando-a
XML Inválido – Caso 7: Atributos vazios (CRITICAL)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="" rid="">reference</xref>.</p>
</body>
</article>
Erro esperado: Atributos obrigatórios não podem estar vazios
XML Inválido – Caso 8: @Rid apenas espaços (CRITICAL)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="fig" rid=" ">Figure 1</xref>.</p>
</body>
</article>
Erro esperado: Atributo @rid não pode conter apenas espaços
XML Inválido – Caso 9: @ref-type com uppercase (ERROR)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="Fig" rid="f1">Figure 1</xref>.</p>
</body>
</article>
Erro esperado: Valor de @ref-type deve estar em minúsculas. Use fig ao invés de Fig
XML Inválido – Caso 10: Múltiplos @Rid sem @id (ERROR)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>See <xref ref-type="fig" rid="f1">Figure 1</xref> and <xref ref-type="table" rid="t999">Table 999</xref>.</p>
<fig id="f1">
<label>Figure 1</label>
</fig>
</body>
</article>
Erro esperado: @rid="t999" em <xref> não tem @id correspondente no documento
XML Inválido – Caso 11: Documento sem ref-list mas com xref bibr (OK para xref, ERROR para ref-list)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>According to <xref ref-type="bibr" rid="B1">1</xref>.</p>
</body>
</article>
Erro esperado: @rid="B1" em <xref> não tem @id correspondente no documento
XML Inválido – Caso 12: Afiliação com conteúdo mas não self-closing (INFO)
<article>
<front>
<article-meta>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Silva</surname>
<given-names>João</given-names>
</name>
<xref ref-type="aff" rid="aff1"></xref>
</contrib>
</contrib-group>
<aff id="aff1">
<institution>University</institution>
</aff>
</article-meta>
</front>
</article>
Erro esperado: (INFO) Para @ref-type="aff" sem conteúdo textual, recomenda-se usar elemento self-closing <xref ref-type="aff" rid="aff1"/>
XML Inválido – Caso 13: Vários @Rid sem correspondência (ERROR - reportar todos)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>References: <xref ref-type="bibr" rid="B1">1</xref>, <xref ref-type="bibr" rid="B2">2</xref>, <xref ref-type="bibr" rid="B3">3</xref>.</p>
</body>
</article>
Erro esperado: Múltiplos @rid não têm @id correspondente: B1, B2, B3
XML Inválido – Caso 14: ref-type com hífen incorreto (ERROR)
<article>
<front>
<!-- metadados -->
</front>
<body>
<p>Note: <xref ref-type="author_notes" rid="fn1">*</xref>.</p>
</body>
</article>
Erro esperado: Valor "author_notes" não está na lista de valores permitidos. Use author-notes (com hífen).
XML Inválido – Caso 15: Editorial sem bibr mas tem ref-list (ERROR)
<article article-type="editorial">
<front>
<!-- metadados -->
</front>
<body>
<p>This editorial has no citations in text.</p>
</body>
<back>
<ref-list>
<ref id="B1">
<mixed-citation>Reference exists.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
Erro esperado: Documento deve conter pelo menos uma <xref> com @ref-type="bibr" (Critério SciELO Brasil)
Padrão de Implementação
Diretrizes Gerais:
-
Seguir padrões existentes no repositório:
- Consultar implementações similares como
article_ids.py (validação de IDs)
- Usar estrutura de classes já estabelecida no packtools
- IMPORTANTE: Verificar se já existem validações parciais para
<xref> 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 bibr obrigatório só se aplica para documentos indexáveis
- Exemplo: validação de transcrição só se aplica se há
<sec sec-type="transcript">
- 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
<xref>)
- Cada dict deve conter:
rid, ref_type, text_content, is_self_closing, parent, parent_id, parent_lang
-
Lista de valores permitidos:
- Criar constante:
REF_TYPES = ["aff", "app", "author-notes", "bibr", "bio", "boxed-text", "contrib", "corresp", "disp-formula", "fig", "fn", "list", "sec", "supplementary-material", "table", "table-fn"]
-
Validação de correspondência @Rid e @id:
- Coletar todos os
@rid de <xref>
- Coletar todos os
@id do documento
- Para cada
@rid, verificar se existe em lista de @id
- Reportar todos os
@rid sem correspondência
-
Validação de bibr obrigatório:
- Contar
<xref ref-type="bibr"> no documento
- Se count == 0, reportar ERROR (Critério SciELO Brasil)
-
Validação de transcrição:
- Verificar se existe
<sec sec-type="transcript">
- Se existe, verificar se há
<xref ref-type="sec"> apontando para ela
- Usar análise de
@rid em xref e @id em sec
-
Validação de self-closing para afiliação:
- Para
@ref-type="aff", verificar se elemento tem conteúdo textual
- Se não tem conteúdo, recomendar self-closing (INFO)
Testes Esperados
Casos de teste obrigatórios:
Atributos obrigatórios:
Valores de @ref-type:
Presença de bibr obrigatório:
Correspondência @Rid e @id:
Referência a transcrição:
Formato de afiliação:
Múltiplas xref:
Contextos diferentes:
Casos de borda:
Total esperado: ~60 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 (atributos, ref-type, bibr, correspondência, transcrição)
Critérios de Aceite
O PR será aceito quando:
Referências
Documentação SPS:
Critérios SciELO Brasil:
Padrões JATS:
Referências internas packtools:
- Internacionalização: Consultar conversas anteriores sobre implementação de i18n
- Implementações similares:
article_ids.py (validação de IDs)
- 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 para
<xref>: X% (verificar validações existentes)
- Atributos obrigatórios podem estar ausentes
- Valores incorretos de
@ref-type podem passar
- Documentos sem referências bibliográficas podem passar
@rid pode apontar para IDs inexistentes
- Referências a transcrições podem estar ausentes
- Formato de afiliação pode não seguir convenções
Depois:
- Conformidade SPS 1.10 para
<xref>: 70% (7 de 10 regras)
- Validação CRITICAL de atributos obrigatórios
- Validação ERROR de valores permitidos de
@ref-type
- Validação ERROR de presença de pelo menos um bibr (Critério SciELO Brasil)
- Validação ERROR de correspondência
@rid e @id
- Validação WARNING de referência a transcrição
- Validação INFO de formato de afiliação self-closing
- ~60 testes unitários garantindo qualidade
- Internacionalização completa (PT/EN/ES)
Benefícios:
- Garante conformidade com Critérios SciELO Brasil (bibr obrigatório)
- Detecta referências cruzadas quebradas antes da publicação
- Assegura presença de atributos obrigatórios
- Previne uso de valores incorretos de
@ref-type
- Valida integridade de referências (rid↔id)
- Melhora navegação entre elementos do documento
- Facilita processamento automatizado de referências
- Garante qualidade de links internos no documento
- Promove boas práticas de marcação (afiliação self-closing)
- 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
<xref>conforme a especificação SPS 1.10 e Critérios SciELO Brasil, aumentando a conformidade de X% para 70% (7 de 10 regras).Nota: Algumas validações para
<xref>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
<xref>é usado para referência cruzada relacionando informações no texto. Para SciELO Brasil, é obrigatória a presença de pelo menos uma<xref>com@ref-type="bibr"(referência bibliográfica) no documento. Validações corretas garantem presença de atributos obrigatórios, valores válidos, e correspondência entre@ride@id.Conformidade atual: X de 10 regras implementadas (X%)
Meta após implementação: 7 de 10 regras (70%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.xref
Regras principais conforme SPS 1.10 e Critérios SciELO Brasil:
Ocorrência:
<xref>pode aparecer zero ou mais vezes em:<article-title>,<attrib>,<contrib>,<p>,<td>,<th>,<trans-title>,<sec>,<verse-line>Obrigatoriedade (Critério SciELO Brasil):
<xref>com@ref-type="bibr"deve ocorrer pelo menos uma vez no documentoAtributos obrigatórios:
@rid- Contém identificador do elemento referenciado (obrigatório)@ref-type- Especifica tipo de referência cruzada (obrigatório)Valores permitidos para
@ref-type:aff- Afiliaçãoapp- Apêndiceauthor-notes- Notas relacionadas ao autorbibr- Referência bibliográficabio- Bibliografia do autorboxed-text- Caixa de textocontrib- Autoriacorresp- Autor correspondentedisp-formula- Fórmula/Equaçãofig- Figura ou grupo de figurasfn- Notalist- Lista ou item da listasec- Seçãosupplementary-material- Material suplementartable- Tabela ou grupo de tabelastable-fn- Nota de rodapé de tabelasCorrespondência
@ride@id:@ridobrigatoriamente deve ter@idcorrespondente no XML@idpode ou não ter@ridcorrespondenteRegra especial para transcrição:
<xref ref-type="sec" @rid>é obrigatório quando existe<sec sec-type="transcript">Regra especial para afiliação:
<xref ref-type="aff" rid="aff1"/>(self-closing)Regra de
<sup>:<sup>não pode abarcar<xref>quando não há caracteres textuais<sup>deve estar dentro de<xref>Menção obrigatória:
aff, deve ocorrer menção ou etiqueta correspondente no textoRegras a Implementar
P0 – Críticas (implementar obrigatoriamente)
@rid@ridé obrigatório em<xref>@ref-type@ref-typeé obrigatório em<xref>@ref-type@ref-typedeve estar na lista de valores permitidos@ref-type="bibr"<xref>com@ref-type="bibr"(Critério SciELO Brasil)@ride@id@ridem<xref>deve ter@idcorrespondente no documentoP1 – Importantes (implementar se possível)
<xref>para transcrição<sec sec-type="transcript">, deve haver<xref ref-type="sec">referenciando-a@ref-type="aff"sem conteúdo textual, recomenda-se usar elemento self-closing<xref ... />P2 – Futuras (fora do escopo deste Issue)
<sup>não abarca<xref>sem textoArquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/xref.pyou similar – Verificar se modelo existepacktools/sps/validation/xref.py– Verificar validações existentespacktools/sps/validation/rules/xref_rules.jsonou similar – Verificar configuraçãoCriar (se não existirem):
packtools/sps/models/xref.py– Modelo de extração de dadospacktools/sps/validation/xref.py– Validaçõespacktools/sps/validation/rules/xref_rules.json– Configuração de níveis de errotests/sps/validation/test_xref.py– Testes unitáriosReferenciar (implementações similares):
packtools/sps/validation/article_ids.py– Validação de IDspacktools/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 @Rid (CRITICAL)
Erro esperado: Atributo
@ridé obrigatório em<xref>XML Inválido – Caso 2: Sem @ref-type (CRITICAL)
Erro esperado: Atributo
@ref-typeé obrigatório em<xref>XML Inválido – Caso 3: @ref-type com valor inválido (ERROR)
Erro esperado: Valor
"image"não está na lista de valores permitidos para@ref-type. Usefigpara figuras.XML Inválido – Caso 4: Sem nenhuma referência bibliográfica (ERROR)
Erro esperado: Documento deve conter pelo menos uma
<xref>com@ref-type="bibr"(Critério SciELO Brasil)XML Inválido – Caso 5: @Rid sem @id correspondente (ERROR)
Erro esperado:
@rid="f999"em<xref>não tem@idcorrespondente no documentoXML Inválido – Caso 6: Transcrição sem xref (WARNING)
Erro esperado: (WARNING) Quando há
<sec sec-type="transcript">, recomenda-se<xref ref-type="sec">referenciando-aXML Inválido – Caso 7: Atributos vazios (CRITICAL)
Erro esperado: Atributos obrigatórios não podem estar vazios
XML Inválido – Caso 8: @Rid apenas espaços (CRITICAL)
Erro esperado: Atributo
@ridnão pode conter apenas espaçosXML Inválido – Caso 9: @ref-type com uppercase (ERROR)
Erro esperado: Valor de
@ref-typedeve estar em minúsculas. Usefigao invés deFigXML Inválido – Caso 10: Múltiplos @Rid sem @id (ERROR)
Erro esperado:
@rid="t999"em<xref>não tem@idcorrespondente no documentoXML Inválido – Caso 11: Documento sem ref-list mas com xref bibr (OK para xref, ERROR para ref-list)
Erro esperado:
@rid="B1"em<xref>não tem@idcorrespondente no documentoXML Inválido – Caso 12: Afiliação com conteúdo mas não self-closing (INFO)
Erro esperado: (INFO) Para
@ref-type="aff"sem conteúdo textual, recomenda-se usar elemento self-closing<xref ref-type="aff" rid="aff1"/>XML Inválido – Caso 13: Vários @Rid sem correspondência (ERROR - reportar todos)
Erro esperado: Múltiplos
@ridnão têm@idcorrespondente:B1,B2,B3XML Inválido – Caso 14: ref-type com hífen incorreto (ERROR)
Erro esperado: Valor
"author_notes"não está na lista de valores permitidos. Useauthor-notes(com hífen).XML Inválido – Caso 15: Editorial sem bibr mas tem ref-list (ERROR)
Erro esperado: Documento deve conter pelo menos uma
<xref>com@ref-type="bibr"(Critério SciELO Brasil)Padrão de Implementação
Diretrizes Gerais:
Seguir padrões existentes no repositório:
article_ids.py(validação de IDs)<xref>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<sec sec-type="transcript">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:
<xref>)rid,ref_type,text_content,is_self_closing,parent,parent_id,parent_langLista de valores permitidos:
REF_TYPES = ["aff", "app", "author-notes", "bibr", "bio", "boxed-text", "contrib", "corresp", "disp-formula", "fig", "fn", "list", "sec", "supplementary-material", "table", "table-fn"]Validação de correspondência @Rid e @id:
@ridde<xref>@iddo documento@rid, verificar se existe em lista de@id@ridsem correspondênciaValidação de bibr obrigatório:
<xref ref-type="bibr">no documentoValidação de transcrição:
<sec sec-type="transcript"><xref ref-type="sec">apontando para ela@ridem xref e@idem secValidação de self-closing para afiliação:
@ref-type="aff", verificar se elemento tem conteúdo textualTestes Esperados
Casos de teste obrigatórios:
Atributos obrigatórios:
<xref>com@ride@ref-type(OK)@rid(CRITICAL)@ref-type(CRITICAL)Valores de @ref-type:
aff(OK)app(OK)author-notes(OK)bibr(OK)bio(OK)boxed-text(OK)contrib(OK)corresp(OK)disp-formula(OK)fig(OK)fn(OK)list(OK)sec(OK)supplementary-material(OK)table(OK)table-fn(OK)"image"(ERROR)"reference"(ERROR)"Fig"(ERROR)"author_notes"(ERROR)Presença de bibr obrigatório:
Correspondência @Rid e @id:
@ridcom@idcorrespondente (OK)@ridsem@idcorrespondente (ERROR)@ridtodos com correspondência (OK)@ridalguns sem correspondência (ERROR - reportar todos)@ridapontando para ref (OK)@ridapontando para fig (OK)@ridapontando para table (OK)@ridapontando para aff (OK)@ridapontando para sec (OK)Referência a transcrição:
<sec sec-type="transcript">(OK - não aplicável)<sec sec-type="transcript">e<xref ref-type="sec">(OK)<sec sec-type="transcript">sem<xref ref-type="sec">(WARNING)Formato de afiliação:
<xref ref-type="aff">com texto (OK)<xref ref-type="aff"/>self-closing (OK)<xref ref-type="aff"></xref>vazio não self-closing (INFO - recomendar self-closing)Múltiplas xref:
<xref>(ERROR - falta bibr obrigatório)<xref>(OK se for bibr)<xref>(OK)Contextos diferentes:
<xref>em<p>(OK)<xref>em<td>(OK)<xref>em<th>(OK)<xref>em<contrib>(OK)<xref>em<article-title>(OK)Casos de borda:
<xref>vazio (OK se self-closing para aff)<xref>com conteúdo complexo (OK)<xref>com<sup>interno (OK)@ridcom caracteres especiais (OK)Total esperado: ~60 testes unitários
Estrutura de testes:
filter_results()para removerNonedos resultadosresponse(nãois_valid)Critérios de Aceite
O PR será aceito quando:
<xref>foi analisado e integrado ou substituído adequadamentexref_rules.jsoncriado com todos os níveis de errobuild_response,filter_results, validações condicionais)@ref-typefuncionando@ride@idfuncionandoReferências
Documentação SPS:
<xref>: Referência Cruzada<aff>: Afiliação de Autores<sec sec-type="transcript">Critérios SciELO Brasil:
Padrões JATS:
<xref>Referências internas packtools:
article_ids.py(validação de IDs)utils.py(build_response)Labels Sugeridas
enhancementvalidationSPS-1.10scielo-brasilgood-first-issueImpacto Esperado
Antes:
<xref>: X% (verificar validações existentes)@ref-typepodem passar@ridpode apontar para IDs inexistentesDepois:
<xref>: 70% (7 de 10 regras)@ref-type@ride@idBenefícios:
@ref-typeObservações importantes:
packtools/sps/validation/utils.py;packtools/sps/validation/xml_validations.pyepacktools/sps/validation/xml_validator.py