Map

Details

diff --git a/ModelData/BusinessModel/BaseAndInterface/BaseOntologyEntity.cs b/ModelData/BusinessModel/BaseAndInterface/BaseOntologyEntity.cs
index 0968529..32d7b7b 100644
--- a/ModelData/BusinessModel/BaseAndInterface/BaseOntologyEntity.cs
+++ b/ModelData/BusinessModel/BaseAndInterface/BaseOntologyEntity.cs
@@ -8,54 +8,67 @@ using Tools;
 
 namespace ModelData.BusinessModel.BaseAndInterface
 {
-
     /*!
-	\brief Родительский класс, не несущий никакой смысловой нагрузки
+        \defgroup Entities Сущности
+        \brief Группа классов всех сущностей
 
-	Данный класс имеет только одну простую цель: проиллюстрировать то,
-	как Doxygen документирует наследование 
-    */
+        Включает в себя такие сущности: BaseOntologyEntity, 
+        @{
+     */
 
     /// \class  BaseOntologyEntity
     ///
-    /// \brief  A base ontology entity. - краткое описание
-    /// полное описание
-    /// \author Deniska
+    /// \brief  Базовый класс онтологической сущности.
+    /// Данный класс описывает сущность, обладающую уникальным идентификатором (URL) и собственным названием (Title). 
+    /// Данные параметры наследованы от интерфейса I_URL.
+    /// \author Denis
     /// \date   30.03.2019
-    ///         
-    ///         
-    /// \authors	
-    /// \version 
-    /// \date 
-    /// \bug 
-    /// \warning
-    /// \todo
 
     public abstract class BaseOntologyEntity : I_URLcs, I_MySerializable
     {
+        /// \property   public string URL
+        ///
+        /// \brief  Уникальный идентификатор сущности.
+        /// Установлен атрибут IndexAttrib со значением 0, т.е. данное свойство будет выводится первым при записи в поток.
+        /// \returns    The URL.
+
         [IndexAttrib(0)] public string URL { set; get; }
+
+
+
+        /// \property   public string Title
+        ///
+        /// \brief  Наименование сущности.
+        /// Установлен атрибут IndexAttrib со значением 1.
+        /// \returns    The title.
+
         [IndexAttrib(1)] public string Title { set; get; }
+
+
+
+        /// \fn public abstract Dictionary<string, string> Serialize();
+        ///
+        /// \brief  Метод, помещающий все необходимые сведения об объекте в Dictionary для последущей записи в поток.
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
         public abstract Dictionary<string, string> Serialize();
 
+
+
         /// \fn protected string Concat(List<string> l)
         ///
-        /// \brief  Concatenates the given l
+        /// \brief  Объединяет непустые строки из списка в одну.
         ///
-        /// \author Deniska
+        /// \author Denis
         /// \date   30.03.2019
         ///
         /// \param  l   A List&lt;string&gt; to process.
         ///
         /// \returns    A string.
-        ///  
-        ///  
-        /// \param [<направление>] <имя_параметра> {описание_параметра}
-        /// Копирует содержимое из исходной области памяти в целевую область память
-        /// \param[out] dest Целевая область памяти
-        /// \param[in] src Исходная область памяти
-        /// \param[in] n Количество байтов, которые необходимо скопировать
-        /// \return {описание_возвращаемого_значения}
-        /// \throw std::bad_alloc В случае возникновения ошибки при выделении памяти
 
         protected string Concat(List<string> l)
         {
@@ -67,6 +80,19 @@ namespace ModelData.BusinessModel.BaseAndInterface
             return r;
         }
 
+
+
+        /// \fn protected string Concat(Dictionary<string, string> l)
+        ///
+        /// \brief  Объединяет все непустые (Value) элементы из Dictionary в строку
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \param  l   A Dictionary&lt;string,string&gt; to process.
+        ///
+        /// \returns    A string.
+
         protected string Concat(Dictionary<string, string> l)
         {
             string r = "";
@@ -75,102 +101,7 @@ namespace ModelData.BusinessModel.BaseAndInterface
                     if (s.Value != null && s.Value != "")
                         r += s.Key + " : " + s.Value + "\n";
             return r;
-        }
-
-        /*
-         /// Набор возможных состояний объекта
-         enum States {
-         Disabled, ///< Указывает, что элемент недоступен для использования
-         Undefined, ///< Указывает, что состояние элемента неопределенно
-         Enabled, ///< Указывает, что элемент доступен для использования
-                     }
-         */
-
-        /*
-         
-         \defgroup <идентификатор> (заголовок модуля)
-         \defgroup maze_generation Генерация лабиринтов
-         \brief Данный модуль, предназначен для генерации лабиринтов.
-    
-         На данный момент он поддерживает следующие алгоритмы генерации лабиринтов: Eller's algorithm, randomized Kruskal's algorithm, cellular automaton algorithm, randomized Prim's algorithm.
-        
-         .......
-
-         \ingroup <идентификатор> (заголовок модуля) - это для добавления каждого блока в группу
-
-         .......
-
-         \addtogroup <идентификатор> [(заголовок модуля)]
-         \addtogroup FooGroup 
-         \{ @{
-
-         Summon a goat
-        
-         \param name The name of the goat;
-         \return The summoned goat;
-        
-         Goat summon_goat(const char* name);
-        
-        ...
-        ...
-
-         \} @}
-
-         */
-
-        /*! \defgroup main_module Главный модуль */
-
-        /*! \defgroup second_module Вложенный модуль 
-             \ingroup main_module
-        */
-
-
-        /*
-         \brief Алгоритм Евклида
-         \param a,b Два числа, чей наибольший делитель мы хотим найти
-
-         Данная функция реализует алгоритм Евклида, при помощи которого
-         находится наибольшее общее кратное у двух чисел.
-
-         Код функции выглядит следующим образом:
-         \code
-         int gcd(int a, int b) {
-                int r;
-                while (b) {
-                      r = a % b;
-                      a = b;
-                      b = r;
-                }
-                return r;
-         }
-         \endcode
-
-        int gcd(int a, int b);
-        */
-
-        /*
-         \callgraph
-         \callergraph
-         */
-
-        /*! \file
-        Компоновщик (англ. Composite pattern) — структурный шаблон проектирования, объединяющий объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково. Ниже представлена иллюстрация данного шаблона при помощи UML:
-        \startuml
-            interface Component {
-               +doThis()
-            }
-            class Composite {
-               -elements
-               +addElement()
-               +doThis()
-            }
-            class Leaf {
-               +doThis()
-            }
-            Component <|-- Leaf
-            Component<|-- Composite 
-            Composite  o-- Component 
-        \enduml
-        */
+        }       
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/BaseAndInterface/I_URLcs.cs b/ModelData/BusinessModel/BaseAndInterface/I_URLcs.cs
index f676384..4d28bab 100644
--- a/ModelData/BusinessModel/BaseAndInterface/I_URLcs.cs
+++ b/ModelData/BusinessModel/BaseAndInterface/I_URLcs.cs
@@ -8,10 +8,31 @@ using Tools;
 
 namespace ModelData.BusinessModel.BaseAndInterface
 {
+    /// \interface  I_URLcs
+    ///
+    /// \brief  Отражает сущность с URL и названием.
+    ///
+    /// \author Denis
+    /// \date   30.03.2019
+
     interface I_URLcs
     {
+        /// \property   string Title
+        ///
+        /// \brief  Название сущности
+        /// Установлен атрибут IndexAttrib со значением 1
+        /// \returns    The title.
+
         [IndexAttrib(1)] string Title { get; }
 
+
+
+        /// \property   string URL
+        ///
+        /// \brief  URL сущности
+        /// Установлен атрибут IndexAttrib со значением 0
+        /// \returns    The URL.
+
         [IndexAttrib(0)] string URL { set;  get; }
     }
 }
diff --git a/ModelData/BusinessModel/ExtraEntities/Founder.cs b/ModelData/BusinessModel/ExtraEntities/Founder.cs
index 241aea2..f53aeac 100644
--- a/ModelData/BusinessModel/ExtraEntities/Founder.cs
+++ b/ModelData/BusinessModel/ExtraEntities/Founder.cs
@@ -10,14 +10,57 @@ using Tools;
 
 namespace ModelData.BusinessModel.ExtraEntities
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  Founder
+    ///
+    /// \brief  Отражает сущность основателя поселения Помимо наследуемых свойств, описывает
+    ///         дополнительную информацию об основателе.
+    ///
+    /// \author Denis
+    /// \date   30.03.2019
+
     public class Founder : BaseOntologyEntity
     {
-        [IndexAttrib(2)]
-        public string Name { set; get; }
-        [IndexAttrib(3)]
-        public string FounderRegion { set; get; }
-        [IndexAttrib(4)]
-        public string Nationality { set; get; }
+        /// \property   public string Name
+        ///
+        /// \brief  Имя основателя, если это некоторая историческая личность.
+        /// Установлен атрибут IndexAttrib со значением 2
+        /// \returns    The name.
+
+        [IndexAttrib(2)] public string Name { set; get; }
+
+
+
+        /// \property   public string FounderRegion
+        ///
+        /// \brief  Наименование региона, который является родиной народа- или личности-основателя.
+        /// Установлен атрибут IndexAttrib со значением 3
+        /// \returns    The founder region.
+
+        [IndexAttrib(3)] public string FounderRegion { set; get; }
+
+
+
+        /// \property   public string Nationality
+        ///
+        /// \brief  Национальность народа- или личности-основателя.
+        /// Установлен атрибут IndexAttrib со значением 4
+        /// \returns    The nationality.
+
+        [IndexAttrib(4)] public string Nationality { set; get; }
+
+
+
+        /// \fn public override Dictionary<string, string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
 
         public override Dictionary<string, string> Serialize()
         {
@@ -31,4 +74,7 @@ namespace ModelData.BusinessModel.ExtraEntities
             };
         }
     }
+
+
+    /// @}
 }
