Neue Büchereien einfügen

Es ist in VideLibri auch möglich bisher vollkommen unbekannte Büchereien einzubinden. Dafür wurde eine besonders einfache Programmiersprache entwickelt, sowie ein Webseiten-Änderungs-Erkennungsystem (Pattern-Matching), dass alle sich ändernden Daten von einer Webseite auslesen kann, ohne dass dafür irgendwelche Programmierung erforderlich wäre.

VideLibri benötigt die folgenden Informationen über eine neue Bibliothek, die in unterschiedliche XML-Dateien eingetragen werden. Benutzt eine Bücherei das gleiche System, wie eine bereits bekannte, ist ausschließlich der erste Punkt nötig:
BüchereibeschreibungAllgemeine Informationen über die Bücherei, beispielsweise ihr Name oder die Hauptadresse ihrer Webseite.
Ein Katalog-TemplateHier werden die (relativen) Adressen aller Webseiten des Bibliothekkatalogs eingetragen und die Reihenfolge, in der die Seiten aufgerufen werden
Mehrere Einzelseiten-PatternsFür jede Seite wird ein Pattern benötigt, welches der Struktur der Seite entspricht.


Ein ganz einfaches Beispiel wäre eine Bibliothek von Musterstadt, die nach einem Login Titel und Autor aller Ausleihen in einer Tabelle anzeigt.
Man beginnt mit dem Katalog-Template und kopiert das folgende, beinahe leere Skelett für ein Kontozugriffstemplate (siehe unten, wo man es am Ende abspeichert):


  <actions>
    <action id="connect"/>
    
    <action id="update-all">
      <s>vl:delete-current-books()</s>
    </action>
  </actions> 
Um das Template mit dem Katalog von Musterstadt zu verbinden, trägt man zuerst die Adresse http://opac.musterstadt.de/ im Template als page-Element ein und bekommt:

  <actions>
    <action id="connect"/>
    
    <action id="update-all">
      <s>vl:delete-current-books()</s>
      <page url="http://opac.musterstadt.de/">
      </page>
    </action>
  </actions> 
Öffnet man die Musterstadt-Seite auf, stößt man auf ein Loginformular. Im Quellcode der Seite findet man dann ein form-Element wie:

        <form action="/login" id="loginfrm" method="POST">
          ...
          Benutzername: <input name="user" value=""> <br><br>
          Passwort: <input name="passcode" value=""> <br><br>
          <input type="submit"/>
          <input name="sessionkey" value="1312kpad1341242" type="hidden"> 
          ...
        </form>
Man sieht zwei wichtige input-Elemente: user und passcode für Kontonummer und Passwort. Nun löscht man alles überflüssige (d.h. alles außer dem form-Element) und merkt sich den Namen der input-Felder. Man erhält:

        <form  id="loginfrm">
      
        </form>
Nun kommt der komplizierteste Teil: Man verbindet die Namen der beiden input-Felder mit dem Namen/Passwort von VideLibri und teilt VideLibri mit, dass es ein Formular ausfüllen soll. Dies ist bei jedem Katalog dasselbe, nur die Namen der input-Felder ändern sich, weil VideLibri alles andere automatisch erkennt:

        <form  id="loginfrm">
          {$login := form(., {"user": $username, "passcode": $password})}
        </form>
Das ganze kopiert man nun ins Template von oben, damit VideLibri weiß, zu welcher Webseite es gehört. Umgeben von einem pattern-Element, damit es vom Rest des Templates unterschieden werden kann:

  <actions>
    <action id="connect"/>
    
    <action id="update-all">
      <s>vl:delete-current-books()</s>
      <page url="http://opac.musterstadt.de/">
        <pattern>
          <form  id="loginfrm">
            {$login := form(., {"user": $username, "passcode": $password})}
          </form>
        </pattern>
      </page>
    </action>
  </actions> 
