Zum Inhalt springen
SBC-Standard Der Standard für Büchereien

Erweiterungen

SIP2 sieht Erweiterungen ausdrücklich vor: Unbekannte Feldkennungen sind zu überlesen, nicht als Fehler zu behandeln. Genau darauf beruht alles, was hier beschrieben ist.

Dieses Profil hält sich an drei Regeln:

  1. Alle eigenen Felder beginnen mit X. SIP2 vergibt keine Kennungen mit diesem Anfangsbuchstaben. Eine Kollision mit dem Protokoll ist damit ausgeschlossen – heute und später.
  2. Kein festes Feld wird verändert. Länge, Reihenfolge und Bedeutung der Felder ohne Kennung bleiben, wie SIP2 sie beschreibt. Wer daran rührt, verschiebt jedem fremden Gerät die gesamte Nachricht.
  3. Jedes eigene Feld ist entbehrlich. Ein Gerät, das keine der Erweiterungen kennt, arbeitet vollständig – es bekommt weniger Auskunft, aber nie eine falsche.

Die Erweiterungsfelder#

XK und XL – Art der Kennung#

Feld in Werte
XK 09, 11, 17 BAR, ACC, UID
XL 11, 23, 63 BAR, ACC, UID

Der SBC-Standard kennt für ein Medium drei Kennungen nebeneinander: die Barcodezahl, die Zugangsnummer und – seit RFID – die Seriennummer des Transponders. Für den Leserausweis gilt dasselbe.

SIP2 hat dafür genau ein Feld: AB für das Medium, AA für den Leser. Welche der drei Kennungen darin steht, ist der Nachricht nicht anzusehen. Solange ein Haus nur eine Art verwendet, genügt eine Einstellung im Bibliothekssystem. Sobald aber ein Gerät im Mischbetrieb arbeitet – Barcodescanner und RFID-Leser – schlägt dieses Verfahren fehl: Eine zwölfstellige Transponder-UID kann als Barcodezahl formal gültig sein und trifft dann ein anderes Medium.

XK und XL beseitigen das Raten. Fehlt die Angabe, gilt weiterhin die Einstellung im Bibliothekssystem – alte Geräte laufen unverändert.

XP – Geheimzahl#

Feld in Inhalt
XP 23, 63 Geheimzahl des Lesers

SIP2 kennt für die Prüfung nur AD, das Kennwort des Lesers. In der Praxis sind das zwei verschiedene Dinge: ein Kennwort, mit dem sich der Leser im Online-Katalog anmeldet, und eine kurze Geheimzahl, die er an der Zifferntastatur des Automaten eingibt.

Beide über dasselbe Feld zu führen, zwingt das Bibliothekssystem zu einer Entweder-oder-Einstellung. Mit XP kann eine Bücherei beides anbieten.

XZ – Buchungsnummer#

Feld in Inhalt
XZ 12, 18 Buchungsnummer des Vorgangs

Die Buchungsnummer ist der Schlüssel, unter dem eine Ausleihe im Bibliothekssystem geführt wird. Ein Gerät braucht sie nicht, um zu arbeiten – aber wer eine strittige Buchung klären will, findet den Vorgang damit sofort. Sie gehört deshalb auf den Beleg und ins Protokoll des Geräts.

XH und XD – Kontoauskunft in Kurzform#

Feld in Inhalt
XH 64 Zahl der heute bereits entliehenen Medien
XD 64 Datum der nächsten fälligen Rückgabe

Beide Angaben ließen sich aus der Medienliste errechnen – dafür müsste ein Gerät aber die vollständige Liste anfordern und auswerten. Für zwei Zahlen, die auf jedem Kontobildschirm stehen, ist das viel Aufwand; auf einem Konto mit sechzig Medien ist es spürbar viel.

XW – noch nicht gebuchte Gebühren#

Feld in Inhalt
XW 64 Anteil an BV, der noch nicht gebucht ist, in Cent

BV nennt einen Betrag, aber nicht seine Herkunft. Ein Teil davon kann in diesem Augenblick entstanden sein – bei der Rückgabe zu spät, bei der Verlängerung eine Gebühr –, und das Bibliothekssystem führt ihn getrennt, bis er an der Theke gebucht wird.

