Adiciona validação de recomendação MathML e corrige validação de codificação em fórmulas#1081
Adiciona validação de recomendação MathML e corrige validação de codificação em fórmulas#1081
Conversation
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
packtools/sps/validation/formula.py
Outdated
|
|
||
| # Return None if there's no codification at all | ||
| if not has_mml_math and not has_tex_math: | ||
| return None |
There was a problem hiding this comment.
@copilot as validações devem sempre retornar um dicionário (padrão build_response), neste caso não foram encontrados mml_math e tex_math, assim a mensagem deverá refletir essa condição.
There was a problem hiding this comment.
Corrigido em b293ce6. A validação agora sempre retorna um dicionário build_response:
- OK quando não há codificação (mensagem: "no codification found")
- WARNING quando há apenas tex-math (recomenda MathML)
- OK quando há mml:math (caso válido)
Todos os testes atualizados e passando (21/21).
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
packtools/sps/validation/formula.py
Outdated
There was a problem hiding this comment.
# substituir por: alternatives = self.data.get("alternative_elements") or [] is_valid = count == 1 or (count > 1 and len(alternatives) > 1)
Os métodos validate_codification, a linha is_valid = count == 1 deve ser substituída pela expressão acima. A variável alternative_elements já está disponível em self.data (conforme evidenciado pelos dados no relatório de erros), portanto não é necessário nenhum outro ajuste no método.
There was a problem hiding this comment.
Corrigido em 844cbcd. A validação validate_codification agora aceita:
count == 1(codificação única)count > 1 and count == len(alternatives)(múltiplas codificações em alternatives)
Testes confirmam comportamento correto para todos os cenários.
packtools/sps/validation/formula.py
Outdated
There was a problem hiding this comment.
# substituir por: alternatives = self.data.get("alternative_elements") or [] is_valid = count == 1 or (count > 1 and len(alternatives) > 1)
Os métodos validate_codification, a linha is_valid = count == 1 deve ser substituída pela expressão acima. A variável alternative_elements já está disponível em self.data (conforme evidenciado pelos dados no relatório de erros), portanto não é necessário nenhum outro ajuste no método.
There was a problem hiding this comment.
Corrigido em 844cbcd. A validação validate_codification agora aceita:
count == 1(codificação única)count > 1 and count == len(alternatives)(múltiplas codificações em alternatives)
Testes confirmam comportamento correto para todos os cenários.
packtools/sps/validation/formula.py
Outdated
There was a problem hiding this comment.
@copilot substituir:
is_valid = count == 1por
alternatives = self.data.get("alternative_elements") or []
is_valid = (count == 1) or (count == len(alternatives) and count > 1)There was a problem hiding this comment.
Já implementado em 844cbcd. A lógica is_valid = (count == 1) or (count == len(alternatives) and count > 1) está aplicada na linha 215.
…tives Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
packtools/sps/validation/formula.py
Outdated
There was a problem hiding this comment.
@copilot substituir:
is_valid = count == 1por
alternatives = self.data.get("alternative_elements") or []
is_valid = (count == 1) or ((count == len(alternatives)) and (count > 1))There was a problem hiding this comment.
Corrigido em 0c831bc. Adicionados parênteses extras para melhor legibilidade: is_valid = (count == 1) or ((count == len(alternatives)) and (count > 1))
…dation Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
O que esse PR faz?
Implementa
validate_mathml_recommendationpara<disp-formula>e<inline-formula>, completando a conformidade com SPS 1.10. Das 6 regras listadas no issue, 5 já estavam implementadas. Este PR adiciona a última: emitir WARNING quando fórmulas contêm apenas<tex-math>sem<mml:math>, recomendando MathML para acessibilidade com leitores de tela.Adicionalmente, corrige a lógica de validação em
validate_codificationpara aceitar corretamente fórmulas com múltiplas codificações quando devidamente envolvidas em<alternatives>, conforme especificação SPS 1.10.Comportamento validate_mathml_recommendation:
mml:mathexiste (válido)tex-mathexisteComportamento validate_codification (corrigido):
<alternatives>Atualizações importantes:
build_responseem todos os cenários, seguindo o padrão estabelecido do codebase, em vez de retornarNoneem alguns casos.inline-formulapara melhor legibilidade do código (linha 607).Onde a revisão poderia começar?
packtools/sps/validation/formula.py:validate_mathml_recommendationem ambas as classes de validação)validate_codificationcorrigida com formatação aprimorada)Como este poderia ser testado manualmente?
Todos os 21 testes devem passar (15 existentes + 6 atualizados).
Verificação manual adicional:
Algum cenário de contexto que queira dar?
A duplicação de código entre
DispFormulaValidationeInlineFormulaValidationé intencional e segue o padrão existente do codebase onde ambas as classes duplicam implementações de todos os métodos de validação.Após revisão de código, a validação foi atualizada para sempre retornar um dicionário
build_responseexplícito em todos os cenários (OK, WARNING ou erro), em vez de retornarNoneem casos válidos. Isso torna o comportamento mais transparente e consistente com o padrão de validação do projeto.A correção em
validate_codificationpermite que fórmulas com múltiplas codificações (por exemplo, MathML e TeX para compatibilidade) sejam validadas corretamente quando envolvidas em<alternatives>, conforme especificado no SPS 1.10 para acessibilidade e compatibilidade. A formatação da expressão lógica foi aprimorada com parênteses extras para melhor legibilidade.Referências
Original prompt
This section details on the original issue you should resolve
<issue_title>Complementar as validações para os elementos e </issue_title>
<issue_description>## Objetivo
Implementar validações faltantes para
<disp-formula>e<inline-formula>conforme SPS 1.10, elevando a conformidade de 50% para 100% (6 de 12 regras implementadas atualmente).Conformidade atual
validate_iddisp-formulavalidate_labeldisp-formulavalidate_codificationdisp-formulavalidate_alternativesdisp-formulavalidate_codificationinline-formulavalidate_alternativesinline-formulavalidate_idinline-formulavalidate_mml_math_idvalidate_id_prefixvalidate_mml_math_id_prefixvalidate_mathml_recommendationdisp-formulaRegras a implementar
P0 - Criticas
Regra 7:
validate_idemInlineFormulaValidationInlineFormulaValidation.validate()nao chamavalidate_id. O metodo precisa ser adicionado seguindo o mesmo padrao ja implementado emDispFormulaValidation.validate_id(). O campoidja esta disponivel emself.data.Regra 8:
validate_mml_math_idem ambas as classes<mml:math>deve ter@idobrigatorio (SPS 1.10). O modelFormulanao expoe esse atributo. E necessario:mml_math_idempacktools/sps/models/formula.py:Incluir
"mml_math_id": self.mml_math_idno dict retornado porFormula.data.Implementar
validate_mml_math_id()emDispFormulaValidationeInlineFormulaValidation, retornandoNonequandomml_mathforNone.P1 - Importantes
Regra 9:
validate_id_prefixO
@idde<disp-formula>e<inline-formula>deve iniciar com o prefixo"e". Validar comstr.startswith("e"). Nivel: WARNING.Regra 10:
validate_mml_math_id_prefixO
@idde<mml:math>deve iniciar com o prefixo"m". Depende da regra 8. RetornarNonequandomml_math_idforNone. Nivel: WARNING.Regra 11:
validate_mathml_recommendationQuando a formula contem
tex_mathe nao contemmml_math, emitir aviso recomendando MathML por acessibilidade. RetornarNonequando nao houver nenhuma codificacao. Nivel: WARNING.P2 - Fora do escopo
<disp-formula>apos a primeira chamada no texto<xref>por ordem de aparecimento e logica condicional para excluir<app-group>e<supplementary-material>. Alta complexidade, baixo volume de erros.Arquivos
packtools/sps/models/formula.pypacktools/sps/validation/formula.pytests/sps/validation/test_formula.pypacktools/sps/validation/rules/formula_rules.jsonNovos parametros de rules
Adicionar ao
formula_rules.jsone aoget_default_paramsde cada classe como fallback:Exemplos de XML
Valido - disp-formula completa:
Valido - inline-formula com id:
Invalido - inline-formula sem @id (regra 7, CRITICAL):
Invalido - mml:math sem @id (regra 8, ERROR):
Invalido - @id com prefixo incorreto (regras 9 e 10, WARNING):