From 6f1da8f9f6f9a89cf0fae9ea9bd46b6be10e36a9 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Thu, 17 May 2018 15:30:27 +0200
Subject: [PATCH] decouple tree xmlApi from tree data structures

---
 .../src/tree/generate/RandomTreeFactory.cpp   |  2 +
 alib2data/src/tree/TreeBase.h                 | 26 -----
 .../src/tree/ranked/PostfixRankedTree.cpp     |  7 --
 alib2data/src/tree/ranked/PostfixRankedTree.h | 52 ----------
 .../PrefixRankedBarNonlinearPattern.cpp       |  7 --
 .../ranked/PrefixRankedBarNonlinearPattern.h  | 60 ------------
 .../tree/ranked/PrefixRankedBarPattern.cpp    |  7 --
 .../src/tree/ranked/PrefixRankedBarPattern.h  | 58 -----------
 .../src/tree/ranked/PrefixRankedBarTree.cpp   |  7 --
 .../src/tree/ranked/PrefixRankedBarTree.h     | 54 -----------
 .../ranked/PrefixRankedNonlinearPattern.cpp   |  7 --
 .../ranked/PrefixRankedNonlinearPattern.h     | 56 -----------
 .../src/tree/ranked/PrefixRankedPattern.cpp   |  7 --
 .../src/tree/ranked/PrefixRankedPattern.h     | 54 -----------
 .../src/tree/ranked/PrefixRankedTree.cpp      |  7 --
 alib2data/src/tree/ranked/PrefixRankedTree.h  | 52 ----------
 .../tree/ranked/RankedNonlinearPattern.cpp    |  7 --
 .../src/tree/ranked/RankedNonlinearPattern.h  | 57 -----------
 alib2data/src/tree/ranked/RankedPattern.cpp   |  7 --
 alib2data/src/tree/ranked/RankedPattern.h     | 55 -----------
 alib2data/src/tree/ranked/RankedTree.cpp      |  7 --
 alib2data/src/tree/ranked/RankedTree.h        | 53 ----------
 alib2data/src/tree/unranked/PrefixBarTree.cpp |  7 --
 alib2data/src/tree/unranked/PrefixBarTree.h   | 53 ----------
 .../unranked/UnrankedNonlinearPattern.cpp     |  7 --
 .../tree/unranked/UnrankedNonlinearPattern.h  | 56 -----------
 .../src/tree/unranked/UnrankedPattern.cpp     |  7 --
 alib2data/src/tree/unranked/UnrankedPattern.h | 54 -----------
 alib2data/src/tree/unranked/UnrankedTree.cpp  |  7 --
 alib2data/src/tree/unranked/UnrankedTree.h    | 52 ----------
 .../tree/{ => xml}/common/TreeFromXMLParser.h |  0
 .../tree/{ => xml}/common/TreeToXMLComposer.h |  0
 .../src/tree/xml/ranked/PostfixRankedTree.cpp | 22 +++++
 .../src/tree/xml/ranked/PostfixRankedTree.h   | 88 +++++++++++++++++
 .../PrefixRankedBarNonlinearPattern.cpp       | 22 +++++
 .../ranked/PrefixRankedBarNonlinearPattern.h  | 96 +++++++++++++++++++
 .../xml/ranked/PrefixRankedBarPattern.cpp     | 22 +++++
 .../tree/xml/ranked/PrefixRankedBarPattern.h  | 94 ++++++++++++++++++
 .../tree/xml/ranked/PrefixRankedBarTree.cpp   | 22 +++++
 .../src/tree/xml/ranked/PrefixRankedBarTree.h | 90 +++++++++++++++++
 .../ranked/PrefixRankedNonlinearPattern.cpp   | 22 +++++
 .../xml/ranked/PrefixRankedNonlinearPattern.h | 92 ++++++++++++++++++
 .../tree/xml/ranked/PrefixRankedPattern.cpp   | 22 +++++
 .../src/tree/xml/ranked/PrefixRankedPattern.h | 90 +++++++++++++++++
 .../src/tree/xml/ranked/PrefixRankedTree.cpp  | 22 +++++
 .../src/tree/xml/ranked/PrefixRankedTree.h    | 88 +++++++++++++++++
 .../xml/ranked/RankedNonlinearPattern.cpp     | 22 +++++
 .../tree/xml/ranked/RankedNonlinearPattern.h  | 93 ++++++++++++++++++
 .../src/tree/xml/ranked/RankedPattern.cpp     | 22 +++++
 alib2data/src/tree/xml/ranked/RankedPattern.h | 91 ++++++++++++++++++
 alib2data/src/tree/xml/ranked/RankedTree.cpp  | 22 +++++
 alib2data/src/tree/xml/ranked/RankedTree.h    | 93 ++++++++++++++++++
 .../src/tree/xml/unranked/PrefixBarTree.cpp   | 22 +++++
 .../src/tree/xml/unranked/PrefixBarTree.h     | 89 +++++++++++++++++
 .../xml/unranked/UnrankedNonlinearPattern.cpp | 22 +++++
 .../xml/unranked/UnrankedNonlinearPattern.h   | 92 ++++++++++++++++++
 .../src/tree/xml/unranked/UnrankedPattern.cpp | 22 +++++
 .../src/tree/xml/unranked/UnrankedPattern.h   | 90 +++++++++++++++++
 .../src/tree/xml/unranked/UnrankedTree.cpp    | 22 +++++
 .../src/tree/xml/unranked/UnrankedTree.h      | 92 ++++++++++++++++++
 alib2data/test-src/tree/PatternTest.cpp       |  4 +
 alib2data/test-src/tree/TreeTest.cpp          |  5 +
 tniceprint/src/tniceprint.cpp                 |  2 +
 63 files changed, 1599 insertions(+), 890 deletions(-)
 rename alib2data/src/tree/{ => xml}/common/TreeFromXMLParser.h (100%)
 rename alib2data/src/tree/{ => xml}/common/TreeToXMLComposer.h (100%)
 create mode 100644 alib2data/src/tree/xml/ranked/PostfixRankedTree.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PostfixRankedTree.h
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.h
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.h
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedBarTree.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedBarTree.h
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.h
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedPattern.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedPattern.h
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedTree.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/PrefixRankedTree.h
 create mode 100644 alib2data/src/tree/xml/ranked/RankedNonlinearPattern.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/RankedNonlinearPattern.h
 create mode 100644 alib2data/src/tree/xml/ranked/RankedPattern.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/RankedPattern.h
 create mode 100644 alib2data/src/tree/xml/ranked/RankedTree.cpp
 create mode 100644 alib2data/src/tree/xml/ranked/RankedTree.h
 create mode 100644 alib2data/src/tree/xml/unranked/PrefixBarTree.cpp
 create mode 100644 alib2data/src/tree/xml/unranked/PrefixBarTree.h
 create mode 100644 alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.cpp
 create mode 100644 alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.h
 create mode 100644 alib2data/src/tree/xml/unranked/UnrankedPattern.cpp
 create mode 100644 alib2data/src/tree/xml/unranked/UnrankedPattern.h
 create mode 100644 alib2data/src/tree/xml/unranked/UnrankedTree.cpp
 create mode 100644 alib2data/src/tree/xml/unranked/UnrankedTree.h

diff --git a/alib2algo/src/tree/generate/RandomTreeFactory.cpp b/alib2algo/src/tree/generate/RandomTreeFactory.cpp
index 4501479837..45d109c3c4 100644
--- a/alib2algo/src/tree/generate/RandomTreeFactory.cpp
+++ b/alib2algo/src/tree/generate/RandomTreeFactory.cpp
@@ -26,6 +26,8 @@
 
 #include <registration/AlgoRegistration.hpp>
 
