Fix media/inline-media validation tests, add missing mime-subtypes, fix validation_type typo#1131
Fix media/inline-media validation tests, add missing mime-subtypes, fix validation_type typo#1131
Conversation
…x validation_type typo Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Rossi-Luciano
left a comment
There was a problem hiding this comment.
Bug: duplicação de validações de acessibilidade e @xlink:href ausente não detectado em <media>
Identificados via análise cruzada de media.py × XML artificial de testes × relatório CSV gerado pelo pipeline de validação do upload3/scms-upload.
Problema 1 — False negative: @xlink:href ausente não gera erro
Um elemento <media> com @mimetype, @mime-subtype e @id presentes, mas sem @xlink:href, não produz nenhuma entrada no relatório de erros para a validação de xlink_href. O erro é silenciosamente engolido.
Causa: VisualResourceBaseValidation.validate_xlink_href(), herdado por MediaValidation via super().validate(), chama os.path.splitext(xlink_href) sem verificar se xlink_href é None. Quando o atributo está ausente, xlink_href=None causa TypeError que interrompe o yield sem registrar o erro. Padrão idêntico ao bug já corrigido em graphic.py.
Correção: adicionar override de validate_xlink_href em MediaValidation com guarda explícita para None antes de qualquer operação que assuma string — seguindo o mesmo padrão aplicado em graphic.py. Alternativamente, corrigir diretamente em VisualResourceBaseValidation para beneficiar todos os módulos que herdam dela.
Exemplo mínimo que reproduz o bug:
<media id="m01" mimetype="video" mime-subtype="mp4"/>Resultado esperado no relatório: entrada CRITICAL para @xlink:href ausente.
Resultado obtido: nenhuma entrada gerada para esse atributo.
Problema 2 — False positive: validações de acessibilidade duplicadas
Para cada <media> de vídeo ou áudio, as validações de alt-text, xref to transcript e transcript aparecem duas vezes no relatório de erros — uma com subject="accessibility" e outra com subject="media":
WARNING | accessibility | Missing <alt-text>...
WARNING | media | Missing <alt-text>... ← duplicata
WARNING | accessibility | <media> with video is missing <xref>...
WARNING | media | <media> with video is missing <xref>... ← duplicata
WARNING | accessibility | The transcript is missing...
WARNING | media | The transcript is missing... ← duplicata
Causa provável: o orquestrador (xml_validations.py) chama tanto o módulo de acessibilidade quanto MediaValidation.validate(), que por sua vez chama super().validate() — o qual já inclui as mesmas checagens de acessibilidade herdadas de VisualResourceBaseValidation. Padrão de duplicação idêntico ao identificado anteriormente em fn.py/basefn.py.
Correção: verificar em xml_validations.py se validate_media() e o módulo de acessibilidade estão sendo chamados separadamente para os mesmos elementos. Se sim, remover as checagens de acessibilidade do super().validate() em MediaValidation, ou suprimir a chamada duplicada no orquestrador.
Exemplo mínimo que reproduz a duplicação:
<media id="m01" mimetype="video" mime-subtype="mp4" xlink:href="video01.mp4"/>Resultado esperado: uma entrada WARNING para alt-text, uma para xref to transcript, uma para transcript.
Resultado obtido: cada uma dessas entradas aparece duas vezes, com subject diferente.
|
@copilot Bug: duplicação de validações de acessibilidade e Identificados via análise cruzada de Problema 1 — False negative: Um elemento Causa: Correção: adicionar override de Exemplo mínimo que reproduz o bug: <media id="m01" mimetype="video" mime-subtype="mp4"/>Resultado esperado no relatório: entrada CRITICAL para Problema 2 — False positive: validações de acessibilidade duplicadas Para cada Causa provável: o orquestrador ( Correção: verificar em Exemplo mínimo que reproduz a duplicação: <media id="m01" mimetype="video" mime-subtype="mp4" xlink:href="video01.mp4"/>Resultado esperado: uma entrada WARNING para |
…validations Agent-Logs-Url: https://github.com/scieloorg/packtools/sessions/c20dfb49-9fb1-48ab-bb91-3320dd3bb40f Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
@xlink:hrefmissing not being detected (None guard invalidate_xlink_href)VisualResourceBaseValidation.validate()(already run by orchestrator viaXMLAccessibilityDataValidation)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
<media>e<inline-media>conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (7 de 10 regras).Nota: Algumas validações para
<media>e<inline-media>podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10.Contexto
Os elementos
<media>e<inline-media>referenciam arquivos externos de objetos multimídia (vídeos, áudios, documentos, planilhas, etc.), exceto figuras estáticas. Validações corretas garantem que atributos obrigatórios estejam presentes, que combinações de mime-type/mime-subtype sejam válidas, 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.media
Regras principais conforme SPS 1.10:
Atributos obrigatórios (ambos elementos):
@id(obrigatório)@mime-type(obrigatório)@mime-subtype(obrigatório)@xlink:href(obrigatório)Valores comuns para
@mime-type:application- Planilhas Excel, documentos Word, apresentações PowerPoint, PDFs, arquivos compactadosvideo- Vídeosaudio- ÁudiosExtensões obrigatórias para
@mime-subtype:mp4mp3zipFormato do
@xlink:href:Consistência mime-type e mime-subtype:
video+mp4audio+mp3application+zip,pdf,xlsx,docx,pptx, etc.Acessibilidade (recomendado):
<alt-text>e/ou<long-desc><sec sec-type="transcript"><xref ref-type="sec">Restrições de uso:
<media>ou<inline-media>para figuras e imagens estáticas (usar<graphic>e<inline-graphic>)Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
@id@idé obrigatório em<media>e<inline-media>@mime-type@mime-typeé obrigatório em<media>e<inline-media>@mime-subtype@mime-subtypeé obrigatório em<media>e<inline-media>@xlink:href@xlink:hrefé obrigatório em<media>e<inline-media>@mime-typee@mime-subtypedeve ser válida (ex:video/mp4,audio/mp3,application/pdf)mp4; para áudio:mp3; para compactado:zipP1 – Importantes (implementar se possível)
<alt-text>ou<long-desc>como elementos filhos<sec sec-type="transcript">P2 – Futuras (fora do escopo deste Issue)
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/media.pyou similar – Verificar se modelo existepacktools/sps/validation/media.py– Verificar validações existentespacktools/sps/validation/rules/media_rules.jsonou similar – Verificar configuraçãoCriar (se não existirem):
packtools/sps/models/media.py– Modelo de extração de dadospacktools/sps/validation/media.py– Validaçõespacktools/sps/validation/rules/media_rules.json– Configuração de níveis de errotests/sps/validation/test_media.py– Testes unitáriosReferenciar (implementações similares):
packtools/sps/validation/graphic.py– Validação de atributos obrigatórios similarpacktools/sps/validation/utils.py– Funções auxiliares (build_response)Exemplos de XML
XML Válido (deve passa...
📱 Kick off Copilot coding agent tasks wherever you are with GitHub Mobile, available on iOS and Android.