You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Validação de Material Suplementar exige atributos de <media> mesmo quando o item usa <graphic>, e não sinaliza <inline-supplementary-material> proibido #1336
Duas falhas na validação de <supplementary-material> (packtools/sps/validation/supplementary_material.py):
1) <graphic> dentro de <supplementary-material> é rejeitado indevidamente. SupplementaryMaterialValidation.validate() chama incondicionalmente tanto MediaValidation quanto GraphicValidation para cada item, independentemente de qual elemento (<media> ou <graphic>) o item
realmente usa. Quando o item usa <graphic>, MediaValidation.validate_mime_type_and_subtype()
(packtools/sps/validation/media.py:12) ainda roda sobre dados sem mimetype/mime_subtype, e como {"mimetype": None, "mime-subtype": None} nunca está na lista mime_types_and_subtypes, é gerado um erro
espúrio de mime-type mesmo quando o XML está correto.
O SPS 1.10, na seção "<supplementary-material>: Material Suplementar", define atributos obrigatórios separados por elemento:
<media>: @mime-type, @mime-subtype, @xlink:href
<graphic>: apenas @xlink:href
E explicita: "Dentro de <supplementary-material> deve-se utilizar: <graphic> para figura; <media> para
outros tipos de conteúdo (PDF, word, excel, vídeo, entre outros)" - ou seja, ambos são formas válidas,
dependendo do tipo de material.
2) <inline-supplementary-material> não é sinalizado como proibido.
A classe XmlSupplementaryMaterialValidation já contém validate_prohibited_inline()
(packtools/sps/validation/supplementary_material.py:108), que detecta corretamente o uso de <inline-supplementary-material> via xpath, mas essa classe não está registrada em packtools/sps/validation/xml_validator.py - é código morto, nunca executado pelo pipeline principal. O
mesmo vale para validate_position() na mesma classe (posição da seção de material suplementar).
O SPS 1.10 é explícito: "Não é permitido o uso de <inline-supplementary-material>."
Observar erro de mime-type/subtype espúrio, mesmo com <graphic> corretamente marcado.
Validar um XML contendo <inline-supplementary-material> e observar que nenhum erro é emitido.
Comportamento esperado
Rodar MediaValidation apenas quando o item de fato usa <media>, e GraphicValidation apenas quando usa <graphic>.
Registrar XmlSupplementaryMaterialValidation (incluindo validate_prohibited_inline e validate_position)
no pipeline de xml_validator.py, para que o uso de <inline-supplementary-material> seja de fato
reportado.
Anexos
Trechos citados a partir do arquivo SPS 1.10_pt.pdf (versão 1.10, última atualização em 22/05/2025), seção
"<supplementary-material>: Material Suplementar".
Ambiente utilizado
N/A (validação de XML via packtools.sps.validation.xml_validator)
Classificação (esforço / risco / relevância)
Esforço: Médio - duas correções independentes: condicionar MediaValidation/GraphicValidation ao
elemento realmente presente, e religar XmlSupplementaryMaterialValidation ao pipeline de xml_validator.py.
Risco: Médio - religar uma classe inteira ao pipeline pode expor no mesmo lote outras validações ainda
não exercitadas em produção (ex.: validate_position), exigindo atenção redobrada nos testes.
Relevância: Alta - material suplementar em formato de figura (<graphic>) é comum; o falso positivo de
mime-type bloqueia pacotes SPS válidos.
Descrição do problema
Duas falhas na validação de
<supplementary-material>(packtools/sps/validation/supplementary_material.py):1)
<graphic>dentro de<supplementary-material>é rejeitado indevidamente.SupplementaryMaterialValidation.validate()chama incondicionalmente tantoMediaValidationquantoGraphicValidationpara cada item, independentemente de qual elemento (<media>ou<graphic>) o itemrealmente usa. Quando o item usa
<graphic>,MediaValidation.validate_mime_type_and_subtype()(
packtools/sps/validation/media.py:12) ainda roda sobre dados semmimetype/mime_subtype, e como{"mimetype": None, "mime-subtype": None}nunca está na listamime_types_and_subtypes, é gerado um erroespúrio de mime-type mesmo quando o XML está correto.
O SPS 1.10, na seção "
<supplementary-material>: Material Suplementar", define atributos obrigatóriosseparados por elemento:
<media>:@mime-type,@mime-subtype,@xlink:href<graphic>: apenas@xlink:hrefE explicita: "Dentro de
<supplementary-material>deve-se utilizar:<graphic>para figura;<media>paraoutros tipos de conteúdo (PDF, word, excel, vídeo, entre outros)" - ou seja, ambos são formas válidas,
dependendo do tipo de material.
2)
<inline-supplementary-material>não é sinalizado como proibido.A classe
XmlSupplementaryMaterialValidationjá contémvalidate_prohibited_inline()(
packtools/sps/validation/supplementary_material.py:108), que detecta corretamente o uso de<inline-supplementary-material>via xpath, mas essa classe não está registrada empacktools/sps/validation/xml_validator.py- é código morto, nunca executado pelo pipeline principal. Omesmo vale para
validate_position()na mesma classe (posição da seção de material suplementar).O SPS 1.10 é explícito: "Não é permitido o uso de
<inline-supplementary-material>."Passos para reproduzir o problema
<graphic>corretamente marcado.<inline-supplementary-material>e observar que nenhum erro é emitido.Comportamento esperado
MediaValidationapenas quando o item de fato usa<media>, eGraphicValidationapenas quando usa<graphic>.XmlSupplementaryMaterialValidation(incluindovalidate_prohibited_inlineevalidate_position)no pipeline de
xml_validator.py, para que o uso de<inline-supplementary-material>seja de fatoreportado.
Anexos
Trechos citados a partir do arquivo
SPS 1.10_pt.pdf(versão 1.10, última atualização em 22/05/2025), seção"
<supplementary-material>: Material Suplementar".Ambiente utilizado
N/A (validação de XML via
packtools.sps.validation.xml_validator)Classificação (esforço / risco / relevância)
MediaValidation/GraphicValidationaoelemento realmente presente, e religar
XmlSupplementaryMaterialValidationao pipeline dexml_validator.py.não exercitadas em produção (ex.:
validate_position), exigindo atenção redobrada nos testes.<graphic>) é comum; o falso positivo demime-type bloqueia pacotes SPS válidos.
Referências
packtools/sps/validation/supplementary_material.py(
SupplementaryMaterialValidation.validate,XmlSupplementaryMaterialValidation),packtools/sps/validation/media.py(MediaValidation.validate_mime_type_and_subtype),packtools/sps/validation/xml_validator.py