Skip to content

Criar validações para o elemento <xref> #1113

@Rossi-Luciano

Description

@Rossi-Luciano

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:

  1. Ocorrência:

    • <xref> pode aparecer zero ou mais vezes em: <article-title>, <attrib>, <contrib>, <p>, <td>, <th>, <trans-title>, <sec>, <verse-line>
  2. Obrigatoriedade (Critério SciELO Brasil):

    • <xref> com @ref-type="bibr" deve ocorrer pelo menos uma vez no documento
  3. Atributos obrigatórios:

    • @rid - Contém identificador do elemento referenciado (obrigatório)
    • @ref-type - Especifica tipo de referência cruzada (obrigatório)
  4. 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
  5. Correspondência @rid e @id:

    • Todo @rid obrigatoriamente deve ter @id correspondente no XML
    • Um @id pode ou não ter @rid correspondente
  6. Regra especial para transcrição:

    • <xref ref-type="sec" @rid> é obrigatório quando existe <sec sec-type="transcript">
  7. Regra especial para afiliação:

    • Para afiliação sem identificação de etiqueta no PDF: usar <xref ref-type="aff" rid="aff1"/> (self-closing)
  8. Regra de <sup>:

    • <sup> não pode abarcar <xref> quando não há caracteres textuais
    • Neste caso <sup> deve estar dentro de <xref>
  9. 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:

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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"]
  7. 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
  8. Validação de bibr obrigatório:

    • Contar <xref ref-type="bibr"> no documento
    • Se count == 0, reportar ERROR (Critério SciELO Brasil)
  9. 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
  10. 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:

  • <xref> com @rid e @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:

  • @rid com @id correspondente (OK)
  • @rid sem @id correspondente (ERROR)
  • Múltiplos @rid todos com correspondência (OK)
  • Múltiplos @rid alguns sem correspondência (ERROR - reportar todos)
  • @rid apontando para ref (OK)
  • @rid apontando para fig (OK)
  • @rid apontando para table (OK)
  • @rid apontando para aff (OK)
  • @rid apontando 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)
  • @rid com caracteres especiais (OK)
  • Intervalo de citações (múltiplos xref) (OK)

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:

  • 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.json criado 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-type funcionando
  • Validação de presença de pelo menos um bibr funcionando
  • Validação de correspondência @rid e @id funcionando
  • 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:

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

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions