Skip to content

Implementar validações de <graphic> e <inline-graphic> conforme SPS 1.10#1095

Draft
Copilot wants to merge 4 commits intomasterfrom
copilot/add-validations-graphic-elements
Draft

Implementar validações de <graphic> e <inline-graphic> conforme SPS 1.10#1095
Copilot wants to merge 4 commits intomasterfrom
copilot/add-validations-graphic-elements

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

O que esse PR faz?

Implementa 7 de 10 validações para elementos <graphic> e <inline-graphic> conforme SPS 1.10, atingindo conformidade de 70%.

Regras implementadas:

  • P0 (Critical): @id e @xLink:href obrigatórios em ambos elementos; validação de extensões (.jpg, .jpeg, .png, .tif, .tiff, .svg)
  • P1 (Important): Presença de elementos de acessibilidade; restrição de .svg apenas dentro de <alternatives>

Mudanças principais:

  • GraphicValidation.validate_id(): sobrescrito para exigir @id em <inline-graphic> (spec SPS 1.10, anteriormente isento)
  • GraphicValidation.validate_svg_in_alternatives(): novo método valida SVG apenas em <alternatives>
# Exemplo de validação SVG
<fig id="f1">
    <graphic id="g1" xlink:href="vector.svg"/>  <!-- ERROR: svg fora de alternatives -->
</fig>

<fig id="f2">
    <alternatives>
        <graphic id="g2" xlink:href="vector.svg"/>  <!-- OK -->
        <graphic id="g3" xlink:href="raster.jpg"/>
    </alternatives>
</fig>

Onde a revisão poderia começar?

  1. packtools/sps/validation/graphic.py - lógica de validação (93 linhas adicionadas)
  2. tests/sps/validation/test_graphic.py - suite de testes (17 testes, todos passando)

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.models.graphic import XmlGraphic
from packtools.sps.validation.graphic import GraphicValidation

xml = etree.fromstring('''
<article xmlns:xlink="http://www.w3.org/1999/xlink">
    <body>
        <fig id="f1">
            <graphic id="g1" xlink:href="image.svg"/>  <!-- Deve falhar -->
        </fig>
        <p>
            <inline-graphic xlink:href="icon.png"/>  <!-- Deve falhar (sem @id) -->
        </p>
    </body>
</article>
''')

params = {
    "media_attributes_error_level": "CRITICAL",
    "xlink_href_error_level": "ERROR",
    "valid_extension": ["jpg", "png", "tif", "tiff", "jpeg", "svg"],
    "svg_error_level": "ERROR",
    # ... demais params de acessibilidade
}

for graphic_data in XmlGraphic(xml).data:
    validator = GraphicValidation(graphic_data, params)
    results = list(validator.validate())
    # Verificar erros CRITICAL/ERROR nos results

Executar testes:

python3 -m unittest tests.sps.validation.test_graphic -v

Algum cenário de contexto que queira dar?

Breaking change (intencional): <inline-graphic> agora requer @id (spec SPS 1.10). Anteriormente, base class isentava elementos inline-* desta validação. XMLs existentes sem @id em <inline-graphic> agora falharão com CRITICAL.

Rationale: SPS 1.10 explicitamente define "@id (obrigatório em <graphic> e <inline-graphic>)". A isenção anterior não estava alinhada com a spec.

Validação SVG: Nova verificação contextual - SVG permitido, mas apenas dentro de <alternatives>. Permite SVG vetorial com fallback raster para compatibilidade.

Cobertura de testes:

  • 17 testes unitários cobrindo todos os 7 cenários de validação
  • Testes de integração para fluxo completo
  • Zero vulnerabilidades (CodeQL ✓)

Screenshots

N/A - validações backend

Quais são tickets relevantes?

Referenciado automaticamente pelo sistema.

