-
Notifications
You must be signed in to change notification settings - Fork 24
Description
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çã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 tabelas
-
Correspondência
@ride@id:- Todo
@ridobrigatoriamente deve ter@idcorrespondente no XML - Um
@idpode ou não ter@ridcorrespondente
- Todo
-
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)
- Para afiliação sem identificação de etiqueta no PDF: usar
-
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
- Para valores exceto
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.pyou similar – Verificar se modelo existepacktools/sps/validation/xref.py– Verificar validações existentespacktools/sps/validation/rules/xref_rules.jsonou similar – Verificar configuração
Criar (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ários
Referenciar (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):
<!-- 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
- Consultar implementações similares como
-
Internacionalização (i18n):
- OBRIGATÓRIO: Todas as mensagens devem suportar internacionalização
- Usar
advice_texteadvice_paramsembuild_response() - Consultar conversas anteriores sobre implementação de i18n no packtools
- Referência: validações em
article_contribs.pyque já implementam i18n completo
-
Validações condicionais:
- Validações que dependem de contexto devem retornar
Nonequando 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 removerNone
- Validações que dependem de contexto devem retornar
-
Uso de
build_response():- Sempre usar
parent=self.data(dict completo, nunca string) - Campo
responsedeve conter:"OK","WARNING","ERROR","CRITICAL" - Sempre fornecer
advice_texteadvice_paramspara i18n
- Sempre usar
-
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
- Criar propriedade que retorna lista de dicionários (um para cada
-
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"]
- Criar constante:
-
Validação de correspondência @Rid e @id:
- Coletar todos os
@ridde<xref> - Coletar todos os
@iddo documento - Para cada
@rid, verificar se existe em lista de@id - Reportar todos os
@ridsem correspondência
- Coletar todos os
-
Validação de bibr obrigatório:
- Contar
<xref ref-type="bibr">no documento - Se count == 0, reportar ERROR (Critério SciELO Brasil)
- Contar
-
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
@ridem xref e@idem sec
- Verificar se existe
-
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)
- Para
Testes Esperados
Casos de teste obrigatórios:
Atributos obrigatórios:
-
<xref>com@ride@ref-type(OK) - Sem
@rid(CRITICAL) - Sem
@ref-type(CRITICAL) - Atributos vazios (CRITICAL)
- Atributos apenas com espaços (CRITICAL)
Valores de @ref-type:
- Todos os valores permitidos (OK para cada um)
-
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) - Valor inválido
"image"(ERROR) - Valor inválido
"reference"(ERROR) - Uppercase
"Fig"(ERROR) - Hífen vs underscore
"author_notes"(ERROR)
Presença de bibr obrigatório:
- Documento com pelo menos um bibr (OK)
- Documento sem nenhum bibr (ERROR)
- Documento com múltiplos bibr (OK)
- Editorial sem bibr (ERROR - critério se aplica)
Correspondência @Rid e @id:
-
@ridcom@idcorrespondente (OK) -
@ridsem@idcorrespondente (ERROR) - Múltiplos
@ridtodos com correspondência (OK) - Múltiplos
@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:
- Sem
<sec sec-type="transcript">(OK - não aplicável) - Com
<sec sec-type="transcript">e<xref ref-type="sec">(OK) - Com
<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:
- Documento sem
<xref>(ERROR - falta bibr obrigatório) - Documento com uma
<xref>(OK se for bibr) - Documento com múltiplas
<xref>(OK) - Documento com xref de diferentes tipos (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) - Intervalo de citações (múltiplos xref) (OK)
Total esperado: ~60 testes unitários
Estrutura de testes:
- Usar
filter_results()para removerNonedos resultados - Asserções devem usar campo
response(nãois_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:
- Verificação de validações existentes: Código existente para
<xref>foi analisado e integrado ou substituído adequadamente - Todas as regras P0 implementadas (5 validações CRITICAL/ERROR)
- Todas as regras P1 implementadas (2 validações WARNING/INFO)
- Testes unitários passando com cobertura mínima de ~60 casos
- Nenhum teste existente quebrado
- Arquivo
xref_rules.jsoncriado com todos os níveis de erro - Internacionalização completa em todas as mensagens (i18n obrigatório)
- Código seguindo padrões do packtools (
build_response,filter_results, validações condicionais) - Modelo de dados criado com extração adequada de todos os elementos
- Validação de atributos obrigatórios funcionando
- Validação de valores permitidos de
@ref-typefuncionando - Validação de presença de pelo menos um bibr funcionando
- Validação de correspondência
@ride@idfuncionando - Validação de referência a transcrição funcionando
- Validação de formato de afiliação funcionando
- Documentação inline clara (docstrings)
Referências
Documentação SPS:
- SPS 1.10 –
<xref>: Referência Cruzada - SPS 1.10 – Elementos Obrigatórios para Publicação de Documentos Indexáveis
- SPS 1.10 –
<aff>: Afiliação de Autores - SPS 1.10 –
<sec sec-type="transcript"> - SPS 1.10 – Sugestão de Atribuição de @id
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-typepodem passar - Documentos sem referências bibliográficas podem passar
@ridpode 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
@ride@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