Benutzer:ExilSchwabe/Vorlagen

Manufaktur

Effizientes Vorlagen-Design vs. RückwärtskompatibilitätBearbeiten

Bei der Vorlage zur Google Buchsuche hat sich die Konvention eingebürgert, die gewünschten einzelnen Parameter nach einer definierten Reihenfolge (ID, Land, Seite) aneinanderzureihen, wobei nicht benötigte einfach weggelassen werden.

     Name     Parameter 1   |  2     |   3

 {{   GBS |  Google-Buch-ID   }}

 {{   GBS |  Google-Buch-ID | (Seite)   }}

 {{   GBS |  Google-Buch-ID |   (US) | (Seite)   }}

Die optionalen Parameter sind im Beispiel mit einer runden Klammer gekennzeichnet.
Die Leerräume sind überflüssig und nur zur optischen Hervorhebung.

Genaugenommen müssten in Vorlagen, nicht belegte Parameter wie US durch eine Auslassung gekennzeichnet werden. Obiges zweite Beispiel wäre folgendermaßen abzubilden:

{{ Google-Buch-ID |    | (Seite) }}

Dies wurde dadurch vermieden, dass per Programmlogik der zweite Parameterwert (sofern vorhanden d.h. nicht leer) mit der Buchstabenfolge US verglichen wurde und bei Verschiedenheit als Seitenangabe interpretiert wurde.

Programmtechnisch ist es vorteilhafter, wenn an derselben Position immer der gleiche Parameter steht. Käme die Seite immer an Postion 2, so braucht nur geprüft zu werden, ob ein Wert vorhanden ist.

Auch die Programmierung in der deutschen Wikipedia setzt auf eine fixierte Reihenfolge mit gegebenenfalls leeren Zwischenwerten. Für mehr als einen Parameterwert verwendet sie extra definierte Vorlagen mit Booleschen Verknüpfungen zur Bestimmung, ob 2 bis vier Parameter gleichzeitig nicht-leere Zeichenketten enthälten (also alle definiert sind).

Die optionale Angabe für das Land mit uneingeschränktem Zugriff könnte in unserem Fall ebenso gut an den Vorlagen-Namen angehängt werden. Somit gäbe es zwei Vorlagen mit gleichem Aufbau für den Aufruf:

 {{ GBS   |  Google-Buch-ID | (Seite)   }}
 {{ GBSUS |  Google-Buch-ID | (Seite)   }} anstelle {{GBS|ID|US|Seite}}

d.h. er spart pro Vorlage mindestens die Eingabe des Trennzeichens |, der Quelltext der Seite wird kleiner, der Präprozessor bekommt aus jeder Vorlage nur das nötige, um genau das gewünschte Ergebnis zu erzielen.

Für den Benutzer ist der Aufwand annähernd gleich bei gleichzeitig größerer Einheitlichkeit des Aufbaus.

Die Ersetzung alter Vorlagen, die den US-Parameter noch als Kennzeichnung für die US-Proxy-Verwendung enthalten, kann mit regulären Ausdrücken manuell erfolgen oder automatisiert werden.

Meines Erachtens wäre es ausreichend, sich die Unterscheidung überhaupt zu sparen und in Seiten mit GBS-Links einen generellen Hinweis einzublenden:

Wichtiger Hinweis: Links zu Google-Digitalisaten sind nur angegeben, wenn das Werk in der Google Buchsuche vollständig angezeigt werden kann. Trotz Ablauf des Urheberschutzes nach internationalem und amerikanischem Recht ist der Zugriff von außerhalb der USA auf Werke nach 1877 beschränkt. Jahrgänge bis etwa 1909 sind aber noch über einen US-Proxy-Server zugänglich. Wenn also in diesem Zeitfenster keine Vollansicht möglich ist, kann es am fehlenden oder deaktivierten Proxy liegen. Für eine Anleitung siehe Google Book Search.


So bliebe nur die Behandlung des letzten optionalen Parameterwerts. Da in der MediaWiki-Software leicht abgefragt werden kann, ob ein einzelner Parameter-Wert definiert ist, kann die optionale Seitenangabe am Ende per Programmlogik #if: abgefangen werden und wie bisher gegebenenfalls einfach weggelassen werden.

Genaugenommen wird die Seitenangabe nur deshalb als getrennter Parameter angegeben, weil ein Gleichheitszeichen (=) in unbenannten Parametern fehlinterpretiert würde:

