Собираем
информацию
по крупицам

RSS подписка

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

Проекты / Код

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 - минорный номер версии.

 

 

Формат хранения v.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 id="1310729762n6n3rd7o9v"

          dir="1310729762ner9v1twxy"

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

          file="text.html"

          crypt="0"

          url=""

          tags="c, c++"

          author=""

          ctime="20110715153602"/>

  <record id="1315337597vhtll8dj9f"

          dir="1315337597bz9a5a2f3e"

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

          file="text.html"

          crypt="0"

          url=""

          tags="linux, SUID"

          author=""

          ctime="20110906233317"/>

 </recordtable>

</node>

 

 

Формат хранения v.1.2

 

Формат хранения данных версии 1.2 содержит в себе все элементы версии 1.1, но в нем так же добавлена возможность хранения прикрепленных к записи файлов.

 

Для хранения таблицы прикрепленных файлов, внутри тега <record> добавляется тег <files>:

 

 

<record id="1625161331h9eqae5uzq"

        name="Математика" ... >

  <files>

    <file id="1625169549qpp29u71rj" 

          fileName="sincos.gif" 

          type="file"/>

    <file id="1625172135ejxsvy7lhq" 

          fileName="Графики функций.jpg" 

          type="file"/>

  </files>

</record>

 

 

Внутри тега <files> размещаются теги <file>, которые описывают прикрепляемые файлы. Сами файлы хранятся в директории записи, и имеют уникальные имена. Имя файла на диске (так называемое техническое имя файла) состоит из значения атрибута id и расширения, взятого из атрибута fileName. Таким образом достигается платформонезависимость имени файла на диске (если расширение не написано национальными символами). Если расширения в строке fileName нет, то и имя файла на диске будет состоять только из id, без расширения. В интерфейсе MyTetra файл отображается под именем, указанным в атрибуте fileName.

 

Техническое имя файла, состоящее из id+расширение, необходимо во-первых, для обеспечения кросс-платформенности и независимости от национальной кодировки в файловой системе, и во-второых для возможности быстрого открытия файла средствами операционной системы прямо в директории записи без дополнительного копирования под именем fileName, так как операционная система автоматически выберет нужную программу просмотра по расширению.

 

При сохранении прикрепленного файла через пункт "Сохранить как..." в контекстном меню, MyTetra предложит сохранение под именем из атрибута fileName. Таким образом, для пользователя, файл в интерфейсе MyTetra всегда выглядит как файл с именем fileName.

 

Атрибут type может принимать два значения: file и link. Если type="file", то тег <file> описывает прикрепленный файл. Если type="link", то тег <file> описывает ссылку на файл. В этом случе в теге <file> должен дополнительно присутствовать атрибут link, в котором прописывается полная ссылка на файл:

 

 

<file id="1625169549qpp29u71rj" 

      fileName="actualDocumentation.pdf"

      type="link"

      link="http://site.org/docs/actualDocumentation.pdf" />

 

 

Если тип файла выставлен как link, то файл нигде в каталоге данных MyTetra не хранится. Хранится только тег <file> с описанием местонахождения файла в атрибуте link.

 

 

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

 

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

 



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

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



Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (стр. 1)

База Rarrugas (стр. 1)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean (стр. 1)

База Аrmagedec

База SorokinRed

База Deadelf79

База Adgaver (стр. 1)

База Pipitos1983

База Soxsten (стр. 1)

База Silenn (стр. 1)

База Shlyapnikova - херомантия и ригидность

База Svoynickname (стр. 1)

База Larson227 (стр. 1)

База Velonski (стр. 1)

База BrokeRU (стр. 1)

База Mcold (стр. 1)

База Alensav (стр. 1)

База Consp11 (стр. 1)

База Kozlov-AE (стр. 1)

База Wwwlir (стр. 1)

База Duwaz (стр. 1)

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База RuDennn (Bunny-Hop)

База Manakaden

База Vitvrn

База Fanrok

База Grimar

База_Juryak

База Nicolasomsk

База Azatserikbaev

База Shut913

 

Подробности на странице MyTetra Share.

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