Capítulo 7. Programar para Tellico

En el espíritu del Software Libre, se le anima a programar Tellico tanto como quiera. Debería poder escribir scripts para importar, exportar o modificar datos muy fácilmente. Este capítulo le da más información sobre cómo hacer eso.

Formato de archivos

El archivo de datos por defecto de Tellico es un archivo zip, normalmente con una extensión de archivo .tc. Dentro del archivo hay un archivo de nivel superior tellico.xml. Las imágenes se pueden incluir dentro de la carpeta images/ del archivo, o pueden incluirse en los datos XML directamente con una codificación base64. Las imágenes también pueden guardarse dentro de la carpeta de datos de la aplicación, en cuyo caso no estarán en el propio archivo de datos. Tellico puede también cargar el archivo XML tal cual, descomprimido.

Datos XML

Colección

<?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>

El archivo comienza con la declaración y la codificación XML requerida, seguida por el tipo de documento. Cuando se añade un nuevo tipo de campo o se establecen propiedades adicionales en los campos predeterminados, la versión DTD se incrementa. Tellico siempre puede abrir y leer cualquier versión anterior de DTD, pero guardará los archivos en la versión actual. La localización de DTD apunta a un archivo DTD real.

El elemento de nivel superior es un elemento <tellico> que contiene la declaración por defecto namespace y la versión de la sintaxis del archivo, que siempre debe coincidir con la de DTD.

El elemento <tellico> contiene un elemento de <collection>. Las colecciones múltiples son ignoradas por ahora. El atributo title contiene el título de la colección, mientras que type especifica qué tipo de entradas están contenidas en la colección. Los tipos permitidos se listan en una sección posterior. Un atributo opcional entryTitle se puede usar para especificar el título de las entradas para una colección personalizada, y debería ir en plural.

Campos

  <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"
>Paperback</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>

Todos los campos están definidos dentro de un elemento <fields>, del cual solo puede existir uno. toda la información sobre un campo, excepto de las propiedades, está incluida como atributos en el elemento <field>. Los valores permitidos para los atributos flags, format, y type vienen dados en la sección siguiente.

Las propiedades del campo se usan para establecer valores predeterminados para el campo, intervalos de valores de clasificación, plantillas de valores derivados, etc. Los ejemplos de arriba incluyen un valor por defecto, un valor máximo de clasificación y una plantilla por un campo ID derivado.

Entradas

  <entry>
   <title
>Lenguaje de programación C++, El</title>
   <authors>
    <author
>Stroustrup, Bjarne</author>
   </authors>
   <publisher
>Addison-Wesley Pub Co</publisher>
   <edition
>3ª</edition>
   <pub_year
>1997</pub_year>
   <isbn
>0-201-88954-4</isbn>
   <genres>
    <genre
>No ficción</genre>
   </genres>
   <keywords>
    <keyword
>Programación</keyword>
    <keyword
>Informática</keyword>
   </keywords>
   <cover
>cf65a2f023b6cb9e9233323dca10ac7c.jpeg</cover>
  </entry>

Para cada campo de la colección, una <entrada> puede contener un elemento cuyo nombre sea idéntico al nombre del campo. Si se permiten valores múltiples para ese campo, entonces se añade la letra s al nombre del campo para crear un elemento, y cada valor se añade como un hijo de ese elemento, como en el caso de los campos de autor, género y palabra clave de arriba.

Como resultado, si se añaden campos adicionales a la colección, el archivo de datos ya no se ajustará al DTD. Sin embargo, Tellico usa un analizador XML no validante, de forma que los campos adicionales no causen problemas.

Imágenes

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

Dentro del elemento <imágenes>, cada imagen referenciada por una entrada se lista junto con los atributos que describen el tamaño de la imagen, su formato y su id. Si la imagen está contenida dentro de un archivo Zip, el elemento estará vacío. De otro modo, los datos de la imagen pueden estar contenidos en el XML como un texto codificado en base64.