# &appname; weiter entwickeln und programmieren

&appname; ist freie Software, daher ist erwünscht, dass Sie das Programm weiterentwickeln und verbessern. Es ist relativ einfach, Skripte für den Import oder Export zu schreiben oder um Daten zu verändern. In diesem Kapitel finden Sie dazu viele Informationen.

## Dateiformat

&appname; benutzt als Datendatei ein Zip-Archiv, normalerweise mit der Dateierweiterung `.tc`. In diesem Archiv befindet sich im obersten Ordner die Datei `tellico.xml`. Bilder können im Ordner `images/` im Archiv sein oder direkt als Base64-kodiert in den &XML;-Daten enthalten sein. Bilder können außerdem noch im Datenordner des Programms gespeichert werden, dann fehlen sie in der Datendatei. &appname; kann die &XML;-Datei unkomprimiert laden.

### &XML;-Daten

#### Sammlung

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

Die Datei beginnt mit der erforderlichen &XML;-Deklaration und Kodierung, gefolgt vom DOCTYPE. Wenn ein Feldtypen oder zusätzliche Eigenschaften für die Standardfelder hinzugefügt werden, wird die Versionsnummer der DOCTYPE-DTD erhöht. &appname; kann alle vorherigen DTD-Versionen öffnen und lesen, speichert aber immer in der neuesten Version. Der Speicherort der DTD verweist immer auf die aktuelle DTD.

Das oberste Element ist ein `<tellico>`-Element, das den Standard-Namensbereich und die Syntaxversion enthält, die immer zur DTD passen sollte.

Das `<tellico>`-Element enthält ein `<collection>`-Element. Weitere `<collection>`-Elemente werden zurzeit ignoriert. Das Attribut `title` enthält den Titel der Sammlung. Das Attribut `type` bestimmt, welche Art von Einträgen in der Sammlung vorhanden sind. Die erlaubten Typen werden in einem späteren Abschnitt aufgezählt. Das optionale Attribut `entryTitle` kann benutzt werden, um den Titel der Einträge für eine benutzerdefinierte Sammlung anzugeben, der Titel sollte im Plural eingeben werden.

#### Felder

      <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 Felder werden innerhalb eines Elements `<fields>` definiert, das nur einmal vorkommen darf. Alle Informationen über ein Feld mit Ausnahme der Eigenschaften werden als Attribute des Elements `<fields>` eingefügt. Die erlaubten Werte für die Attribute `flags`, `format` und `type` werden im nächsten Abschnitt angegeben.

Mit Eigenschaften von Feldern können Voreinstellung der Feldwerte, Wertebereiche für die Bewertung, abgeleitete Wertvorlagen usw. festgelegt werden. Das Beispiel oben enthält einen Standardwert, einen Maximum für eine Bewertung und eine Vorlage für ein angeleitetes ID-Feld.

#### Einträge

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

Für jedes Feld einer Sammlung kann das Element `<entry>` ein Element mit der gleichen Bezeichnung wie der Name des Feldes enthalten. Wenn mehrere Werte für das Feld erlaubt sind, dann wird der Buchstabe s an den Feldnamen angefügt,um ein Element zu erstellen. Jeder neue Wert wird als untergeordnetes Element eingefügt, wie bei den Feldern Autor, Gattung und Schlüsselwort im vorher genannten Beispiel.

Daraus folgt, dass die Datendatei nach dem Einfügen zusätzlicher Felder zur Sammlung nicht mehr der DTD entspricht. &appname; benutzt jedoch ein &XML;-Parser, der die Gültigkeit nicht überprüft, daher gibt es keine Probleme mit zusätzlichen Feldern,

#### Bilder

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

Innerhalb des Elements `<images>` wird jedes Bild mit Attributen für die Bildgröße durch einen Eintrag zur Verknüpfung aufgelistet. Ist das Bild in der Zip-Datei enthalten, ist dieses Element leer. Ansonsten können die Bilddaten im &XML;-Datenstrom als Text in Base64-Kodierung eingefügt werden.

## Werte für Sammlungsarten

Die Art der Sammlung wird im Typ-Attribute festgelegt. Der Wert entspricht dem Aufzählungswert `Type` in `src/collection.h`.

## Werte für Sammlungsarten

Sammlungsarten | Wert
Benutzerdefinierte Sammlung | 1
Bücher-Sammlung | 2
Video-Sammlung | 3
Musik-Sammlung | 4
Literaturverzeichnis | 5
Comic-Bücher-Sammlung | 6
Wein-Sammlung | 7
Münzen-Sammlung | 8
Briefmarken-Sammlung | 9
Sammelkarten-Sammlung | 10
Videospiel-Sammlung | 11
Dateikatalog | 12
Brettspiel-Sammlung | 13

## Werte der Feldtypen

&appname; fügt alle Standardfelder einer Sammlung ein, wenn des erste Feldelement den Namen default hat. Bei den Feldtypen Absatz, Tabelle oder Bild sollte die Kategorie die gleiche Bezeichnung wie der Feldname haben.

Die Art des Feldes wird im Typ-Attribute des Feld-Elements festgelegt Der Wert entspricht dem Aufzählungswert `FieldType` in `src/field.h`.

## Werte der Feldtypen

Feldtyp | Wert
Einfacher Text | 1
Absatz | 2
Auswahl | 3
Ankreuzfeld | 4
Zahl | 6
&URL; | 7
Einspaltige Tabelle | 8
Bild | 10
Datum | 12
Bewertung | 14

Für ein Feld können verschiedene Bitschalter gesetzt werden, die bitweise als Wert der Operation OR im Schalterattribut des Feldelements gespeichert werden. Der Schalter, der das Löschen eines Feldes durch den Benutzer verhindert, ist unter anderem für den Zitatschlüssel von Einträgen in Literaturverzeichnissen vorgesehen.

## Bitschalter für Feldwerte

Feld-Bitschalter | Wert
Mehrere Einträge erlauben | `0x01`
Gruppierung erlauben | `0x02`
Vervollständigung erlauben | `0x04`
Löschen nicht zulassen | `0x08`
Bearbeitung nicht zulassen | `0x10`
Abgeleiteter Wert | `0x20`

Das Format des Felds wird im gleichnamigen Attribut des Feldelements angegeben. Datumsformatierung wird zurzeit nicht benutzt. Die Gruppierung nach Personen verwendet alle Felder mit Namensformatierung. Die Angabe des Schalters Abgeleiteter Wert setzt voraus, dass der Wert für das Feld korrekt mit dem Formattext aus anderen Feldwerten generiert wird.

## Feldformat-Werte

Feldformat | Wert
Nur Großschreibung | 0
Titelformatierung | 1
Namensformatierung | 2
Datumsformatierung | 3
Keine Formatierung | 4

## Versteckte Einstellungsmöglichkeiten

&appname; hat einige weitere Einstellungsmöglichkeiten, die im Einrichtungsdialog nicht aufgeführt werden. Sie sind nicht wichtig genug, um den Dialog mit noch mehr Optionen zu überladen. Für einige Benutzer könnten diese Einstellungen bedeutsam sein, daher werden diese Einstellungen aus der Einrichtungsdatei gelesen.

Die Einstellungen für &appname; werden in einer Datei namens `$`KDEHOME`/share/config/tellicorc` im persönlichen Ordner des Benutzers gespeichert. In dieser Datei sind Einstellungen in Gruppen angeordnet, die wie zum Beispiel [General Options] in eckigen Klammern eingeschlossen sind. Um eine Einstellung zur Gruppe General Options hinzuzufügen, suchen Sie die Zeile mit diesem Gruppennamen in der Einrichtungsdatei. Existiert die Gruppe noch nicht, dann erstellen Sie sie, indem Sie die Zeile [General Options] einfügen. Dann können die Einstellungen unterhalb des Gruppennamens angegeben werden.

### [General Options]

Diese Einstellungen sollten in die Gruppe General Options eingefügt werden.

#### Maximale Symbolgröße

Die maximale Größe der Symbole in der Symbolansicht kann mit dieser Einstellung geändert werden. Der Standardwert beträgt 96. Erlaubt sind Werte von 32 bis 512.

#### Beispiel

`Max Icon Size=128`

#### Größe des Symbol-Zwischenspeichers

Die maximale Anzahl der Symbole, die im Arbeitsspeicher vorgehalten werden, kann mit dieser Einstellung geändert werden. Der Standardwert beträgt 1000.

#### Beispiel

`Icon Cache Size=100`

#### Beispiel

`Max Icon Size=128`

#### Größe des Bildzwischenspeichers

Der maximale Arbeitsspeicher in Byte für das Zwischenspeichern aller Bilder, kann mit dieser Einstellung geändert werden. Der Standardwert beträgt 67108864.

#### Beispiel

`Image Cache Size=256000000`

### [Options - bibtex]

Diese Einstellungen sollten in die Gruppe Options - bibtex eingefügt werden.

#### lyxpipe

Diese Einstellung gibt den Speicherort der „lyxpipe“ für das Senden von bibliografischen Zitaten an. Die Dateierweiterung `.in` darf nicht enthalten sein.

#### Beispiel

`lyxpipe=$HOME/.lyx/lyxpipe`

## Bibtex-Zeichenumwandlung

Wenn Bibtex-Dateien importiert oder exportiert werden, müssen einige Zeichen von der Schreibweise in TeX in Unicode umgewandelt werden. Diese Zuordnung der Zeichen ist in der Datei `bibtex-translation.xml` definiert, die sich im Installations-Datenordner befindet. Die Zuordnung kann geändert werden, falls das nötig ist. Das Element „key“ enthält das Unicodezeichen und die Zeichenketten mit der zugehörigen TeX-Schreibweise. Eine Zuordnung von einem Unicodezeichen zu mehreren TeX-Zeichenketten ist erlaubt. Die erste Zuordnung wird beim Export in Bibtex benutzt.

      <key char="À">
        <string
    >{\`A}</string>
        <string
    >\`{A}</string>
      </key>

## XSLT-Tricks

Hier werden in einer der nächsten Versionen dieses Dokuments Tipps für das Schreiben von XSLT zum Bearbeiten von &appname;-&XML;-Daten eingefügt.