Skip to content

Conversation

Copy link

Copilot AI commented Oct 7, 2025

Descrição

Este PR implementa uma função utilitária para corrigir automaticamente elementos inline-graphic incorretamente posicionados dentro de label ou caption, movendo-os para a posição correta e renomeando-os para graphic, conforme especificação SPS (SciELO Publishing Schema).

Problema

Durante a migração de plataforma, diversos XMLs apresentam elementos inline-graphic posicionados incorretamente dentro de caption ou label, o que não está conforme com o padrão SPS e causa problemas no processamento pelos sistemas SciELO.

Exemplo de XML incorreto:

<fig id="f1">
  <label>Figura 1</label>
  <caption><title>Título da figura<inline-graphic xlink:href="img1.jpg"/></title></caption>
</fig>

Exemplo de XML corrigido:

<fig id="f1">
  <label>Figura 1</label>
  <caption><title>Título da figura</title></caption>
  <graphic xlink:href="img1.jpg"/>
</fig>

Solução Implementada

Foi criada a função fix_inline_graphic_in_caption_and_label() no módulo /packtools/sps/utils/xml_fixer.py que:

  1. Identifica todos os elementos inline-graphic dentro de label ou caption usando XPath
  2. Verifica se já existe um elemento graphic no elemento pai (fig, table-wrap, boxed-text, etc.)
  3. Move e renomeia o inline-graphic para graphic apenas quando não existir graphic no pai
  4. Preserva todos os atributos (xlink:href, id, content-type) e namespaces
  5. Retorna uma lista detalhada documentando todas as modificações realizadas

Uso da Função

from lxml import etree
from packtools.sps.utils.xml_fixer import fix_inline_graphic_in_caption_and_label

# Carregar XML com problema
xmltree = etree.fromstring(xml_string)

# Aplicar correção
changes = fix_inline_graphic_in_caption_and_label(xmltree)

# Verificar mudanças realizadas
for change in changes:
    print(f"Movido de <{change['old_parent']}> para <{change['new_parent']}>")

Características

  • Seguro: Não modifica o XML se graphic já existir no pai
  • Abrangente: Funciona com múltiplos contextos (fig, table-wrap, boxed-text, disp-formula, etc.)
  • Preserva dados: Mantém todos os atributos, namespaces e conteúdo
  • Documentado: Retorna log detalhado com xpath, ação, pai antigo e novo pai
  • Type hints: Suporte completo para verificação de tipos
  • Bem testado: 11 testes unitários cobrindo todos os cenários

Testes

Foram implementados 11 testes abrangentes que validam:

  • Casos simples (inline-graphic em caption/title)
  • Múltiplos inline-graphics em um documento
  • Preservação quando graphic já existe
  • Diferentes contextos (fig, table-wrap, boxed-text)
  • Preservação de atributos e namespaces
  • inline-graphic em label
  • Caption sem title
  • inline-graphics fora de caption/label não são afetados

Resultado dos testes:

Ran 11 tests in 0.002s
OK ✅

Arquivos Modificados

  • Criado: packtools/sps/utils/xml_fixer.py - Módulo com função de correção
  • Criado: tests/sps/utils/test_xml_fixer.py - Suite de testes unitários

Referências


Closes #[número do issue]

Original prompt

This section details on the original issue you should resolve

<issue_title>Criar função para corrigir inline-graphic mal posicionados</issue_title>
<issue_description>### Descrição da nova funcionalidade
Como operador da migração de plataforma, eu quero uma função que corrija automaticamente elementos inline-graphic incorretamente posicionados dentro de caption para que os XMLs fiquem conformes com o SPS e sejam processados corretamente pelos sistemas SciELO.

Critérios de aceitação

  • A função deve receber um objeto xmltree (lxml.etree) como parâmetro
  • Deve identificar todos os elementos inline-graphic que estejam dentro de label ou caption
  • Deve verificar se já existe um elemento graphic no pai (fig, table-wrap, boxed-text, etc) antes de fazer a correção
  • Quando não existir graphic no pai, deve mover o inline-graphic para fora do label/caption e renomeá-lo para graphic
  • Deve preservar todos os atributos do elemento (xlink:href, id, etc) e namespaces
  • Deve retornar uma lista de dicionários documentando cada modificação realizada com campos: xpath, action, old_parent, new_parent
  • A função deve estar localizada em /packtools/sps/utils/xml_fixer.py
  • Deve ter docstring completa seguindo padrão do projeto
  • Não deve modificar o XML se o elemento graphic já existir no pai
  • Deve ter testes unitários cobrindo: casos simples, múltiplos inline-graphics, graphic já existente, diferentes contextos (fig, table-wrap)

Anexos

Exemplo de XML antes da correção:

<fig id="f1">
  <label>Figura 1 </label>
  <caption><title>Título da figura<inline-graphic xlink:href="img1.jpg"/></title></caption>
</fig>

Exemplo de XML após a correção:

<fig id="f1">
  <label>Figura 1</label>
  <caption><title>Título da figura</title></caption>
  <graphic xlink:href="img1.jpg"/>
</fig>

Referências

Comments on the Issue (you are @copilot in this section)

Fixes #1037

💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Copilot AI and others added 2 commits October 7, 2025 19:20
…ction and comprehensive tests

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix inline-graphic positioning in XML captions Implementar função para corrigir inline-graphic mal posicionados em caption e label Oct 7, 2025
Copilot AI requested a review from robertatakenaka October 7, 2025 19:25
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.

Criar função para corrigir inline-graphic mal posicionados

2 participants