Für den Leser ist der Unterschied wesentlich: Was er seit Monaten schuldet, kennt er; was gerade eben angefallen ist, hat ihm noch nie jemand gesagt. Steht beides unerklärt in einer Summe, hält er sie für falsch.

Der Betrag steht in Cent und damit ohne Trennzeichen – bei BV muss ein Gerät Punkt und Komma beide beherrschen, hier gibt es nichts zu verwechseln.

XV und XR – was sich verlängern lässt#

Feld in Inhalt
XV 64 Tage vor Fristablauf, ab denen verlängert werden darf; 0 jederzeit
XR 64 je entliehenem Medium eine Wiederholung, siehe unten

Ob eine Verlängerung durchgeht, hängt an Vorbestellungen, der Höchstzahl der Verlängerungen, dem Gebührensatz des Mediums und daran, wie früh die Bücherei überhaupt verlängern lässt. Nichts davon steht in der Medienliste, und ein Gerät kann es nicht ausrechnen.

Ohne diese Auskunft bleibt einem Selbstverbucher nur, den Button immer anzubieten und die Absage danach anzuzeigen. Das ist die schlechteste aller Möglichkeiten: Wer „geht nicht" liest, drückt ein zweites Mal.

XR wiederholt sich in derselben Reihenfolge wie AU und trägt fünf durch Tabulator (09) getrennte Angaben:

XR1140360000123<TAB>N<TAB>Das Medium ist vorbestellt.<TAB><TAB>|
XR1140360000131<TAB>J<TAB><TAB>22.09.2026<TAB>50|
                │   │   │      │           └─ Gebühr in Cent
                │   │   │      └───────────── neues Rückgabedatum
                │   │   └──────────────────── Grund, wenn nicht verlängerbar
                │   └──────────────────────── `J` verlängerbar, `N` nicht
                └──────────────────────────── Kennung des Mediums

Bei N bleiben die beiden letzten Angaben leer – es gibt weder eine neue Frist noch eine Gebühr. Bei J sagen sie dem Leser vorher, was er bekommt und was es kostet.

XR geht nur mit, wenn auch die entliehenen Medien angefordert wurden (Stelle 2 der Auswahl). Die Zuordnung ist die Reihenfolge; ein Gerät sollte trotzdem die Kennung vergleichen, statt sich allein darauf zu verlassen.

XC – Adressvorlage der Mediencover#

Feld in Inhalt
XC 98 Adressvorlage, unter der ein Cover zu holen ist

Ein Selbstverbucher, der eine Kontoliste anzeigt, zeigt Titelzeilen. Ein Cover daneben beantwortet „welches Buch ist das?" schneller als jeder Titel – und wer den Titel nicht liest, erkennt es trotzdem.

Über das Protokoll gehen die Bilder deshalb nicht. Ein Cover ist leicht 50 KB groß; base64-kodiert werden daraus 67 KB, und bei zehn Ausleihen stünde ein halbes Megabyte in einer einzigen Nachricht. SIP2 ist zeilenorientiert – solche Zeilen sind kein Protokoll mehr, sondern ein Dateitransfer mit falschen Mitteln.

XC nennt stattdessen die Adresse. Das Gerät setzt zwei Platzhalter ein:

XChttp://{host}:8080/sip2/v1/cover?art=BAR&id={id}
        │                                      └─ Kennung des Mediums, wie sie
        │                                         in AB, AU, AS oder CD steht
        └───────────────────────────────────────── die Adresse, unter der das
                                                   Gerät das Bibliothekssystem
                                                   gerade erreicht

{host} kann nur das Gerät einsetzen: Es weiß, unter welcher Adresse die Verbindung zustande gekommen ist. Ein Bibliothekssystem mit zwei Netzwerkkarten müsste raten und griffe daneben. Alles übrige – auch die Art der Medienkennung – steht fertig in der Vorlage; welche Kennung in seinen Listen steht, weiß nur das Bibliothekssystem.

