O formato .mm
A estrutura XML dos arquivos do Freeplane, elemento por elemento, e o que isso permite fazer.
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🔗
| Elemento | Papel |
|---|---|
<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>🔗
| Atributo | Significado |
|---|---|
TEXT | Rótulo do nó |
ID | Identificador estável |
CREATED / MODIFIED | Timestamps Unix em milissegundos |
POSITION | left / right, só nos filhos da raiz |
FOLDED | Estado de dobramento |
STYLE_REF | Nome do estilo aplicado |
LINK | Hiperlink ou referência a outro nó |
BACKGROUND_COLOR, COLOR | Formatação direta |
HGAP, VSHIFT | Ajustes de posição no layout |
Por que isso importa🔗
Ser XML de texto tem consequências que nenhum formato binário oferece:
- Versionável. Git produz diffs legíveis; veja Versionamento com Git.
- Reparável. Um arquivo com problema pode ser consertado à mão num editor.
- Processável. Qualquer linguagem com parser de XML lê e escreve
.mm— trinta linhas de Python bastam. - Gerável. Mapas podem ser produzidos a partir de CSV, de uma API ou de um banco, sem abrir o Freeplane.
- Duradouro. Não há risco de o formato se tornar ilegível daqui a vinte anos.
Variantes🔗
| Extensão | O que é |
|---|---|
.mm | Mapa em XML puro |
.mmx | Mapa com anexos embutidos, empacotado |
.mm do FreeMind | Compatível na leitura; recursos novos do Freeplane não existem lá |
.addon.mm | Um 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
MODIFIEDreflete edição de conteúdo: dobrar um ramo também mexe no arquivo - Versionar o
.mmsem 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
- Que três capacidades você ganha por o
.mmser texto XML? - Por que um diff de
.mmpode ficar enorme sem que o conteúdo tenha mudado? - O que o
<attribute_registry>guarda, e onde ele fica no arquivo? - Que risco de segurança acompanha a escolha de XML, e como o projeto o tratou?