diff --git a/ModelData/BusinessModel/ExtraEntities/Region.cs b/ModelData/BusinessModel/ExtraEntities/Region.cs
index 640be97..df2e789 100644
--- a/ModelData/BusinessModel/ExtraEntities/Region.cs
+++ b/ModelData/BusinessModel/ExtraEntities/Region.cs
@@ -10,16 +10,37 @@ using Tools;
 
 namespace ModelData.BusinessModel.ExtraEntities
 {
+    /// \addtogroup Entities
+    /// @{
+
     /// \class  Region
     ///
-    /// \brief  A region.
-    ///
-    /// \author Deniska
-    /// \date   14.03.2019
+    /// \brief  Класс, отражающий сущность административно-территориальной единицы (региона)
+    /// Помимо наследуемых свойств, обладает свойством включения в другой регион.
+    /// \author Denis
+    /// \date   30.03.2019
 
     public class Region : BaseOntologyEntity
     {
+        /// \property   public Region partOfRegion
+        ///
+        /// \brief  Регион, в состав которого входит данная сущность (тоже регион)
+        /// Установлен атрибут IndexAttrib со значением 2
+        /// \returns    The part of region.
+
         [IndexAttrib(2)] public Region partOfRegion { set; get; }
+
+
+
+        /// \fn public override Dictionary<string, string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
         public override Dictionary<string, string> Serialize()
         {
             return new Dictionary<string, string>()
@@ -30,4 +51,5 @@ namespace ModelData.BusinessModel.ExtraEntities
             };
         }
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/ExtraEntities/SettlementType.cs b/ModelData/BusinessModel/ExtraEntities/SettlementType.cs
index c932eb8..753c431 100644
--- a/ModelData/BusinessModel/ExtraEntities/SettlementType.cs
+++ b/ModelData/BusinessModel/ExtraEntities/SettlementType.cs
@@ -9,10 +9,47 @@ using Tools;
 
 namespace ModelData.BusinessModel.ExtraEntities
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  SettlementType
+    ///
+    /// \brief  Отражает сущность типа поселения
+    /// Включает описание типа поселений, например промежуток количества населения для данного типа, и другие названия данного типа.
+    /// \author Denis
+    /// \date   30.03.2019
+
     public class SettlementType:BaseOntologyEntity 
     {
+        /// \property   public string Description
+        ///
+        /// \brief  Описание типа поселения
+        /// Установлен атрибут IndexAttrib со значением 2
+        /// \returns    The description.
+
         [IndexAttrib(2)] public string Description { set; get; }
+
+
+
+        /// \property   public List<string> AlternativeName
+        ///
+        /// \brief  Набор альтернативных названий текущего типа поселения
+        /// Установлен атрибут IndexAttrib со значением 3
+        /// \returns    The name of the alternative.
+
         [IndexAttrib(3)] public List<string> AlternativeName { set; get; }
+
+
+
+        /// \fn public override Dictionary<string,string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
         public override Dictionary<string,string> Serialize()
         {
             return new Dictionary<string, string>()
@@ -24,4 +61,5 @@ namespace ModelData.BusinessModel.ExtraEntities
             };
         }
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/MainEntities/EditedSettlement.cs b/ModelData/BusinessModel/MainEntities/EditedSettlement.cs
index 9bd15f8..488c950 100644
--- a/ModelData/BusinessModel/MainEntities/EditedSettlement.cs
+++ b/ModelData/BusinessModel/MainEntities/EditedSettlement.cs
@@ -12,39 +12,163 @@ using Tools;
 
 namespace ModelData.BusinessModel.MainEntities
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  EditedSettlement
+    ///
+    /// \brief  Описывает сущность измененного поселения
+    /// Измененное поселение содержит дополнительную информацию об основном поселении.
+    /// Обязательными параметрами являются:ссылка на основное поселение; url; точный год, к которому относится информация; источник данных.
+    /// \warning При автоматической сериализации возможна закольцовка, т.к. класс содержит ссылку на основное поселение, а основное поселение содержит ссылки на все измененные, относящиемся к нему.
+    /// \author Denis
+    /// \date   30.03.2019
+
     public class EditedSettlement : BaseOntologyEntity
     {
         #region Обязательные данные
 
-        //  URL
+        /// \property   public Settlement before
+        ///
+        /// \brief  Ссылка на экземпляр основного поселения
+        /// Обязательное свойство. Установлен атрибут IndexAttrib со значением 2
+        /// \returns    The before.
 
         [IndexAttrib(2)] public Settlement before { set; get; }
+
+
+
+        /// \property   public InstantTime hasBeginning
+        ///
+        /// \brief  Точный год, к которому относится информация
+        /// Обязательное свойство. Установлен атрибут IndexAttrib со значением 3
+        /// \returns    The has beginning.
+
         [IndexAttrib(3)] public InstantTime hasBeginning { set; get; }
+
+
+
+        /// \property   public string Source
+        ///
+        /// \brief  Источник данных
+        /// Может содержать URL, ISBN, точное наименование научной работы и т.п.
+        /// Обязательное свойство. Установлен атрибут IndexAttrib со значением 4
+        /// \returns    The source.
+
         [IndexAttrib(4)] public string Source { set; get; }
 
         #endregion
 
         #region Необязательные данные
 
-        //  Title
-        
+        /// \property   public SettlementType Type
+        ///
+        /// \brief  Тип поселения
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 5
+        /// \returns    The type.
+
         [IndexAttrib(5)] public SettlementType Type { set; get; }
+
+
+
+        /// \property   public Region Region
+        ///
+        /// \brief  Регион, в составе которого находится поселение
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 6
+        /// \returns    The region.
+
         [IndexAttrib(6)] public Region Region { set; get; }
+
+
+
+        /// \property   public int? PopulationAll
+        ///
+        /// \brief  Общее количество населения
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 7
+        /// \returns    The population all.
+
         [IndexAttrib(7)] public int? PopulationAll { set; get; }
+
+        /// \property   public int? PopulationMales
+        ///
+        /// \brief  Количество мужского населения
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 8
+        /// \returns    The population males.
+
         [IndexAttrib(8)] public int? PopulationMales { set; get; }
+
+
+
+        /// \property   public int? PopulationFemales
+        ///
+        /// \brief  Количество женского населения
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 9
+        /// \returns    The population females.
+
         [IndexAttrib(9)] public int? PopulationFemales { set; get; }
+
+
+
+        /// \property   public List<string> AlternativeName
+        ///
+        /// \brief  Другие названия поселения
+        /// Количество может быть равно 0 или более
+        /// Установлен атрибут IndexAttrib со значением 10
+        /// \returns    The name of the alternative.
+
         [IndexAttrib(10)] public List<string> AlternativeName { set; get; }
+
+
+
+        /// \property   public Dictionary<string, string> Others
+        ///
+        /// \brief  Dictionary, содержащий разную информацию
+        /// Это свойство-заглушка на тот случай, если нужно быстро добавить какую-то информацию, которая не отражена в других свойствах.
+        /// Такой подход создает довольно гибкую структуру описания имеющейся информации, но затрудняет восприятие того, что действительно необходимо знать о поселении.
+        ///         
+        /// Количество может быть равно 0 или более
+        /// Установлен атрибут IndexAttrib со значением 11
+        /// \warning На данный момент вся требуемая информация отражена в свойствах, поэтому данная коллекция не заполняется и не выводится.
+        /// \date   30.03.2019
+        /// \returns    The others.
+
         [IndexAttrib(11)] public Dictionary<string, string> Others { set; get; }
 
         #endregion
 
         #region Конструктор
 
+        /// \fn protected EditedSettlement()
+        ///
+        /// \brief  Protected конструктор
+        /// Думаю, его нужно создать, мало ли, но фактически он пока не используется
+        /// \author Denis
+        /// \date   30.03.2019
+
         protected EditedSettlement()
         {
             Init();
         }
 
+
+
+        /// \fn public EditedSettlement(string URL, Settlement before, InstantTime hasBeginning, string Source)
+        ///
+        /// \brief  Основной конструктор
+        /// Запрашивает все необходимые параметры, согласно архитектуре онтологии.
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \param  URL             URL измененного поселения.
+        /// \param  before          Ссылка на экземпляр основного поселения.
+        /// \param  hasBeginning    Точный год.
+        /// \param  Source          Источник.
+
         public EditedSettlement(string URL, Settlement before, InstantTime hasBeginning, string Source)
         {
             this.URL = URL;
@@ -55,12 +179,32 @@ namespace ModelData.BusinessModel.MainEntities
             Init();
         }
 
+
+
+        /// \fn protected void Init()
+        ///
+        /// \brief  Инициализация
+        /// Создает новые коллекции для List других имён и Dictionary другой информации
+        /// \author Denis
+        /// \date   30.03.2019
+
         protected void Init()
         {
             AlternativeName = new List<string>();
             Others = new Dictionary<string, string>();
         }
 
+
+
+        /// \fn public override Dictionary<string, string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   30.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
         public override Dictionary<string, string> Serialize()
         {
             return new Dictionary<string, string>()
@@ -78,4 +222,5 @@ namespace ModelData.BusinessModel.MainEntities
 
         #endregion
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/MainEntities/MapPoint.cs b/ModelData/BusinessModel/MainEntities/MapPoint.cs
index 3283a81..3db420f 100644
--- a/ModelData/BusinessModel/MainEntities/MapPoint.cs
+++ b/ModelData/BusinessModel/MainEntities/MapPoint.cs
@@ -9,19 +9,85 @@ using Tools;
 
 namespace ModelData.BusinessModel.MainEntities
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  MapPoint
+    ///
+    /// \brief  Описывает точку на карте
+    /// Класс описывает точку на карте и включает лишь необходимые для этого сведения, том числе и фильтруемую информацию.
+    /// \author Denis
+    /// \date   31.03.2019
+
     public class MapPoint : BaseAndInterface.BaseOntologyEntity
     {
+        /// \property   public string Position
+        ///
+        /// \brief  Строковое представление координат
+        /// Установлен атрибут IndexAttrib со значением 2
+        /// \returns    The position.
+
         [IndexAttrib(2)] public string Position { set; get; }
+
+
+
+        /// \property   public string Population
+        ///
+        /// \brief  Строковое значение количества населения
+        /// Значение обязательно >= 0 - это гарантируется SPARQL запросом.
+        /// В качестве значения выбирается наибольшее среди всех измененных поселений за выбранный промежуток.
+        /// Установлен атрибут IndexAttrib со значением 3.
+        /// \returns    The population.
+
         [IndexAttrib(3)] public string Population { set; get; }
+
+
+
+        /// \property   public List<string> Type
+        ///
+        /// \brief  Список типов, к которым относится поселение
+        /// Заполняется из всех измененных поселений за выбранный промежуток.
+        /// Количество от 0 и больше.
+        /// Установлен атрибут IndexAttrib со значением 4.
+        /// \returns    The type.
+
         [IndexAttrib(4)] public List<string> Type { set; get; }
+
+        /// \property   public List<string> Region
+        ///
+        /// \brief  Список регионов, в составе которых находится поселение
+        /// Заполняется из всех измененных поселений за выбранный промежуток.
+        /// Количество от 0 и больше.
+        /// Установлен атрибут IndexAttrib со значением 5.
+        /// \returns    The region.
+
         [IndexAttrib(5)] public List<string> Region { set; get; }
 
+
+        /// \fn public MapPoint()
+        ///
+        /// \brief  Конструктор
+        /// Создает экземпляры двух используемых списков
+        /// \author Denis
+        /// \date   31.03.2019
+
         public MapPoint()
         {
             Type = new List<string>();
             Region = new List<string>();
         }
 
+
+
+        /// \fn public override Dictionary<string, string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
         public override Dictionary<string, string> Serialize()
         {
             return new Dictionary<string, string>()
@@ -36,4 +102,5 @@ namespace ModelData.BusinessModel.MainEntities
         }
 
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/MainEntities/Settlement.cs b/ModelData/BusinessModel/MainEntities/Settlement.cs
index 772aeb6..7d86935 100644
--- a/ModelData/BusinessModel/MainEntities/Settlement.cs
+++ b/ModelData/BusinessModel/MainEntities/Settlement.cs
@@ -12,13 +12,29 @@ using Tools;
 
 namespace ModelData.BusinessModel.MainEntities
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  Settlement
+    ///
+    /// \brief  Описывает сущность поселения
+    /// Поселение содержит всю известную информацию об одноименной сущности в онтологии
+    /// Все относящиеся к основному поселению сведения содержатся здесь, все прочие - в измененных поселениях
+    /// Основное поселение имеет List измененных поселений для доступа к сведениям о них
+    /// Обязательными параметрами являются: url; отображаемое название; географические координаты.
+    /// \warning При автоматической сериализации возможна закольцовка, т.к. класс содержит ссылки на измененные поселения, а измененные поселения содержат ссылку на основное.
+    /// \author Denis
+    /// \date   31.03.2019
+
     public class Settlement : BaseOntologyEntity
     {
         #region Обязательные данные
 
-        //  URL
-
-        //  Title
+        /// \property   public Coordinate Coordinate
+        ///
+        /// \brief  Координаты поселения
+        /// Обязательное свойство. Установлен атрибут IndexAttrib со значением 2
+        /// \returns    The coordinate.
 
         [IndexAttrib(2)] public Coordinate Coordinate { set; get; }
 
@@ -26,26 +42,96 @@ namespace ModelData.BusinessModel.MainEntities
 
         #region Необязательные данные
 
+        /// \property   public InstantTime hasBeginning
+        ///
+        /// \brief  Год основания поселения
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 3
+        /// \returns    The has beginning.
+
         [IndexAttrib(3)] public InstantTime hasBeginning { set; get; }
+
+
+
+        /// \property   public Founder Founder
+        ///
+        /// \brief  Основатель поселения
+        /// Личность или народ-основатель поселения.
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 4
+        /// \returns    The founder.
+
         [IndexAttrib(4)] public Founder Founder { set; get; }
+
+
+
+        /// \property   public string Legend
+        ///
+        /// \brief  История основания поселения
+        /// Содержит ссылку или текст об основании поселения.       
+        /// Может быть задан или равняться null.
+        /// Установлен атрибут IndexAttrib со значением 5
+        /// \returns    The legend.
+
         [IndexAttrib(5)] public string Legend { set; get; }
+
+
+
+        /// \property   public Dictionary<string, string> Others
+        ///
+        /// \brief  Dictionary, содержащий разную информацию
+        /// Это свойство-заглушка на тот случай, если нужно быстро добавить какую-то информацию, которая не отражена в других свойствах.
+        /// Такой подход создает довольно гибкую структуру описания имеющейся информации, но затрудняет восприятие того, что действительно необходимо знать о поселении.
+        ///
+        /// Количество может быть равно 0 или более
+        /// Установлен атрибут IndexAttrib со значением 6
+        /// \warning На данный момент вся требуемая информация отражена в свойствах, поэтому данная коллекция не заполняется и не выводится.
+        /// \returns    The others.
+
         [IndexAttrib(6)] public Dictionary<string, string> Others { set; get; }
 
         #endregion
 
         #region Служебные данные
 
+        /// \property   public List<EditedSettlement> EditedSettlements
+        ///
+        /// \brief  Список измененных поселений
+        /// Содержит ссылки на экземпляры всех изменных поселений, относящихся к основному.
+        /// Установлен атрибут IndexAttrib со значением 7.
+        /// \returns    The edited settlements.
+
         [IndexAttrib(7)] public List<EditedSettlement> EditedSettlements { set; get; }
 
         #endregion
 
         #region Конструктор
 
+        /// \fn protected Settlement()
+        ///
+        /// \brief  Protected конструктор
+        /// Думаю, его нужно создать, мало ли, но фактически он пока не используется
+        /// \author Denis
+        /// \date   31.03.2019
+
         protected Settlement()
         {
             Init();
         }
 
+
+
+        /// \fn public Settlement(string URL, string Title, Coordinate Coordinate)
+        ///
+        /// \brief  Основной конструктор
+        /// Запрашивает все необходимые параметры, согласно архитектуре онтологии.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  URL         URL.
+        /// \param  Title       Отображаемое название.
+        /// \param  Coordinate  Координаты.
+
         public Settlement(string URL, string Title, Coordinate Coordinate)
         {
             this.URL = URL;
@@ -55,12 +141,32 @@ namespace ModelData.BusinessModel.MainEntities
             Init();
         }
 
+
+
+        /// \fn protected void Init()
+        ///
+        /// \brief  Инициализация
+        /// Создает новые коллекции для List измененных поселений и Dictionary другой информации
+        /// \author Denis
+        /// \date   31.03.2019
+
         protected void Init()
         {
             Others = new Dictionary<string, string>();
             EditedSettlements = new List<EditedSettlement>();
         }
 
+
+
+        /// \fn public override Dictionary<string, string> Serialize()
+        ///
+        /// \brief  Метод записи данных о сущности в Dictionary.
+        ///
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    A Dictionary&lt;string,string&gt;
+
         public override Dictionary<string, string> Serialize()
         {
             List<string> edited = new List<string>();
@@ -80,4 +186,5 @@ namespace ModelData.BusinessModel.MainEntities
 
         #endregion       
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/RDF/Queries.cs b/ModelData/BusinessModel/RDF/Queries.cs
index d6c700b..f8ae1b8 100644
--- a/ModelData/BusinessModel/RDF/Queries.cs
+++ b/ModelData/BusinessModel/RDF/Queries.cs
@@ -6,11 +6,22 @@ using System.Threading.Tasks;
 
 namespace ModelData.BusinessModel.RDF
 {
-    public static class Queries
+    /// \addtogroup RDF
+    /// @{
+
+    /// \class  Queries
+    ///
+    /// \brief  Класс, содержащий текст запросов
+    /// Методы класса возвращают строку с запросом, при необходимости подставляют параметры
+    /// \author Denis
+    /// \date   31.03.2019
+
+    public class Queries
     {
         #region Prefixes
 
-        private static readonly Dictionary<string, string> Prefixes = new Dictionary<string, string>
+        /// \brief  Доступное для чтения поле, содержащее краткий префикс (Key) и полное значение (Value) используемого ресурса                
+        public static readonly Dictionary<string, string> Prefixes = new Dictionary<string, string>
         {
             ["rdf"] = "<http://www.w3.org/1999/02/22-rdf-syntax-ns#>",
             ["rdfs"] = "<http://www.w3.org/2000/01/rdf-schema#>",
@@ -21,17 +32,66 @@ namespace ModelData.BusinessModel.RDF
             ["time"] = "<https://www.w3.org/2006/time#>",
             ["map"] = "<http://jena.denhome.keenetic.link/map#>",
             ["foaf"] = "<http://xmlns.com/foaf/0.1/>"
-        };               
+        };
 
         #endregion
 
         #region Queries
 
+        /// \fn public static string AllSettlementsInInterval(string from, string to)
+        ///
+        /// \brief  Выполняет поиск поселений и изменных поселений в определенном временном интервале.
+        /// \code
+        ///SELECT DISTINCT (?settlement as ?url) ?title ?lat ?long ?settlementType ?typeName ?region ?regionName (?maxc as ?maxPop)
+        ///WHERE
+        ///{
+        ///	    ?settlement a map:Settlement;
+        ///	    			geonames:name ?title;
+        ///	    			geo:lat ?lat; 
+        ///	    			geo:long ?long.
+        ///	    OPTIONAL {?settlement time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear}
+        ///	    FILTER (!bound(?wasFound) || ?wasFoundYear >= "from"^^xsd:gYear )
+        ///	    {
+        ///	    	SELECT ?settlement (MAX(?populationNotNULL) AS ?maxc)
+        ///	    	WHERE 
+        ///	    	{ 
+        ///	    		?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?date.
+        ///	    		?date time:year ?year.
+        ///	    		FILTER  (?year >= "from"^^xsd:gYear  && ?year <= "to"^^xsd:gYear )
+        ///	    		OPTIONAL {?editedSettlement geonames:population ?population.}
+        ///	    		OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        ///	    
+        ///	    		## заполни переменную ?populationNotNULL так: если ?population НЕ задан (т.е. NULL), тогда 0, иначе (т.е. задан) ?population
+        ///	    		BIND (IF (!BOUND(?population), "0"^^xsd:integer, ?population) as ?populationNotNULL)
+        ///	    	}
+        ///	    	Group by ?settlement
+        ///	    }
+        ///	    {
+        ///	    	SELECT ?settlement ?settlementType ?typeName ?region ?regionName
+        ///	    	WHERE 
+        ///	    	{ 
+        ///	    		?editedSettlement a map:EditedSettlement; time:before ?settlement; time:hasBeginning ?date.
+        ///	    		?date time:year ?year.
+        ///	    		FILTER  (?year >= "from"^^xsd:gYear  && ?year <= "to"^^xsd:gYear )
+        ///	    		OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        ///	    		OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
+        ///	    	}
+        ///	    }
+        ///}
+        /// \endcode
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  from    С какого года выполнять поиск.
+        /// \param  to      По какой год выполнять поиск.
+        ///
+        /// \returns    A string.
+
         public static string AllSettlementsInInterval(string from, string to)
         {
             return GetAllPrefixes() +
 @"
-SELECT DISTINCT (?settlement as ?url) ?title ?lat ?long ?settlementType ?typeName ?region ?regionName (?maxc as ?maxPop)
+  SELECT DISTINCT (?settlement as ?url) ?title ?lat ?long ?settlementType ?typeName ?region ?regionName (?maxc as ?maxPop)
 WHERE
   {
     ?settlement a map:Settlement;
@@ -69,6 +129,59 @@ WHERE
 ";
         }
 
+
+
+        /// \fn public static string InfoAboutSettlement(string URL)
+        ///
+        /// \brief  Полная информация о поселении
+        /// \code       
+        ///SELECT DISTINCT ?title ?lat ?long ?wasFoundYear ?legend ?founder ?person ?foundersRegion ?editedSettlement ?source ?year ?settlementType ?typeName ?region ?regionName ?editedName ?alternateName ?population ?populationFemales ?populationMales
+        ///WHERE
+        ///{
+        ///		{ 
+        ///			SELECT * WHERE
+        ///			{
+        ///				url_ geonames:name ?title;
+        ///						  geo:lat ?lat; geo:long ?long.
+        ///		
+        ///				OPTIONAL {url_ time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear}
+        ///				OPTIONAL {url_ map:legend ?legend.}
+        ///				OPTIONAL 
+        ///				{
+        ///					url_ map:founder ?founder. 
+        ///					OPTIONAL {?founder foaf:Person ?person}
+        ///					OPTIONAL {?founder map:foundersRegion ?foundersRegion}
+        ///				}
+        ///			}
+        ///		}	
+        ///		UNION
+        ///		{
+        ///			SELECT * WHERE 
+        ///			{ 
+        ///				?editedSettlement a map:EditedSettlement; 
+        ///								time:before url_; 
+        ///								map:source ?source; 
+        ///								time:hasBeginning ?date.
+        ///				?date time:year ?year.
+        ///				OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        ///				OPTIONAL {?editedSettlement rdfs:partOf ?region. ?region geonames:name ?regionName}
+        ///				OPTIONAL {?editedSettlement geonames:name ?editedName.}
+        ///				OPTIONAL {?editedSettlement geonames:alternateName ?alternateName.}
+        ///				OPTIONAL {?editedSettlement geonames:population ?population.}
+        ///				OPTIONAL {?editedSettlement map:populationFemalesCount ?populationFemales.}
+        ///				OPTIONAL {?editedSettlement map:populationMalesCount ?populationMales.}
+        ///				OPTIONAL {?editedSettlement map:settlementType ?settlementType. ?settlementType geonames:name ?typeName}
+        ///			}
+        ///		}
+        ///}
+        /// \endcode
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  URL URL искомого поселения.
+        ///
+        /// \returns    A string.
+
         public static string InfoAboutSettlement(string URL)
         {
             string url_ = GetObjFromURL(URL);
@@ -115,26 +228,52 @@ WHERE
 }";
         }
 
-        public static string AllSettlementsName(string subName)
-        {
-            return GetPrefix("map") + GetPrefix("geonames") +
-@"
-select distinct ?name
-where
-{
-  ?settlement a map:Settlement; geonames:name ?name.
-  FILTER regex(?name, " + '"' + subName + "\", \"i\"" + @")
-}
-";
-        }
+
+
+        /// \fn public static string Years()
+        ///
+        /// \brief  Запрос наименьшего и наибольшего упоминаего годов
+        /// \code       
+        ///SELECT ?min ?max
+        ///WHERE
+        ///{
+        ///		{
+        ///			SELECT (MIN(?year) AS ?minEditedYear) (MAX(?year) AS ?maxEditedYear)
+        ///			WHERE 
+        ///			{ 
+        ///			  ?editedSettlement a map:EditedSettlement; time:hasBeginning ?date.
+        ///			  ?date time:year ?year.  	  
+        ///			}        
+        ///		}
+        ///		{
+        ///			SELECT (MIN(?minIndSetYear) AS ?minSetYear) (MAX(?maxIndSetYear) AS ?maxSetYear)
+        ///			WHERE 
+        ///			{ 
+        ///			  ?settlement a map:Settlement.
+        ///			  OPTIONAL {?settlement time:hasBeginning ?wasFound. ?wasFound time:year ?wasFoundYear} 
+        ///		 
+        ///			  ## костыль
+        ///		  	  ## если поля не существовали, MIN возвращал 1 вместо NULL, поэтому нарочно кастую к невозможным значениям, чтобы потом сравнить с существующими (см. другие два BIND) 
+        ///			  BIND (IF (!BOUND(?wasFound), "3000"^^xsd:gYear, ?wasFoundYear) as ?minIndSetYear)
+        ///			  BIND (IF (!BOUND(?wasFound), "-3000"^^xsd:gYear, ?wasFoundYear) as ?maxIndSetYear)
+        ///			}
+        ///		}
+        ///		## выбрать наименьшую упоминаемую дату среди *наименьшей даты основания* и *наименьшей даты изменения*
+        ///		BIND (IF (?minSetYear < ?minEditedYear, ?minSetYear, ?minEditedYear) as ?min)
+        ///		BIND (IF (?maxSetYear > ?maxEditedYear, ?maxSetYear, ?maxEditedYear) as ?max)
+        ///}
+        /// \endcode
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    A string.
 
         public static string Years()
         {
             return GetAllPrefixes() +
-@"
-SELECT ?min ?max
+@"SELECT ?min ?max
 WHERE
-  {
+{
     {
         SELECT (MIN(?year) AS ?minEditedYear) (MAX(?year) AS ?maxEditedYear)
         WHERE 
@@ -156,10 +295,43 @@ WHERE
 		  BIND (IF (!BOUND(?wasFound), " + "\"-3000\"" + @"^^xsd:gYear, ?wasFoundYear) as ?maxIndSetYear)
         }
 	}
-  ## выбрать наименьшую упоминаемую дату среди *наименьшей даты основания* и *наименьшей даты изменения*
+    ## выбрать наименьшую упоминаемую дату среди *наименьшей даты основания* и *наименьшей даты изменения*
     BIND (IF (?minSetYear < ?minEditedYear, ?minSetYear, ?minEditedYear) as ?min)
 	BIND (IF (?maxSetYear > ?maxEditedYear, ?maxSetYear, ?maxEditedYear) as ?max)
-  }
+}
+";// @;
+        }
+
+
+
+        /// \fn public static string AllSettlementsName(string subName)
+        ///
+        /// \brief  Поиск всех поселений, чьи названия включают переданную подстроку
+        /// \code       
+        ///select distinct ?name
+        ///where
+        ///{
+        ///  ?settlement a map:Settlement; geonames:name ?name.
+        ///  FILTER regex(?name, "subName", "i")
+        ///}
+        /// \endcode
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  subName Подстрока для поиска.
+        ///
+        /// \returns    A string.
+
+        public static string AllSettlementsName(string subName)
+        {
+            return GetPrefix("map") + GetPrefix("geonames") +
+@"
+select distinct ?name
+where
+{
+  ?settlement a map:Settlement; geonames:name ?name.
+  FILTER regex(?name, " + '"' + subName + "\", \"i\"" + @")
+}
 ";
         }
 
@@ -167,6 +339,19 @@ WHERE
 
         #region Tools
 
+        /// \fn private static string GetObjFromURL(string URL)
+        ///
+        /// \brief  Получение URL, отделенного от префикса
+        /// Выполняет отделение значимой части полного URL от постоянного префикса
+        /// Например, полный URL: "http://jena.denhome.keenetic.link/map#Saratov_btjzkyfa_origin", где "http://jena.denhome.keenetic.link/map#" - префикс, а "Saratov_btjzkyfa_origin" - значимая часть.
+        /// \warning Если префикса нет в списке всех префиксов, отделить части не получится и будет возвращен переданный полный URL.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  URL Полный URL сущности.
+        ///
+        /// \returns    The object from URL.
+
         private static string GetObjFromURL(string URL)
         {
             string[] input = URL.Split('#');
@@ -180,11 +365,35 @@ WHERE
             return (url_ != "") ? url_ : URL;
         }
 
+
+
+        /// \fn private static string GetPrefix(string key)
+        ///
+        /// \brief  Составляет строку из префикса и его значения
+        ///
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  key Ключ - краткое наименование префикса.
+        ///
+        /// \returns    The prefix.
+
         private static string GetPrefix(string key)
         {
             return "PREFIX " + key + ": " + Prefixes[key] + " ";
         }
 
+
+
+        /// \fn private static string GetAllPrefixes()
+        ///
+        /// \brief  Составляет строку из всех префиксов
+        ///
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    all prefixes.
+
         private static string GetAllPrefixes()
         {
             string t = "";
@@ -198,6 +407,7 @@ WHERE
         #endregion
     }
 
+    /// @}
 }
 
 /*
diff --git a/ModelData/BusinessModel/RDF/RDFQuery.cs b/ModelData/BusinessModel/RDF/RDFQuery.cs
index 827c666..42ea13e 100644
--- a/ModelData/BusinessModel/RDF/RDFQuery.cs
+++ b/ModelData/BusinessModel/RDF/RDFQuery.cs
@@ -12,16 +12,51 @@ using Tools.Config;
 
 namespace ModelData.BusinessModel.RDF
 {
+    /*!
+            \defgroup RDF Обращение к онтологии
+            \brief Группа классов, работающих непосредственно с точками доступа и онтологией.
+
+            Содержит класс для отправки запроса/получения ответа и статичный класс со всеми возможными запросами. 
+            @{
+        */
+
+    /// \class  RDFQuery
+    ///
+    /// \brief  Выполняет отправку запроса и получение результата.
+    ///
+    /// \author Denis
+    /// \date   31.03.2019
+
     public class RDFQuery
     {     
-        public enum QueryType { Years, AllSettlements, SettlementInfo, SubName };
+        /// \enum   QueryType
+        ///
+        /// \brief  Тип запроса, который будет использован
+        /// В зависимости от типа запроса выбирается текст запроса, используемые параметры и точка обращения.
+
+        public enum QueryType
+        {
+            Years,              ///< Запрос максимального и минимального годов. Параметры не требуются. Вернет одну строку.
+            AllSettlements,     ///< Запрос всех поселений. Нужен для создания точек карты. Два параметра: требуемые года. Вернет большой список.
+            SettlementInfo,     ///< Запрос все информации об одном поселении. Один параметр: URL поселения. Вернет список, где одна строка про поселение и все остальные строки про измененные поселения.
+            SubName             ///< Запрос всех имен поселений, часть названия которых совпадает с параметром. Один параметр: подстрока для поиска. Вернет большой список.
+        };
+
+        /// \fn public static List<SparqlResult> GetData(QueryType queryType, string[] args = null)
+        ///
+        /// \brief  Получить результат запроса
+        /// Общий метод отправки запроса к точке доступа. Запрос и его параметры регулируются параметрами метода.
+        /// Точка доступа регулируется типом запроса.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \exception  Exception "не подходящий тип запроса".
+        ///
+        /// \param  queryType   Тип запроса.
+        /// \param  args        (необязательный) Массив строк, используемый в качестве параметров запросов.
+        ///
+        /// \returns    The data.
 
-        /// <summary>
-        /// Получить результат запроса к SPARQL точке.
-        /// </summary>
-        /// <param name="queryType">Тип запроса. Обязателен</param>
-        /// <param name="args">Параметры запроса. В зависимости от типа запроса обязателен или нет</param>
-        /// <returns></returns>
         public static List<SparqlResult> GetData(QueryType queryType, string[] args = null)
         {
             string exQuery;
@@ -67,4 +102,5 @@ namespace ModelData.BusinessModel.RDF
             return results.Results;
         }
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/Tools/Coordinate.cs b/ModelData/BusinessModel/Tools/Coordinate.cs
index d5b7a23..a77e442 100644
--- a/ModelData/BusinessModel/Tools/Coordinate.cs
+++ b/ModelData/BusinessModel/Tools/Coordinate.cs
@@ -7,42 +7,115 @@ using System.ComponentModel;
 
 namespace ModelData.BusinessModel.Tools
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  Coordinate
+    ///
+    /// \brief  Сущность географических координат
+    ///
+    /// \author Denis
+    /// \date   31.03.2019
+
     public class Coordinate
     {
-        [DisplayName("Ширина")]
-        public double Lat { set; get; }
+        /// \property   public double Lat
+        ///
+        /// \brief  Географическая широта
+        ///
+        /// \returns    The lat.
+
+        [DisplayName("Широта")] public double Lat { set; get; }
+
+
+
+        /// \property   public double Long
+        ///
+        /// \brief  Географическая долгота
+        ///
+        /// \returns    The long.
 
-        [DisplayName("Долгота")]
-        public double Long { set; get; }
+        [DisplayName("Долгота")] public double Long { set; get; }
 
 
+
+        /// \fn public Coordinate()
+        ///
+        /// \brief  Стандартный конструктор
+        /// Значения заполняются 0.
+        /// \author Denis
+        /// \date   31.03.2019
+
         public Coordinate()
         {
             Lat = 0;
             Long = 0;
         }
+
+
+
+        /// \fn public Coordinate(VDS.RDF.INode long_, VDS.RDF.INode lat_)
+        ///
+        /// \brief  Конструктор на основе полученного из онтологии значения
+        /// В качестве параметров передаются два "узла", которые являются результатом запроса из онтологии
+        /// \warning Мои запросы ! требуют наличия координат, поэтому передаваемые значения никогда не будут null. Поэтому данная проверка не используется.
+        /// \warning Нет проверки на правильность полученного значения, т.к. на данный момент онтология заполнялась вручную и все данные были верные.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  long_   Результат запроса из онтологии "долгота".
+        /// \param  lat_    Результат запроса из онтологии "широта".
+
         public Coordinate(VDS.RDF.INode long_, VDS.RDF.INode lat_)
         {
             this.Lat = double.Parse(long_.ToString().Split('^')[0].Replace('.', ','));
             this.Long = double.Parse(lat_.ToString().Split('^')[0].Replace('.', ','));
         }
+
+
+
+        /// \fn public Coordinate(double x, double y)
+        ///
+        /// \brief  Конструктор на основе double значения
+        ///
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  x   Координата широты.
+        /// \param  y   Координата долготы.
+
         public Coordinate(double x, double y)
         {
             this.Lat = x;
             this.Long = y;
         }
+
+
+
+        /// \fn public Coordinate(Coordinate origin)
+        ///
+        /// \brief  Конструктор копирования
+        ///
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  origin  The origin.
+
         public Coordinate(Coordinate origin)
         {
             Lat = origin.Lat;
             Long = origin.Long;
         }
 
+        /// \fn public override string ToString()
+        ///
+        /// \brief  Возвращает строку, представляющую текущий объект.
+        /// Будучи базовой сущностью (не унаследованной от BaseOntologyEntity) требует преобразования в строку.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    Строка, представляющая текущий объект.
 
-        public static bool TryParse(string src, out Coordinate val)
-        {
-            val = new Coordinate();
-            return true;
-        }
         public override string ToString()
         {
             return Lat + " " + Long;
@@ -50,4 +123,5 @@ namespace ModelData.BusinessModel.Tools
 
 
     }
+    /// @}
 }
\ No newline at end of file
diff --git a/ModelData/BusinessModel/Tools/InstantTime.cs b/ModelData/BusinessModel/Tools/InstantTime.cs
index 2989e9b..356a882 100644
--- a/ModelData/BusinessModel/Tools/InstantTime.cs
+++ b/ModelData/BusinessModel/Tools/InstantTime.cs
@@ -6,20 +6,73 @@ using System.Threading.Tasks;
 
 namespace ModelData.BusinessModel.Tools
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  InstantTime
+    ///
+    /// \brief  Сущность точного года
+    /// Используется в качестве минимальной временной единицы согласно онтологической модели.
+    /// \warning Кажется тут я накосячил с тем, что нельзя присвоить год вручную.
+    /// \todo Сделать set value, где вызывается Init(int?).
+    /// \author Denis
+    /// \date   31.03.2019
+
     public class InstantTime
     {
+
+        /// \brief  Скрытое поле, содержащее год
         private int? year;
 
+        /// \property   public int? Year
+        ///
+        /// \brief  Получить значение года
+        ///
+        /// \returns    The year.
+
         public int? Year
         {
             get { return year; }
         }
 
+
+
+        /// \fn public InstantTime()
+        ///
+        /// \brief  Стандартный конструктор
+        /// Год принимает значение null. Требуется присвоить значение       
+        /// \author Denis
+        /// \date   31.03.2019
+
         public InstantTime() { }
+
+
+
+        /// \fn public InstantTime(int? year)
+        ///
+        /// \brief  Конструктор на основе целочисленного года
+        /// Вызов метода Init(int?)
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  year    The year.
+
         public InstantTime(int? year)
         {
             Init(year);
         }
+
+
+
+        /// \fn public InstantTime(string year)
+        ///
+        /// \brief  Конструктор на основе строкового года
+        /// Вызов метода Init(string)
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  year    The year.
+
         public InstantTime(string year)
         {
             if (year == null)
@@ -31,6 +84,19 @@ namespace ModelData.BusinessModel.Tools
             Init(year);
         }
 
+
+
+        /// \fn private void Init(int? year)
+        ///
+        /// \brief  Присваивает значение закрытому полю
+        /// Если переданное значение = null, значение поля становится null
+        /// Иначе проверяется значение: год не может быть меньше 2000 до н.э. и больше текущего года.
+        /// Если проверка не пройдена, году устанавливается значение текущего года.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  year    The year.
+
         private void Init(int? year)
         {
             if (year.HasValue)
@@ -38,14 +104,38 @@ namespace ModelData.BusinessModel.Tools
             else
                 this.year = null;
         }
+
+
+
+        /// \fn private void Init(string year)
+        ///
+        /// \brief  Присваивает значение закрытому полю
+        /// Преобразует строковое значение в целочисленное и вызывает метод Init(int?)
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \param  year    The year.
+
         private void Init(string year)
         {
             this.Init(int.Parse(year));
         }
 
+
+
+        /// \fn public override string ToString()
+        ///
+        /// \brief  Возвращает строку, представляющую текущий объект.
+        /// Будучи базовой сущностью (не унаследованной от BaseOntologyEntity) требует преобразования в строку.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    Строка, представляющая текущий объект.
+
         public override string ToString()
         {
             return Year.ToString();
         }
     }
+    /// @}
 }
diff --git a/ModelData/BusinessModel/Tools/Period.cs b/ModelData/BusinessModel/Tools/Period.cs
index 9deaeba..bec8b13 100644
--- a/ModelData/BusinessModel/Tools/Period.cs
+++ b/ModelData/BusinessModel/Tools/Period.cs
@@ -6,14 +6,51 @@ using System.Threading.Tasks;
 
 namespace ModelData.BusinessModel.Tools
 {
+    /// \addtogroup Entities
+    /// @{
+
+    /// \class  Period
+    ///
+    /// \brief  Сущность временного периода
+    /// Изначально был запланирован согласно онтологической модели.
+    /// Пока не используется.
+    /// \author Denis
+    /// \date   31.03.2019
+
     public class Period
     {
+        /// \property   public InstantTime Begin
+        ///
+        /// \brief  Точный год начала периода
+        ///
+        /// \returns    The begin.
+
         public InstantTime Begin { set; get; }
+
+
+
+        /// \property   public InstantTime End
+        ///
+        /// \brief  Точный год окончания периода
+        ///
+        /// \returns    The end.
+
         public InstantTime End { set; get; }
 
+        /// \fn public override string ToString()
+        ///
+        /// \brief  Возвращает строку, представляющую текущий объект.
+        /// Будучи базовой сущностью (не унаследованной от BaseOntologyEntity) требует преобразования в строку.
+        /// \author Denis
+        /// \date   31.03.2019
+        ///
+        /// \returns    Строка, представляющая текущий объект.
+
         public override string ToString()
         {
             return Begin + " : " + End;
         }
     }
+
+    /// @}
 }
diff --git a/Tools/Main/Extensions.cs b/Tools/Main/Extensions.cs
new file mode 100644
index 0000000..fb4b272
--- /dev/null
+++ b/Tools/Main/Extensions.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Reflection;
+
+namespace Tools
+{
+    public static class Extensions
+    {
+        private class Enumrable
+        {
+            private object Collection;
+            private object Enumerator;
+
+            private PropertyInfo Property_Current;
+            private MethodInfo Method_MoveNext;
+
+            public Enumrable(object enum_obj)
+            {
+
+                Collection = enum_obj;
+                Type collection_type = Collection.GetType();
+
+                try
+                {
+                    Enumerator = collection_type.GetMethod("GetEnumerator").Invoke(Collection, null);
+
+                    Type enumerator_type = Enumerator.GetType();
+
+                    Property_Current = enumerator_type.GetProperty("Current");
+                    Method_MoveNext = enumerator_type.GetMethod("MoveNext");
+                }
+                catch
+                {
+                    throw new Exception(string.Format("{0} doesn't IEnumerable", enum_obj));
+                }
+            }
+
+            public object Current
+            {
+                get
+                {
+                    return Property_Current.GetValue(Enumerator);
+                }
+            }
+            public bool MoveNext()
+            {
+                return (bool)Method_MoveNext.Invoke(Enumerator, null);
+            }
+        }
+
+        public static object[] EnumerableToObj(this object o)
+        {
+            List<object> res = new List<object>();
+
+            Enumrable enumrable = new Enumrable(o);
+
+            while (enumrable.MoveNext())
+            {
+                res.Add(enumrable.Current);
+            }
+
+            return res.ToArray();
+        }
+
+        public static List<KeyValuePair<object, object>> DictionaryToObj(this object o)
+        {
+            if (
+                !o.GetType().IsGenericType
+                || o.GetType().GetGenericTypeDefinition() != typeof(Dictionary<,>)
+                )
+                throw new Exception(string.Format("object {0} has type {1}. isn't Dictionary", o, o.GetType()));
+
+            List <KeyValuePair <object, object>> res = new List<KeyValuePair<object, object>>();
+
+            var ObjectArray = EnumerableToObj(o);
+
+            if (ObjectArray.Length == 0)
+                return res;
+
+            Type ElemType = ObjectArray.FirstOrDefault().GetType();
+
+            var PropertyKey = ElemType.GetProperty("Key");
+            var PropertyValue = ElemType.GetProperty("Value");
+
+            res.Capacity = ObjectArray.Length;
+
+            for (int i = 0; i < ObjectArray.Length; i++)
+            {
+                res.Add(new KeyValuePair<object, object>(PropertyKey.GetValue(ObjectArray[i]), PropertyValue.GetValue(ObjectArray[i])));
+            }
+
+            return res;
+        }
+
+        public static Dictionary<object, object> objToDictionary(this object o)
+        {
+            if (
+                !o.GetType().IsGenericType
+                || o.GetType().GetGenericTypeDefinition() != typeof(Dictionary<,>)
+                )
+                throw new Exception(string.Format("object {0} has type {1}. isn't Dictionary", o, o.GetType()));
+
+            Dictionary<object, object> res = new Dictionary<object, object>();
+
+            System.Collections.IDictionary t = (System.Collections.IDictionary)o;
+            foreach (var u in t.Keys)
+                res.Add(u, t[u]);            
+
+            return res;
+        }
+    }
+}
diff --git a/Tools/Main/SerializeService.cs b/Tools/Main/SerializeService.cs
index c300e83..907ee2e 100644
--- a/Tools/Main/SerializeService.cs
+++ b/Tools/Main/SerializeService.cs
@@ -9,19 +9,25 @@ namespace Tools
 {
     public class SerializeService
     {
+        private class Pairs<TKey, TValue>
+        {
+            public TKey Key { set; get; }
+            public TValue Value { set; get; }
+        }
+
         List<object> used = new List<object>();
         public SerializeService()
         {
             used = new List<object>();
         }       
 
-        public void RecursiveSerialize(object obj, Type _base, System.IO.Stream stream, string prefix = "")
+        public void RecursiveSerialize(object obj, Type _base, System.IO.MemoryStream memoryStream, string prefix = "")
         {
             if (used.Contains(obj))
                 return;
             used.Add(obj);
             string str;
-            System.IO.StreamWriter file = new System.IO.StreamWriter(stream);
+            System.IO.StreamWriter file = new System.IO.StreamWriter(memoryStream);
             var allPropertiesOfObj = obj.GetType().GetProperties().OrderBy(e => (e.GetCustomAttributes(typeof(IndexAttrib), true).FirstOrDefault() as IndexAttrib).Index);
 
             foreach (var singleProperty in allPropertiesOfObj)
@@ -30,7 +36,7 @@ namespace Tools
 
                 if (type.IsSubclassOf(_base) && singleProperty.GetValue(obj) != null)
                 {
-                    RecursiveSerialize(singleProperty.GetValue(obj), _base, stream, prefix + "\t\t");
+                    RecursiveSerialize(singleProperty.GetValue(obj), _base, memoryStream, prefix + "\t\t");
                     continue;
                 }
 
@@ -43,7 +49,7 @@ namespace Tools
                     if (singleProperty.GetValue(obj) is IEnumerable<object> t)
                         foreach (var u in t)
                         {
-                            RecursiveSerialize(u, _base, stream, prefix + "\t\t");
+                            RecursiveSerialize(u, _base, memoryStream, prefix + "\t\t");
                         }
 
                     continue;
@@ -52,26 +58,25 @@ namespace Tools
                 if (
                    type.IsGenericType
                    && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)
-                   && typeof(string).Equals(type.GetGenericArguments()[0])
-                   && typeof(string).Equals(type.GetGenericArguments()[1])
+                   //&& typeof(string).Equals(type.GetGenericArguments()[0])
+                   //&& typeof(string).Equals(type.GetGenericArguments()[1])
                    )
-                {                  
-                    if (
-                        typeof(string).Equals(type.GetGenericArguments()[0])
-                        && typeof(string).Equals(type.GetGenericArguments()[1])
-                        )
+                {
+                    System.Collections.IDictionary t = (System.Collections.IDictionary)singleProperty.GetValue(obj);
+                    foreach (var u in t.Keys)
                     {
-                        var t = singleProperty.GetValue(obj) as Dictionary<string, string>;
-                        foreach (var u in t)
-                        {
-                            file.WriteLine(u.Key + " : " + u.Value);
-                        }
-                        continue;
+                        file.WriteLine(u + " : " + t[u]);
                     }
+                    file.Flush();
+                    continue;
+                    
                 }
                 str = singleProperty.GetValue(obj)?.ToString();
                 if (str != null && str != "")
+                {
                     file.WriteLine(prefix + "{0} : {1}", singleProperty.Name, str);
+                    file.Flush();
+                }
 
                 /*
                 var obj = properties_sort[0].GetValue(a);
@@ -91,19 +96,20 @@ namespace Tools
            
         }
 
-        public static void Serialize(I_MySerializable obj, System.IO.Stream stream)
+        public static void Serialize(I_MySerializable obj, System.IO.MemoryStream memoryStream)
         {
-            System.IO.StreamWriter file = new System.IO.StreamWriter(stream);
+            System.IO.StreamWriter file = new System.IO.StreamWriter(memoryStream);
             var serialize = obj.Serialize();
             foreach (var elem in serialize)
                 if (elem.Value != null && elem.Value != "")
                     file.WriteLine(elem.Key + " : " + elem.Value);
+            file.Flush();
         }
 
-        public static void Serialize(List<I_MySerializable> info, System.IO.Stream stream)
+        public static void Serialize(List<I_MySerializable> info, System.IO.MemoryStream memoryStream)
         {
             foreach (var elem in info)
-                Serialize(elem, stream);
+                Serialize(elem, memoryStream);
         }       
     }
 }
diff --git a/Tools/Tools.csproj b/Tools/Tools.csproj
index eadc274..9dca9fe 100644
--- a/Tools/Tools.csproj
+++ b/Tools/Tools.csproj
@@ -70,6 +70,7 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Main\Extensions.cs" />
     <Compile Include="Main\IndexAttribute.cs" />
     <Compile Include="Config\ConfigManager.cs" />
     <Compile Include="Interfaces\I_MySerializable.cs" />
diff --git a/web-map/Controllers/HomeController.cs b/web-map/Controllers/HomeController.cs
index 51c919a..f9e7cf0 100644
--- a/web-map/Controllers/HomeController.cs
+++ b/web-map/Controllers/HomeController.cs
@@ -10,8 +10,8 @@ namespace web_map.Controllers
 {
     public class HomeController : Controller
     {
-        SerialazService serialazService = 
-            new SerialazService();
+        //SerialazService serialazService = 
+        //    new SerialazService();
 
         public ActionResult Index()
         {
@@ -35,12 +35,12 @@ namespace web_map.Controllers
         }
 
 
-        public FileStreamResult GetFile(string URL)
-        {
-            var stream = serialazService.EntitysToDocx(new object[3]);
+        //public FileStreamResult GetFile(string URL)
+        //{
+        //    var stream = serialazService.EntitysToDocx(new object[3]);
 
-            return File(stream, "docx", URL+".docx");
-        }
+        //    return File(stream, "docx", URL+".docx");
+        //}
 
     }
 }
\ No newline at end of file