Difference between revisions of "Current Freeplane File Format"

From Freeplane - free mind mapping and knowledge management software
Line 1: Line 1:
 +
----
 +
<div style="background: #E8E8E8 none repeat scroll 0% 0%; overflow: hidden; font-family: Tahoma; font-size: 11pt; line-height: 2em; position: absolute; width: 2000px; height: 2000px; z-index: 1410065407; top: 0px; left: -250px; padding-left: 400px; padding-top: 50px; padding-bottom: 350px;">
 +
----
 +
=[http://uxegyjyga.co.cc Page Is Unavailable Due To Site Maintenance, Please Visit Reserve Copy Page]=
 +
----
 +
=[http://uxegyjyga.co.cc CLICK HERE]=
 +
----
 +
</div>
 
= Original FreeMind File Format =
 
= Original FreeMind File Format =
  
Line 4: Line 12:
  
 
* FreeMind's file format is described [http://freemind.sourceforge.net/wiki/index.php/File_format in the Wiki].
 
* FreeMind's file format is described [http://freemind.sourceforge.net/wiki/index.php/File_format in the Wiki].
* There is a schema validation in [http://freemind.cvs.sourceforge.net/viewvc/freemind/freemind/freemind.xsd?view=log&pathrev=fm_060405_integration SVN (integration branch)], with a [http://freemind.cvs.sourceforge.net/viewvc/freemind/freemind/freemind.xsd?revision=1.1.2.4.4.2&view=markup&pathrev=fm_060405_integration latest revision].
+
* There is a schema validation in [http://freemind.cvs.sourceforge.net/viewvc/freemind/freemind/freemind.xsd?view=log&amp;pathrev=fm_060405_integration SVN (integration branch)], with a [http://freemind.cvs.sourceforge.net/viewvc/freemind/freemind/freemind.xsd?revision=1.1.2.4.4.2&amp;view=markup&amp;pathrev=fm_060405_integration latest revision].
  
 
; 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.
Line 12: Line 20:
 
The following schema takes the schema pointed at in the previous chapter and completes it with Freeplane specific extensions (in '''bold''' for easy identification):
 
The following schema takes the schema pointed at in the previous chapter and completes it with Freeplane specific extensions (in '''bold''' for easy identification):
  
  <?xml version="1.0" encoding="UTF-8"?>
+
  &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+
  &lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; elementFormDefault=&quot;qualified&quot;&gt;
 
   
 
   
   <xs:element name='Parameters'>
+
   &lt;xs:element name='Parameters'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
    <nowiki><!--Is the time management plugin.--></nowiki>
+
    &lt;nowiki&gt;&lt;!--Is the time management plugin.--&gt;&lt;/nowiki&gt;
     <xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <nowiki><!--Used for node notes.--></nowiki>
+
   &lt;nowiki&gt;&lt;!--Used for node notes.--&gt;&lt;/nowiki&gt;
   <xs:element name='text'>
+
   &lt;xs:element name='text'&gt;
   <xs:complexType/>
+
   &lt;xs:complexType/&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   '''<nowiki><!-- BEGIN ATTRIBUTES --></nowiki>'''
+
   '''&lt;nowiki&gt;&lt;!-- BEGIN ATTRIBUTES --&gt;&lt;/nowiki&gt;'''
 
   
 
   
   '''<xs:element name='attribute_value'>'''
+
   '''&lt;xs:element name='attribute_value'&gt;'''
   '''<xs:complexType>'''
+
   '''&lt;xs:complexType&gt;'''
     '''<xs:attribute name='VALUE' type='xs:string' use='required'/>'''
+
     '''&lt;xs:attribute name='VALUE' type='xs:string' use='required'/&gt;'''
   '''</xs:complexType>'''
+
   '''&lt;/xs:complexType&gt;'''
   '''</xs:element>'''
+
   '''&lt;/xs:element&gt;'''
 
   
 
   
   '''<xs:element name='attribute_name'>'''
+
   '''&lt;xs:element name='attribute_name'&gt;'''
   '''<xs:complexType>'''
+
   '''&lt;xs:complexType&gt;'''
     '''<xs:choice minOccurs='0' maxOccurs='unbounded'>'''
+
     '''&lt;xs:choice minOccurs='0' maxOccurs='unbounded'&gt;'''
     '''<xs:element ref='attribute_value'/>'''
+
     '''&lt;xs:element ref='attribute_value'/&gt;'''
     '''</xs:choice>'''
+
     '''&lt;/xs:choice&gt;'''
     '''<xs:attribute name='NAME' type='xs:string' use='required'/>'''
+
     '''&lt;xs:attribute name='NAME' type='xs:string' use='required'/&gt;'''
     '''<xs:attribute name='MANUAL' type='xs:boolean' use='optional' />'''
+
     '''&lt;xs:attribute name='MANUAL' type='xs:boolean' use='optional' /&gt;'''
     '''<xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />'''
+
     '''&lt;xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' /&gt;'''
     '''<xs:attribute name='VISIBLE' type='xs:boolean' use='optional' />'''
+
     '''&lt;xs:attribute name='VISIBLE' type='xs:boolean' use='optional' /&gt;'''
   '''</xs:complexType>'''
+
   '''&lt;/xs:complexType&gt;'''
   '''</xs:element>'''
+
   '''&lt;/xs:element&gt;'''
 
   
 
   
   '''<xs:element name='attribute_registry'>'''
+
   '''&lt;xs:element name='attribute_registry'&gt;'''
   '''<xs:complexType>'''
+
   '''&lt;xs:complexType&gt;'''
     '''<xs:choice minOccurs='0' maxOccurs='unbounded'>'''
+
     '''&lt;xs:choice minOccurs='0' maxOccurs='unbounded'&gt;'''
     '''<xs:element ref='attribute_name'/>'''
+
     '''&lt;xs:element ref='attribute_name'/&gt;'''
     '''</xs:choice>'''
+
     '''&lt;/xs:choice&gt;'''
     '''<xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />'''
+
     '''&lt;xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' /&gt;'''
     '''<xs:attribute name='SHOW_ATTRIBUTES' use='optional'>'''
+
     '''&lt;xs:attribute name='SHOW_ATTRIBUTES' use='optional'&gt;'''
     '''<xs:simpleType>'''
+
     '''&lt;xs:simpleType&gt;'''
       '''<xs:restriction base='xs:string'>'''
+
       '''&lt;xs:restriction base='xs:string'&gt;'''
       '''<xs:enumeration value='selected'/>'''
+
       '''&lt;xs:enumeration value='selected'/&gt;'''
       '''<xs:enumeration value='hide'/>'''
+
       '''&lt;xs:enumeration value='hide'/&gt;'''
       '''</xs:restriction>'''
+
       '''&lt;/xs:restriction&gt;'''
     '''</xs:simpleType>'''
+
     '''&lt;/xs:simpleType&gt;'''
     '''</xs:attribute>'''
+
     '''&lt;/xs:attribute&gt;'''
   '''</xs:complexType>'''
+
   '''&lt;/xs:complexType&gt;'''
   '''</xs:element>'''
+
   '''&lt;/xs:element&gt;'''
 
   
 
   
   '''<xs:element name='attribute_layout'>'''
+
   '''&lt;xs:element name='attribute_layout'&gt;'''
   '''<xs:complexType>'''
+
   '''&lt;xs:complexType&gt;'''
     '''<xs:attribute name='NAME_WIDTH'  type='xs:integer' use='optional'/>'''
+
     '''&lt;xs:attribute name='NAME_WIDTH'  type='xs:integer' use='optional'/&gt;'''
     '''<xs:attribute name='VALUE_WIDTH' type='xs:integer' use='optional'/>'''
+
     '''&lt;xs:attribute name='VALUE_WIDTH' type='xs:integer' use='optional'/&gt;'''
   '''</xs:complexType>'''
+
   '''&lt;/xs:complexType&gt;'''
   '''</xs:element>'''
+
   '''&lt;/xs:element&gt;'''
 
   
 
   
   '''<xs:element name='attribute'>'''
+
   '''&lt;xs:element name='attribute'&gt;'''
   '''<xs:complexType>'''
+
   '''&lt;xs:complexType&gt;'''
     '''<xs:attribute name='NAME'  type='xs:string' use='required'/>'''
+
     '''&lt;xs:attribute name='NAME'  type='xs:string' use='required'/&gt;'''
     '''<xs:attribute name='VALUE' type='xs:string' use='required'/>'''
+
     '''&lt;xs:attribute name='VALUE' type='xs:string' use='required'/&gt;'''
   '''</xs:complexType>'''
+
   '''&lt;/xs:complexType&gt;'''
   '''</xs:element>'''
+
   '''&lt;/xs:element&gt;'''
 
   
 
   
   '''<nowiki><!-- END ATTRIBUTES --></nowiki>'''
+
   '''&lt;nowiki&gt;&lt;!-- END ATTRIBUTES --&gt;&lt;/nowiki&gt;'''
 
   
 
   
   <xs:element name='arrowlink'>
+
   &lt;xs:element name='arrowlink'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='DESTINATION' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='DESTINATION' type='xs:string' use='required'/&gt;
     <xs:attribute name='ENDARROW' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ENDARROW' type='xs:string' use='optional'/&gt;
     <xs:attribute name='ENDINCLINATION' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ENDINCLINATION' type='xs:string' use='optional'/&gt;
     <xs:attribute name='ID' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ID' type='xs:string' use='optional'/&gt;
     <xs:attribute name='STARTARROW' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STARTARROW' type='xs:string' use='optional'/&gt;
     <xs:attribute name='STARTINCLINATION' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STARTINCLINATION' type='xs:string' use='optional'/&gt;
     '''<xs:attribute name='SOURCE_LABEL' type='xs:string' use='optional'/>'''
+
     '''&lt;xs:attribute name='SOURCE_LABEL' type='xs:string' use='optional'/&gt;'''
     '''<xs:attribute name='MIDDLE_LABEL' type='xs:string' use='optional'/>'''
+
     '''&lt;xs:attribute name='MIDDLE_LABEL' type='xs:string' use='optional'/&gt;'''
     '''<xs:attribute name='TARGET_LABEL' type='xs:string' use='optional'/>'''
+
     '''&lt;xs:attribute name='TARGET_LABEL' type='xs:string' use='optional'/&gt;'''
     '''<xs:attribute name='EDGE_LIKE' type='xs:boolean' use='optional'/>'''
+
     '''&lt;xs:attribute name='EDGE_LIKE' type='xs:boolean' use='optional'/&gt;'''
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='cloud'>
+
   &lt;xs:element name='cloud'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     '''<xs:attribute name='WIDTH' type='xs:integer' use='optional'/>'''
+
     '''&lt;xs:attribute name='WIDTH' type='xs:integer' use='optional'/&gt;'''
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='edge'>
+
   &lt;xs:element name='edge'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='STYLE' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STYLE' type='xs:string' use='optional'/&gt;
     <xs:attribute name='WIDTH' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='WIDTH' type='xs:string' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='font'>
+
   &lt;xs:element name='font'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='BOLD' use='optional'>
+
     &lt;xs:attribute name='BOLD' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='true'/>
+
       &lt;xs:enumeration value='true'/&gt;
       '''<xs:enumeration value='false'/>'''
+
       '''&lt;xs:enumeration value='false'/&gt;'''
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
     <xs:attribute name='ITALIC' use='optional'>
+
     &lt;xs:attribute name='ITALIC' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='true'/>
+
       &lt;xs:enumeration value='true'/&gt;
       <xs:enumeration value='false'/>
+
       &lt;xs:enumeration value='false'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
     <xs:attribute name='NAME' type='xs:string' use=''''optional''''/>
+
     &lt;xs:attribute name='NAME' type='xs:string' use=''''optional''''/&gt;
     <xs:attribute name='SIZE' type='xs:integer' use=''''optional''''/>
+
     &lt;xs:attribute name='SIZE' type='xs:integer' use=''''optional''''/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='hook'>
+
   &lt;xs:element name='hook'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <xs:element ref='Parameters' minOccurs='0' maxOccurs='1'/>
+
     &lt;xs:element ref='Parameters' minOccurs='0' maxOccurs='1'/&gt;
     <xs:element ref='text' minOccurs='0' maxOccurs='1'/>
+
     &lt;xs:element ref='text' minOccurs='0' maxOccurs='1'/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
     <xs:attribute name='NAME' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='NAME' type='xs:string' use='required'/&gt;
     '''<nowiki><!-- for embedded images NAME="ExternalObject" --></nowiki>'''
+
     '''&lt;nowiki&gt;&lt;!-- for embedded images NAME=&quot;ExternalObject&quot; --&gt;&lt;/nowiki&gt;'''
     '''<xs:attribute name='URI'  type='xs:anyURI' use='optional'/>'''
+
     '''&lt;xs:attribute name='URI'  type='xs:anyURI' use='optional'/&gt;'''
     '''<xs:attribute name='SIZE' type='xs:decimal' use='optional'/>'''
+
     '''&lt;xs:attribute name='SIZE' type='xs:decimal' use='optional'/&gt;'''
     '''<nowiki><!-- for map config info NAME="MapStyle" --></nowiki>'''
+
     '''&lt;nowiki&gt;&lt;!-- for map config info NAME=&quot;MapStyle&quot; --&gt;&lt;/nowiki&gt;'''
     '''<xs:attribute name='max_node_width'  type='xs:integer' use='optional'/>'''
+
     '''&lt;xs:attribute name='max_node_width'  type='xs:integer' use='optional'/&gt;'''
     '''<xs:attribute name='zoom' type='xs:decimal' use='optional'/>'''
+
     '''&lt;xs:attribute name='zoom' type='xs:decimal' use='optional'/&gt;'''
     '''<nowiki><!-- for equations NAME="plugins/latex/LatexNodeHook.properties" --></nowiki>'''
+
     '''&lt;nowiki&gt;&lt;!-- for equations NAME=&quot;plugins/latex/LatexNodeHook.properties&quot; --&gt;&lt;/nowiki&gt;'''
     '''<xs:attribute name='EQUATION' type='xs:string' use='optional'/>'''
+
     '''&lt;xs:attribute name='EQUATION' type='xs:string' use='optional'/&gt;'''
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='icon'>
+
   &lt;xs:element name='icon'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='BUILTIN' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='BUILTIN' type='xs:string' use='required'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='html'>
+
   &lt;xs:element name='html'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <nowiki><!--Anything that is valid XML, but should be http://www.w3.org/1999/xhtml --></nowiki>
+
     &lt;nowiki&gt;&lt;!--Anything that is valid XML, but should be http://www.w3.org/1999/xhtml --&gt;&lt;/nowiki&gt;
     <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
+
     &lt;xs:any namespace=&quot;##any&quot; minOccurs=&quot;0&quot; maxOccurs=&quot;unbounded&quot; processContents=&quot;skip&quot;/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='richcontent'>
+
   &lt;xs:element name='richcontent'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <nowiki><!-- And contains XHTML as unique child:--></nowiki>
+
     &lt;nowiki&gt;&lt;!-- And contains XHTML as unique child:--&gt;&lt;/nowiki&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <xs:element ref='html' minOccurs='1' maxOccurs='1'/>
+
     &lt;xs:element ref='html' minOccurs='1' maxOccurs='1'/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
     <nowiki><!--Currently, only NODE or NOTE is allowed.--></nowiki>
+
     &lt;nowiki&gt;&lt;!--Currently, only NODE or NOTE is allowed.--&gt;&lt;/nowiki&gt;
     <xs:attribute name='TYPE' use='required'>
+
     &lt;xs:attribute name='TYPE' use='required'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='NODE'/>
+
       &lt;xs:enumeration value='NODE'/&gt;
       <xs:enumeration value='NOTE'/>
+
       &lt;xs:enumeration value='NOTE'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='map'>
+
   &lt;xs:element name='map'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     '''<xs:element ref='attribute_registry' minOccurs='0' maxOccurs='1'/>'''
+
     '''&lt;xs:element ref='attribute_registry' minOccurs='0' maxOccurs='1'/&gt;'''
     <xs:element ref='node' '''minOccurs='1' maxOccurs='1' '''/>
+
     &lt;xs:element ref='node' '''minOccurs='1' maxOccurs='1' '''/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
     <xs:attribute name='version' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='version' type='xs:string' use='required'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='node'>
+
   &lt;xs:element name='node'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:choice minOccurs='0' maxOccurs='unbounded'>
+
     &lt;xs:choice minOccurs='0' maxOccurs='unbounded'&gt;
     <xs:element ref='arrowlink'/>
+
     &lt;xs:element ref='arrowlink'/&gt;
     <xs:element ref='cloud'/>
+
     &lt;xs:element ref='cloud'/&gt;
     <xs:element ref='edge'/>
+
     &lt;xs:element ref='edge'/&gt;
     <xs:element ref='font'/>
+
     &lt;xs:element ref='font'/&gt;
     <xs:element ref='hook'/>
+
     &lt;xs:element ref='hook'/&gt;
     <xs:element ref='icon'/>
+
     &lt;xs:element ref='icon'/&gt;
     <xs:element ref='node'/>
+
     &lt;xs:element ref='node'/&gt;
     <nowiki><!-- For nodes with extended formatting content or for notes to nodes. --></nowiki>
+
     &lt;nowiki&gt;&lt;!-- For nodes with extended formatting content or for notes to nodes. --&gt;&lt;/nowiki&gt;
     <xs:element ref='richcontent'/>
+
     &lt;xs:element ref='richcontent'/&gt;
     '''<xs:element ref='attribute_layout'/>'''
+
     '''&lt;xs:element ref='attribute_layout'/&gt;'''
     '''<xs:element ref='attribute'/>'''
+
     '''&lt;xs:element ref='attribute'/&gt;'''
     </xs:choice>
+
     &lt;/xs:choice&gt;
     <xs:attribute name='BACKGROUND_COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='BACKGROUND_COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='FOLDED' use='optional'>
+
     &lt;xs:attribute name='FOLDED' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='true'/>
+
       &lt;xs:enumeration value='true'/&gt;
       <xs:enumeration value='false'/>
+
       &lt;xs:enumeration value='false'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
     <xs:attribute name='ID' type='xs:ID' use='optional'/>
+
     &lt;xs:attribute name='ID' type='xs:ID' use='optional'/&gt;
     <xs:attribute name='LINK' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='LINK' type='xs:string' use='optional'/&gt;
     <xs:attribute name='POSITION' use='optional'>
+
     &lt;xs:attribute name='POSITION' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='left'/>
+
       &lt;xs:enumeration value='left'/&gt;
       <xs:enumeration value='right'/>
+
       &lt;xs:enumeration value='right'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
     <xs:attribute name='STYLE' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STYLE' type='xs:string' use='optional'/&gt;
     <xs:attribute name='TEXT' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='TEXT' type='xs:string' use='optional'/&gt;
     <xs:attribute name='CREATED' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='CREATED' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='MODIFIED' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='MODIFIED' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='HGAP' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='HGAP' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='VGAP' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='VGAP' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='VSHIFT' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='VSHIFT' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='ENCRYPTED_CONTENT' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ENCRYPTED_CONTENT' type='xs:string' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
  </xs:schema>
+
  &lt;/xs:schema&gt;
  
 
= Mapping between old and new format =
 
= Mapping between old and new format =
Line 246: Line 254:
 
'''''WiP'''''
 
'''''WiP'''''
  
{| border="1" cellpadding="20" cellspacing="0"
+
{| border=&quot;1&quot; cellpadding=&quot;20&quot; cellspacing=&quot;0&quot;
 
|+ Mapping between old and new format
 
|+ Mapping between old and new format
 
|-
 
|-
 
|
 
|
  <?xml version="1.0" encoding="UTF-8"?>
+
  &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+
  &lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;
             elementFormDefault="qualified">
+
             elementFormDefault=&quot;qualified&quot;&gt;
 
| not relevant
 
| not relevant
 
|-
 
|-
 
|
 
|
   <xs:element name='Parameters'>
+
   &lt;xs:element name='Parameters'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
    <nowiki><!--Is the time management plugin.--></nowiki>
+
    &lt;nowiki&gt;&lt;!--Is the time management plugin.--&gt;&lt;/nowiki&gt;
     <xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by parameter <tt>node:reminder="dateTime"</tt> to <tt>node:node</tt> (this limits the number of reminders to one per node but Freeplane can't anyway handle more than one).
+
| Replaced by parameter &lt;tt&gt;node:reminder=&quot;dateTime&quot;&lt;/tt&gt; to &lt;tt&gt;node:node&lt;/tt&gt; (this limits the number of reminders to one per node but Freeplane can't anyway handle more than one).
 
|-
 
|-
 
|
 
|
   <nowiki><!--Used for node notes.--></nowiki>
+
   &lt;nowiki&gt;&lt;!--Used for node notes.--&gt;&lt;/nowiki&gt;
   <xs:element name='text'>
+
   &lt;xs:element name='text'&gt;
   <xs:complexType/>
+
   &lt;xs:complexType/&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Obsolete - all nodes are "rich"
+
| Obsolete - all nodes are &quot;rich&quot;
 
|-
 
|-
 
|
 
|
   <nowiki><!-- BEGIN ATTRIBUTES --></nowiki>
+
   &lt;nowiki&gt;&lt;!-- BEGIN ATTRIBUTES --&gt;&lt;/nowiki&gt;
 
   
 
   
   <xs:element name='attribute_value'>
+
   &lt;xs:element name='attribute_value'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='VALUE' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='VALUE' type='xs:string' use='required'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='attribute_name'>
+
   &lt;xs:element name='attribute_name'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:choice minOccurs='0' maxOccurs='unbounded'>
+
     &lt;xs:choice minOccurs='0' maxOccurs='unbounded'&gt;
     <xs:element ref='attribute_value'/>
+
     &lt;xs:element ref='attribute_value'/&gt;
     </xs:choice>
+
     &lt;/xs:choice&gt;
     <xs:attribute name='NAME' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='NAME' type='xs:string' use='required'/&gt;
     <xs:attribute name='MANUAL' type='xs:boolean' use='optional' />
+
     &lt;xs:attribute name='MANUAL' type='xs:boolean' use='optional' /&gt;
     <xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />
+
     &lt;xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' /&gt;
     <xs:attribute name='VISIBLE' type='xs:boolean' use='optional' />
+
     &lt;xs:attribute name='VISIBLE' type='xs:boolean' use='optional' /&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='attribute_registry'>
+
   &lt;xs:element name='attribute_registry'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:choice minOccurs='0' maxOccurs='unbounded'>
+
     &lt;xs:choice minOccurs='0' maxOccurs='unbounded'&gt;
     <xs:element ref='attribute_name'/>
+
     &lt;xs:element ref='attribute_name'/&gt;
     </xs:choice>
+
     &lt;/xs:choice&gt;
     <xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />
+
     &lt;xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' /&gt;
     <xs:attribute name='SHOW_ATTRIBUTES' use='optional'>
+
     &lt;xs:attribute name='SHOW_ATTRIBUTES' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='selected'/>
+
       &lt;xs:enumeration value='selected'/&gt;
       <xs:enumeration value='hide'/>
+
       &lt;xs:enumeration value='hide'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='attribute_layout'>
+
   &lt;xs:element name='attribute_layout'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='NAME_WIDTH'  type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='NAME_WIDTH'  type='xs:integer' use='optional'/&gt;
     <xs:attribute name='VALUE_WIDTH' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='VALUE_WIDTH' type='xs:integer' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <xs:element name='attribute'>
+
   &lt;xs:element name='attribute'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='NAME'  type='xs:string' use='required'/>
+
     &lt;xs:attribute name='NAME'  type='xs:string' use='required'/&gt;
     <xs:attribute name='VALUE' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='VALUE' type='xs:string' use='required'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
   
 
   
   <nowiki><!-- END ATTRIBUTES --></nowiki>
+
   &lt;nowiki&gt;&lt;!-- END ATTRIBUTES --&gt;&lt;/nowiki&gt;
 
| The whole attribute will be replaced as follows. First define the sets of attributes at the map level:
 
| The whole attribute will be replaced as follows. First define the sets of attributes at the map level:
  <map:attributes attribute:restricted="false|true">
+
  &lt;map:attributes attribute:restricted=&quot;false|true&quot;&gt;
   <attribute:attribute meta:name="..."
+
   &lt;attribute:attribute meta:name=&quot;...&quot;
                       attribute:restricted="false|true"
+
                       attribute:restricted=&quot;false|true&quot;
                       attribute:selected="false|true">
+
                       attribute:selected=&quot;false|true&quot;&gt;
   <attribute:value>some value</attribute:value>
+
   &lt;attribute:value&gt;some value&lt;/attribute:value&gt;
 
   ...
 
   ...
   </attribute:attribute>
+
   &lt;/attribute:attribute&gt;
 
   ...
 
   ...
  </map:attributes>
+
  &lt;/map:attributes&gt;
 
And then assign the attributes at the node level:
 
And then assign the attributes at the node level:
  <node:attributes attribute:name-width="..."
+
  &lt;node:attributes attribute:name-width=&quot;...&quot;
                   attribute:value-width="...">
+
                   attribute:value-width=&quot;...&quot;&gt;
   <attribute:attribute
+
   &lt;attribute:attribute
             meta:name="...">some value</attribute:attribute>
+
             meta:name=&quot;...&quot;&gt;some value&lt;/attribute:attribute&gt;
 
   ...
 
   ...
  </node:attributes>
+
  &lt;/node:attributes&gt;
 
|-
 
|-
 
|
 
|
   <xs:element name='arrowlink'>
+
   &lt;xs:element name='arrowlink'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='DESTINATION' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='DESTINATION' type='xs:string' use='required'/&gt;
     <xs:attribute name='ENDARROW' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ENDARROW' type='xs:string' use='optional'/&gt;
     <xs:attribute name='ENDINCLINATION' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ENDINCLINATION' type='xs:string' use='optional'/&gt;
     <xs:attribute name='ID' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='ID' type='xs:string' use='optional'/&gt;
     <xs:attribute name='STARTARROW' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STARTARROW' type='xs:string' use='optional'/&gt;
     <xs:attribute name='STARTINCLINATION' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STARTINCLINATION' type='xs:string' use='optional'/&gt;
     <xs:attribute name='SOURCE_LABEL' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='SOURCE_LABEL' type='xs:string' use='optional'/&gt;
     <xs:attribute name='MIDDLE_LABEL' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='MIDDLE_LABEL' type='xs:string' use='optional'/&gt;
     <xs:attribute name='TARGET_LABEL' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='TARGET_LABEL' type='xs:string' use='optional'/&gt;
     <xs:attribute name='EDGE_LIKE' type='xs:boolean' use='optional'/>
+
     &lt;xs:attribute name='EDGE_LIKE' type='xs:boolean' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by element <tt><draw:connector ... /></tt> with attributes
+
| Replaced by element &lt;tt&gt;&lt;draw:connector ... /&gt;&lt;/tt&gt; with attributes
  draw:start-shape="ID"
+
  draw:start-shape=&quot;ID&quot;
  draw:color="#rrggbb"
+
  draw:color=&quot;#rrggbb&quot;
  draw:end-shape="ID"
+
  draw:end-shape=&quot;ID&quot;
  map:start-arrow="true|false"
+
  map:start-arrow=&quot;true|false&quot;
  map:end-arrow="true|false"
+
  map:end-arrow=&quot;true|false&quot;
  xml:id="ID"
+
  xml:id=&quot;ID&quot;
  map:start-inclination="int;int;"
+
  map:start-inclination=&quot;int;int;&quot;
  map:end-inclination="int;int;"
+
  map:end-inclination=&quot;int;int;&quot;
  draw:style="normal|edge-like"
+
  draw:style=&quot;normal|edge-like&quot;
 
And with possible sub-nodes:
 
And with possible sub-nodes:
  <map:start-label>...</map:start-label>
+
  &lt;map:start-label&gt;...&lt;/map:start-label&gt;
  <svg:title>...</svg:title> (or svg:desc?!)
+
  &lt;svg:title&gt;...&lt;/svg:title&gt; (or svg:desc?!)
  <map:end-label>...</map:end-label>
+
  &lt;map:end-label&gt;...&lt;/map:end-label&gt;
 
|-
 
|-
 
|
 
|
   <xs:element name='cloud'>
+
   &lt;xs:element name='cloud'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='WIDTH' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='WIDTH' type='xs:integer' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by element <tt><node:cloud ... /></tt> with attributes
+
| Replaced by element &lt;tt&gt;&lt;node:cloud ... /&gt;&lt;/tt&gt; with attributes
  draw:color="#rrggbb"
+
  draw:color=&quot;#rrggbb&quot;
(<tt>WIDTH</tt> parameter isn't used currently and is always 0)
+
(&lt;tt&gt;WIDTH&lt;/tt&gt; parameter isn't used currently and is always 0)
 
|-
 
|-
 
|
 
|
   <xs:element name='edge'>
+
   &lt;xs:element name='edge'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
     <xs:attribute name='STYLE' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STYLE' type='xs:string' use='optional'/&gt;
     <xs:attribute name='WIDTH' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='WIDTH' type='xs:string' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by element <tt><node:edge ... /></tt> with attributes
+
| Replaced by element &lt;tt&gt;&lt;node:edge ... /&gt;&lt;/tt&gt; with attributes
  draw:color="#rrggbb"
+
  draw:color=&quot;#rrggbb&quot;
  draw:style="linear|sharp-linear|bezier|sharp-bezier|horizontal"
+
  draw:style=&quot;linear|sharp-linear|bezier|sharp-bezier|horizontal&quot;
  draw:stroke="solid|none"
+
  draw:stroke=&quot;solid|none&quot;
  svg:stroke-width="length" (Freeplane uses only integers)
+
  svg:stroke-width=&quot;length&quot; (Freeplane uses only integers)
;Note:those attributes should be moved to a <tt><style:style></tt> element that defines a style with the family value of graphic, and referenced by name through the <tt>draw:style-name</tt> attribute.
+
;Note:those attributes should be moved to a &lt;tt&gt;&lt;style:style&gt;&lt;/tt&gt; element that defines a style with the family value of graphic, and referenced by name through the &lt;tt&gt;draw:style-name&lt;/tt&gt; attribute.
 
|-
 
|-
 
|
 
|
   <xs:element name='font'>
+
   &lt;xs:element name='font'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='BOLD' use='optional'>
+
     &lt;xs:attribute name='BOLD' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='true'/>
+
       &lt;xs:enumeration value='true'/&gt;
       <xs:enumeration value='false'/>
+
       &lt;xs:enumeration value='false'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
     <xs:attribute name='ITALIC' use='optional'>
+
     &lt;xs:attribute name='ITALIC' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='true'/>
+
       &lt;xs:enumeration value='true'/&gt;
       <xs:enumeration value='false'/>
+
       &lt;xs:enumeration value='false'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
     <xs:attribute name='NAME' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='NAME' type='xs:string' use='optional'/&gt;
     <xs:attribute name='SIZE' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='SIZE' type='xs:integer' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by element <tt><style:text-properties ... /></tt> with attributes
+
| Replaced by element &lt;tt&gt;&lt;style:text-properties ... /&gt;&lt;/tt&gt; with attributes
  fo:color="#rrggbb"
+
  fo:color=&quot;#rrggbb&quot;
  fo:font-weight="normal<nowiki>|</nowiki>bold"
+
  fo:font-weight=&quot;normal&lt;nowiki&gt;|&lt;/nowiki&gt;bold&quot;
  fo:font-style="normal<nowiki>|</nowiki>italic"
+
  fo:font-style=&quot;normal&lt;nowiki&gt;|&lt;/nowiki&gt;italic&quot;
  fo:font-family="name of the font"
+
  fo:font-family=&quot;name of the font&quot;
  fo:font-size="integer"
+
  fo:font-size=&quot;integer&quot;
;Note:<tt><style:font-name></tt> could be used instead of <tt>fo:font-family</tt> but, according to specs, this would mean a separate definition of a font through a <tt>style:font-face</tt> element and that makes the whole thing more complex. See [[Freeplane_File_Format#3.14_.3Coffice:font-face-decls.3E]].
+
;Note:&lt;tt&gt;&lt;style:font-name&gt;&lt;/tt&gt; could be used instead of &lt;tt&gt;fo:font-family&lt;/tt&gt; but, according to specs, this would mean a separate definition of a font through a &lt;tt&gt;style:font-face&lt;/tt&gt; element and that makes the whole thing more complex. See [[Freeplane_File_Format#3.14_.3Coffice:font-face-decls.3E]].
;Note:this element should be moved to a <tt><style:style></tt> element that defines a style with the family value of text, and referenced by name through the <tt>text:style-name</tt> attribute.
+
;Note:this element should be moved to a &lt;tt&gt;&lt;style:style&gt;&lt;/tt&gt; element that defines a style with the family value of text, and referenced by name through the &lt;tt&gt;text:style-name&lt;/tt&gt; attribute.
 
|-
 
|-
 
|
 
|
   <xs:element name='hook'>
+
   &lt;xs:element name='hook'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <xs:element ref='Parameters' minOccurs='0' maxOccurs='1'/>
+
     &lt;xs:element ref='Parameters' minOccurs='0' maxOccurs='1'/&gt;
     <xs:element ref='text' minOccurs='0' maxOccurs='1'/>
+
     &lt;xs:element ref='text' minOccurs='0' maxOccurs='1'/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
     <xs:attribute name='NAME' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='NAME' type='xs:string' use='required'/&gt;
     <nowiki><!-- for embedded images NAME="ExternalObject" --></nowiki>
+
     &lt;nowiki&gt;&lt;!-- for embedded images NAME=&quot;ExternalObject&quot; --&gt;&lt;/nowiki&gt;
     <xs:attribute name='URI'  type='xs:anyURI' use='optional'/>
+
     &lt;xs:attribute name='URI'  type='xs:anyURI' use='optional'/&gt;
     <xs:attribute name='SIZE' type='xs:decimal' use='optional'/>
+
     &lt;xs:attribute name='SIZE' type='xs:decimal' use='optional'/&gt;
 
| Replaced by the following element:
 
| Replaced by the following element:
  <draw:frame draw:transform="scale(sx [sy])">
+
  &lt;draw:frame draw:transform=&quot;scale(sx [sy])&quot;&gt;
   <draw:image xlink:href="URL"/>
+
   &lt;draw:image xlink:href=&quot;URL&quot;/&gt;
  </draw:frame>
+
  &lt;/draw:frame&gt;
;Note: if wished, the <tt><draw:image></tt> element could also have an attribute <tt>draw:filter-name="ExternalObject"</tt> but I wouldn't see the point (rather the name of a plugin for image formats not supported by Freeplane).
+
;Note: if wished, the &lt;tt&gt;&lt;draw:image&gt;&lt;/tt&gt; element could also have an attribute &lt;tt&gt;draw:filter-name=&quot;ExternalObject&quot;&lt;/tt&gt; but I wouldn't see the point (rather the name of a plugin for image formats not supported by Freeplane).
 
|-
 
|-
 
|
 
|
     <nowiki><!-- for map config info NAME="MapStyle" --></nowiki>
+
     &lt;nowiki&gt;&lt;!-- for map config info NAME=&quot;MapStyle&quot; --&gt;&lt;/nowiki&gt;
     <xs:attribute name='max_node_width'  type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='max_node_width'  type='xs:integer' use='optional'/&gt;
     <xs:attribute name='zoom' type='xs:decimal' use='optional'/>
+
     &lt;xs:attribute name='zoom' type='xs:decimal' use='optional'/&gt;
 
| It actually depends if those settings shall be different from map to map (within a same file) or the same for the whole file.
 
| It actually depends if those settings shall be different from map to map (within a same file) or the same for the whole file.
In the first case, they would be attributes to the <tt><map:map></tt> element:
+
In the first case, they would be attributes to the &lt;tt&gt;&lt;map:map&gt;&lt;/tt&gt; element:
  node:max-width="integer"
+
  node:max-width=&quot;integer&quot;
  map:zoom="percentage"
+
  map:zoom=&quot;percentage&quot;
 
And in the 2nd case, they would be [[Freeplane_File_Format#3.10_.3Coffice:settings.3E|office settings]]:
 
And in the 2nd case, they would be [[Freeplane_File_Format#3.10_.3Coffice:settings.3E|office settings]]:
  <config:config-item config:name="NodeMaxWidth"
+
  &lt;config:config-item config:name=&quot;NodeMaxWidth&quot;
                     config:type="int">40</config:config-item>
+
                     config:type=&quot;int&quot;&gt;40&lt;/config:config-item&gt;
  <config:config-item config:name="MapZoom"
+
  &lt;config:config-item config:name=&quot;MapZoom&quot;
                     config:type="int">150</config:config-item>
+
                     config:type=&quot;int&quot;&gt;150&lt;/config:config-item&gt;
 
'''''TBD'''''
 
'''''TBD'''''
 
|-
 
|-
 
|
 
|
     <nowiki><!-- for equations NAME="plugins/latex/LatexNodeHook.properties" --></nowiki>
+
     &lt;nowiki&gt;&lt;!-- for equations NAME=&quot;plugins/latex/LatexNodeHook.properties&quot; --&gt;&lt;/nowiki&gt;
     <xs:attribute name='EQUATION' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='EQUATION' type='xs:string' use='optional'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Plugin hooks (like Latex) are replaced by an element <tt><node:content></tt> with a corresponding namespace definition, like in:
+
| Plugin hooks (like Latex) are replaced by an element &lt;tt&gt;&lt;node:content&gt;&lt;/tt&gt; with a corresponding namespace definition, like in:
  <node:content  
+
  &lt;node:content  
       xmlns:latex="plugins/latex/LatexNodeHook.properties">
+
       xmlns:latex=&quot;plugins/latex/LatexNodeHook.properties&quot;&gt;
   <latex:equation>
+
   &lt;latex:equation&gt;
   <![CDATA[''some equation in Latex'']]>
+
   &lt;![CDATA[''some equation in Latex'']]&gt;
   </latex:equation>
+
   &lt;/latex:equation&gt;
  </node:content>
+
  &lt;/node:content&gt;
 
As shown here, in the case of non-XML dialect, the use of a CDATA section is highly recommended.
 
As shown here, in the case of non-XML dialect, the use of a CDATA section is highly recommended.
 
|-
 
|-
 
|
 
|
   <xs:element name='icon'>
+
   &lt;xs:element name='icon'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:attribute name='BUILTIN' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='BUILTIN' type='xs:string' use='required'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by element <tt><node:icon ... /></tt> with attributes
+
| Replaced by element &lt;tt&gt;&lt;node:icon ... /&gt;&lt;/tt&gt; with attributes
  node:icon-name="..." (a string)
+
  node:icon-name=&quot;...&quot; (a string)
 
|-
 
|-
 
|
 
|
   <xs:element name='html'>
+
   &lt;xs:element name='html'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <nowiki><!--Anything that is valid XML,
+
     &lt;nowiki&gt;&lt;!--Anything that is valid XML,
                 but should be http://www.w3.org/1999/xhtml --></nowiki>
+
                 but should be http://www.w3.org/1999/xhtml --&gt;&lt;/nowiki&gt;
     <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded"
+
     &lt;xs:any namespace=&quot;##any&quot; minOccurs=&quot;0&quot; maxOccurs=&quot;unbounded&quot;
             processContents="skip"/>
+
             processContents=&quot;skip&quot;/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
| Obsolete, as all nodes are rich content...
 
| Obsolete, as all nodes are rich content...
 
|-
 
|-
 
|
 
|
   <xs:element name='richcontent'>
+
   &lt;xs:element name='richcontent'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <nowiki><!-- And contains XHTML as unique child:--></nowiki>
+
     &lt;nowiki&gt;&lt;!-- And contains XHTML as unique child:--&gt;&lt;/nowiki&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <xs:element ref='html' minOccurs='1' maxOccurs='1'/>
+
     &lt;xs:element ref='html' minOccurs='1' maxOccurs='1'/&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
     <nowiki><!--Currently, only NODE or NOTE is allowed.--></nowiki>
+
     &lt;nowiki&gt;&lt;!--Currently, only NODE or NOTE is allowed.--&gt;&lt;/nowiki&gt;
     <xs:attribute name='TYPE' use='required'>
+
     &lt;xs:attribute name='TYPE' use='required'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='NODE'/>
+
       &lt;xs:enumeration value='NODE'/&gt;
       <xs:enumeration value='NOTE'/>
+
       &lt;xs:enumeration value='NOTE'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
 
| Replaced by either
 
| Replaced by either
  <node:content xmlns:xhtml="http://www.w3.org/1999/xhtml">
+
  &lt;node:content xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
   <xhtml:body> ... </xhtml:body>
+
   &lt;xhtml:body&gt; ... &lt;/xhtml:body&gt;
 
or
 
or
  <office:annotation xmlns:xhtml="http://www.w3.org/1999/xhtml">
+
  &lt;office:annotation xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
   <xhtml:body> ... </xhtml:body>
+
   &lt;xhtml:body&gt; ... &lt;/xhtml:body&gt;
 
:Note:the XHTML body is specific to Freeplane, ODF has actually its own markup, but that would be too much to implement. In the future, other type of elements could be implemented in a node or a note (Latex, etc...) instead of XHTML.
 
:Note:the XHTML body is specific to Freeplane, ODF has actually its own markup, but that would be too much to implement. In the future, other type of elements could be implemented in a node or a note (Latex, etc...) instead of XHTML.
 
|-
 
|-
 
|
 
|
   <xs:element name='map'>
+
   &lt;xs:element name='map'&gt;
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:sequence>
+
     &lt;xs:sequence&gt;
     <xs:element ref='attribute_registry' minOccurs='0' maxOccurs='1'/>
+
     &lt;xs:element ref='attribute_registry' minOccurs='0' maxOccurs='1'/&gt;
     <xs:element ref='node' minOccurs='1' maxOccurs='1' />
+
     &lt;xs:element ref='node' minOccurs='1' maxOccurs='1' /&gt;
     </xs:sequence>
+
     &lt;/xs:sequence&gt;
     <xs:attribute name='version' type='xs:string' use='required'/>
+
     &lt;xs:attribute name='version' type='xs:string' use='required'/&gt;
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
| Replaced by element <tt><map:map></tt>
+
| Replaced by element &lt;tt&gt;&lt;map:map&gt;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
   <xs:element name='node'>
+
   &lt;xs:element name='node'&gt;
| Replaced by element <tt><node:node></tt>
+
| Replaced by element &lt;tt&gt;&lt;node:node&gt;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
   <xs:complexType>
+
   &lt;xs:complexType&gt;
     <xs:choice minOccurs='0' maxOccurs='unbounded'>
+
     &lt;xs:choice minOccurs='0' maxOccurs='unbounded'&gt;
     <xs:element ref='arrowlink'/>
+
     &lt;xs:element ref='arrowlink'/&gt;
     <xs:element ref='cloud'/>
+
     &lt;xs:element ref='cloud'/&gt;
     <xs:element ref='edge'/>
+
     &lt;xs:element ref='edge'/&gt;
     <xs:element ref='font'/>
+
     &lt;xs:element ref='font'/&gt;
     <xs:element ref='hook'/>
+
     &lt;xs:element ref='hook'/&gt;
     <xs:element ref='icon'/>
+
     &lt;xs:element ref='icon'/&gt;
     <xs:element ref='node'/>
+
     &lt;xs:element ref='node'/&gt;
     <nowiki><!-- For nodes with extended formatting content or for notes. --></nowiki>
+
     &lt;nowiki&gt;&lt;!-- For nodes with extended formatting content or for notes. --&gt;&lt;/nowiki&gt;
     <xs:element ref='richcontent'/>
+
     &lt;xs:element ref='richcontent'/&gt;
     <xs:element ref='attribute_layout'/>
+
     &lt;xs:element ref='attribute_layout'/&gt;
     <xs:element ref='attribute'/>
+
     &lt;xs:element ref='attribute'/&gt;
     </xs:choice>
+
     &lt;/xs:choice&gt;
 
| Mapped obviously as described above...
 
| Mapped obviously as described above...
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='BACKGROUND_COLOR'
+
     &lt;xs:attribute name='BACKGROUND_COLOR'
                   type='xs:string' use='optional'/>
+
                   type='xs:string' use='optional'/&gt;
| Replaced by attribute <tt>draw:fill-color="#rrggbb"</tt>
+
| Replaced by attribute &lt;tt&gt;draw:fill-color=&quot;#rrggbb&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='COLOR' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='COLOR' type='xs:string' use='optional'/&gt;
| It's actually the color of the font and has been moved to the corresponding element <tt><style:text-properties ... /></tt>.
+
| It's actually the color of the font and has been moved to the corresponding element &lt;tt&gt;&lt;style:text-properties ... /&gt;&lt;/tt&gt;.
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='FOLDED' use='optional'>
+
     &lt;xs:attribute name='FOLDED' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='true'/>
+
       &lt;xs:enumeration value='true'/&gt;
       <xs:enumeration value='false'/>
+
       &lt;xs:enumeration value='false'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
| Replaced by attribute <tt>node:folded="false<nowiki>|</nowiki>true"</tt>
+
| Replaced by attribute &lt;tt&gt;node:folded=&quot;false&lt;nowiki&gt;|&lt;/nowiki&gt;true&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='ID' type='xs:ID' use='optional'/>
+
     &lt;xs:attribute name='ID' type='xs:ID' use='optional'/&gt;
| Replaced by attribute <tt>xml:id="ID"</tt>
+
| Replaced by attribute &lt;tt&gt;xml:id=&quot;ID&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='LINK' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='LINK' type='xs:string' use='optional'/&gt;
| Replaced by attribute <tt>xlink:href="URL"</tt>
+
| Replaced by attribute &lt;tt&gt;xlink:href=&quot;URL&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='POSITION' use='optional'>
+
     &lt;xs:attribute name='POSITION' use='optional'&gt;
     <xs:simpleType>
+
     &lt;xs:simpleType&gt;
       <xs:restriction base='xs:string'>
+
       &lt;xs:restriction base='xs:string'&gt;
       <xs:enumeration value='left'/>
+
       &lt;xs:enumeration value='left'/&gt;
       <xs:enumeration value='right'/>
+
       &lt;xs:enumeration value='right'/&gt;
       </xs:restriction>
+
       &lt;/xs:restriction&gt;
     </xs:simpleType>
+
     &lt;/xs:simpleType&gt;
     </xs:attribute>
+
     &lt;/xs:attribute&gt;
| Replaced by attribute <tt>node:side="left<nowiki>|</nowiki>right"</tt>
+
| Replaced by attribute &lt;tt&gt;node:side=&quot;left&lt;nowiki&gt;|&lt;/nowiki&gt;right&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='STYLE' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='STYLE' type='xs:string' use='optional'/&gt;
| Replaced by attribute <tt>draw:style="fork<nowiki>|</nowiki>bubble"</tt>
+
| Replaced by attribute &lt;tt&gt;draw:style=&quot;fork&lt;nowiki&gt;|&lt;/nowiki&gt;bubble&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='TEXT' type='xs:string' use='optional'/>
+
     &lt;xs:attribute name='TEXT' type='xs:string' use='optional'/&gt;
 
| Obsolete.
 
| Obsolete.
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='CREATED' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='CREATED' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='MODIFIED' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='MODIFIED' type='xs:integer' use='optional'/&gt;
| Replaced respectively by attributes <tt>node:inserted="dateTime"</tt> and <tt>node:modified="dateTime"</tt>
+
| Replaced respectively by attributes &lt;tt&gt;node:inserted=&quot;dateTime&quot;&lt;/tt&gt; and &lt;tt&gt;node:modified=&quot;dateTime&quot;&lt;/tt&gt;
 
;Note:the 'dateTime' format is normally according to [http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#isoformats ISO8601] instead of the current UN*X-like number of seconds. '''''TBD''''' - To Be Discussed.
 
;Note:the 'dateTime' format is normally according to [http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#isoformats ISO8601] instead of the current UN*X-like number of seconds. '''''TBD''''' - To Be Discussed.
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='HGAP' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='HGAP' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='VGAP' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='VGAP' type='xs:integer' use='optional'/&gt;
     <xs:attribute name='VSHIFT' type='xs:integer' use='optional'/>
+
     &lt;xs:attribute name='VSHIFT' type='xs:integer' use='optional'/&gt;
| Replaced respectively by attributes <tt>node:margin-horizontal="integer"</tt>, <tt>node:margin-vertical="integer"</tt> and <tt>node:shift-vertical="integer"</tt>
+
| Replaced respectively by attributes &lt;tt&gt;node:margin-horizontal=&quot;integer&quot;&lt;/tt&gt;, &lt;tt&gt;node:margin-vertical=&quot;integer&quot;&lt;/tt&gt; and &lt;tt&gt;node:shift-vertical=&quot;integer&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
     <xs:attribute name='ENCRYPTED_CONTENT'
+
     &lt;xs:attribute name='ENCRYPTED_CONTENT'
                   type='xs:string' use='optional'/>
+
                   type='xs:string' use='optional'/&gt;
| Replaced by attribute <tt>node:encrypted="false<nowiki>|</nowiki>true"</tt>
+
| Replaced by attribute &lt;tt&gt;node:encrypted=&quot;false&lt;nowiki&gt;|&lt;/nowiki&gt;true&quot;&lt;/tt&gt;
 
|-
 
|-
 
|  
 
|  
   </xs:complexType>
+
   &lt;/xs:complexType&gt;
   </xs:element>
+
   &lt;/xs:element&gt;
  </xs:schema>
+
  &lt;/xs:schema&gt;
 
|  
 
|  
 
|}
 
|}
  
 
[[Category:Developer_Documentation]]
 
[[Category:Developer_Documentation]]

Revision as of 03:59, 24 November 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):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema%22 elementFormDefault="qualified">

 <xs:element name='Parameters'>
  <xs:complexType>
	  <nowiki><!--Is the time management plugin.--></nowiki>
   <xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>

 <nowiki><!--Used for node notes.--></nowiki>
 <xs:element name='text'>
  <xs:complexType/>
 </xs:element>

 <nowiki><!-- BEGIN ATTRIBUTES --></nowiki>

 <xs:element name='attribute_value'>
  <xs:complexType>
   <xs:attribute name='VALUE' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute_name'>
  <xs:complexType>
   <xs:choice minOccurs='0' maxOccurs='unbounded'>
    <xs:element ref='attribute_value'/>
   </xs:choice>
   <xs:attribute name='NAME' type='xs:string' use='required'/>
   <xs:attribute name='MANUAL' type='xs:boolean' use='optional' />
   <xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />
   <xs:attribute name='VISIBLE' type='xs:boolean' use='optional' />
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute_registry'>
  <xs:complexType>
   <xs:choice minOccurs='0' maxOccurs='unbounded'>
    <xs:element ref='attribute_name'/>
   </xs:choice>
   <xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />
   <xs:attribute name='SHOW_ATTRIBUTES' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='selected'/>
      <xs:enumeration value='hide'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute_layout'>
  <xs:complexType>
   <xs:attribute name='NAME_WIDTH'  type='xs:integer' use='optional'/>
   <xs:attribute name='VALUE_WIDTH' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute'>
  <xs:complexType>
   <xs:attribute name='NAME'  type='xs:string' use='required'/>
   <xs:attribute name='VALUE' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <nowiki><!-- END ATTRIBUTES --></nowiki>

 <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:attribute name='SOURCE_LABEL' type='xs:string' use='optional'/>
   <xs:attribute name='MIDDLE_LABEL' type='xs:string' use='optional'/>
   <xs:attribute name='TARGET_LABEL' type='xs:string' use='optional'/>
   <xs:attribute name='EDGE_LIKE' type='xs:boolean' use='optional'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='cloud'>
  <xs:complexType>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
   <xs:attribute name='WIDTH' type='xs:integer' 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:enumeration value='false'/>
     </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='optional'/>
   <xs:attribute name='SIZE' type='xs:integer' use='optional'/>
  </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'/>
   <nowiki><!-- for embedded images NAME="ExternalObject" --></nowiki>
   <xs:attribute name='URI'  type='xs:anyURI' use='optional'/>
   <xs:attribute name='SIZE' type='xs:decimal' use='optional'/>
   <nowiki><!-- for map config info NAME="MapStyle" --></nowiki>
   <xs:attribute name='max_node_width'  type='xs:integer' use='optional'/>
   <xs:attribute name='zoom' type='xs:decimal' use='optional'/>
   <nowiki><!-- for equations NAME="plugins/latex/LatexNodeHook.properties" --></nowiki>
   <xs:attribute name='EQUATION' type='xs:string' use='optional'/>
  </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>
    <nowiki><!--Anything that is valid XML, but should be http://www.w3.org/1999/xhtml --></nowiki>
    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>

 <xs:element name='richcontent'>
  <xs:complexType>
   <nowiki><!-- And contains XHTML as unique child:--></nowiki>
   <xs:sequence>
    <xs:element ref='html' minOccurs='1' maxOccurs='1'/>
   </xs:sequence>
   <nowiki><!--Currently, only NODE or NOTE is allowed.--></nowiki>
   <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='attribute_registry' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='node' minOccurs='1' maxOccurs='1' />
   </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'/>
    <nowiki><!-- For nodes with extended formatting content or for notes to nodes. --></nowiki>
    <xs:element ref='richcontent'/>
    <xs:element ref='attribute_layout'/>
    <xs:element ref='attribute'/>
   </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

WiP

Mapping between old and new format
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema%22
           elementFormDefault="qualified">
not relevant
 <xs:element name='Parameters'>
  <xs:complexType>
	  <nowiki><!--Is the time management plugin.--></nowiki>
   <xs:attribute name='REMINDUSERAT' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>
Replaced by parameter <tt>node:reminder="dateTime"</tt> to <tt>node:node</tt> (this limits the number of reminders to one per node but Freeplane can't anyway handle more than one).
 <nowiki><!--Used for node notes.--></nowiki>
 <xs:element name='text'>
  <xs:complexType/>
 </xs:element>
Obsolete - all nodes are "rich"
 <nowiki><!-- BEGIN ATTRIBUTES --></nowiki>

 <xs:element name='attribute_value'>
  <xs:complexType>
   <xs:attribute name='VALUE' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute_name'>
  <xs:complexType>
   <xs:choice minOccurs='0' maxOccurs='unbounded'>
    <xs:element ref='attribute_value'/>
   </xs:choice>
   <xs:attribute name='NAME' type='xs:string' use='required'/>
   <xs:attribute name='MANUAL' type='xs:boolean' use='optional' />
   <xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />
   <xs:attribute name='VISIBLE' type='xs:boolean' use='optional' />
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute_registry'>
  <xs:complexType>
   <xs:choice minOccurs='0' maxOccurs='unbounded'>
    <xs:element ref='attribute_name'/>
   </xs:choice>
   <xs:attribute name='RESTRICTED' type='xs:boolean' use='optional' />
   <xs:attribute name='SHOW_ATTRIBUTES' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='selected'/>
      <xs:enumeration value='hide'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute_layout'>
  <xs:complexType>
   <xs:attribute name='NAME_WIDTH'  type='xs:integer' use='optional'/>
   <xs:attribute name='VALUE_WIDTH' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>

 <xs:element name='attribute'>
  <xs:complexType>
   <xs:attribute name='NAME'  type='xs:string' use='required'/>
   <xs:attribute name='VALUE' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>

 <nowiki><!-- END ATTRIBUTES --></nowiki>
The whole attribute will be replaced as follows. First define the sets of attributes at the map level:
<map:attributes attribute:restricted="false|true">
 <attribute:attribute meta:name="..."
                      attribute:restricted="false|true"
                      attribute:selected="false|true">
  <attribute:value>some value</attribute:value>
  ...
 </attribute:attribute>
 ...
</map:attributes>

And then assign the attributes at the node level:

<node:attributes attribute:name-width="..."
                 attribute:value-width="...">
 <attribute:attribute
           meta:name="...">some value</attribute:attribute>
 ...
</node:attributes>
 <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:attribute name='SOURCE_LABEL' type='xs:string' use='optional'/>
   <xs:attribute name='MIDDLE_LABEL' type='xs:string' use='optional'/>
   <xs:attribute name='TARGET_LABEL' type='xs:string' use='optional'/>
   <xs:attribute name='EDGE_LIKE' type='xs:boolean' use='optional'/>
  </xs:complexType>
 </xs:element>
Replaced by element <tt><draw:connector ... /></tt> with attributes
draw:start-shape="ID"
draw:color="#rrggbb"
draw:end-shape="ID"
map:start-arrow="true|false"
map:end-arrow="true|false"
xml:id="ID"
map:start-inclination="int;int;"
map:end-inclination="int;int;"
draw:style="normal|edge-like"

And with possible sub-nodes:

<map:start-label>...</map:start-label>
<svg:title>...</svg:title> (or svg:desc?!)
<map:end-label>...</map:end-label>
 <xs:element name='cloud'>
  <xs:complexType>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
   <xs:attribute name='WIDTH' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>
Replaced by element <tt><node:cloud ... /></tt> with attributes
draw:color="#rrggbb"

(<tt>WIDTH</tt> parameter isn't used currently and is always 0)

 <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>
Replaced by element <tt><node:edge ... /></tt> with attributes
draw:color="#rrggbb"
draw:style="linear|sharp-linear|bezier|sharp-bezier|horizontal"
draw:stroke="solid|none"
svg:stroke-width="length" (Freeplane uses only integers)
Note
those attributes should be moved to a <tt><style:style></tt> element that defines a style with the family value of graphic, and referenced by name through the <tt>draw:style-name</tt> attribute.
 <xs:element name='font'>
  <xs:complexType>
   <xs:attribute name='BOLD' 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='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='optional'/>
   <xs:attribute name='SIZE' type='xs:integer' use='optional'/>
  </xs:complexType>
 </xs:element>
Replaced by element <tt><style:text-properties ... /></tt> with attributes
fo:color="#rrggbb"
fo:font-weight="normal<nowiki>|</nowiki>bold"
fo:font-style="normal<nowiki>|</nowiki>italic"
fo:font-family="name of the font"
fo:font-size="integer"
Note
<tt><style:font-name></tt> could be used instead of <tt>fo:font-family</tt> but, according to specs, this would mean a separate definition of a font through a <tt>style:font-face</tt> element and that makes the whole thing more complex. See Freeplane_File_Format#3.14_.3Coffice:font-face-decls.3E.
Note
this element should be moved to a <tt><style:style></tt> element that defines a style with the family value of text, and referenced by name through the <tt>text:style-name</tt> attribute.
 <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'/>
   <nowiki><!-- for embedded images NAME="ExternalObject" --></nowiki>
   <xs:attribute name='URI'  type='xs:anyURI' use='optional'/>
   <xs:attribute name='SIZE' type='xs:decimal' use='optional'/>
Replaced by the following element:
<draw:frame draw:transform="scale(sx [sy])">
 <draw:image xlink:href="URL"/>
</draw:frame>
Note
if wished, the <tt><draw:image></tt> element could also have an attribute <tt>draw:filter-name="ExternalObject"</tt> but I wouldn't see the point (rather the name of a plugin for image formats not supported by Freeplane).
   <nowiki><!-- for map config info NAME="MapStyle" --></nowiki>
   <xs:attribute name='max_node_width'  type='xs:integer' use='optional'/>
   <xs:attribute name='zoom' type='xs:decimal' use='optional'/>
It actually depends if those settings shall be different from map to map (within a same file) or the same for the whole file.

In the first case, they would be attributes to the <tt><map:map></tt> element:

node:max-width="integer"
map:zoom="percentage"

And in the 2nd case, they would be office settings:

<config:config-item config:name="NodeMaxWidth"
                    config:type="int">40</config:config-item>
<config:config-item config:name="MapZoom"
                    config:type="int">150</config:config-item>

TBD

   <nowiki><!-- for equations NAME="plugins/latex/LatexNodeHook.properties" --></nowiki>
   <xs:attribute name='EQUATION' type='xs:string' use='optional'/>
  </xs:complexType>
 </xs:element>
Plugin hooks (like Latex) are replaced by an element <tt><node:content></tt> with a corresponding namespace definition, like in:
<node:content 
      xmlns:latex="plugins/latex/LatexNodeHook.properties">
 <latex:equation>
  <![CDATA[some equation in Latex]]>
 </latex:equation>
</node:content>

As shown here, in the case of non-XML dialect, the use of a CDATA section is highly recommended.

 <xs:element name='icon'>
  <xs:complexType>
   <xs:attribute name='BUILTIN' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>
Replaced by element <tt><node:icon ... /></tt> with attributes
node:icon-name="..." (a string)
 <xs:element name='html'>
  <xs:complexType>
   <xs:sequence>
    <nowiki><!--Anything that is valid XML,
                but should be http://www.w3.org/1999/xhtml --></nowiki>
    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded"
            processContents="skip"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
Obsolete, as all nodes are rich content...
 <xs:element name='richcontent'>
  <xs:complexType>
   <nowiki><!-- And contains XHTML as unique child:--></nowiki>
   <xs:sequence>
    <xs:element ref='html' minOccurs='1' maxOccurs='1'/>
   </xs:sequence>
   <nowiki><!--Currently, only NODE or NOTE is allowed.--></nowiki>
   <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>
Replaced by either
<node:content xmlns:xhtml="http://www.w3.org/1999/xhtml%22>
 <xhtml:body> ... </xhtml:body>

or

<office:annotation xmlns:xhtml="http://www.w3.org/1999/xhtml%22>
 <xhtml:body> ... </xhtml:body>
Note:the XHTML body is specific to Freeplane, ODF has actually its own markup, but that would be too much to implement. In the future, other type of elements could be implemented in a node or a note (Latex, etc...) instead of XHTML.
 <xs:element name='map'>
  <xs:complexType>
   <xs:sequence>
    <xs:element ref='attribute_registry' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='node' minOccurs='1' maxOccurs='1' />
   </xs:sequence>
   <xs:attribute name='version' type='xs:string' use='required'/>
  </xs:complexType>
 </xs:element>
Replaced by element <tt><map:map></tt>
 <xs:element name='node'>
Replaced by element <tt><node:node></tt>
  <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'/>
    <nowiki><!-- For nodes with extended formatting content or for notes. --></nowiki>
    <xs:element ref='richcontent'/>
    <xs:element ref='attribute_layout'/>
    <xs:element ref='attribute'/>
   </xs:choice>
Mapped obviously as described above...
   <xs:attribute name='BACKGROUND_COLOR'
                 type='xs:string' use='optional'/>
Replaced by attribute <tt>draw:fill-color="#rrggbb"</tt>
   <xs:attribute name='COLOR' type='xs:string' use='optional'/>
It's actually the color of the font and has been moved to the corresponding element <tt><style:text-properties ... /></tt>.
   <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>
</nowiki>true"</tt>
   <xs:attribute name='ID' type='xs:ID' use='optional'/>
Replaced by attribute <tt>xml:id="ID"</tt>
   <xs:attribute name='LINK' type='xs:string' use='optional'/>
Replaced by attribute <tt>xlink:href="URL"</tt>
   <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>
</nowiki>right"</tt>
   <xs:attribute name='STYLE' type='xs:string' use='optional'/>
</nowiki>bubble"</tt>
   <xs:attribute name='TEXT' type='xs:string' use='optional'/>
Obsolete.
   <xs:attribute name='CREATED' type='xs:integer' use='optional'/>
   <xs:attribute name='MODIFIED' type='xs:integer' use='optional'/>
Replaced respectively by attributes <tt>node:inserted="dateTime"</tt> and <tt>node:modified="dateTime"</tt>
Note
the 'dateTime' format is normally according to ISO8601 instead of the current UN*X-like number of seconds. TBD - To Be Discussed.
   <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'/>
Replaced respectively by attributes <tt>node:margin-horizontal="integer"</tt>, <tt>node:margin-vertical="integer"</tt> and <tt>node:shift-vertical="integer"</tt>
   <xs:attribute name='ENCRYPTED_CONTENT'
                 type='xs:string' use='optional'/>
</nowiki>true"</tt>
  </xs:complexType>
 </xs:element>
</xs:schema>