Skip to content

Validação de Material Suplementar exige atributos de <media> mesmo quando o item usa <graphic>, e não sinaliza <inline-supplementary-material> proibido #1336

Description

@Rossi-Luciano

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

Passos para reproduzir o problema

  1. Validar um XML com:
    <supplementary-material id="suppl1">
        <label>Supplementary Figure 1</label>
        <caption><title>Figure 1</title></caption>
        <graphic xlink:href="arquivo-gf7.jpg"/>
    </supplementary-material>
  2. Observar erro de mime-type/subtype espúrio, mesmo com <graphic> corretamente marcado.
  3. 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.

Referências

  • Reportado originalmente em Validação: Material Suplementar spsvalidator#47
  • Código relevante: 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions