Собираем
информацию
по крупицам
Проекты / Код

MyTetra

Формат хранения данных в MyTetra
18-12-2011
06:46:51

Здесь описывается структура файлов, с которой работает MyTetra. При разработке MyTetra используется два понятия:

 

  • Рабочая директория
  • Директория хранения данных

 

Рабоча директория служит для хранения файлов с конфигами программы. Директория хранения данных используется для создания в ней необходимых файлов и подкаталогов, в которых хранится база пользовательских данных.

 

Директория хранения данных может быть создана как поддиректория в рабочей директории. А может находиться в любом другом месте диска.

 

 

Данные в рабочей директории

 

MyTetra способна работать в режиме установленной программы, и в режиме переносимого приложения. Для того, чтобы обеспечить такую работу, MyTetra последовательно ищет основной файл конфигурации conf.ini в следующих директориях:

  • Сначала просматривается директория, в которой запущен бинарник программы;
  • Затем просматривается директория ~/.mytetra;
  • Затем просматривается директория ~/.config/mytetra.

Как только файл conf.ini найден, директория с эти файлом объявляется рабочей директорией. Рабочую директорию не следует путать с директорией хранения данных - это разные вещи (см. далее).

 

Если файл conf.ini нигде не обнаружен, например при первом старте программы, MyTetra выведет диалог настройки. В нем нужно указать, в каком режиме следует использовать MyTetra. В режиме Standart MyTetra создаст каталог ~/.config/mytetra, и разместит в нем все нужные для работы файлы и подкаталоги. В режиме Portable MyTetra создаст нужные файлы и подкаталоги в текущей директории запуска.

 

В рабочей директории могут находиться следующие файлы и каталоги:

  • data (директория хранения данных)
  • trash (директория корзины)
  • conf.ini (файл настроек MyTetra)
  • editorconf.ini (файл настроек встроенного редактора WyEdit)

В conf.ini прописаны пути к директории хранения данных (опция tetradir) и к директории корзины (опция trashdir). В них прописываются пути к каталогам data и trash. Таким образом, каталог данных data и каталог корзины trash могут располагаться не в рабочей директории, а где-то в другом месте.

 

 

Директория хранения данных

 

Как написано выше, директория хранения данных называется data. В ней должны находиться следующие файлы и каталоги:

  • base (директория хранения записей MyTetra)
  • database.ini (файл настроек)
  • mytetra.xml (файл дерева данных)

Каждая запись имеет свой каталог в каталоге base. Название каталога с записью должно быть уникально. Чтобы обеспечить уникальность имени, оно составляется из двух частей. Первая часть - метка времени UNIX, вторая часть - строка из 10 случайных символов [a-z][0-9]. Пример названий каталогов с записями:

 

13162072315qhj03np5x
1316292619wem18cgx16
1316296905kgzm28pkg6

 

Такой принцип именования позволяет с одной стороны видеть, в какой последовательности создавались директории записей, а с другой стороны гарантирует вероятность коллизий не более 10-15 в секунду.

 

 

Директория хранения записи

 

Каждая запись MyTetra хранится в отдельном каталоге. Эти каталоги расположены в директории хранения данных base.

 

В директории хранения записи обязательно располагается как минимум один html-файл. По-умолчанию он называется index.html. В нем хранится текст записи в формате HTML.

 

Помимо html-файла, в каталоге хранения записи лежат файлы картинок, используемые в тексте записи. Все файлы картинок хранятся в формате *.png. Это обеспечивает хранение изображений без потери качества и лицензионную чистоту.

 

Внимание! MyTetra всегда следит, чтобы в директории хранения записи был порядок. А это значит, что любые файлы, не принадлежащие в данный момент к записи, будут удалены в корзину.

 

 

Файл дерева mytetra.xml

 

В директории хранения данных data расположен самый главный файл mytetra.xml. Он отвечает за древовидное представление накопленной информации, в нем хранятся названия записей и веток, текстовые метки и прочая информация.

 

Основной корневой элемент - элемент <root>. В нем раположены два элемента: <format> и <content>.

 

Элемент <format> имеет следующие атрибуты:

 

<format version="1" subversion="1"/>

 

Атрибут version - основной номер версии формата хранения,  атрибут subversion - минорный номер версии. На текущий момент в MyTetra используется формат 1.1, о нем и рассказывается далее.

 

Элемент <content> содержит в себе элементы <node>, организованные в древовидную структуру. Это и есть дерево веток, которое присутствует в интерфейсе MyTetra.

 

Элемент <node> содержит два атрибута:

  • id - униканый идентификатор ветки;
  • name - имя ветки.

Внутри элемента <node> может быть расположен элемент <recordtable>. Это таблица конечных записей. В интерфейсе MyTetra она расположена справа вверху.

 

Таблица конечных записей <recordtable> содержит в себе список элементов <record>. Каждый элемент <record> - это отдельная запись в MyTetra. Элемент <record> имеет следующие атрибуты:

  • id - униканый идентификатор ветки;
  • dir - имя каталога, в котором хранится запись. Имя задается отностельно директории хранения данных data;
  • file - имя файла с текстом записи, обычно index.html;
  • name - название записи;
  • author - имя автора;
  • url - интернет-ссылка, сопровождающая запись;
  • tags - текстовые метки записи (теги);
  • ctime - время создания записи в формате ГГГГММДДЧЧММСС;
  • crypt - наличие шифрования в записи. 0 - шифрования нет, 1 - запись зашифрована.

Пример узла <node>:

 

<node id="4" name="Язык C">

 <recordtable>

  <record dir="1310729762ner9v1twxy"

          crypt="0"

          url=""

          tags="c, c++"

          author=""

          id="1310729762n6n3rd7o9v"

          ctime="20110715153602"

          name="Определение разрядности платформы 32 или 64 бит"

          file="text.html"/>

  <record dir="1315337597bz9a5a2f3e"

          crypt="0"

          url=""

          tags="linux, SUID"

          author=""

          id="1315337597vhtll8dj9f"

          ctime="20110906233317"

          name="Функции getuid() и geteuid()"

          file="text.html"/>

 </recordtable>

</node>

 

 

Смена версий формата данных

 

Формат хранения данных может претерпевать изменения, но каждый новый релиз MyTetra должен иметь встроенные средства по конвертированию данных из предыдущего формата в более новый. Данное конвертирование должно происходить после уведомления пользователя, без потерь информации.

 



К списку проектов

Поделиться этой страницей


Money Stacks Clipart on AliPNG

Статистика


RSS подписка

Подпишитесь на новости сайта по RSS


 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик