Difference between revisions of "Current Freeplane File Format"

From Freeplane - free mind mapping and knowledge management software
m (Add note about Freeplane extensions)
(add schema)
Line 1: Line 1:
 +
= Original FreeMind File Format =
 +
 
The original FreeMind format was never described completely formally, but there is some documentation:
 
The original FreeMind format was never described completely formally, but there is some documentation:
  
Line 5: Line 7:
  
 
; Note : the above documentation is outdated in regard to elements introduced by Freeplane, like connector labels, attributes, scripts, user icons and (scalable) images embedded in the map.
 
; Note : the above documentation is outdated in regard to elements introduced by Freeplane, like connector labels, attributes, scripts, user icons and (scalable) images embedded in the map.
 +
 +
= Freeplane's version of it =
 +
 +
The following schema takes the schema pointed at in the previous chapter and completes it with Freeplane specific extensions (in '''bold''' for easy identification):
 +
 +
; WiP : still needs to be done
 +
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 +
 +
  <xs:element name='Parameters'>
 +
  <xs:complexType>
 +
  <!--Is the time management plugin.-->
 +
    <xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
  <!--Used for node notes.-->
 +
  <xs:element name='text'>
 +
  <xs:complexType/>
 +
  </xs:element>
 +
 +
  <xs:element name='arrowlink'>
 +
  <xs:complexType>
 +
    <xs:attribute name='COLOR' type='xs:string' use='optional'/>
 +
    <xs:attribute name='DESTINATION' type='xs:string' use='required'/>
 +
    <xs:attribute name='ENDARROW' type='xs:string' use='optional'/>
 +
    <xs:attribute name='ENDINCLINATION' type='xs:string' use='optional'/>
 +
    <xs:attribute name='ID' type='xs:string' use='optional'/>
 +
    <xs:attribute name='STARTARROW' type='xs:string' use='optional'/>
 +
    <xs:attribute name='STARTINCLINATION' type='xs:string' use='optional'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='cloud'>
 +
  <xs:complexType>
 +
    <xs:attribute name='COLOR' type='xs:string' use='optional'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='edge'>
 +
  <xs:complexType>
 +
    <xs:attribute name='COLOR' type='xs:string' use='optional'/>
 +
    <xs:attribute name='STYLE' type='xs:string' use='optional'/>
 +
    <xs:attribute name='WIDTH' type='xs:string' use='optional'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='font'>
 +
  <xs:complexType>
 +
    <xs:attribute name='BOLD' use='optional'>
 +
    <xs:simpleType>
 +
      <xs:restriction base='xs:string'>
 +
      <xs:enumeration value='true'/>
 +
      </xs:restriction>
 +
    </xs:simpleType>
 +
    </xs:attribute>
 +
    <xs:attribute name='ITALIC' use='optional'>
 +
    <xs:simpleType>
 +
      <xs:restriction base='xs:string'>
 +
      <xs:enumeration value='true'/>
 +
      <xs:enumeration value='false'/>
 +
      </xs:restriction>
 +
    </xs:simpleType>
 +
    </xs:attribute>
 +
    <xs:attribute name='NAME' type='xs:string' use='required'/>
 +
    <xs:attribute name='SIZE' use='required' type='xs:integer'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='hook'>
 +
  <xs:complexType>
 +
    <xs:sequence>
 +
    <xs:element ref='Parameters' minOccurs='0' maxOccurs='1'/>
 +
    <xs:element ref='text' minOccurs='0' maxOccurs='1'/>
 +
    </xs:sequence>
 +
    <xs:attribute name='NAME' type='xs:string' use='required'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='icon'>
 +
  <xs:complexType>
 +
    <xs:attribute name='BUILTIN' type='xs:string' use='required'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='html'>
 +
  <xs:complexType>
 +
    <xs:sequence>
 +
  <!--Anything that is valid XML, but should be http://www.w3.org/1999/xhtml -->
 +
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
 +
    </xs:sequence>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='richcontent'>
 +
  <xs:complexType>
 +
    <!-- And contains XHTML as unique child:-->
 +
    <xs:sequence>
 +
    <xs:element ref='html' minOccurs='1' maxOccurs='1'/>
 +
    </xs:sequence>
 +
    <!--Currently, only NODE or NOTE is allowed.-->
 +
    <xs:attribute name='TYPE' use='required'>
 +
    <xs:simpleType>
 +
      <xs:restriction base='xs:string'>
 +
      <xs:enumeration value='NODE'/>
 +
      <xs:enumeration value='NOTE'/>
 +
      </xs:restriction>
 +
    </xs:simpleType>
 +
    </xs:attribute>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='map'>
 +
  <xs:complexType>
 +
    <xs:sequence>
 +
    <xs:element ref='node'/>
 +
    </xs:sequence>
 +
    <xs:attribute name='version' type='xs:string' use='required'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
 +
  <xs:element name='node'>
 +
  <xs:complexType>
 +
    <xs:choice minOccurs='0' maxOccurs='unbounded'>
 +
    <xs:element ref='arrowlink'/>
 +
    <xs:element ref='cloud'/>
 +
    <xs:element ref='edge'/>
 +
    <xs:element ref='font'/>
 +
    <xs:element ref='hook'/>
 +
    <xs:element ref='icon'/>
 +
    <xs:element ref='node'/>
 +
  <!-- For nodes with extended formatting content or for notes to nodes. -->
 +
    <xs:element ref='richcontent'/>
 +
    </xs:choice>
 +
    <xs:attribute name='BACKGROUND_COLOR' type='xs:string' use='optional'/>
 +
    <xs:attribute name='COLOR' type='xs:string' use='optional'/>
 +
    <xs:attribute name='FOLDED' use='optional'>
 +
    <xs:simpleType>
 +
      <xs:restriction base='xs:string'>
 +
      <xs:enumeration value='true'/>
 +
      <xs:enumeration value='false'/>
 +
      </xs:restriction>
 +
    </xs:simpleType>
 +
    </xs:attribute>
 +
    <xs:attribute name='ID' type='xs:ID' use='optional'/>
 +
    <xs:attribute name='LINK' type='xs:string' use='optional'/>
 +
    <xs:attribute name='POSITION' use='optional'>
 +
    <xs:simpleType>
 +
      <xs:restriction base='xs:string'>
 +
      <xs:enumeration value='left'/>
 +
      <xs:enumeration value='right'/>
 +
      </xs:restriction>
 +
    </xs:simpleType>
 +
    </xs:attribute>
 +
    <xs:attribute name='STYLE' type='xs:string' use='optional'/>
 +
    <xs:attribute name='TEXT' type='xs:string' use='optional'/>
 +
    <xs:attribute name='CREATED' type='xs:integer' use='optional'/>
 +
    <xs:attribute name='MODIFIED' type='xs:integer' use='optional'/>
 +
    <xs:attribute name='HGAP' type='xs:integer' use='optional'/>
 +
    <xs:attribute name='VGAP' type='xs:integer' use='optional'/>
 +
    <xs:attribute name='VSHIFT' type='xs:integer' use='optional'/>
 +
    <xs:attribute name='ENCRYPTED_CONTENT' type='xs:string' use='optional'/>
 +
  </xs:complexType>
 +
  </xs:element>
 +