Das Feld steht im Systemstatus und nirgends sonst: Es gilt für alle Listen und alle Abläufe, und ein Gerät fragt den Systemstatus ohnehin, bevor es etwas anderes tut. Fehlt XC, zeigt das Gerät keine Cover – und sonst ändert sich nichts.

Zur Antwort:

  • Ein vorhandenes Cover kommt als Bild (image/jpeg, image/png, image/gif).
  • Gibt es keines, ist 404 die richtige Antwort. Ein Gerät blendet die Stelle dann aus; ein Platzhalterbild wäre schlechter, weil es aussieht wie ein Fehler.
  • Ein Cache-Control mit langer Frist gehört dazu: Cover ändern sich so gut wie nie, und dieselbe Liste wird oft neu geladen.

XE – Zeichensatz#

Feld in Werte
XE 99, 98 w, u

SIP2 nennt als Zeichensatz die Codepage 850 und fügt an, alles andere müssten Gerät und Bibliothekssystem „untereinander festlegen" – einen Weg, das im Betrieb zu tun, kennt das Protokoll nicht. In der Praxis heißt das: zwei Einstellungen an zwei Stellen, und wehe, sie stimmen nicht überein. Falsch eingestellt bemerkt man es an zerlegten Umlauten in Titeln und Lesernamen.

XE macht daraus eine Frage und eine Antwort. Das Gerät nennt beim Systemstatus, was es kann, das Bibliothekssystem antwortet mit dem, was gilt. Fehlt das Feld, gilt Windows-1252 – deshalb verstehen sich auch zwei Systeme weiterhin, die beide nichts davon wissen.

Zwei Festlegungen machen UTF-8 überhaupt erst gefahrlos, und beide stehen im Nachrichtenaufbau: Feste Felder bleiben ASCII, und die Prüfsumme läuft über Bytes. Damit ändert UTF-8 nichts an der Zählweise – ein Umlaut wiegt dort zwei Bytes, und genau die gehen in die Summe ein.

XM – Betriebsmodus#

Feld in Werte
XM 98 NORMAL, MAINT

Ein Bibliothekssystem im Tagesabschluss ist erreichbar, aber nicht buchungsbereit. SIP2 kennt für diesen Zwischenzustand keine Angabe: Man kann ihn nur nachbilden, indem man Ausleihe und Rückgabe einzeln auf N setzt – dann steht das Gerät aber vor derselben Lage wie bei einer Bücherei, das gar keine Selbstverbuchung anbietet.

XM unterscheidet beides. Bei MAINT weiß das Gerät, dass es später erneut fragen darf, und kann dem Leser sagen, dass es gleich wieder geht.

XB – bedienter Datenbestand#

Feld in Inhalt
XB 98 Kennung des Datenbestands, den das Bibliothekssystem gerade bedient

Ein Bibliothekssystem führt oft mehrere Bestände nebeneinander – Zweigstellen, eine übernommene Nachbarbücherei, ein Testbestand für Schulungen. Welchen davon es bedient, ist eine Einstellung des Systems und nicht des Geräts.

Der Name der Bücherei in AM reicht dafür nicht: Zweigstellen tragen denselben Trägernamen, und ein Testbestand heißt gewöhnlich genau wie der echte. Wer vor dem Automaten steht und wissen will, ob er auf die richtigen Daten schaut, sieht zweimal dasselbe.

XB nennt den Bestand so, wie ihn das Bibliothekssystem selbst benennt – bei BVS ist das der Name des Datenverzeichnisses:

XBdbf15|

Der Inhalt ist eine Kennung, kein Anzeigetext: Ein Gerät gibt sie unverändert weiter, wertet sie aber nicht aus. Sie gehört in den Wartungsbereich des Geräts, nicht auf den Bildschirm des Lesers.

Fehlt das Feld, weiß das Gerät es schlicht nicht – ein älteres System sendet es nicht, und daran ändert sich sonst nichts.

XA – AFI-Werte der Sicherung#

Feld in Inhalt
XA 98 <gesichert>,<entsichert> – die beiden AFI-Werte der Bücherei