Nun fügt man die nächste Seite in das Template ein, auf der es die Ausleihen geben sollte. Die Adresse dieser Seite ändert sich dynamisch und man kennt sie jetzt nicht, aber VideLibri findet die Seite automatisch und man kann als Adresse einfach {$login} nehmen. (weil die vorhin eingefügte Zeile mit {$login := angefangen hat, so dass die Adresse in der $login Variable gespeichert wurde)

  <actions>
    <action id="connect"/>
    
    <action id="update-all">
      <page url="http://opac.musterstadt.de/">
        <pattern>
          <form  id="loginfrm">
            {$login := form(., {"user": $username, "passcode": $password})}
          </form>
        </pattern>
      </page>
      <page url="{$login}">
      </page>
    </action>
  </actions> 
Man geht wieder zur Bibliothekswebseite nach dem Login, wo es die Tabelle aller Ausleihen gibt. Im Quellcode der Seite sieht man zum Beispiel:

        <table class="ausleih-table" id="ausleihen">
          <thead>
            <tr><th>Titel</th><th>Autor</th></tr>
          </thead>
          <tbody>
            <tr style=".." class="item"><td>Ein Buchtitel...</td><td>von Musterautor</td></tr> 
            <tr style=".." class="item foo even"><td>Ein zweites Buch</td><td>von Musterautor</td></tr> 
            <tr style=".." class="item foo"><td>Ein drittes Buch</td><td>von jemand anderem</td></tr> 
            ...
          </tbody>    
        </table>
Zuerst löscht man wieder alles überflüssige, unter anderem auch alle Bücher nach dem ersten und erhält:

        <table id="ausleihen">
          <tr><td>Ein Buchtitel...</td><td>von Musterautor</td></tr> 
        </table>
Dort markiert man dann Titel und Autor als {$book.title} und {$book.author}:

        <table id="ausleihen">
          <tr><td>{$book.title}</td><td>{$book.author}</td></tr> 
        </table>
Dann fügt man {$book:={}} am Anfang ein, um VideLibri mitzuteilen, wo das Buch beginnt. Sowie * am Ende, um zu markieren, dass es beliebig viele Bücher geben kann:

        <table id="ausleihen">
          <tr>{$book:={}}<td>{$book.title}</td><td>{$book.author}</td></tr>* 
        </table>
Das kopiert man nun wieder ins Template als Pattern:

  <actions>
    <action id="connect"/>
    
    <action id="update-all">
      <s>vl:delete-current-books()</s>
      <page url="http://opac.musterstadt.de/">
        <pattern>
          <form  id="loginfrm">
            {$login := form(., {"user": $username, "passcode": $password})}
          </form>
        </pattern>
      </page>
      <page url="{$login}">
        <pattern>
          <table id="ausleihen">
            <tr>{$book:={}}<td>{$book.title}</td><td>{$book.author}</td></tr>* 
          </table>
        </pattern>
      </page>
    </action>
  </actions> 
Schon ist das Template zum Kontoanzeigen fertig.

Damit VideLibri es verwenden kann, muss man dem Template noch einen Namen geben und es noch irgendwo eintragen/abspeichern, wo es gefunden werden kann. In der Desktopversion geht es ganz einfach in den Einstellungen unter Büchereien. Man kopiert das Template in das unterste große Feld, trägt den Namen daneben ein (Standardname ist "user1") und klickt auf "definieren". In der Androidversion ist der Bildschirm zu klein für ein solches Feld und daher muss das Template in einer Datei /data/data/de.benibela.videlibri/files/libraries/templates/TEMPLATENAME/template gespeichert werden (was ein gerootetes Gerät voraussetzt) und die App neugestartet werden. Alternativ kann man ein installierbares Template erstellen und auf irgendeinem Server speichern, was in beiden Versionen direkt von diesem Server heruntergeladen werden. (siehe unten)

Als nächstes muss die Büchereibeschreibung erstellt werden, die VideLibri mitteilt, dass es eine Bücherei Musterstadt gibt und es dafür das erstellte Template verwenden soll. Wenn das Template richtig installiert wurde, reicht es das Template in den Einstellungen auszuwählen (unter "Neue Bibliothek registrieren/hinzufügen") und den Namen der Bibliothek einzugeben. Alternativ kann man die Büchereibeschreibung direkt in eine Datei packen. Dabei sind der Name der Bibliothek und der Name des Templates wichtig:


<?xml version="1.0" encoding="UTF-8"?>
<library>
  <longName value="Bibliothek von Musterstadt"/>
  <template value="mein-neues-template"/>
</library>
In der Desktopversion kopiert man es in das mittlere große Feld auf der Büchereien-Seite und klickt "Bibliothek speichern". In der Androidversion speichert man es unter /data/data/de.benibela.videlibri/files/libraries/-_-_-_IRGENDWAS.xml und editiert die Datei /data/data/de.benibela.videlibri/files/user.config, so dass user-libraries=-_-_-_IRGENDWAS.xml in der zweiten Zeile steht.



Falls Sie ein Template erstellen wollen, dass durch Eingabe einer URL in VideLibri installiert werden kann, entweder weil Sie für eine Bibliothek arbeiten und Ihren Lesern ein VideLibri-Template zur Verfügung stellen wollen; oder ein nicht-gerootetes Android-Gerät verwenden, gibt es dazu hier zusätzliche Informationen. Ein solches Template dann in VideLibris Einstellungen installiert werden.

Für ein Templates, das die Suche in einem Katalog ermöglichen soll, gibt es Information von den Links ganz oben noch einige spezielle Anmerkungen

Als Beispiel kann man auch die existierenden Büchereibeschreibungen unter data/libraries/ und Templates unter data/libraries/templates zu lesen. Diese Ordner finden sich bei der Desktopversion im Programmverzeichnis oder online im Quellcode von VideLibri. Die vorhandenen Templates sind jedoch weitaus komplizierter als benutzerdefinierte Templates zu sein brauchen, weil alle neuen Templates mit mehreren unterschiedlichen Bibliotheken funktionieren sollen, während die alten Templates teilweise noch veraltete Template-Syntax von 2008 verwenden.