Capítulo 7. Modificar o Tellico

Segundo o espírito do 'Software' Livre, é bem-vindo para modificar o Tellico tanto quanto desejar. Poderá criar programas para importar, exportar ou modificar os dados com bastante facilidade. Este capítulo dá-lhe mais informações sobre como fazê-lo.

Formato do Ficheiro

O ficheiro de dados por omissão do Tellico é um pacote ZIP, normalmente com uma extensão de ficheiros .tc. Dentro do pacote, existe um ficheiro de topo tellico.xml. As imagens poderão ser incluídas dentro da pasta images/ do pacote, podendo também ser incluídas directamente do XML, com uma codificação 'base64'. As imagens poderão também ser gravadas dentro da pasta de dados da aplicação; nesse caso, não estarão de todo no ficheiro de dados. O Tellico também pode carregar o ficheiro XML propriamente dito, no formato não-comprimido.

Dados em XML

Colecção

<?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="Os Meus Livros" type="2">
 </collection>
</tellico>

O ficheiro começa com a declaração e codificação obrigatória do XML, seguida do tipo de documento. Quando for adicionado um novo tipo de campo ou forem definidas propriedades adicionais nos campos predefinidos, a versão da DTD para o tipo de documento será incrementada. O Tellico será sempre capaz de abrir e ler qualquer versão anterior da DTD, mas só irá gravar os ficheiros na versão actual. A localização da DTD aponta de facto para um ficheiro de DTD actual.

O elemento de topo é um <tellico>, que contém a declaração do espaço de nomes predefinido e a versão da sintaxe do ficheiro, que deverá corresponder sempre à DTD.

O elemento <tellico> contém um elemento <collection>. São ignoradas várias colecções, por agora. O atributo title contém o título da colecção, enquanto o type define os tipos de itens que estão contidos na colecção. Os tipos permitidos são apresentados numa secção posterior. Existe um atributo entryTitle opcional que poderá ser usado para definir o título dos itens numa colecção personalizada, devendo estar no plural.

Campos

  <fields>
   <field flags="8" title="Título" category="Geral" format="1" type="1" name="titulo" />
   <field flags="7" title="Autor" category="Geral" format="2" type="1" name="autor" />
   <field flags="2" title="Formato" category="Geral" allowed="Capa Dura;Capa de Papel;Capa de Papel Comercial;E-Book;Revista;Jornal" format="4" type="3" name="formato" >
    <prop name="default"
>Revista</prop>
   </field>
   <field flags="6" title="Publicação" category="Publicação" format="0" type="1" name="publicacao" />
   <field flags="4" title="Edição" category="Publicação" format="0" type="1" name="edicao" />
   <field flags="3" title="Ano do 'Copyright'" category="Publicação" format="4" type="6" name="ano_copyright" />
   <field flags="2" title="Ano de Publicação" category="Publicação" format="4" type="6" name="ano_publicacao" />
   <field flags="0" title="ISBN#" category="Publicação" format="4" type="1" name="isbn" description="International Standard Book Number" />
   <field flags="7" title="Género" category="Classificação" format="0" type="1" name="genero" />
   <field flags="7" title="Palavras-Chave" category="Classificação" format="0" type="1" name="palavraschave" />
   <field flags="0" title="Capa" category="Capa" format="4" type="10" name="capa" />
   <field flags="0" title="Comentários" category="Pessoal" format="4" type="1" name="comentarios" />
   <field title="Classificação" flags="2" category="Pessoal" format="4" type="14" name="classificacao">
    <prop name="maximum"
>5</prop>
    <prop name="minimum"
>1</prop>
   </field>
   <field title="ID" flags="32" category="Pessoal" format="4" type="6" name="id">
    <prop name="template"
>%{@id}</prop>
   </field>

  </fields>

Todos os campos são definidos dentro de um elemento <fields>, nos quais só poderá existir um. Toda a informação de um campo, excepto as propriedades extendidas, são incluídas como atributos do elemento <field>. Os valores permitidos para os atributos flags, format e type são dados na seguinte secção.

As propriedades dos campos são usadas para definir os valores predefinidos para os campos, os intervalos dos valores de classificações, os modelos dos valores derivados, etc. Os exemplos acima incluem um valor predefinido, um valor máximo de classificação e um modelo para um campo de ID derivado.

Elementos

  <entry>
   <title
>A Linguagem de Programação C++</title>
   <authors>
    <author
>Stroustrup, Bjarne</author>
   </authors>
   <publisher
>Addison-Wesley Pub Co</publisher>
   <edition
>3a</edition>
   <pub_year
>1997</pub_year>
   <isbn
>0-201-88954-4</isbn>
   <genres>
    <genre
>Não-Ficção</genre>
   </genres>
   <keywords>
    <keyword
>Programação</keyword>
    <keyword
>Computadores</keyword>
   </keywords>
   <cover
>cf65a2f023b6cb9e9233323dca10ac7c.jpeg</cover>
  </entry>

Para cada um dos campos da colecção, existe um <entry> que poderá conter um elemento, cujo nome é idêntico ao nome do campo. Se forem permitidos vários valores para o campo, então será adicionada a letra s ao nome do campo, ao criar um elemento, e cada um dos valores é adicionado como um filho do elemento, como acontece no caso dos campos 'author', 'genre' e 'keyword' acima.

Como resultado, se forem adicionados campos extra à colecção, o ficheiro de dados já não ficará mais em conformidade com a DTD. Contudo, o Tellico usa um processador de XML sem validação, pelo que os campos adicionais não causam problemas.

Imagens

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

Dentro do elemento <images>, é enumerada cada uma das imagens referenciadas por um elemento, em conjunto com os atributos que descrevem o tamanho, o formato e o identificador da imagem. Se a imagem estiver contida dentro do ficheiro ZIP, o elemento está em branco. Caso contrário, os dados da imagem poderão estar contidos na sequência de XML, sob o formato de texto codificado em base64.