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

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.

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