+#include <global/GlobalData.h>
+
 namespace tree {
 
 namespace generate {
diff --git a/alib2data/src/tree/TreeBase.h b/alib2data/src/tree/TreeBase.h
index 6431792ad8..ccdedd35cb 100644
--- a/alib2data/src/tree/TreeBase.h
+++ b/alib2data/src/tree/TreeBase.h
@@ -10,8 +10,6 @@
 
 #include <object/ObjectBase.h>
 
-#include <core/xmlApi.hpp>
-
 namespace tree {
 
 /**
@@ -25,28 +23,4 @@ public:
 
 } /* namespace tree */
 
-namespace core {
-
-template < typename Type >
-struct xmlApi < Type, typename std::enable_if < std::is_base_of < tree::TreeBase, Type >::value >::type > {
-	static Type parse ( ext::deque < sax::Token >::iterator & input ) {
-		return Type::parse ( input );
-	}
-
-	static bool first ( const ext::deque < sax::Token >::const_iterator & input ) {
-		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
-	}
-
-	static std::string xmlTagName ( ) {
-		return Type::getXmlTagName();
-	}
-
-	static void compose ( ext::deque < sax::Token > & output, const Type & data ) {
-		Type::compose ( output, data );
-	}
-
-};
-
-} /* namespace core */
-
 #endif /* TREE_BASE_H_ */
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.cpp b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
index 5b5ee74ffe..b02ff6bf6a 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PostfixRankedTr
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PostfixRankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PostfixRankedTree < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PostfixRankedTree < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PostfixRankedTree < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PostfixRankedTree < > > ( );
-
 static auto PostfixRankedTreeFromRankedTree = registration::CastRegister < tree::PostfixRankedTree < >, tree::RankedTree < > > ( );
 
 static auto LinearStringFromPostfixRankedTree = registration::CastRegister < string::LinearString < common::ranked_symbol < > >, tree::PostfixRankedTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.h b/alib2data/src/tree/ranked/PostfixRankedTree.h
index c56dbad687..1dc8e04963 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.h
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.h
@@ -32,16 +32,12 @@
 #include <alib/deque>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -195,36 +191,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName ( ) {
-		static std::string xmlTagName = "PostfixRankedTree";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the tree
-	 */
-	static PostfixRankedTree parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the tree
-	 * \param tree the tree to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PostfixRankedTree & tree );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -342,24 +308,6 @@ PostfixRankedTree < SymbolType, RankType >::operator std::string ( ) const {
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PostfixRankedTree < SymbolType, RankType > PostfixRankedTree < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PostfixRankedTree::getXmlTagName ( ) );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PostfixRankedTree::getXmlTagName ( ) );
-
-	return PostfixRankedTree < SymbolType, RankType > ( std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PostfixRankedTree < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PostfixRankedTree & tree ) {
-	out.emplace_back ( PostfixRankedTree::getXmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, tree.m_Data );
-	out.emplace_back ( PostfixRankedTree::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase * PostfixRankedTree < SymbolType, RankType >::inc ( ) && {
 	return new object::UniqueObject ( object::Object ( std::move ( * this ) ), primitive::Integer ( 0 ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
index 6103320e72..9b37188911 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedBar
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarNonlinearPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedBarNonlinearPattern < > > ( );
-
 static auto PrefixRankedBarNonlinearPatternFromRankedTree = registration::CastRegister < tree::PrefixRankedBarNonlinearPattern < >, tree::RankedTree < > > ( );
 static auto PrefixRankedBarNonlinearPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedBarNonlinearPattern < >, tree::RankedPattern < > > ( );
 static auto PrefixRankedBarNonlinearPatternFromRankedNonlinearPattern = registration::CastRegister < tree::PrefixRankedBarNonlinearPattern < >, tree::RankedNonlinearPattern < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 7aeb633d54..fbe4ea5311 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -31,17 +31,13 @@
 #include <alib/algorithm>
 #include <alib/deque>
 
-#include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -363,36 +359,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName ( ) {
-		static std::string xmlTagName = "PrefixRankedBarNonlinearPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static PrefixRankedBarNonlinearPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixRankedBarNonlinearPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -564,32 +530,6 @@ PrefixRankedBarNonlinearPattern < SymbolType, RankType >::operator std::string (
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType > PrefixRankedBarNonlinearPattern < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixRankedBarNonlinearPattern::getXmlTagName ( ) );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > bars = TreeFromXMLParser::parseBars < common::ranked_symbol < SymbolType, RankType > > ( input );
-	common::ranked_symbol < SymbolType, RankType > variablesBarSymbol = TreeFromXMLParser::parseVariablesBar < common::ranked_symbol < SymbolType, RankType > > ( input );
-	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > nonlinearVariables = TreeFromXMLParser::parseNonlinearVariables < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixRankedBarNonlinearPattern::getXmlTagName ( ) );
-
-	return PrefixRankedBarNonlinearPattern < SymbolType, RankType > ( std::move ( bars ), std::move ( variablesBarSymbol ), std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PrefixRankedBarNonlinearPattern < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PrefixRankedBarNonlinearPattern & pattern ) {
-	out.emplace_back ( PrefixRankedBarNonlinearPattern::getXmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeBars ( out, pattern.getBars ( ) );
-	TreeToXMLComposer::composeVariablesBar ( out, pattern.getVariablesBar ( ) );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
-	TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables ( ) );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, pattern.m_Data );
-	out.emplace_back ( PrefixRankedBarNonlinearPattern::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* PrefixRankedBarNonlinearPattern < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index fe72f8c473..aef03991fd 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedBar
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedBarPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedBarPattern < > > ( );
-
 static auto PrefixRankedBarPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedBarPattern < >, tree::RankedPattern < > > ( );
 static auto PrefixRankedBarPatternFromPrefixRankedBarTree = registration::CastRegister < tree::PrefixRankedBarPattern < >, tree::PrefixRankedBarTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 27435ceb78..342800c38c 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -32,16 +32,12 @@
 #include <alib/deque>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -292,36 +288,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "PrefixRankedBarPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static PrefixRankedBarPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixRankedBarPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -462,30 +428,6 @@ PrefixRankedBarPattern < SymbolType, RankType >::operator std::string ( ) const
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType > PrefixRankedBarPattern < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixRankedBarPattern::getXmlTagName() );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > bars = TreeFromXMLParser::parseBars < common::ranked_symbol < SymbolType, RankType > > ( input );
-	common::ranked_symbol < SymbolType, RankType > variablesBarSymbol = TreeFromXMLParser::parseVariablesBar < common::ranked_symbol < SymbolType, RankType > > ( input );
-	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixRankedBarPattern::getXmlTagName() );
-
-	return PrefixRankedBarPattern < SymbolType, RankType > ( std::move ( bars ), std::move ( variablesBarSymbol ), std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PrefixRankedBarPattern < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PrefixRankedBarPattern & pattern ) {
-	out.emplace_back ( PrefixRankedBarPattern::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeBars ( out, pattern.getBars() );
-	TreeToXMLComposer::composeVariablesBar ( out, pattern.getVariablesBar() );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
-	TreeToXMLComposer::composeContent ( out, pattern.m_Data );
-	out.emplace_back ( PrefixRankedBarPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* PrefixRankedBarPattern < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index 9d416167ab..ce1d344b24 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedBar
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedBarTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarTree < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarTree < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarTree < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedBarTree < > > ( );
-
 static auto PrefixRankedBarTreeFromRankedTree = registration::CastRegister < tree::PrefixRankedBarTree < >, tree::RankedTree < > > ( );
 
 static auto LinearStringFromPrefixRankedBarTree = registration::CastRegister < string::LinearString < common::ranked_symbol < > >, tree::PrefixRankedBarTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 8d62a3ba30..8273f36475 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -32,16 +32,12 @@
 #include <alib/deque>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -238,36 +234,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "PrefixRankedBarTree";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the tree
-	 */
-	static PrefixRankedBarTree parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the tree
-	 * \param tree the tree to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixRankedBarTree & tree );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -398,26 +364,6 @@ PrefixRankedBarTree < SymbolType, RankType >::operator std::string ( ) const {
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PrefixRankedBarTree < SymbolType, RankType > PrefixRankedBarTree < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixRankedBarTree::getXmlTagName() );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > bars = TreeFromXMLParser::parseBars < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixRankedBarTree::getXmlTagName() );
-
-	return PrefixRankedBarTree < SymbolType, RankType > ( std::move ( bars ), std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PrefixRankedBarTree < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PrefixRankedBarTree & tree ) {
-	out.emplace_back ( PrefixRankedBarTree::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeBars ( out, tree.getBars() );
-	TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet() );
-	TreeToXMLComposer::composeContent ( out, tree.m_Data );
-	out.emplace_back ( PrefixRankedBarTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* PrefixRankedBarTree < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
index 4d0edd86a6..8041e5203a 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedNon
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedNonlinearPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedNonlinearPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedNonlinearPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedNonlinearPattern < > > ( );
-
 static auto PrefixRankedNonlinearPatternFromRankedTree = registration::CastRegister < tree::PrefixRankedNonlinearPattern < >, tree::RankedTree < > > ( );
 static auto PrefixRankedNonlinearPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedNonlinearPattern < >, tree::RankedPattern < > > ( );
 static auto PrefixRankedNonlinearPatternFromRankedNonlinearPattern = registration::CastRegister < tree::PrefixRankedNonlinearPattern < >, tree::RankedNonlinearPattern < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index abe6c55f9e..c9fc012a9a 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -32,16 +32,12 @@
 #include <alib/deque>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -277,36 +273,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName ( ) {
-		static std::string xmlTagName = "PrefixRankedNonlinearPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static PrefixRankedNonlinearPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixRankedNonlinearPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -448,28 +414,6 @@ PrefixRankedNonlinearPattern < SymbolType, RankType >::operator std::string ( )
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType > PrefixRankedNonlinearPattern < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixRankedNonlinearPattern::getXmlTagName ( ) );
-	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > nonlinearVariables = TreeFromXMLParser::parseNonlinearVariables < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixRankedNonlinearPattern::getXmlTagName ( ) );
-
-	return PrefixRankedNonlinearPattern < SymbolType, RankType > ( std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PrefixRankedNonlinearPattern < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PrefixRankedNonlinearPattern & pattern ) {
-	out.emplace_back ( PrefixRankedNonlinearPattern::getXmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
-	TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables ( ) );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, pattern.m_Data );
-	out.emplace_back ( PrefixRankedNonlinearPattern::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* PrefixRankedNonlinearPattern < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
index fc190f77e1..4628b46a55 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedPat
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedPattern < > > ( );
-
 static auto PrefixRankedPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedPattern < >, tree::RankedPattern < > > ( );
 static auto PrefixRankedPatternFromPrefixRankedTree = registration::CastRegister < tree::PrefixRankedPattern < >, tree::PrefixRankedTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index cbcae7842a..4336b3c93a 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -32,16 +32,12 @@
 #include <alib/deque>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -226,36 +222,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "PrefixRankedPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static PrefixRankedPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixRankedPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -378,26 +344,6 @@ PrefixRankedPattern < SymbolType, RankType >::operator std::string ( ) const {
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PrefixRankedPattern < SymbolType, RankType > PrefixRankedPattern < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixRankedPattern::getXmlTagName() );
-	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixRankedPattern::getXmlTagName() );
-
-	return PrefixRankedPattern < SymbolType, RankType > ( std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PrefixRankedPattern < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PrefixRankedPattern & pattern ) {
-	out.emplace_back ( PrefixRankedPattern::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
-	TreeToXMLComposer::composeContent ( out, pattern.m_Data );
-	out.emplace_back ( PrefixRankedPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* PrefixRankedPattern < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
index c4e805b4be..1ec0466b74 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedTre
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedTree < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedTree < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedTree < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedTree < > > ( );
-
 static auto PrefixRankedTreeFromRankedTree = registration::CastRegister < tree::PrefixRankedTree < >, tree::RankedTree < > > ( );
 static auto PrefixRankedTreeFromPostfixRankedTree = registration::CastRegister < tree::PrefixRankedTree < >, tree::PostfixRankedTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index 86ef80109f..a53b660469 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -32,16 +32,12 @@
 #include <alib/deque>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include <tree/common/TreeNormalize.h>
 
 #include <core/normalize.hpp>
@@ -201,36 +197,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "PrefixRankedTree";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the tree
-	 */
-	static PrefixRankedTree parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the tree
-	 * \param tree the tree to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixRankedTree & tree );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -352,24 +318,6 @@ PrefixRankedTree < SymbolType, RankType >::operator std::string ( ) const {
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType, class RankType >
-PrefixRankedTree < SymbolType, RankType > PrefixRankedTree < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixRankedTree::getXmlTagName() );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixRankedTree::getXmlTagName() );
-
-	return PrefixRankedTree < SymbolType, RankType > ( std::move ( rankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType, class RankType >
-void PrefixRankedTree < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const PrefixRankedTree & tree ) {
-	out.emplace_back ( PrefixRankedTree::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet() );
-	TreeToXMLComposer::composeContent ( out, tree.m_Data );
-	out.emplace_back ( PrefixRankedTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* PrefixRankedTree < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
index 60dced13ad..3c3be98add 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,10 +19,4 @@ static auto components = registration::ComponentRegister < tree::RankedNonlinear
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::RankedNonlinearPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::RankedNonlinearPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedNonlinearPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::RankedNonlinearPattern < > > ( );
-
 } /* namespace */
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index d096f7aa2a..85e7b80cbf 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -32,16 +32,12 @@
 #include <sstream>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -251,36 +247,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "RankedNonlinearPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static RankedNonlinearPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const RankedNonlinearPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -392,29 +358,6 @@ RankedNonlinearPattern < SymbolType, RankType >::operator std::string ( ) const
 	return ss.str ( );
 }
 
-template < class SymbolType, class RankType >
-RankedNonlinearPattern < SymbolType, RankType > RankedNonlinearPattern < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, RankedNonlinearPattern::getXmlTagName() );
-	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > nonlinearVariables = TreeFromXMLParser::parseNonlinearVariables < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::tree < common::ranked_symbol < SymbolType, RankType > > root = TreeFromXMLParser::parseTreeContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	RankedNonlinearPattern < SymbolType, RankType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( root ) );
-
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, RankedNonlinearPattern::getXmlTagName() );
-	return tree;
-}
-
-template < class SymbolType, class RankType >
-void RankedNonlinearPattern < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const RankedNonlinearPattern & pattern ) {
-	out.emplace_back ( RankedNonlinearPattern::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
-	TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables() );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
-	TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
-	out.emplace_back ( RankedNonlinearPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* RankedNonlinearPattern < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index 7dd5aa0284..e51075d3fd 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::RankedPattern <
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::RankedPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::RankedPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::RankedPattern < > > ( );
-
 static auto RankedPatternFromUnrankedPattern = registration::CastRegister < tree::RankedPattern < >, tree::UnrankedPattern < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index 7c82483342..20cf26a314 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -32,16 +32,12 @@
 #include <sstream>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -221,36 +217,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "RankedPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static RankedPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const RankedPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -358,27 +324,6 @@ RankedPattern < SymbolType, RankType >::operator std::string ( ) const {
 	return ss.str ( );
 }
 
-template < class SymbolType, class RankType >
-RankedPattern < SymbolType, RankType > RankedPattern < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, RankedPattern::getXmlTagName() );
-	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::tree < common::ranked_symbol < SymbolType, RankType > > root = TreeFromXMLParser::parseTreeContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	RankedPattern < SymbolType, RankType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( root ) );
-
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, RankedPattern::getXmlTagName() );
-	return tree;
-}
-
-template < class SymbolType, class RankType >
-void RankedPattern < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const RankedPattern & pattern ) {
-	out.emplace_back ( RankedPattern::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
-	TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
-	out.emplace_back ( RankedPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* RankedPattern < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index 9b015b2920..0d48b48f16 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::RankedTree < >
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::RankedTree < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::RankedTree < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedTree < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::RankedTree < > > ( );
-
 static auto RankedTreeFromUnrankedTree = registration::CastRegister < tree::RankedTree < >, tree::UnrankedTree < > > ( );
 static auto RankedTreeFromPostfixRankedTree = registration::CastRegister < tree::RankedTree < >, tree::PostfixRankedTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index 960f7b331c..f9a09bc1c3 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -32,16 +32,12 @@
 #include <sstream>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include <common/ranked_symbol.hpp>
-#include <alphabet/xml/RankedSymbol.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeBase.h"
 #include "../TreeException.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 
 #include <tree/common/TreeNormalize.h>
@@ -207,36 +203,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "RankedTree";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the tree
-	 */
-	static RankedTree parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the tree
-	 * \param tree the tree to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const RankedTree & tree );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -349,25 +315,6 @@ RankedTree < SymbolType, RankType >::operator std::string ( ) const {
 	return ss.str ( );
 }
 
-template < class SymbolType, class RankType >
-RankedTree < SymbolType, RankType > RankedTree < SymbolType, RankType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, RankedTree::getXmlTagName() );
-	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
-	ext::tree < common::ranked_symbol < SymbolType, RankType > > root = TreeFromXMLParser::parseTreeContent < common::ranked_symbol < SymbolType, RankType > > ( input );
-	RankedTree < SymbolType, RankType > tree ( std::move ( rankedAlphabet ), std::move ( root ) );
-
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, RankedTree::getXmlTagName() );
-	return tree;
-}
-
-template < class SymbolType, class RankType >
-void RankedTree < SymbolType, RankType >::compose ( ext::deque < sax::Token > & out, const RankedTree & tree ) {
-	out.emplace_back ( RankedTree::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
-	out.emplace_back ( RankedTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType, class RankType >
 object::ObjectBase* RankedTree < SymbolType, RankType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.cpp b/alib2data/src/tree/unranked/PrefixBarTree.cpp
index 19b1c14024..69a0f8f668 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.cpp
+++ b/alib2data/src/tree/unranked/PrefixBarTree.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::PrefixBarTree <
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixBarTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixBarTree < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::PrefixBarTree < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixBarTree < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixBarTree < > > ( );
-
 static auto PrefixBarTreeFromUnrankedTree = registration::CastRegister < tree::PrefixBarTree < >, tree::UnrankedTree < > > ( );
 
 static auto LinearStringFromPrefixBarTree = registration::CastRegister < string::LinearString < >, tree::PrefixBarTree < > > ( );
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h
index 036981d71f..f1c803cb02 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.h
+++ b/alib2data/src/tree/unranked/PrefixBarTree.h
@@ -31,15 +31,12 @@
 #include <alib/vector>
 #include <alib/tree>
 
-#include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
 #include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeBase.h"
 #include "../TreeException.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -226,36 +223,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "PrefixBarTree";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the tree
-	 */
-	static PrefixBarTree parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the tree
-	 * \param tree the tree to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const PrefixBarTree & tree );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -379,26 +346,6 @@ PrefixBarTree < SymbolType >::operator std::string ( ) const {
 	return std::move ( ss ).str ( );
 }
 
-template < class SymbolType >
-PrefixBarTree < SymbolType > PrefixBarTree < SymbolType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, PrefixBarTree::getXmlTagName() );
-	SymbolType bar = TreeFromXMLParser::parseBar < SymbolType > ( input );
-	ext::set < SymbolType > unrankedAlphabet = TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
-	ext::vector < SymbolType > data = TreeFromXMLParser::parseLinearContent < SymbolType > ( input );
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, PrefixBarTree::getXmlTagName() );
-
-	return PrefixBarTree < SymbolType > ( std::move ( bar ), std::move ( unrankedAlphabet ), std::move ( data ) );
-}
-
-template < class SymbolType >
-void PrefixBarTree < SymbolType >::compose ( ext::deque < sax::Token > & out, const PrefixBarTree & tree ) {
-	out.emplace_back ( PrefixBarTree::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeBar ( out, tree.getBar ( ) );
-	TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, tree.m_Data );
-	out.emplace_back ( PrefixBarTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType >
 object::ObjectBase* PrefixBarTree < SymbolType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
index 0c70d87e93..d33e21caff 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,10 +19,4 @@ static auto components = registration::ComponentRegister < tree::UnrankedNonline
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::UnrankedNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedNonlinearPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedNonlinearPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedNonlinearPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::UnrankedNonlinearPattern < > > ( );
-
 } /* namespace */
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index ae8d1f2ccf..7321f6db9b 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -32,14 +32,11 @@
 #include <sstream>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -240,36 +237,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "UnrankedNonlinearPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static UnrankedNonlinearPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const UnrankedNonlinearPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -371,29 +338,6 @@ UnrankedNonlinearPattern < SymbolType >::operator std::string ( ) const {
 	return ss.str ( );
 }
 
