Skip to content

Conversation

@Rossi-Luciano
Copy link
Collaborator

Este PR implementa as validações obrigatórias da especificação SPS 1.10 para os elementos <disp-formula> e <inline-formula>, incluindo validações de prefixos de IDs e atributos obrigatórios em elementos internos como <mml:math>.

Principais adições:

  • 6 novas validações para conformidade com regras obrigatórias SPS
  • Migração de format_response para build_response para suporte completo a internacionalização (i18n)
  • Adição de propriedades mml_math_id e tex_math_id ao modelo
  • 7 novos testes unitários para cobertura das novas validações
  • Configuração completa de níveis de erro (CRITICAL/ERROR/WARNING)

Cobertura: 87,5% das regras obrigatórias SPS (7/8 implementadas)

Onde a revisão poderia começar?

Ordem sugerida de revisão:

  1. Modelo: packtools/sps/models/formula.py - Novas propriedades mml_math_id e tex_math_id
  2. Validação: packtools/sps/validation/formula.py - 10 validações (linhas 121-700)
  3. Configuração: packtools/sps/validation/formula_rules.json - Níveis de erro
  4. Testes: tests/sps/validation/test_formula.py - 15 testes (7 novos)

Pontos de atenção:

  • Mudança de format_response para build_response (breaking change)
  • Uso de parent=self.data em vez de parâmetros individuais

Como este poderia ser testado manualmente?

1. Executar suite de testes:

# Testes de validação (15 testes)
python -m unittest tests.sps.validation.test_formula -v

# Testes do modelo (múltiplos testes)
python -m unittest tests.sps.models.test_formula -v

# Resultado esperado: todos os testes passam

2. Testar validação de prefixo incorreto:

from lxml import etree
from packtools.sps.validation.formula import ArticleDispFormulaValidation

xml = '''<article xmlns:mml="http://www.w3.org/1998/Math/MathML">
    <body>
        <disp-formula id="f10">  <!-- Prefixo errado -->
            <mml:math id="e03">...</mml:math>  <!-- Prefixo errado -->
        </disp-formula>
    </body>
</article>'''

xml_tree = etree.fromstring(xml)
validator = ArticleDispFormulaValidation(xml_tree, {})

for error in validator.validate():
    if error["response"] != "OK":
        print(f"{error['response']}: {error['advice']}")

# Deve retornar 2 erros de prefixo

3. Testar ID ausente em mml:math:

xml = '''<article xmlns:mml="http://www.w3.org/1998/Math/MathML">
    <body>
        <disp-formula id="e10">
            <mml:math>...</mml:math>  <!-- Sem @id -->
        </disp-formula>
    </body>
</article>'''

# Deve retornar erro CRITICAL

Algum cenário de contexto que queira dar?

Contexto SPS:
A especificação SciELO Publishing Schema (SPS) 1.10 define regras obrigatórias para identificação de fórmulas matemáticas em artigos científicos. Essas regras garantem:

  • Rastreabilidade única de cada fórmula via @id
  • Padronização de nomenclatura com prefixos específicos ("e" para fórmulas, "m" para mml:math)
  • Validação de estrutura correta de elementos alternativos

Motivação técnica:
A migração de format_response para build_response foi necessária porque:

  • format_response ignora silenciosamente os parâmetros advice_text e advice_params
  • Sistema de i18n requer templates não formatados para tradução
  • Permite extração automática de strings para arquivos .po/.pot

Breaking Change:
O campo retornado mudou de obtained para got_value. Testes que verificam valores devem usar error["got_value"] em vez de error["obtained"].

Screenshots

Não aplicável - validações de XML retornam estruturas de dados.

Quais são tickets relevantes?

N.A.

Referências

N.A.

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.

1 participant