Difference between revisions of "Current Freeplane File Format"

From Freeplane - free mind mapping and knowledge management software
(add schema)
(Freeplane's version of it: add labels for links and attributes)
Line 23: Line 23:
 
   </xs:complexType>
 
   </xs:complexType>
 
   </xs:element>
 
   </xs:element>
 +
 
   <!--Used for node notes.-->
 
   <!--Used for node notes.-->
 
   <xs:element name='text'>
 
   <xs:element name='text'>
 
   <xs:complexType/>
 
   <xs:complexType/>
 
   </xs:element>
 
   </xs:element>
 +
 +
  '''<!-- BEGIN ATTRIBUTES -->'''
 +
 +
  '''<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' 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='RESTRICTED' use='optional'>'''
 +
    '''<xs:simpleType>'''
 +
      '''<xs:restriction base='xs:string'>'''
 +
      '''<xs:enumeration value='true'/>'''
 +
      '''<xs:enumeration value='false'/>'''
 +
      '''</xs:restriction>'''
 +
    '''</xs:simpleType>'''
 +
    '''</xs:attribute>'''
 +
  '''</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: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>'''
 +
 +
  '''<!-- END ATTRIBUTES -->'''
 
   
 
   
 
   <xs:element name='arrowlink'>
 
   <xs:element name='arrowlink'>
Line 37: Line 88:
 
     <xs:attribute name='STARTARROW' 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='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' use='optional'>'''
 +
    '''<xs:simpleType>'''
 +
      '''<xs:restriction base='xs:string'>'''
 +
      '''<xs:enumeration value='true'/>'''
 +
      '''<xs:enumeration value='false'/>'''
 +
      '''</xs:restriction>'''
 +
    '''</xs:simpleType>'''
 +
    '''</xs:attribute>'''
 
   </xs:complexType>
 
   </xs:complexType>
 
   </xs:element>
 
   </xs:element>
Line 60: Line 122:
 
       <xs:restriction base='xs:string'>
 
       <xs:restriction base='xs:string'>
 
       <xs:enumeration value='true'/>
 
       <xs:enumeration value='true'/>
 +
      '''<xs:enumeration value='false'/>'''
 
       </xs:restriction>
 
       </xs:restriction>
 
     </xs:simpleType>
 
     </xs:simpleType>
Line 122: Line 185:
 
   <xs:complexType>
 
   <xs:complexType>
 
     <xs:sequence>
 
     <xs:sequence>
     <xs:element ref='node'/>
+
    '''<xs:element ref='attribute_registry' minOccurs='0' maxOccurs='1'/>'''
 +
     <xs:element ref='node' '''minOccurs='1' maxOccurs='1' '''/>
 
     </xs:sequence>
 
     </xs:sequence>
 
     <xs:attribute name='version' type='xs:string' use='required'/>
 
     <xs:attribute name='version' type='xs:string' use='required'/>
Line 140: Line 204:
 
    <!-- For nodes with extended formatting content or for notes to nodes. -->
 
    <!-- For nodes with extended formatting content or for notes to nodes. -->
 
     <xs:element ref='richcontent'/>
 
     <xs:element ref='richcontent'/>
 +
    '''<xs:element ref='attribute'/>'''
 
     </xs:choice>
 
     </xs:choice>
 
     <xs:attribute name='BACKGROUND_COLOR' type='xs:string' use='optional'/>
 
     <xs:attribute name='BACKGROUND_COLOR' type='xs:string' use='optional'/>
Line 172: Line 237:
 
   </xs:element>
 
   </xs:element>
 
  </xs:schema>
 
  </xs:schema>
 
  
 
= Mapping between old and new format =
 
= Mapping between old and new format =
  
 
'''''TBD'''''
 
'''''TBD'''''

Revision as of 13:43, 25 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='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' 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='RESTRICTED' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='true'/>
      <xs:enumeration value='false'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </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: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>

 '

 <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' use='optional'>
    <xs:simpleType>
     <xs:restriction base='xs:string'>
      <xs:enumeration value='true'/>
      <xs:enumeration value='false'/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </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: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='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='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'/>
    <xs:element ref='richcontent'/>
    <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

TBD