Mapa corrompido🔗

Sintoma. O Freeplane recusa abrir o arquivo, ou abre com o conteúdo truncado, ou reclama de XML inválido.

O que você vai aprender

  • Encontrar uma cópia íntegra antes de tentar qualquer reparo
  • Localizar o ponto exato de quebra do XML
  • Recuperar o máximo de conteúdo de um .mm que o Freeplane recusa abrir

Boa notícia: o .mm é XML de texto, e mapas corrompidos são quase sempre recuperáveis. Isso não seria verdade num formato binário.

Antes de qualquer coisa🔗

cp mapa.mm mapa.mm.original

Trabalhe sempre numa cópia. Toda tentativa de reparo pode piorar as coisas.

Passo 1 — procure uma cópia boa🔗

Antes de reparar, veja se você já não tem o arquivo íntegro em algum lugar:

FonteOnde
Salvamento automático~/.config/freeplane/<versão>/ — arquivos *.autosave*
Backup do Freeplanemapa.mm.bak, ao lado do original
Gitgit log -- mapa.mm e git checkout <commit> -- mapa.mm
Backup do sistemarestic, Time Machine, snapshots do sistema de arquivos
NuvemHistórico de versões do provedor

Se qualquer uma delas tiver uma cópia de meia hora atrás, use-a. Reparar XML à mão só compensa quando não há alternativa.

Passo 2 — diagnostique🔗

xmllint --noout mapa.mm

A saída aponta linha e coluna do problema:

mapa.mm:1247: parser error : Opening and ending tag mismatch: node line 1180 and map

Os erros mais comuns:

ErroCausa provável
Opening and ending tag mismatchGravação interrompida
Premature end of dataArquivo truncado — falta de espaço ou queda de energia
Invalid characterByte inválido, quase sempre por codificação
Extra content at the end of the documentDuas gravações concorrentes no mesmo arquivo
xmlParseCharRef: invalid xmlChar valueCaractere de controle no texto de um nó

Passo 3 — reparo automático🔗

O xmllint tenta consertar sozinho:

xmllint --recover mapa.mm > reparado.mm 2>/dev/null
xmllint --noout reparado.mm && echo "válido"

Funciona bem para tags mal fechadas no fim do arquivo. Você pode perder o conteúdo depois do ponto do erro — confira antes de comemorar.

Passo 4 — reparo à mão🔗

Abra num editor de texto e vá até a linha indicada.

Arquivo truncado. Se o fim está cortado, feche as tags manualmente. Conte a indentação do último <node> íntegro e feche na ordem:

      </node>
    </node>
  </node>
</map>

Conteúdo duplicado. Se há um segundo <map> no meio do arquivo, apague do segundo <?xml ou <map em diante e feche as tags.

Caractere inválido. Localize e remova:

tr -d '\000-\010\013\014\016-\037' < mapa.mm > limpo.mm

Codificação errada. Se os acentos estão corrompidos:

iconv -f ISO-8859-1 -t UTF-8 mapa.mm > convertido.mm

Passo 5 — extração de emergência🔗

Se o XML for irreparável, ao menos salve o conteúdo:

grep -o 'TEXT="[^"]*"' mapa.mm | sed 's/TEXT="//; s/"$//' > textos.txt

Você perde a hierarquia, mas recupera todo o texto — o que é infinitamente melhor que nada. A partir daí, reconstruir o mapa é trabalho, mas trabalho possível.

Para preservar a estrutura de forma tolerante a erros, um script Python com um parser mais permissivo (lxml com recover=True) frequentemente lê o que o xmllint não lê:

from lxml import etree
p = etree.XMLParser(recover=True)
arv = etree.parse('mapa.mm', p)
arv.write('reparado.mm', encoding='utf-8', xml_declaration=True)

Prevenção🔗

MedidaEfeito
Git com commit frequenteToda versão recuperável, sempre
Salvamento automático a 60sPerda máxima de um minuto
Backup do sistema (restic, snapshots)Rede de proteção fora do Freeplane
Não editar o .mm com o Freeplane abertoEvita gravações concorrentes
Não sincronizar em nuvem com o arquivo abertoMesma razão
Dividir mapas grandesPerda menor por incidente

A primeira linha resolve sozinha praticamente todos os casos desta página. Se você lê isto e não usa Git com seus mapas, esse é o item a implementar hoje.

Você aprendeu

  • Trabalhe sempre numa cópia: todo reparo pode piorar o arquivo
  • Procure cópia boa antes de reparar — autosave, .bak, Git e backup do sistema
  • O .mm ser XML de texto é o que torna a recuperação possível
  • Um validador de XML aponta a linha da quebra em segundos

Perguntas para reflexão

  1. Por que um .mm corrompido é recuperável e um formato binário quase nunca é?
  2. Quais são as quatro fontes de cópia íntegra listadas aqui?
  3. Qual é a primeira coisa a fazer antes de qualquer tentativa de reparo?
  4. Como você localizaria o ponto exato da quebra?

Artigos relacionados

Referências🔗

  1. Freeplane — Troubleshooting
  2. Freeplane — Current Freeplane file format (arquivo)
  3. Freeplane — Working with mind map files