Skip to content

Implementar validações para elemento <fig> (SPS 1.10)#1092

Draft
Copilot wants to merge 6 commits intomasterfrom
copilot/add-validations-for-fig-element
Draft

Implementar validações para elemento <fig> (SPS 1.10)#1092
Copilot wants to merge 6 commits intomasterfrom
copilot/add-validations-for-fig-element

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

O que esse PR faz?

Implementa 8 validações para <fig> conforme SPS 1.10, atingindo 80% de conformidade (meta: 70%).

Regras P0 (CRITICAL/ERROR):

  • @id obrigatório
  • <graphic> obrigatório com @xlink:href
  • Extensões permitidas: .jpg, .jpeg, .png, .tif, .tiff
  • .svg apenas dentro de <alternatives>
  • @fig-type valores: graphic, chart, diagram, drawing, illustration, map

Regras P1 (ERROR/WARNING):

  • @xml:lang obrigatório em <fig> dentro de <fig-group>
  • <alt-text> ou <long-desc> recomendados (acessibilidade)
  • <alt-text> limitado a 120 caracteres

Onde a revisão poderia começar?

  1. packtools/sps/validation/fig.py - 8 métodos de validação
  2. packtools/sps/models/fig.py - novos campos: xml_lang, parent_name, graphic_alt_text, graphic_long_desc
  3. tests/sps/validation/test_fig.py - 18 testes cobrindo todos os cenários

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.validation.fig import ArticleFigValidation

xml = etree.fromstring('''
<article xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<body>
    <fig id="f1" fig-type="chart">
        <label>Figure 1</label>
        <caption><title>Sales Chart</title></caption>
        <graphic xlink:href="sales.jpg">
            <alt-text>Chart showing sales</alt-text>
        </graphic>
    </fig>
</body>
</article>
''')

rules = {
    "article_types_requires": ["research-article"],
    "id_error_level": "CRITICAL",
    "allowed_file_extensions": ["jpg", "jpeg", "png", "tif", "tiff"],
}

validator = ArticleFigValidation(xml, rules)
results = list(validator.validate())
# Todas as validações passam para esta figura válida

Casos de erro:

  • Fig sem @id → CRITICAL
  • SVG fora de <alternatives> → ERROR
  • @fig-type="photo" (inválido) → ERROR
  • Fig em <fig-group> sem @xml:lang → ERROR

Algum cenário de contexto que queira dar?

Validação condicional: Regras executam apenas quando aplicável:

  • @fig-type só valida se presente
  • @xml:lang só valida dentro de <fig-group>
  • alt-text length só valida se <alt-text> existe

Extração de acessibilidade: Modelo atualizado para extrair <alt-text> e <long-desc> de qualquer <graphic>, não apenas dentro de <alternatives>.

Testes: 33 testes (18 validação + 15 modelo) passando. CodeQL: 0 vulnerabilidades.

Quais são tickets relevantes?

Issue original descreve as 10 regras SPS. Implementadas 8 (regras 9-10 fora do escopo por complexidade alta: NLP e análise de fluxo de documento).

Referências

Original prompt

This section details on the original issue you should resolve

<issue_title>Criar validações para o elemento </issue_title>
<issue_description>## Objetivo

Implementar validações para o elemento <fig> conforme a especificação SPS 1.10, aumentando a conformidade de 0% para 70% (7 de 10 regras).


Contexto

O elemento <fig> identifica figuras, mapas, gráficos e outros elementos visuais em artigos científicos. Validações corretas garantem acessibilidade (com alt-text/long-desc), compatibilidade de formatos de arquivo, identificação adequada e suporte a múltiplos idiomas através de fig-group.

Conformidade atual: 0 de 10 regras implementadas (0%)
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.fig

