Capítol 7. Hacking del Tellico

En l'esperit del programari lliure, us convidem a fer hacking del Tellico tant com vulgueu. Haureu de ser capaç d'escriure scripts per a importar, exportar o modificar les dades amb molta facilitat. Aquest capítol us donarà més informació sobre com fer-ho.

Format de fitxer

El fitxer de dades predeterminat del Tellico és un arxiu zip, normalment amb una extensió de fitxer .tc. Dins del fitxer hi haurà un fitxer tellico.xml de nivell superior. Les imatges es poden incloure dins de la carpeta images/ a l'arxiu, o es poden incloure directament a les dades XML en una codificació base64. Les imatges també es poden desar dins de la carpeta de dades de l'aplicació, en aquest cas, no restaran al fitxer de dades. El Tellico també pot carregar el fitxer XML, sense comprimir.

Dades XML

Col·lecció

<?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="Els meus llibres" type="2">
 </collection>
</tellico>

El fitxer comença amb la declaració i la codificació XML requerides, seguides pel tipus de document. Quan s'afegeix un tipus de camp nou o s'estableixen propietats addicionals en els camps predeterminats, s'incrementarà la versió del tipus de document DTD. El Tellico sempre és capaç d'obrir i llegir qualsevol versió anterior de DTD, però desarà els fitxers en la versió actual. La ubicació de DTD apunta a un fitxer DTD real.

L'element de nivell superior és un element <tellico>, que conté la declaració predeterminada d'espai de noms i la versió de la sintaxi del fitxer, el qual sempre haurà de coincidir amb el DTD.

L'element <tellico> conté un element <collection>. Les col·leccions múltiples seran ignorades, per ara. L'atribut title conté el títol de la col·lecció, mentre que type especifica quin tipus d'entrades es troben a la col·lecció. Els tipus permesos estan llistats en una secció posterior. Un atribut opcional entryTitle es pot utilitzar per a especificar el títol de les entrades per a una col·lecció personalitzada, i hauria de ser plural.

Camps

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

Tots els camps es defineixen dins d'un element <fields>, del qual sols n'hi pot haver un. Tota la informació per a un camp, a excepció de les propietats, s'inclou com a atributs de l'element <field>. Els valors permesos per als atributs flags, format i type es donen en una secció següent.

Les propietats del camp s'utilitzen per a establir els valors predeterminats per al camp, els intervals dels valors de puntuació, plantilles dels valors derivats, etc. Els exemples anteriors inclouen un valor predeterminat, un valor de puntuació màxim, i una plantilla per a un camp ID derivat.

Entrades

  <entry>
   <title
>El llenguatge de programació 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
>No ficció</genre>
   </genres>
   <keywords>
    <keyword
>Programming</keyword>
    <keyword
>Computers</keyword>
   </keywords>
   <cover
>cf65a2f023b6cb9e9233323dca10ac7c.jpeg</cover>
  </entry>

Per a cada camp a la col·lecció, una <entrada> pot contenir un element que el seu nom és idèntic al nom del camp. Si es permeten múltiples valors per al camp, llavors la lletra s serà afegida al nom del camp per a crear un element, i cada valor serà afegit com un fill de l'element, com en el cas dels camps autor, gènere i paraules clau anteriors.

Com a resultat, si s'afegeixen camps addicionals a la col·lecció, el fitxer de dades ja no restarà conforme al DTD. No obstant això, el Tellicoutilitza un analitzador XML sense validar, de manera que els camps addicionals no causaran problemes.

Imatges

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

Dins de l'element <images>, cada imatge farà referència a una entrada a la llista, juntament amb els atributs que descriuen la mida, format, i ID de la imatge. Si la imatge està continguda dins del fitxer Zip, l'element restarà buit. En cas contrari, les dades d'imatge podran estar contingudes a l'XML com a text codificat en base64.