Referências

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • api.crossref.org
    • Triggering command: /usr/bin/python3 python3 -m unittest discover tests/sps/validation -v le_license.py (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>Criar validações para os elementos e </issue_title>
<issue_description>## Objetivo

Implementar validações para os elementos <graphic> e <inline-graphic> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (7 de 10 regras).

Nota: Algumas validações para <graphic> e <inline-graphic> podem já estar parcialmente implementadas no repositório (ex: em validação de <fig>). Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10 para ambos os elementos.


Contexto

Os elementos <graphic> e <inline-graphic> são usados exclusivamente para figuras e imagens estáticas. <graphic> representa figuras em elementos estruturais (fig, app, supplementary-material, table-wrap, bio), enquanto <inline-graphic> representa figuras inline dentro de parágrafos. Validações corretas garantem que apenas formatos suportados sejam usados, que atributos obrigatórios estejam presentes, e que boas práticas de acessibilidade sejam seguidas.

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.graphicfigura

Regras principais conforme SPS 1.10:

  1. Atributos obrigatórios (ambos elementos):

    • @id (obrigatório em <graphic> e <inline-graphic>)
    • @xlink:href (obrigatório em <graphic> e <inline-graphic>)
  2. Extensões de arquivo permitidas:

    • .jpg ou .jpeg (preferencialmente)
    • .png
    • .tif ou .tiff
    • .svg - apenas dentro de <alternatives>
  3. Uso correto:

    • <graphic> - para figuras em elementos estruturais
    • <inline-graphic> - para figuras inline em parágrafos
    • Não usar <inline-graphic> para criar caracteres especiais comuns (diacríticos, símbolos de copyright - usar Unicode)
  4. Acessibilidade (recomendado):

    • Todas as figuras devem ter <alt-text> e/ou <long-desc>
  5. Contextos válidos para <graphic>:

    • Dentro de <fig>
    • Dentro de <app> (apêndice)
    • Dentro de <supplementary-material> (material suplementar)
    • Dentro de <table-wrap> (tabela)
    • Dentro de <bio> (foto de autor)
  6. Contextos válidos para <inline-graphic>:

    • Dentro de <p> (parágrafo)
    • Outros elementos inline
  7. Posicionamento:

    • Figuras em <graphic> 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 em <graphic> CRITICAL O atributo @id é obrigatório em <graphic>
2 Validar presença de @xlink:href em <graphic> CRITICAL O atributo @xlink:href é obrigatório em <graphic>
3 Validar presença de @id em <inline-graphic> CRITICAL O atributo @id é obrigatório em <inline-graphic>
4 Validar presença de @xlink:href em <inline-graphic> CRITICAL O atributo @xlink:href é obrigatório em <inline-graphic>
5 Validar extensão de arquivo em @xlink:href ERROR Arquivo deve ter extensão permitida: .jpg, .jpeg, .png, .tif, .tiff (.svg apenas em <alternatives>)

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
6 Validar presença de <alt-text> ou <long-desc> WARNING Para acessibilidade, figuras devem ter <alt-text> e/ou <long-desc> como elemento filho
7 Validar uso de .svg apenas em <alternatives> ERROR Extensão .svg só é permitida quando <graphic> está dentro de <alternatives>

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
8 Validar que <inline-graphic> não é usado para caracteres especiais Alta complexidade - requer análise semântica de contexto de uso
9 Validar posicionamento após primeira chamada no texto Alta complexidade - requer análise de fluxo do documento e referências cruzadas
10 Validar contextos válidos de uso Baixa prioridade - schema XML já restringe contextos permitidos

Arquivos a Criar/Modificar

Avaliar existentes (podem ter validações parciais):

  • packtools/sps/models/graphic.py ou similar – Verificar se modelo existe
  • packtools/sps/validation/fig.py – Pode ter validações de <graphic> dentro de <fig>
  • packtools/sps/validation/graphic.py – Verificar validações existentes
  • packtools/sps/validation/rules/graphic_rules.json ou similar – Verificar configuração

Criar (se não existirem):

  • packtools/sps/models/graphic.py – Modelo de extração de dados
  • `packtools/sps/valida...

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 3 commits February 13, 2026 12:26
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>
Copilot AI changed the title [WIP] Implement validation for <graphic> and <inline-graphic> elements Implementar validações de <graphic> e <inline-graphic> conforme 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.

Criar validações para os elementos <graphic> e <inline-graphic>

2 participants