http://books.google.com/books?id=cBgPAAAAIAAJ&pg=PA47
wobei PA47 nach dem &pg= für die Seite 47 (engl. PAge) steht.

Bei Verwendung von ganzzahligen Parameter-Namen dürfte das Gleich-Zeichen dagegen vorkommen, und der zweite optionale Parameter wäre entbehrlich um den Preis, dass zusätzlich 1= sowie &pg= einzutippen wären (5 Zeichen mehr als zur anderen Lösung).

{{ GBS | 1=cBgPAAAAIAAJ&pg=PA47 }}

Wikisource verwendet momentan (Stand: 21. April 2009) die MediaWiki-Version 1.15alpha mit installierten ParserFunctions. Mit StringFunctions wäre programmtechnisch eine verbesserte Zeichenketten-Behandlung möglich. D. h. benötigte Teil-Strings könnten herausgeschnitten und nach Bedarf wieder zusammengesetzt werden. Durch Ersetzen des Gleich-Zeichens durch sein Äquivalent = mit Hilfe der #replace: Funktion könnten auch solche Parameter implizit übergeben werden. Für reguläre Ausdrücke gibt es die Erweiterung RegexFunctions. Nachteil der Verwendung zusätzlicher Erweiterungen ist, dass der Server dadurch mehr belastet wird und es zu höheren Antwortzeiten kommen kann.

Analog ist die Vorlage Vorlage:IA aufgebaut:

{{ IA  | Identifier | (Linktyp) }}

An erster Stelle steht wie bei Google eine ID (hier: der Identifier für ein Digitalisat im Internet Archive). Der zweite optionale Parameter steuert den Typ des Links. Standard bei fehlendem Parameterwert ist die Anzeige der Standard Titel-Details.

Für derartige Fallunterscheidungen bietet die Wikimedia-Software eigenes Konstrukt an.

{{#switch:{{{2|}}}
   |DL=download
   |FB
   |DS=stream
   |details
}}

Wenn der zweite Parameter-Wert DL ist, dann enthält der Link "download"; wenn FB oder DS dann "stream" (Durchfallen auf den nächsten definierten Rückgabewert), für alle sonstigen Werte "details".

Ein Nachteil von #switch: ist, dass umfangreichere Datenmengen als im Beispiel bei Vorlagen, die auf einer Seite vielleicht 200 mal abgearbeitet werden müssen, schnell die Obergrenzen für die Expansion (pre and post expand limits) erschöpfen.

Das ganze lässt sich glücklicherweise auch mit mehreren Vergleichen #ifeq: realisieren.

Vorteil dabei ist, dass Daten in bedingten Anweisungen erst dann expandiert werden, wenn sie benötigt werden. Trifft eine Bedingung nicht zu, muss auch nicht der ganze dann-Zweig expandiert werden.

Ein Überschreiten des Post expand limits ist mir bei der Test-Vorlage Vorlage:GBSIA passiert, wo ein #switch: längere URL-Werte enthielt.

Dort wurden die alten Vorlagen GBS, IA und GBIA in einer zusammengefasst, wobei die alte Konvention der Parameterfolge beibehalten wurde.

 {{   GBSIA |  Google-Buch-ID |   (US) | (Seite)  | (Op) | (Identifier) | (Linktyp) }}

Man erkennt dass zu den Parametern der GBS-Vorlage die der IA-Vorlage gekommen sind, dazwischen ein zusätzlicher Steueroperator. Alle Parameter ausser der Google-Buch-ID sind optional.

Der Parameter Op gibt an, ob zusätzlich eine Suche im Internet Archive nach der Google Book ID durchgeführt werden soll (?, Standardwert bei fehlender Angabe) bzw. signalisiert mit dem Sonderzeichen, ob eine frühere Suche mit dem IA-Suchlink erfolgreich war (+) oder nicht (-). Das Sonderzeichen # unterdrückt die IA-Suche komplett (Kompatibilität zur alten Vorlage GBS), @ ermöglicht, wenn das Digitalisat im (engl.: at) Internet Archive gespiegelt vorliegt, die Angabe des IA-Identifiers im unmittelbar folgenden Parameter zur direkten Verlinkung auf ein dort vorhandenes Digitalisat.

Weil jeder Parameter außer dem ersten fehlen kann, sind viele Auswertungen nötig, um zu bestimmen, ob der Parameter an zweiter Stelle für das Land, die Seitenangabe oder den Operator steht. Da die eingesetzte Wikimedia-Software auch keine Variablen kennt, die den einmal ermittelten Wert speichern könnten (etwa Op befindet sich an Position 3), muss diese Auswertung bei Bedarf an anderer Stelle der Programmlogik nochmals wiederholt werden. Es gibt allerdings eine Erweiterung für Variablen bzw. für Schleifen (Loops), die das ganze erleichtern würden. Ohne diese können die ermittelten Parameter-Werte auch an eine Hilfs-Vorlage übergeben werden, wo sie an definierter Position ausgewertet werden können.

Nach den bisherigen Ausführungen dürfte klargeworden sein, dass das Ganze ein ziemlich ineffizientes Verfahren ist.


Wie soll das Ganze in einer Vorlage bewerkstelligt werden, um die genannten Probleme zu umschiffen:

 {{ GBIA   | Op | Google-Buch-ID | Seite | (Identifier) | (Linktyp) }}

Wenn wir den Operator und die Seitenangabe obligatorisch machen, dann vereinfacht sich die Programmlogik erheblich. Wir können Op sozusagen als Schalter direkt nach dem Vorlagen-Namen an die erste Position setzen. Denkbar wäre wieder das Schaltzeichen in den Vorlagen-Namen zu integrieren und mit mehreren Vorlagen zu Arbeiten. Dabei wären die Namenskonventionen zu beachten und ggf. andere Zeichen zu verwenden. Wie bei Seitennamen generell wird zwischen Groß- und Kleinbuchstaben unterschieden. Meistens wird zusätzlich gefordert, dass am Anfang ein Großbuchstabe stehen muss. Leerzeichen unterscheiden sich von Unterstrichen (_). # in Vorlagennamen bewirkt das alle darauf folgenden Zeichen beim Aufruf des Namens ignoriert werden.

Wenn wir die Seitenangabe auch fakultativ machen, handeln wir uns das Problem ein, wie bei Operatorwert @ an Position 3 zweifelsfrei zwischen Seitenangabe und Identifier (oder ggf. dem letzten Suchdatum bei Operatorwert -) unterschieden werden kann.

Der Op-Wert ist Standardmäßig ?, d.h. es wird ein IA-Suchlink aus den max. ersten 12 Zeichen der Google Buch ID im Internet Archive erzeugt.

Das Sonderzeichen - (Bindestrich-Minus) bedeutet, dass eine frühere Suche mit dem IA-Suchlink vergeblich war. Für diesen Fall kann anstelle des Identifier das Datum der letzten erfolglosen Suche eingetragen werden. Noch besser wäre es, wenn dort automatisch in der Vorlage ein Zeitstempel ( {{subst:CURRENTTIMESTAMP}} ) beim allerersten Abspeichern der (mindestens durch das Setzen eines Op-Werts auf -) insgesamt veränderten Seite hinterlegt würde.

Eigentlich überflüssig ist die Angabe des Sonderzeichens + nach erfolgreicher Suche, wobei der Suchlink weiter erzeugt wird.

In diesem Fall kann ja zum Sonderzeichen @ gleich der Identifier eingetragen werden, der auf das gespiegelte Digitalisat im IA verlinkt.

Schließlich zum zeitweiligen Unterdrücken sämtlicher IA-(Such-)Links das Sonderzeichen #, das nur den Google Link erzeugt (mit Ergebnis wie bei GBS).

VerallgemeinerungBearbeiten

Durch Google digitalisierte Bücher sind nicht nur im Internet Archive gespiegelt, einige amerikanische Partner-Bibliotheken machen das Google-Digitalisat aus ihrer Bibliothek zusätzlich in einem Digitalen Repositorium verfügbar. Hathi Trust ist das bekannteste Beispiel. Das Repositorium ist nicht auf Google-Digitalisate beschränkt. Nach amerikanischem Urheberrecht freie Bände können mit einem eigenen Browser durchgeblättert werden. Auch hier gelten Zugriffbeschränkungen für Nicht-US-Bürger(innen).

Der Zugriff auf das Digitalisat erfolgt über eine <Volume ID> und eine permanente URL

http://hdl.handle.net/2027/<Volume ID>

Alternativ kann zusätzlich eine fortlaufende Seitenfolge-Nummer <SEQ> angegeben werden, die alle gescannten Seiten einschließlich Einband von 1 an aufsteigend durchnummeriert. Da Titelseiten und mit römischen Ziffern numeierte Vorworte fortlaufend arabisch weitergezählt werden, beginnt die arabische Seitennummer 1 wie gedruckt erst bei einem höheren <SEQ>-Wert. Die <Winkel-Klammern> dienen nur der einfacheren Notation und sind nicht Teil des ID- oder SEQ-Wertes.

http://babel.hathitrust.org/cgi/pt?id=<Volume ID>&seq=<SEQ>

Statt des & als Trennzeichen ist auch ein Semikolon ; erlaubt.

Auch dieser Fall kann analog durch eine Vorlage abgedeckt werden {{ HathiTrust | Volume ID | (SEQ) }}

Sollen alle Digitalisate desselben Originals in einer Vorlage zusätzlich zum Google-Link gelistet und verlinkt werden, so wäre zu dem IA-Link ein weiterer HT-Link anzugeben.

ProvenienzBearbeiten

Es macht Sinn alle Digitalisate, denen dasselbe gescannte Original zugrundeliegen zusammenzufassen (Google-Digitalisat eines bestimmten Exemplars und gespiegelte Versionen im Internet Archive und Hathi Trust). Da allen diesen Versionen dasselbe gescannte Original zugrundeliegt, enthalten die (abgesehen von Formatumwandlungen) verlustlosen digitalen Faksimile-Kopien auch fehlende Seiten und gegebenenfalls Verschmutzungen oder zuätzliche handschriftlichn Anmerkungen der Scan-Vorlage sowie alle Scanfehler. Die OCR-Version kann sich unterscheiden.

Hilfreich für die Beurteilung der Qualität des Digitalisat ist als auch die Herkunft des Digitalisats. Das gleiche Buch kann in einer anderen Bibliothek in besser Qualität gescännt worden sein und auch in gespiegelten Versionen vorliegen. Siehe auch die Übersichtsseite zum Google Buchsuche-Projekt. Inzwischen wurde die Aufnahme von weiteren Partner-Bibliotheken eingestellt.


Bibliothek Kürzel OPAC Software/
Hersteller
Google-
Kooperation
GBS-Suche
im OPAC
Nachweis
Beispiele
HathiTrust
Kooperation
Bayerische Staatsbibliothek
München (Deutschland)
BSB OPACPlus 2007-03-06 OPAC
Google
Nein
Columbia University
New York City, NY (USA)
CUNY CLIO 2007-12-13
Committee on Institutional Cooperation
Champaign, IL (USA)
University of Chicago Library,
University of Illinois at Chicago,
Indiana University, University of Iowa,
Michigan State University,
University of Minnesota,
Northwestern University, Ohio State University,
Pennsylvania State University, Purdue University
CIC Lens SirsiDynix Horizon, Medialab Aquabrowser 2007
Cornell University Library
Ithaca, NY (USA)
CU CUL/WorldCat 2007-08-07
Harvard University Library
Harvard (USA)
Harvard HOLLIS 2007 HOLLIS
Google
Nein
Universiteitsbibliotheek Gent
Gent (Belgien)
ALEPH
ExLibris
2007 GB aus Gent
E-Books weltweit
MeerCat
Google
Keio University Media Center
Tokyo (Japan)
KEIO KOSMOS II 2007-07-06 KOSMOS II KOSMOS
Google
Nein
Bibliothèque Municipale de Lyon (Frankreich) BML Catalogue [1]
Katalanische Nationalbibliothek (Spanien)
New York Public Library
New York, NY (USA)
Oxford University Bodleian Library
Oxford (England)
Princeton University
Princeton, NJ (USA)
Stanford University
Stanford, CA (USA)
University of California
Palo Alto, CA (USA)
Universität Complutense
Madrid (Spanien)
Universitätsbibliothek Lausanne
Lausanne (Schweiz)
University of Michigan
Ann Arbor, MI (USA)
University of Texas
Austin, TX (USA)
University of Virginia
University of Wisconsin - Madison


Die Links aus dem OPAC verwenden im Allgemeinen eine für die Bibliothek spezifische Volume ID mit einem Bibliothekskürzel am Anfang der URL: http://books.google.be/books?vid=GENT900000022395. Durch Blättern lässt sich die zugehörige Google Book ID aus der URL http://books.google.com/books?id=yaATAAAAQAAJ ermitteln.

ProgrammierschnittstelleBearbeiten

Google, Internet Archive und HathiTrust erlauben auch die Suche über ein Application Programming Interface (API). Darüber können auch die Meta-Daten abgefragt werden.