Bei RFID trägt das Medium seine Sicherung selbst: Ein Byte auf dem Transponder, der AFI (Application Family Identifier), sagt dem Gate am Ausgang, ob es anschlagen soll. Wer verbucht, schreibt dieses Byte um – also auch ein Selbstverbucher.

Das Bibliothekssystem führt die Sicherungstechnik in diesem Fall nicht mit: „magnetisch" und „Sicherung aus" der Ausleihe stehen auf U, und das Gerät verfährt nach seiner eigenen Einstellung. Genau darin liegt die Falle. Dieselben zwei Werte werden dann an zwei Stellen gepflegt, und wenn sie auseinandergehen, bemerkt es niemand: Ein Medium, das mit dem falschen Wert entsichert wurde, geht ungehindert hinaus; eines, das mit dem falschen Wert gesichert wurde, löst beim rechtmäßigen Leser Alarm aus. Beides sieht nach einem Fehler der Technik aus, nicht nach einer verstellten Einstellung.

XA nennt beide Werte, durch Komma getrennt – zuerst den gesicherten Zustand, dann den entsicherten:

XA0x07,0xC2|
  │    └──── entsichert: verbucht, das Gate lässt es durch
  └───────── gesichert: in Bücherei, das Gate schlägt an

Geschrieben werden darf hexadezimal mit 0x davor oder dezimal. Die Werkzeuge der Lesegerätehersteller zeigen die Werte hexadezimal, Mitschnitte zeigen sie dezimal; das Bibliothekssystem reicht durch, was bei ihm eingestellt ist, und rechnet nichts um. Ein Gerät muss beide Schreibweisen lesen können.

Üblich sind 0x07 für gesichert und 0xC2 für entsichert. Verbindlich ist das nicht: Maßgeblich ist allein, worauf das Gate in der Bücherei eingestellt ist. Deshalb steht hier ein Wertepaar und keine feste Zuordnung – und deshalb ist die Reihenfolge im Feld wesentlich, nicht der Wert.

Das Feld steht im Systemstatus und nirgends sonst, aus demselben Grund wie XC: Es gilt für alle Vorgänge, und ein Gerät fragt den Systemstatus ohnehin, bevor es etwas anderes tut. Fehlt XA, bleibt es bei der Einstellung des Geräts – alte Geräte und alte Bibliothekssysteme laufen unverändert.

XS, XU und XF – Kennung des Bibliothekssystems#

Feld in Inhalt
XS alle Antworten Kennung und Fassung des Bibliothekssystems
XU alle Antworten Mindestfassung, die ein Gerät haben muss
XF alle Antworten Liste der angebotenen Funktionen

Diese drei Felder hängen an jeder Antwort und sagen dem Gerät, mit wem es spricht. Das ist zunächst eine Erleichterung bei der Fehlersuche: Im Mitschnitt steht, welche Fassung geantwortet hat. XU erlaubt darüber hinaus, ein zu altes Gerät zu erkennen, bevor es Nachrichten sendet, die die Gegenstelle nicht versteht.

XSbvssip/3.0.541|XUX3.0.400|XFcheckout,returns|

Prüfliste für Hersteller#

Wer ein Gerät gegen dieses Profil entwickelt, sollte diese Punkte durchgehen:

  • Kommt die Sequenznummer der Antwort mit der gesendeten überein? Antworten mit abweichender Nummer sind zu verwerfen, nicht auszuwerten.
  • Wird die Prüfsumme geprüft und bei Fehler 97 gesendet?
  • Werden unbekannte Feldkennungen überlesen statt als Fehler behandelt?
  • Wird BX aus dem Systemstatus ausgewertet, statt nicht unterstützte Kommandos auf Verdacht zu senden?
  • Wird AF unverändert angezeigt, statt eigene Meldungen zu formulieren?
  • Wird bei der Ausleihe erst auf 1 im Erfolgskennzeichen hin die Sicherung deaktiviert?
  • Werden die AFI-Werte aus XA übernommen, statt sie im Gerät ein zweites Mal zu pflegen?
  • Wird die eigene Uhr nach dem Zeitabgleich aus der Antwort 98 gestellt?