-template < class SymbolType >
-UnrankedNonlinearPattern < SymbolType > UnrankedNonlinearPattern < SymbolType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, UnrankedNonlinearPattern::getXmlTagName() );
-	SymbolType subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < SymbolType > ( input );
-	ext::set < SymbolType > nonlinearVariables = TreeFromXMLParser::parseNonlinearVariables < SymbolType > ( input );
-	ext::set < SymbolType > rankedAlphabet = TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
-	ext::tree < SymbolType > root = TreeFromXMLParser::parseTreeContent < SymbolType > ( input );
-	UnrankedNonlinearPattern < SymbolType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( root ) );
-
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, UnrankedNonlinearPattern::getXmlTagName() );
-	return tree;
-}
-
-template < class SymbolType >
-void UnrankedNonlinearPattern < SymbolType >::compose ( ext::deque < sax::Token > & out, const UnrankedNonlinearPattern & pattern ) {
-	out.emplace_back ( UnrankedNonlinearPattern::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
-	TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables ( ) );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
-	out.emplace_back ( UnrankedNonlinearPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType >
 object::ObjectBase* UnrankedNonlinearPattern < SymbolType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index 2ef1e6d7ed..66d60543ee 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::UnrankedPattern
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::UnrankedPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedPattern < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedPattern < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedPattern < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::UnrankedPattern < > > ( );
-
 static auto UnrankedPatternFromRankedPattern = registration::CastRegister < tree::UnrankedPattern < >, tree::RankedPattern < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 4c2d9fa98b..1fd8290864 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -32,14 +32,11 @@
 #include <sstream>
 
 #include <core/components.hpp>
-#include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
 #include "../TreeBase.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -211,36 +208,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "UnrankedPattern";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static UnrankedPattern parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const UnrankedPattern & pattern );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -338,27 +305,6 @@ UnrankedPattern < SymbolType >::operator std::string ( ) const {
 	return ss.str ( );
 }
 
-template < class SymbolType >
-UnrankedPattern < SymbolType > UnrankedPattern < SymbolType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, UnrankedPattern::getXmlTagName() );
-	SymbolType subtreeWildcardSymbol = TreeFromXMLParser::parseWildcardSymbol < SymbolType > ( input );
-	ext::set < SymbolType > rankedAlphabet = TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
-	ext::tree < SymbolType > root = TreeFromXMLParser::parseTreeContent < SymbolType > ( input );
-	UnrankedPattern < SymbolType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( root ) );
-
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, UnrankedPattern::getXmlTagName() );
-	return tree;
-}
-
-template < class SymbolType >
-void UnrankedPattern < SymbolType >::compose ( ext::deque < sax::Token > & out, const UnrankedPattern & pattern ) {
-	out.emplace_back ( UnrankedPattern::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
-	TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
-	out.emplace_back ( UnrankedPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType >
 object::ObjectBase* UnrankedPattern < SymbolType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index c54d0ffad9..360bd4f3b0 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -10,7 +10,6 @@
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
-#include <registration/XmlRegistration.hpp>
 #include <registration/CastRegistration.hpp>
 #include <registration/ComponentRegistration.hpp>
 
@@ -20,12 +19,6 @@ static auto components = registration::ComponentRegister < tree::UnrankedTree <
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::UnrankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedTree < > > ( );
-static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedTree < > > ( );
-
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedTree < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::UnrankedTree < > > ( );
-
 static auto UnrankedTreeFromRankedTree = registration::CastRegister < tree::UnrankedTree < >, tree::RankedTree < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index 3aef8ffa36..35c77d48d6 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -31,15 +31,12 @@
 #include <alib/algorithm>
 #include <sstream>
 
-#include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
 #include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeBase.h"
 #include "../TreeException.h"
-#include "../common/TreeFromXMLParser.h"
-#include "../common/TreeToXMLComposer.h"
 #include "../common/TreeAuxiliary.h"
 #include <tree/common/TreeNormalize.h>
 
@@ -189,36 +186,6 @@ public:
 	 */
 	virtual explicit operator std::string ( ) const override;
 
-	/**
-	 * \brief The XML tag name of class.
-	 *
-	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
-	 *
-	 * \returns string representing the XML tag name of the class
-	 */
-	static const std::string & getXmlTagName() {
-		static std::string xmlTagName = "UnrankedTree";
-
-		return xmlTagName;
-	}
-
-	/**
-	 * Parsing from a sequence of xml tokens helper.
-	 *
-	 * \params input the iterator to sequence of xml tokens to parse from
-	 *
-	 * \returns the new instance of the pattern
-	 */
-	static UnrankedTree parse ( ext::deque < sax::Token >::iterator & input );
-
-	/**
-	 * Composing to a sequence of xml tokens helper.
-	 *
-	 * \param out the sink for new xml tokens representing the pattern
-	 * \param pattern the pattern to compose
-	 */
-	static void compose ( ext::deque < sax::Token > & out, const UnrankedTree & tree );
-
 	/**
 	 * @copydoc object::ObjectBase::inc()
 	 */
@@ -316,25 +283,6 @@ UnrankedTree < SymbolType >::operator std::string ( ) const {
 	return ss.str ( );
 }
 
-template < class SymbolType >
-UnrankedTree < SymbolType > UnrankedTree < SymbolType >::parse ( ext::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, UnrankedTree::getXmlTagName() );
-	ext::set < SymbolType > rankedAlphabet = TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
-	ext::tree < SymbolType > root = TreeFromXMLParser::parseTreeContent < SymbolType > ( input );
-	UnrankedTree < SymbolType > tree ( std::move ( rankedAlphabet ), std::move ( root ) );
-
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, UnrankedTree::getXmlTagName() );
-	return tree;
-}
-
-template < class SymbolType >
-void UnrankedTree < SymbolType >::compose ( ext::deque < sax::Token > & out, const UnrankedTree & tree ) {
-	out.emplace_back ( UnrankedTree::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
-	TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
-	TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
-	out.emplace_back ( UnrankedTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
-}
-
 template < class SymbolType >
 object::ObjectBase* UnrankedTree < SymbolType >::inc() && {
 	return new object::UniqueObject(object::Object(std::move(*this)), primitive::Integer(0));
diff --git a/alib2data/src/tree/common/TreeFromXMLParser.h b/alib2data/src/tree/xml/common/TreeFromXMLParser.h
similarity index 100%
rename from alib2data/src/tree/common/TreeFromXMLParser.h
rename to alib2data/src/tree/xml/common/TreeFromXMLParser.h
diff --git a/alib2data/src/tree/common/TreeToXMLComposer.h b/alib2data/src/tree/xml/common/TreeToXMLComposer.h
similarity index 100%
rename from alib2data/src/tree/common/TreeToXMLComposer.h
rename to alib2data/src/tree/xml/common/TreeToXMLComposer.h
diff --git a/alib2data/src/tree/xml/ranked/PostfixRankedTree.cpp b/alib2data/src/tree/xml/ranked/PostfixRankedTree.cpp
new file mode 100644
index 0000000000..36f09c7a28
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PostfixRankedTree.cpp
@@ -0,0 +1,22 @@
+/*
+ * PostfixRankedTree.cpp
+ *
+ *  Created on: May 4, 2017
+ *      Author: Aleksandr Shatrovskii
+ */
+
+#include "PostfixRankedTree.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PostfixRankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PostfixRankedTree < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PostfixRankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PostfixRankedTree < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PostfixRankedTree.h b/alib2data/src/tree/xml/ranked/PostfixRankedTree.h
new file mode 100644
index 0000000000..a3cded10b4
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PostfixRankedTree.h
@@ -0,0 +1,88 @@
+/*
+ * PostfixRankedTree.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: May 4, 2017
+ *      Author: Aleksandr Shatrovskii
+ */
+
+#ifndef _XML_POSTFIX_RANKED_TREE_H_
+#define _XML_POSTFIX_RANKED_TREE_H_
+
+#include <tree/ranked/PostfixRankedTree.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PostfixRankedTree < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName ( ) {
+		static std::string xmlTagName = "PostfixRankedTree";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the tree
+	 */
+	static tree::PostfixRankedTree < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the tree
+	 * \param tree the tree to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PostfixRankedTree < SymbolType, RankType > & tree );
+};
+
+template < class SymbolType, class RankType >
+tree::PostfixRankedTree < SymbolType, RankType > xmlApi < tree::PostfixRankedTree < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PostfixRankedTree < SymbolType, RankType > ( std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PostfixRankedTree < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PostfixRankedTree < SymbolType, RankType > & tree ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_POSTFIX_RANKED_TREE_H_ */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.cpp
new file mode 100644
index 0000000000..5c0c40ae29
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixRankedBarNonlinearPattern.cpp
+ *
+ *  Created on: Jul 20, 2016
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixRankedBarNonlinearPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedBarNonlinearPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.h
new file mode 100644
index 0000000000..bd5bcdf5c1
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedBarNonlinearPattern.h
@@ -0,0 +1,96 @@
+/*
+ * PrefixRankedBarNonlinearPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Jul 20, 2016
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_RANKED_BAR_NONLINEAR_PATTERN_H_
+#define _XML_PREFIX_RANKED_BAR_NONLINEAR_PATTERN_H_
+
+#include <tree/ranked/PrefixRankedBarNonlinearPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName ( ) {
+		static std::string xmlTagName = "PrefixRankedBarNonlinearPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > & pattern );
+};
+
+template < class SymbolType, class RankType >
+tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > xmlApi < tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > bars = tree::TreeFromXMLParser::parseBars < common::ranked_symbol < SymbolType, RankType > > ( input );
+	common::ranked_symbol < SymbolType, RankType > variablesBarSymbol = tree::TreeFromXMLParser::parseVariablesBar < common::ranked_symbol < SymbolType, RankType > > ( input );
+	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > nonlinearVariables = tree::TreeFromXMLParser::parseNonlinearVariables < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > ( std::move ( bars ), std::move ( variablesBarSymbol ), std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeBars ( out, pattern.getBars ( ) );
+	tree::TreeToXMLComposer::composeVariablesBar ( out, pattern.getVariablesBar ( ) );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
+	tree::TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables ( ) );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_RANKED_BAR_NONLINEAR_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.cpp
new file mode 100644
index 0000000000..360776d1fa
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixRankedBarPattern.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixRankedBarPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedBarPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.h
new file mode 100644
index 0000000000..5fd5ccaae6
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedBarPattern.h
@@ -0,0 +1,94 @@
+/*
+ * PrefixRankedBarPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_RANKED_BAR_PATTERN_H_
+#define _XML_PREFIX_RANKED_BAR_PATTERN_H_
+
+#include <tree/ranked/PrefixRankedBarPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PrefixRankedBarPattern < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "PrefixRankedBarPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::PrefixRankedBarPattern < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedBarPattern < SymbolType, RankType > & pattern );
+};
+
+template < class SymbolType, class RankType >
+tree::PrefixRankedBarPattern < SymbolType, RankType > xmlApi < tree::PrefixRankedBarPattern < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > bars = tree::TreeFromXMLParser::parseBars < common::ranked_symbol < SymbolType, RankType > > ( input );
+	common::ranked_symbol < SymbolType, RankType > variablesBarSymbol = tree::TreeFromXMLParser::parseVariablesBar < common::ranked_symbol < SymbolType, RankType > > ( input );
+	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixRankedBarPattern < SymbolType, RankType > ( std::move ( bars ), std::move ( variablesBarSymbol ), std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PrefixRankedBarPattern < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedBarPattern < SymbolType, RankType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeBars ( out, pattern.getBars() );
+	tree::TreeToXMLComposer::composeVariablesBar ( out, pattern.getVariablesBar() );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_RANKED_BAR_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/xml/ranked/PrefixRankedBarTree.cpp
new file mode 100644
index 0000000000..9b57599975
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedBarTree.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixRankedBarTree.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixRankedBarTree.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarTree < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedBarTree < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/xml/ranked/PrefixRankedBarTree.h
new file mode 100644
index 0000000000..1a0372983b
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedBarTree.h
@@ -0,0 +1,90 @@
+/*
+ * PrefixRankedBarTree.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_RANKED_BAR_TREE_H_
+#define _XML_PREFIX_RANKED_BAR_TREE_H_
+
+#include <tree/ranked/PrefixRankedBarTree.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PrefixRankedBarTree < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "PrefixRankedBarTree";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the tree
+	 */
+	static tree::PrefixRankedBarTree < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the tree
+	 * \param tree the tree to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedBarTree < SymbolType, RankType > & tree );
+};
+
+template < class SymbolType, class RankType >
+tree::PrefixRankedBarTree < SymbolType, RankType > xmlApi < tree::PrefixRankedBarTree < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > bars = tree::TreeFromXMLParser::parseBars < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixRankedBarTree < SymbolType, RankType > ( std::move ( bars ), std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PrefixRankedBarTree < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedBarTree < SymbolType, RankType > & tree ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeBars ( out, tree.getBars() );
+	tree::TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet() );
+	tree::TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_RANKED_BAR_TREE_H_ */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.cpp
new file mode 100644
index 0000000000..cc8d3ea9a0
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixRankedNonlinearPattern.cpp
+ *
+ *  Created on: Jul 20, 2016
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixRankedNonlinearPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedNonlinearPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedNonlinearPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.h
new file mode 100644
index 0000000000..8a311ed974
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedNonlinearPattern.h
@@ -0,0 +1,92 @@
+/*
+ * PrefixRankedNonlinearPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Jul 20, 2016
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_RANKED_NONLINEAR_PATTERN_H_
+#define _XML_PREFIX_RANKED_NONLINEAR_PATTERN_H_
+
+#include <tree/ranked/PrefixRankedNonlinearPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PrefixRankedNonlinearPattern < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName ( ) {
+		static std::string xmlTagName = "PrefixRankedNonlinearPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::PrefixRankedNonlinearPattern < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedNonlinearPattern < SymbolType, RankType > & pattern );
+};
+
+template < class SymbolType, class RankType >
+tree::PrefixRankedNonlinearPattern < SymbolType, RankType > xmlApi < tree::PrefixRankedNonlinearPattern < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > nonlinearVariables = tree::TreeFromXMLParser::parseNonlinearVariables < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixRankedNonlinearPattern < SymbolType, RankType > ( std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PrefixRankedNonlinearPattern < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedNonlinearPattern < SymbolType, RankType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
+	tree::TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables ( ) );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_RANKED_NONLINEAR_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/xml/ranked/PrefixRankedPattern.cpp
new file mode 100644
index 0000000000..71b582d100
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixRankedPattern.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixRankedPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedPattern.h b/alib2data/src/tree/xml/ranked/PrefixRankedPattern.h
new file mode 100644
index 0000000000..8e0489c839
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedPattern.h
@@ -0,0 +1,90 @@
+/*
+ * PrefixRankedPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_RANKED_PATTERN_H_
+#define _XML_PREFIX_RANKED_PATTERN_H_
+
+#include <tree/ranked/PrefixRankedPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PrefixRankedPattern < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "PrefixRankedPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::PrefixRankedPattern < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedPattern < SymbolType, RankType > & pattern );
+};
+
+template < class SymbolType, class RankType >
+tree::PrefixRankedPattern < SymbolType, RankType > xmlApi < tree::PrefixRankedPattern < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixRankedPattern < SymbolType, RankType > ( std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PrefixRankedPattern < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedPattern < SymbolType, RankType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_RANKED_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/xml/ranked/PrefixRankedTree.cpp
new file mode 100644
index 0000000000..2bed6ee9e5
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedTree.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixRankedTree.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixRankedTree.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedTree < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixRankedTree < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/PrefixRankedTree.h b/alib2data/src/tree/xml/ranked/PrefixRankedTree.h
new file mode 100644
index 0000000000..1f16cd053c
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/PrefixRankedTree.h
@@ -0,0 +1,88 @@
+/*
+ * PrefixRankedTree.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_RANKED_TREE_H_
+#define _XML_PREFIX_RANKED_TREE_H_
+
+#include <tree/ranked/PrefixRankedTree.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::PrefixRankedTree < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "PrefixRankedTree";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the tree
+	 */
+	static tree::PrefixRankedTree < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the tree
+	 * \param tree the tree to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedTree < SymbolType, RankType > & tree );
+};
+
+template < class SymbolType, class RankType >
+tree::PrefixRankedTree < SymbolType, RankType > xmlApi < tree::PrefixRankedTree < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::vector < common::ranked_symbol < SymbolType, RankType > > data = tree::TreeFromXMLParser::parseLinearContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixRankedTree < SymbolType, RankType > ( std::move ( rankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::PrefixRankedTree < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixRankedTree < SymbolType, RankType > & tree ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet() );
+	tree::TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_RANKED_TREE_H_ */
diff --git a/alib2data/src/tree/xml/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/xml/ranked/RankedNonlinearPattern.cpp
new file mode 100644
index 0000000000..c4d6c5dce9
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/RankedNonlinearPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * RankedNonlinearPattern.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "RankedNonlinearPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::RankedNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::RankedNonlinearPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::RankedNonlinearPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/xml/ranked/RankedNonlinearPattern.h
new file mode 100644
index 0000000000..970049092d
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/RankedNonlinearPattern.h
@@ -0,0 +1,93 @@
+/*
+ * RankedNonlinearPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_RANKED_NONLINEAR_PATTERN_H_
+#define _XML_RANKED_NONLINEAR_PATTERN_H_
+
+#include <tree/ranked/RankedNonlinearPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::RankedNonlinearPattern < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "RankedNonlinearPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::RankedNonlinearPattern < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::RankedNonlinearPattern < SymbolType, RankType > & pattern );
+};
+
+template < class SymbolType, class RankType >
+tree::RankedNonlinearPattern < SymbolType, RankType > xmlApi < tree::RankedNonlinearPattern < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > nonlinearVariables = tree::TreeFromXMLParser::parseNonlinearVariables < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::tree < common::ranked_symbol < SymbolType, RankType > > root = tree::TreeFromXMLParser::parseTreeContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	tree::RankedNonlinearPattern < SymbolType, RankType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( root ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return tree;
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::RankedNonlinearPattern < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::RankedNonlinearPattern < SymbolType, RankType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
+	tree::TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables() );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_RANKED_NONLINEAR_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/ranked/RankedPattern.cpp b/alib2data/src/tree/xml/ranked/RankedPattern.cpp
new file mode 100644
index 0000000000..8817ae3ca4
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/RankedPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * RankedPattern.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "RankedPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::RankedPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::RankedPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::RankedPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/RankedPattern.h b/alib2data/src/tree/xml/ranked/RankedPattern.h
new file mode 100644
index 0000000000..2476fb6e29
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/RankedPattern.h
@@ -0,0 +1,91 @@
+/*
+ * RankedPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_RANKED_PATTERN_H_
+#define _XML_RANKED_PATTERN_H_
+
+#include <tree/ranked/RankedPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::RankedPattern < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "RankedPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::RankedPattern < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::RankedPattern < SymbolType, RankType > & pattern );
+};
+
+template < class SymbolType, class RankType >
+tree::RankedPattern < SymbolType, RankType > xmlApi < tree::RankedPattern < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	common::ranked_symbol < SymbolType, RankType > subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::tree < common::ranked_symbol < SymbolType, RankType > > root = tree::TreeFromXMLParser::parseTreeContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	tree::RankedPattern < SymbolType, RankType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( root ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return tree;
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::RankedPattern < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::RankedPattern < SymbolType, RankType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard() );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet() );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_RANKED_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/ranked/RankedTree.cpp b/alib2data/src/tree/xml/ranked/RankedTree.cpp
new file mode 100644
index 0000000000..47296deea3
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/RankedTree.cpp
@@ -0,0 +1,22 @@
+/*
+ * RankedTree.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Stepan Plachy
+ */
+
+#include "RankedTree.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::RankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::RankedTree < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::RankedTree < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/ranked/RankedTree.h b/alib2data/src/tree/xml/ranked/RankedTree.h
new file mode 100644
index 0000000000..f99889340f
--- /dev/null
+++ b/alib2data/src/tree/xml/ranked/RankedTree.h
@@ -0,0 +1,93 @@
+/*
+ * RankedTree.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Stepan Plachy
+ */
+
+#ifndef _XML_RANKED_TREE_H_
+#define _XML_RANKED_TREE_H_
+
+#include <tree/ranked/RankedTree.h>
+#include <sax/FromXMLParserHelper.h>
+#include <alphabet/xml/RankedSymbol.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType, class RankType >
+struct xmlApi < tree::RankedTree < SymbolType, RankType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "RankedTree";
+
+		return xmlTagName;
+	}
+
+	static bool first ( const ext::deque < sax::Token >::const_iterator & input ) {
+		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the tree
+	 */
+	static tree::RankedTree < SymbolType, RankType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the tree
+	 * \param tree the tree to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::RankedTree < SymbolType, RankType > & tree );
+};
+
+template < class SymbolType, class RankType >
+tree::RankedTree < SymbolType, RankType > xmlApi < tree::RankedTree < SymbolType, RankType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < common::ranked_symbol < SymbolType, RankType > > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < common::ranked_symbol < SymbolType, RankType > > ( input );
+	ext::tree < common::ranked_symbol < SymbolType, RankType > > root = tree::TreeFromXMLParser::parseTreeContent < common::ranked_symbol < SymbolType, RankType > > ( input );
+	tree::RankedTree < SymbolType, RankType > tree ( std::move ( rankedAlphabet ), std::move ( root ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return tree;
+}
+
+template < class SymbolType, class RankType >
+void xmlApi < tree::RankedTree < SymbolType, RankType > >::compose ( ext::deque < sax::Token > & out, const tree::RankedTree < SymbolType, RankType > & tree ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_RANKED_TREE_H_ */
diff --git a/alib2data/src/tree/xml/unranked/PrefixBarTree.cpp b/alib2data/src/tree/xml/unranked/PrefixBarTree.cpp
new file mode 100644
index 0000000000..999f34ee34
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/PrefixBarTree.cpp
@@ -0,0 +1,22 @@
+/*
+ * PrefixBarTree.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "PrefixBarTree.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixBarTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixBarTree < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixBarTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::PrefixBarTree < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/unranked/PrefixBarTree.h b/alib2data/src/tree/xml/unranked/PrefixBarTree.h
new file mode 100644
index 0000000000..89373bd967
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/PrefixBarTree.h
@@ -0,0 +1,89 @@
+/*
+ * PrefixBarTree.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_PREFIX_BAR_TREE_H_
+#define _XML_PREFIX_BAR_TREE_H_
+
+#include <tree/unranked/PrefixBarTree.h>
+#include <sax/FromXMLParserHelper.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType >
+struct xmlApi < tree::PrefixBarTree < SymbolType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "PrefixBarTree";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the tree
+	 */
+	static tree::PrefixBarTree < SymbolType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the tree
+	 * \param tree the tree to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::PrefixBarTree < SymbolType > & tree );
+};
+
+template < class SymbolType >
+tree::PrefixBarTree < SymbolType > xmlApi < tree::PrefixBarTree < SymbolType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	SymbolType bar = tree::TreeFromXMLParser::parseBar < SymbolType > ( input );
+	ext::set < SymbolType > unrankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
+	ext::vector < SymbolType > data = tree::TreeFromXMLParser::parseLinearContent < SymbolType > ( input );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+
+	return tree::PrefixBarTree < SymbolType > ( std::move ( bar ), std::move ( unrankedAlphabet ), std::move ( data ) );
+}
+
+template < class SymbolType >
+void xmlApi < tree::PrefixBarTree < SymbolType > >::compose ( ext::deque < sax::Token > & out, const tree::PrefixBarTree < SymbolType > & tree ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeBar ( out, tree.getBar ( ) );
+	tree::TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_PREFIX_BAR_TREE_H_ */
diff --git a/alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.cpp
new file mode 100644
index 0000000000..77de071ad2
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * UnrankedNonlinearPattern.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "UnrankedNonlinearPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedNonlinearPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::UnrankedNonlinearPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.h
new file mode 100644
index 0000000000..d33c9ea887
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/UnrankedNonlinearPattern.h
@@ -0,0 +1,92 @@
+/*
+ * UnrankedNonlinearPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_UNRANKED_NONLINEAR_PATTERN_H_
+#define _XML_UNRANKED_NONLINEAR_PATTERN_H_
+
+#include <tree/unranked/UnrankedNonlinearPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType >
+struct xmlApi < tree::UnrankedNonlinearPattern < SymbolType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "UnrankedNonlinearPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::UnrankedNonlinearPattern < SymbolType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::UnrankedNonlinearPattern < SymbolType > & pattern );
+};
+
+template < class SymbolType >
+tree::UnrankedNonlinearPattern < SymbolType > xmlApi < tree::UnrankedNonlinearPattern < SymbolType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	SymbolType subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < SymbolType > ( input );
+	ext::set < SymbolType > nonlinearVariables = tree::TreeFromXMLParser::parseNonlinearVariables < SymbolType > ( input );
+	ext::set < SymbolType > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
+	ext::tree < SymbolType > root = tree::TreeFromXMLParser::parseTreeContent < SymbolType > ( input );
+	tree::UnrankedNonlinearPattern < SymbolType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( nonlinearVariables ), std::move ( rankedAlphabet ), std::move ( root ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return tree;
+}
+
+template < class SymbolType >
+void xmlApi < tree::UnrankedNonlinearPattern < SymbolType > >::compose ( ext::deque < sax::Token > & out, const tree::UnrankedNonlinearPattern < SymbolType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
+	tree::TreeToXMLComposer::composeNonlinearVariables ( out, pattern.getNonlinearVariables ( ) );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_UNRANKED_NONLINEAR_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/unranked/UnrankedPattern.cpp b/alib2data/src/tree/xml/unranked/UnrankedPattern.cpp
new file mode 100644
index 0000000000..f84704cbcd
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/UnrankedPattern.cpp
@@ -0,0 +1,22 @@
+/*
+ * UnrankedPattern.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "UnrankedPattern.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedPattern < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::UnrankedPattern < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/unranked/UnrankedPattern.h b/alib2data/src/tree/xml/unranked/UnrankedPattern.h
new file mode 100644
index 0000000000..6ed06e2744
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/UnrankedPattern.h
@@ -0,0 +1,90 @@
+/*
+ * UnrankedPattern.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef _XML_UNRANKED_PATTERN_H_
+#define _XML_UNRANKED_PATTERN_H_
+
+#include <tree/unranked/UnrankedPattern.h>
+#include <sax/FromXMLParserHelper.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType >
+struct xmlApi < tree::UnrankedPattern < SymbolType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "UnrankedPattern";
+
+		return xmlTagName;
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::UnrankedPattern < SymbolType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::UnrankedPattern < SymbolType > & pattern );
+};
+
+template < class SymbolType >
+tree::UnrankedPattern < SymbolType > xmlApi < tree::UnrankedPattern < SymbolType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	SymbolType subtreeWildcardSymbol = tree::TreeFromXMLParser::parseWildcardSymbol < SymbolType > ( input );
+	ext::set < SymbolType > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
+	ext::tree < SymbolType > root = tree::TreeFromXMLParser::parseTreeContent < SymbolType > ( input );
+	tree::UnrankedPattern < SymbolType > tree ( std::move ( subtreeWildcardSymbol ), std::move ( rankedAlphabet ), std::move ( root ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return tree;
+}
+
+template < class SymbolType >
+void xmlApi < tree::UnrankedPattern < SymbolType > >::compose ( ext::deque < sax::Token > & out, const tree::UnrankedPattern < SymbolType > & pattern ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeSubtreeWildcard ( out, pattern.getSubtreeWildcard ( ) );
+	tree::TreeToXMLComposer::composeAlphabet ( out, pattern.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, pattern.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_UNRANKED_PATTERN_H_ */
diff --git a/alib2data/src/tree/xml/unranked/UnrankedTree.cpp b/alib2data/src/tree/xml/unranked/UnrankedTree.cpp
new file mode 100644
index 0000000000..b57cba92a8
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/UnrankedTree.cpp
@@ -0,0 +1,22 @@
+/*
+ * UnrankedTree.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Stepan Plachy
+ */
+
+#include "UnrankedTree.h"
+#include <tree/Tree.h>
+#include <object/Object.h>
+
+#include <registration/XmlRegistration.hpp>
+
+namespace {
+
+static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedTree < > > ( );
+
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, tree::UnrankedTree < > > ( );
+
+} /* namespace */
diff --git a/alib2data/src/tree/xml/unranked/UnrankedTree.h b/alib2data/src/tree/xml/unranked/UnrankedTree.h
new file mode 100644
index 0000000000..de52ad7738
--- /dev/null
+++ b/alib2data/src/tree/xml/unranked/UnrankedTree.h
@@ -0,0 +1,92 @@
+/*
+ * UnrankedTree.h
+ *
+ * This file is part of Algorithms library toolkit.
+ * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
+
+ * Algorithms library toolkit is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * Algorithms library toolkit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with Algorithms library toolkit.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Stepan Plachy
+ */
+
+#ifndef _XML_UNRANKED_TREE_H_
+#define _XML_UNRANKED_TREE_H_
+
+#include <tree/unranked/UnrankedTree.h>
+#include <sax/FromXMLParserHelper.h>
+#include "../common/TreeFromXMLParser.h"
+#include "../common/TreeToXMLComposer.h"
+
+namespace core {
+
+template < class SymbolType >
+struct xmlApi < tree::UnrankedTree < SymbolType > > {
+	/**
+	 * \brief The XML tag name of class.
+	 *
+	 * \details Intentionaly a static member function to be safe in the initialisation before the main function starts.
+	 *
+	 * \returns string representing the XML tag name of the class
+	 */
+	static const std::string & xmlTagName() {
+		static std::string xmlTagName = "UnrankedTree";
+
+		return xmlTagName;
+	}
+
+	static bool first ( const ext::deque < sax::Token >::const_iterator & input ) {
+		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	}
+
+	/**
+	 * Parsing from a sequence of xml tokens helper.
+	 *
+	 * \params input the iterator to sequence of xml tokens to parse from
+	 *
+	 * \returns the new instance of the pattern
+	 */
+	static tree::UnrankedTree < SymbolType > parse ( ext::deque < sax::Token >::iterator & input );
+
+	/**
+	 * Composing to a sequence of xml tokens helper.
+	 *
+	 * \param out the sink for new xml tokens representing the pattern
+	 * \param pattern the pattern to compose
+	 */
+	static void compose ( ext::deque < sax::Token > & out, const tree::UnrankedTree < SymbolType > & tree );
+};
+
+template < class SymbolType >
+tree::UnrankedTree < SymbolType > xmlApi < tree::UnrankedTree < SymbolType > >::parse ( ext::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+	ext::set < SymbolType > rankedAlphabet = tree::TreeFromXMLParser::parseAlphabet < SymbolType > ( input );
+	ext::tree < SymbolType > root = tree::TreeFromXMLParser::parseTreeContent < SymbolType > ( input );
+	tree::UnrankedTree < SymbolType > tree ( std::move ( rankedAlphabet ), std::move ( root ) );
+
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) );
+	return tree;
+}
+
+template < class SymbolType >
+void xmlApi < tree::UnrankedTree < SymbolType > >::compose ( ext::deque < sax::Token > & out, const tree::UnrankedTree < SymbolType > & tree ) {
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
+	tree::TreeToXMLComposer::composeAlphabet ( out, tree.getAlphabet ( ) );
+	tree::TreeToXMLComposer::composeContent ( out, tree.getContent ( ) );
+	out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
+}
+
+} /* namespace core */
+
+#endif /* _XML_UNRANKED_TREE_H_ */
diff --git a/alib2data/test-src/tree/PatternTest.cpp b/alib2data/test-src/tree/PatternTest.cpp
index e800aa0adb..03ff89765e 100644
--- a/alib2data/test-src/tree/PatternTest.cpp
+++ b/alib2data/test-src/tree/PatternTest.cpp
@@ -4,9 +4,13 @@
 #include "sax/SaxComposeInterface.h"
 
 #include "tree/unranked/UnrankedPattern.h"