Regras principais conforme SPS 1.10:

  1. Atributo obrigatório:

    • @id (obrigatório em todas as figuras)
  2. Atributo @fig-type:

    • Valores permitidos: graphic, chart, diagram, drawing, illustration, map
    • Só deve ser usado quando <label> tem conteúdo diferente de "fig", "figure", "figura"
  3. Elemento <graphic> (filho obrigatório):

    • Atributo @xlink:href obrigatório
    • Extensões permitidas: .jpg, .jpeg, .png, .tif, .tiff
    • .svg permitido apenas dentro de <alternatives>
  4. Estrutura:

    • Pode conter: <label>, <caption> + <title>, <graphic>, <attrib>
  5. Figuras com legendas traduzidas:

    • Devem estar dentro de <fig-group>
    • Cada <fig> dentro do grupo deve ter @xml:lang
  6. Acessibilidade (recomendado):

    • Todas as figuras devem ter <alt-text> e/ou <long-desc>
    • <alt-text> deve ter até 120 caracteres
    • Descrição deve ser significativa
  7. Posicionamento:

    • Figuras devem aparecer logo abaixo da primeira chamada no texto
    • Exceto quando dentro de <app-group> ou <supplementary-material>

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de @id CRITICAL O atributo @id é obrigatório em todos os <fig>
2 Validar presença de <graphic> CRITICAL Todo <fig> deve conter pelo menos um elemento <graphic>
3 Validar @xlink:href em <graphic> CRITICAL O atributo @xlink:href é obrigatório em <graphic>
4 Validar extensão de arquivo em @xlink:href ERROR Arquivo deve ter extensão: .jpg, .jpeg, .png, .tif, .tiff (.svg apenas em <alternatives>)
5 Validar valores permitidos em @fig-type ERROR Quando presente, @fig-type deve ter valor: graphic, chart, diagram, drawing, illustration, map

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
6 Validar @xml:lang em <fig> dentro de <fig-group> ERROR Quando <fig> está dentro de <fig-group>, o atributo @xml:lang é obrigatório
7 Validar presença de <alt-text> ou <long-desc> WARNING Para acessibilidade, figuras devem ter <alt-text> e/ou <long-desc>
8 Validar tamanho de <alt-text> WARNING Texto em <alt-text> deve ter até 120 caracteres

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
9 Validar uso correto de @fig-type baseado em <label> Alta complexidade - requer análise de conteúdo textual e NLP
10 Validar posicionamento correto após primeira chamada Alta complexidade - requer análise de fluxo do documento e referências cruzadas

Arquivos a Criar/Modificar

Criar:

  • packtools/sps/models/fig.py – Modelo de extração de dados
  • packtools/sps/validation/fig.py – Validações
  • packtools/sps/validation/rules/fig_rules.json – Configuração de níveis de erro
  • tests/sps/validation/test_fig.py – Testes unitários

Referenciar (implementações similares):

  • packtools/sps/models/table.py – Modelo similar (também tem @id obrigatório)
  • packtools/sps/validation/article_abstract.py – Validação de graphic similar
  • packtools/sps/validation/utils.py – Funções auxiliares (build_response)

Exemplos de XML

XML Válido (deve passar sem erros):

<!-- Exemplo 1: figura básica com alt-text -->
<fig id="f1">
    <label>Figura 1</label>
    <caption>
        <title>Título da Figura</title>
    </caption>
    <graphic xlink:href="1234-5678-scie-58-e1043-gf1.jpg">
        <alt-text>Breve descrição do objeto</alt-text>
    </graphic>
</fig>

<!-- Exemplo 2: mapa com @fig-type -->
<fig fig-type="map" id="f2">
    <label>Map 1</label>
    <caption>
        <title>Título do Mapa</title>
    </caption>
    <graphic xlink:href="1234-5678-scie-58-e1043-gf2.jpg"/>
</fig>

<!-- Exemplo 3: figura com fonte (attrib) -->
<fig id="f3">
    <label>Figure 2</label>...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes scieloorg/packtools#1083

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/scieloorg/packtools/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 5 commits February 13, 2026 12:16
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
…hic_alt_text, graphic_long_desc)

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Add validations for the <fig> element as per SPS 1.10 Implementar validações para elemento &lt;fig&gt; (SPS 1.10) Feb 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants