O formato .mm🔗

Definição. Formato nativo do Freeplane (herdado do FreeMind): um documento XML de texto puro descrevendo a árvore de nós e suas propriedades.

Esqueleto🔗

<?xml version="1.0" encoding="UTF-8"?>
<map version="freeplane 1.11.1">
  <attribute_registry/>
  <node TEXT="Raiz" ID="ID_1" CREATED="..." MODIFIED="...">
    <hook NAME="MapStyle">…estilos do mapa…</hook>
    <node TEXT="Ramo esquerdo" POSITION="left" ID="ID_2"/>
    <node TEXT="Ramo direito" POSITION="right" ID="ID_3"/>
  </node>
</map>

Elementos principais🔗

ElementoPapel
<map>Raiz do documento; guarda a versão do Freeplane
<node>Um nó; aninha-se recursivamente
<icon BUILTIN="...">Um ícone aplicado ao nó
<attribute NAME= VALUE=>Um par chave-valor
<attribute_registry>Chaves registradas do mapa e valores permitidos
<richcontent TYPE="NOTE">Nota, em HTML
<richcontent TYPE="DETAILS">Detalhe, em HTML
<richcontent TYPE="NODE">Texto do nó, quando tem formatação rica
<font>Fonte, tamanho, negrito, itálico
<edge>Cor, espessura e estilo da aresta
<cloud>Nuvem em volta do ramo
<arrowlink DESTINATION="ID_x">Conector para outro nó
<hook>Extensões: estilos do mapa, criptografia, lembretes, add-ons

Atributos de <node>🔗

AtributoSignificado
TEXTRótulo do nó
IDIdentificador estável
CREATED / MODIFIEDTimestamps Unix em milissegundos
POSITIONleft / right, só nos filhos da raiz
FOLDEDEstado de dobramento
STYLE_REFNome do estilo aplicado
LINKHiperlink ou referência a outro nó
BACKGROUND_COLOR, COLORFormatação direta
HGAP, VSHIFTAjustes de posição no layout

Por que isso importa🔗

Ser XML de texto tem consequências que nenhum formato binário oferece:

  1. Versionável. Git produz diffs legíveis; veja Versionamento com Git.
  2. Reparável. Um arquivo com problema pode ser consertado à mão num editor.
  3. Processável. Qualquer linguagem com parser de XML lê e escreve .mm — trinta linhas de Python bastam.
  4. Gerável. Mapas podem ser produzidos a partir de CSV, de uma API ou de um banco, sem abrir o Freeplane.
  5. Duradouro. Não há risco de o formato se tornar ilegível daqui a vinte anos.

Variantes🔗

ExtensãoO que é
.mmMapa em XML puro
.mmxMapa com anexos embutidos, empacotado
.mm do FreeMindCompatível na leitura; recursos novos do Freeplane não existem lá
.addon.mmUm add-on, que é um mapa com estrutura convencionada

Compatibilidade entre versões🔗

O atributo version em <map> registra com que Freeplane o arquivo foi gravado. Versões novas abrem arquivos antigos sem problema. O contrário nem sempre: um mapa gravado no 1.11 pode usar recursos que o 1.8 ignora silenciosamente — e, ao salvar na versão antiga, perdê-los.

Se você trabalha em máquinas com versões diferentes, padronize a versão ou pelo menos evite salvar na mais antiga.

Codificação🔗

UTF-8, sempre. Acentos, cirílico, ideogramas e emoji funcionam. Se um mapa antigo aparecer com caracteres corrompidos, o problema é quase sempre um arquivo gravado em ISO-8859-1 por uma versão muito antiga do FreeMind; converter com iconv resolve.

Erros comuns

  • Editar o .mm à mão com o mapa aberto no Freeplane e perder as alterações ao salvar
  • Supor que MODIFIED reflete edição de conteúdo: dobrar um ramo também mexe no arquivo
  • Versionar o .mm sem normalizar o dobramento, e receber diffs enormes por nada
  • Abrir mapas de origem desconhecida sem considerar que XML é superfície de ataque

Perguntas para reflexão

  1. Que três capacidades você ganha por o .mm ser texto XML?
  2. Por que um diff de .mm pode ficar enorme sem que o conteúdo tenha mudado?
  3. O que o <attribute_registry> guarda, e onde ele fica no arquivo?
  4. Que risco de segurança acompanha a escolha de XML, e como o projeto o tratou?

Artigos relacionados

Referências🔗

  1. Freeplane — Current Freeplane file format (arquivo)
  2. Freeplane — Document format (arquivo)
  3. Freeplane — Working with mind map files
  4. Freeplane — XXE no parser de mapas (arquivo)