+#include "tree/xml/unranked/UnrankedPattern.h"
 #include "tree/ranked/RankedPattern.h"
+#include "tree/xml/ranked/RankedPattern.h"
 #include "tree/ranked/PrefixRankedPattern.h"
+#include "tree/xml/ranked/PrefixRankedPattern.h"
 #include "tree/ranked/PrefixRankedBarPattern.h"
+#include "tree/xml/ranked/PrefixRankedBarPattern.h"
 
 #include "tree/TreeException.h"
 
diff --git a/alib2data/test-src/tree/TreeTest.cpp b/alib2data/test-src/tree/TreeTest.cpp
index f40573c989..ab6d01abbe 100644
--- a/alib2data/test-src/tree/TreeTest.cpp
+++ b/alib2data/test-src/tree/TreeTest.cpp
@@ -4,10 +4,15 @@
 #include "sax/SaxComposeInterface.h"
 
 #include "tree/ranked/RankedTree.h"
+#include "tree/xml/ranked/RankedTree.h"
 #include "tree/unranked/UnrankedTree.h"
+#include "tree/xml/unranked/UnrankedTree.h"
 #include "tree/ranked/PrefixRankedTree.h"
+#include "tree/xml/ranked/PrefixRankedTree.h"
 #include "tree/ranked/PrefixRankedBarTree.h"
+#include "tree/xml/ranked/PrefixRankedBarTree.h"
 #include "tree/ranked/RankedPattern.h"
+#include "tree/xml/ranked/RankedPattern.h"
 
 #include "tree/TreeException.h"
 
diff --git a/tniceprint/src/tniceprint.cpp b/tniceprint/src/tniceprint.cpp
index 4af9f005ea..51f3090c91 100644
--- a/tniceprint/src/tniceprint.cpp
+++ b/tniceprint/src/tniceprint.cpp
@@ -14,7 +14,9 @@
 #include <factory/XmlDataFactory.hpp>
 #include <tree/Tree.h>
 #include <tree/ranked/RankedTree.h>
+#include <tree/xml/ranked/RankedTree.h>
 #include <tree/unranked/UnrankedTree.h>
+#include <tree/xml/unranked/UnrankedTree.h>
 
 int main(int argc, char** argv) {
 	try {
-- 
GitLab