Hoofdstuk 7. Hacking Tellico

In de geest van Vrije Software bent u welkom om Tellico te hacken zoveel u wilt. U zou in staat moeten zijn om scripts te schrijven om gegevens gemakkelijk te importeren, te exporteren of te wijzigen. Dit hoofdstuk geeft u meer informatie over hoe dat te doen.

Bestandsformaat

Het standaard gegevensbestand van Tellico is een zip-archief, normaal met een .tc bestandsextensie. In het archief is een bestand op top-niveau tellico.xml. Afbeeldingen kunnen meegenomen worden in de map images/ in het archief of ze kunnen direct ingevoegd zijn in de XML-gegevens in een base64-codering. Afbeeldingen kunnen ook opgeslagen worden in de gegevensmap van de toepassing, in welk geval, ze helemaal niet in het gegevensbestand zelf zitten. Tellico kan ook het XML-bestand, op zichzelf, laden, niet gecomprimeerd.

XML-gegevens

Collectie

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

Het bestand begint met de vereiste XML-declaratie en codering, gevolgd door het doctype. Wanneer een nieuw veldtype is toegevoegd of extra eigenschappen zijn ingesteld op de standaard velden, the zal de versie van het doctype-DTD verhoogt worden. Tellico is altijd in staat om elke vorige DTD-versie te openen en te lezen, maar zal bestanden opslaan in de huidige versie. De DTD-locatie wijst naar een actueel DTD-bestand.

Het hoogste element is een <tellico> element, die de standaard naamruimte declaratie bevat en de syntaxisversie van het bestand, die altijd overeen zou moeten komen met de DTD.

Het element <tellico> bevat één element <collection>. Meerdere verzamelingen worden voor nu genegeerd. Het title attribuut bevat de verzamelingtitel, terwijl het type specificeert welk soort items de verzameling bevat. De toegestane typen staan in een lijst in een latere sectie. Een optioneel attribuut entryTitle kan gebruikt worden om de titel van de items te specificeren voor een aangepaste verzameling en zou een meervoud moeten zijn.

Velden

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

Alle velden worden binnen een <fields> element gedefinieerd, waarvan er slechts één kan zijn. Alle informatie voor een veld, behalve voor eigenschappen, zijn meegenomen als attributen van het <field> element. De toegestane waarden voor de attributen flags, format en type zijn gegeven in een volgende sectie.

Veldeigenschappen worden gebruikt voor instelling van standaard veldwaarden, reeksen waarderingswaarden, afgeleide waardesjablonen, etc. Het bovenstaande voorbeeld bevat een standaard waarde, een maximale waarderingswaarde en een sjabloon voor een afleid ID-veld.

Items

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

Voor elk veld in de verzameling kan een <item> een element bevatten wiens naam identiek is aan de veldnaam. Als meerdere waarden voor het veld zijn toegestaan, zal de letter s toegevoegd moeten worden aan de veldnaam om een element aam te maken en elke waarde wordt toegevoegd als een kind van het element, zoals bovenstaand in het geval van de velden auteur, genre en keyword.

Als resultaat, als extra velden zijn toegevoegd aan de verzameling, zal het gegevensbestand niet langer overeenstemmen met de DTD. Tellico gebruikt echter een niet-validerende XML-parser, dus extra velden veroorzaken geen problemen.

Afbeeldingen

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

Binnen het element <images> wordt elke afbeelding waarnaar verwezen wordt door een item in een lijst gezet, samen met attributen die de grootte, formaat en id van de afbeelding beschrijven. Als de afbeelding zich in het zip-bestand bevindt, is het element leeg. Anders kunnen de afbeeldingsgegevens zich bevinden in de XML-stream als base64 gecodeerde tekst.