</xs:schema>
 +
 +
 +
= Mapping between old and new format =
 +
 +
'''''TBD'''''

Revision as of 18:45, 21 April 2010

Original FreeMind File Format

The original FreeMind format was never described completely formally, but there is some documentation:

Note 
the above documentation is outdated in regard to elements introduced by Freeplane, like connector labels, attributes, scripts, user icons and (scalable) images embedded in the map.

Freeplane's version of it

The following schema takes the schema pointed at in the previous chapter and completes it with Freeplane specific extensions (in bold for easy identification):

WiP 
still needs to be done
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

 <xs:element name='Parameters'>
  <xs:complexType>
   <xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>
 <xs:element name='text'>
  <xs:complexType/>
 </xs:element>

 <xs:element name='arrowlink'>
  <xs:complexType>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
   <xs:attribute name='DESTINATION' type='xs:string' use='required'/>
   <xs:attribute name='ENDARROW' type='xs:string' use='optional'/>
   <xs:attribute name='ENDINCLINATION' type='xs:string' use='optional'/>
   <xs:attribute name='ID' type='xs:string' use='optional'/>
   <xs:attribute name='STARTARROW' type='xs:string' use='optional'/>
   <xs:attribute name='STARTINCLINATION' type='xs:string' use='optional'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='cloud'>
  <xs:complexType>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='edge'>
  <xs:complexType>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
   <xs:attribute name='STYLE' type='xs:string' use='optional'/>
   <xs:attribute name='WIDTH' type='xs:string' use='optional'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='font'>
  <xs:complexType>
   <xs:attribute name='BOLD' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='true'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
   <xs:attribute name='ITALIC' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='true'/>
      <xs:enumeration value='false'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
   <xs:attribute name='NAME' type='xs:string' use='required'/>
   <xs:attribute name='SIZE' use='required' type='xs:integer'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='hook'>
  <xs:complexType>
   <xs:sequence>
    <xs:element ref='Parameters' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='text' minOccurs='0' maxOccurs='1'/>
   </xs:sequence>
   <xs:attribute name='NAME' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='icon'>
  <xs:complexType>
   <xs:attribute name='BUILTIN' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='html'>
  <xs:complexType>
   <xs:sequence>
	<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>

 <xs:element name='richcontent'>
  <xs:complexType>
   <xs:sequence>
    <xs:element ref='html' minOccurs='1' maxOccurs='1'/>
   </xs:sequence>
   <xs:attribute name='TYPE' use='required'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='NODE'/>
      <xs:enumeration value='NOTE'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
 </xs:element>

 <xs:element name='map'>
  <xs:complexType>
   <xs:sequence>
    <xs:element ref='node'/>
   </xs:sequence>
   <xs:attribute name='version' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='node'>
  <xs:complexType>
   <xs:choice minOccurs='0' maxOccurs='unbounded'>
    <xs:element ref='arrowlink'/>
    <xs:element ref='cloud'/>
    <xs:element ref='edge'/>
    <xs:element ref='font'/>
    <xs:element ref='hook'/>
    <xs:element ref='icon'/>
    <xs:element ref='node'/>
    <xs:element ref='richcontent'/>
   </xs:choice>
   <xs:attribute name='BACKGROUND_COLOR' type='xs:string' use='optional'/>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
   <xs:attribute name='FOLDED' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='true'/>
      <xs:enumeration value='false'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
   <xs:attribute name='ID' type='xs:ID' use='optional'/>
   <xs:attribute name='LINK' type='xs:string' use='optional'/>
   <xs:attribute name='POSITION' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='left'/>
      <xs:enumeration value='right'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
   <xs:attribute name='STYLE' type='xs:string' use='optional'/>
   <xs:attribute name='TEXT' type='xs:string' use='optional'/>
   <xs:attribute name='CREATED' type='xs:integer' use='optional'/>
   <xs:attribute name='MODIFIED' type='xs:integer' use='optional'/>
   <xs:attribute name='HGAP' type='xs:integer' use='optional'/>
   <xs:attribute name='VGAP' type='xs:integer' use='optional'/>
   <xs:attribute name='VSHIFT' type='xs:integer' use='optional'/>
   <xs:attribute name='ENCRYPTED_CONTENT' type='xs:string' use='optional'/>
  </xs:complexType>
 </xs:element>
</xs:schema>

Mapping between old and new format

TBD