Глава 7. Улучшение Tellico

Как и в случае других свободных программ, Tellico полностью открыта для улучшения. Написание сценариев для импорта, экспорта или изменения данных не представляет особой сложности. В этой главе рассказывается о том, как это сделать.

Формат файла

По умолчанию файл данных Tellico представляет собой zip-архив, обычно с расширением .tc. Внутри архива находится файл верхнего уровня tellico.xml. Изображения могут либо содержаться в папке images/ архива, либо включаться в данные XML напрямую в кодировке Base64. Изображения также могут храниться внутри папки данных приложения: в этом случае они отсутствуют в файле данных. Tellico также позволяет загрузить отдельно сам файл XML в несжатом виде.

Данные XML

Коллекция

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tellico PUBLIC "-//Robby Stephenson/DTD Tellico V11.0//EN" "http://periapsis.org/tellico/dtd/v11/tellico.dtd">
<tellico xmlns="http://periapsis.org/tellico/" syntaxVersion="11">
 <collection title="My Books" type="2">
 </collection>
</tellico>

Файл начинается с обязательного объявления XML и кодировки, за которыми следует описание типа документа (doctype). DТD-версия типа документа увеличивается при добавлении нового типа поля или указании дополнительных свойств для полей по умолчанию. Tellico позволяет открыть и прочитать любые предыдущие DTD-версии, но сохранение файлов выполняется в текущей версии. Расположение DTD указывает на сам файл DTD.

Элемент верхнего уровня — <tellico>. Он содержит объявление пространства имён и версию синтаксиса файла по умолчанию (они всегда должны соответствовать DTD).

Элемент <tellico> содержит один элемент <collection>. Указание нескольких коллекций будет проигнорировано. Атрибут title содержит название коллекции, а type определяет содержащиеся в коллекции типы записей. Допустимые типы перечислены в следующем разделе. Необязательный атрибут entryTitle позволяет указать название записей для пользовательской коллекции и является множественным.

Поля

  <fields>
   <field flags="8" title="Title" category="General" format="1" type="1" name="title" />
   <field flags="7" title="Author" category="General" format="2" type="1" name="author" />
   <field flags="2" title="Binding" category="General" allowed="Hardback;Paperback;Trade Paperback;E-Book;Magazine;Journal" format="4" type="3" name="binding" >
    <prop name="default"
>Мягкий переплёт</prop>
   </field>
   <field flags="6" title="Publisher" category="Publishing" format="0" type="1" name="publisher" />
   <field flags="4" title="Edition" category="Publishing" format="0" type="1" name="edition" />
   <field flags="3" title="Copyright Year" category="Publishing" format="4" type="6" name="cr_year" />
   <field flags="2" title="Publication Year" category="Publishing" format="4" type="6" name="pub_year" />
   <field flags="0" title="ISBN#" category="Publishing" format="4" type="1" name="isbn" description="International Standard Book Number" />
   <field flags="7" title="Genre" category="Classification" format="0" type="1" name="genre" />
   <field flags="7" title="Keywords" category="Classification" format="0" type="1" name="keyword" />
   <field flags="0" title="Front Cover" category="Front Cover" format="4" type="10" name="cover" />
   <field flags="0" title="Comments" category="Personal" format="4" type="1" name="comments" />
   <field title="Rating" flags="2" category="Personal" format="4" type="14" name="rating">
    <prop name="maximum"
>5</prop>
    <prop name="minimum"
>1</prop>
   </field>
   <field title="ID" flags="32" category="Personal" format="4" type="6" name="id">
    <prop name="template"
>%{@id}</prop>
   </field>

  </fields>

Все поля определяются внутри элемента <fields> (допустимо указывать только один такой элемент). Все сведения о поле, за исключением свойств, указываются в виде атрибутов элемента <field>. Допустимые значения атрибутов flags, format и type указаны в следующем разделе.

Свойства поля позволяют указать значения поля по умолчанию, диапазоны значений рейтингов, шаблоны зависимых значений и так далее. Выше приведены примеры указания значения по умолчанию, максимального значения рейтинга и шаблона для поля с зависимым идентификатором.

Записи

  <entry>
   <title
>C++ Programming Language, The</title>
   <authors>
    <author
>Stroustrup, Bjarne</author>
   </authors>
   <publisher
>Addison-Wesley Pub Co</publisher>
   <edition
>3rd</edition>
   <pub_year
>1997</pub_year>
   <isbn
>0-201-88954-4</isbn>
   <genres>
    <genre
>Non-Fiction</genre>
   </genres>
   <keywords>
    <keyword
>Programming</keyword>
    <keyword
>Computers</keyword>
   </keywords>
   <cover
>cf65a2f023b6cb9e9233323dca10ac7c.jpeg</cover>
  </entry>

Элемент, название которого совпадает с названием поля, возможно указать в <entry>. Если поле позволяет указывать несколько значений, для создания элемента к названию поля добавляется буква s, и каждое значение добавляется как потомок этого элемента (как в приведённом выше примере с полями автора, жанра и ключевого слова).

Когда в коллекцию будут добавлены дополнительные поля, файл данных перестанет соответствовать DTD. Но в Tellico используется обработчик XML, который не выполняет проверку, поэтому проблем в работе приложения не возникнет.

Изображения

  <images>
   <image width="111" format="JPEG" height="140" id="cf65a2f023b6cb9e9233323dca10ac7c.jpeg" />
  </images>

Внутри элемента <images> перечислены все изображения, на которые ссылается запись, а также указаны атрибуты, которые описывают размер, формат и идентификатор изображения. Если изображение содержится в файле ZIP, элемент будет пустым. Если элемент не пуст, данные изображения могут содержаться в XML-потоке в виде текста в кодировке Base64.