UB BRAUNSCHWEIG
Symbolfoto
  • Impressum
  • Startseite
  • allegro-C von A-Z
  • Druckversion


allegro und OAI

Offenes Anbieten von Informationsprodukten

OAI Icon
OAI-Homepage

  Mit a99 ausprobieren : h oai  eingeben

Worum geht es?

Die Open Archives Initiative (OAI) hat vor Jahr und Tag ein Protokoll proklamiert, mit dem es ein Leichtes sein soll, zu ernten, wo andere gesät haben. Das Erfreuliche an den digitalen Erzeugnissen ist ja, daß man sie verlustfrei duplizieren kann: wie oft und wie viel man auch erntet, nachher ist stets noch genausoviel da wie vorher. Wenn also der Datenwirt sein Geld mit anderen Dingen verdient, kann er sich's bequem und seinen Grund und Boden für jedermann zugänglich machen, d.h. alles zum Abernten freigeben. Wie nun aber das Ernten von Feld- und Gartenfrüchten nicht auf x-beliebige Art, sondern mit Vor- und Umsicht nach erprobten Verfahren zu erfolgen hat, so sind auch beim digitalen Abernten von Datenfrüchten strikte Regeln notwendig, bei deren Nichteinhaltung man leer ausgeht. Die Summe solcher Regeln wird "Protokoll" genannt. Das OAI-Protokoll soll demnach als einheitliches Regularium das ressourcenschonende Beziehen von Daten über Unternehmensgrenzen hinweg ermöglichen. Folgendermaßen muß man sich das Ganze vorstellen:

Ein Datenerzeuger (engl. "Data Provider"), nennen wir ihn Mecke, kann digitale Handzettel verbreiten, auf denen steht:

 

Selber ernten bei OAI-Datenwirt Mecke!

Adresse:  http://www.mecke.de/oai.php?...

 
Die URL, die er hier angibt, ist die sog. Basis-URL seiner Produktionsstätte. An diese Basis hat man wohlformulierte Wünsche anzuhängen, um bestimmte Auskünfte oder Produkte abzurufen. Z.B. sieht das dann so aus:

   http://www.mecke.de/oai.php?verb=ListSets

Das Wort "verb" bedeutet hierbei soviel wie "Wunsch". Der hier formulierte Wunsch, verb=ListSets, erbittet die Zusendung einer Liste der bei Mecke erhältlichen Produkte. Anders als bei Agrarerzeugnissen ist jedoch auf diesem Markt auch das Aussehen der Antworten auf solche Anfragen ganz penibel geregelt! Stets muß die Auskunft, die gegeben wird, in genauestens vorgeschriebener Weise mit XML verbrämt sein. Im genannten Beispiel hat die Antwort im Wesentlichen aus XML-Textabschnitten dieser Gestalt zu bestehen:

<set>
  <setSpec>obst:pflaumen</setSpec>
  <setName>Pflaumen</setName>
</set>
<set>
  <setSpec>gemuese:mohrrueben</setSpec>
  <setName>Möhren</setName>
</set>

Das sind nur die obligatorischen Dinge, es kann noch allerhand andere Information hinzutreten. Mecke kann in dieser Weise sein Angebot in Gruppen strukturieren (
obst, gemuese) und seine konkreten Produkte in diese Gruppen einordnen (pflaumen, mohrrueben). Sein Nachbar, Datenwirt Fricke, kann es ganz anders machen, nicht aber die Bezeichnungen (XML-"tags") ändern, die zwischen <...> stehen! Seine Basis-URL wird natürlich auch anders aussehen, z.B.:

            http://www.datenfricke.eu/datashop.pl?

und seine Angebotsgruppen (Sets) können ganz andere sein, z.B. formal gegliedert (Aufsätze, Bücher, ...) oder inhaltlich (Mathematik, Philosophie, ...).

Im nächsten Schritt kann der Kunde seine Bestellung aufgeben. Will er Meckes Möhren beziehen, muß seine Bestellung so aussehen:

   http://www.mecke.de/oai.php?verb=ListRecords&set=gemuese:mohrrueben&from=2008-12-01&metadataFormat=oai_dc

Hiermit geschieht das eigentliche Ernten, was also in Wirklichkeit ein Abrufen ist und kein physisches Hingehen mit Schmutzigmachen der Hände - das Krümmen des Fingers für die linke Maustaste genügt! Der Kunde ruft bei Mecke das Produkt Möhren ab, und zwar alle ab 2008-12-01 erzeugten Exemplare. Gewünscht wird hier zudem der Verpackungstyp oai_dc.

Mecke und Fricke können unterschiedliche Verpackungen anbieten, jeder muß aber auf Verlangen auch den Standard-Verpackungstyp oai_dc liefern können. Stets handelt es sich beim Verpackungsmaterial um XML, worauf sich die Datenwirtschaft international eingeschworen hat. Um damit besser umgehen zu können, wurden in der Skriptsprache FLEX ein paar  XML-relevante Funktionen  verbessert (s. Vb.212 und Vb.213).

Das ist schon der Kern des OAI-Regulariums! Was sonst noch geregelt ist, steht in

      http://www.openarchives.org/OAI/openarchivesprotocol.html 

 

Teillieferungen!

Eine wichtige Frage dürfen wir nicht vergessen! Und zwar: Was ist, wenn die Menge zu groß ist für eine Ladung? Denn die Kapazität eines Transportvehikels ist immer begrenzt, eine Auslieferung muß daher in mehreren Teilen erfolgen können. Folgende Methode hat man sich dafür ausgedacht:

Bei großen Ertragsmengen kann der Erzeuger, hier also Mecke, bei einer von ihm gesetzten Grenze erst mal Schluß machen. Dann muß er im Lieferschein ein individuelles Abruf-Kennwort angeben, den sog. "resumption token", kurz RT. Der Datenbezieher erkennt an der Anwesenheit dieses Kennworts, daß die Lieferung unvollständig ist. Mit dem RT kann er den Rest - oder die nächste Teillieferung - abrufen. Ist es wieder nur eine Teillieferung, wird sie wiederum einen RT - einen anderen natürlich - enthalten. Ein RT kann mehrfach verwendet werden, um exakt dieselbe Teillieferung etwa nach einem Fehlversuch nochmals abzurufen (ein sehr großer Unterschied zu Agrarprodukten!). Der Erzeuger kann die RTs nach einer von ihm selbst zu setzenden Frist löschen, d.h. der Endanwender kann nicht davon ausgehen, nach Jahren noch eine bestimmte Teillieferung erneut abrufen zu können - auch Möhren sind nicht unbegrenzt haltbar...

 

Zur allegro-Realisierung

Eine Liste der Basisadressen, ca. 490 an der Zahl, wird zur Auswahl aufgeblättert, wenn man im OAI-Menü die Funktion "OAI-Server" wählt.

Das Original der Liste liegt bei der  Openarchives.org .

 Als allegro-Anwender kann man ab V29.0 sowohl per OAI ernten (und damit "Service Provider" werden) als auch selber als OAI-Erzeuger ("Data Provider") an den Markt gehen:

1. Für das Erkunden und Ernten von OAI-Produkten gibt es ein eigenes Menü mit eigener Hilfe ( h oai )

2. Das eigene Angebot wird mittels avanti ins Netz gestellt. Dafür sind einige PHP-Skripte entwickelt worden, die in PHPAC ab V29 enthalten sind. (Verfügbar ab Ende Januar 2009).

Hinweis
Seit 2006 gibt es eine Perl-Implementierung des OAI-Protokolls von Thomas Berger:
http://www.gymel.com/populo/oai-pmh.html
Diese beruht auf dem "populo"-Paket des nämlichen Autors, das bei Anbietern von allegro-Web-Katalogen sehr verbreitet eingesetzt wird. Anwender von PHPAC werden möglicherweise nicht geneigt sein, neben PHP auch noch Perl einzusetzen, daher wurde entschieden, eine eigene Implementierung in PHP auszuarbeiten.



Realisierung

Tip:
Wer Service Provider werden will, kann in a99 das Menü  h oai nutzen,
um Repositorien zu erkunden und Metadaten abzuernten.

Skripte für OAI Data Provider
=============================
Die Skripte müssen auf das PHPAC-Verzeichnis zur Datenbank, wo schon die
anderen PHP-Skripte liegen.
Für jede Datenbank braucht man also je eine Kopie der Dateien.

Erzeugt wird in jedem Fall XML. Wenn man den output im Browserfenster sehen
will (sinnvoll zu Testzwecken), dann am besten den IE nehmen, weil er XML
brauchbar anzeigt.


oai.php
  Das Skript fuer die Basis-URL. Darin keine Anpassungen nötig.
  Braucht:  av_mini.php : Grundwerte der eigenen Datenbank (PHPAC)
            oai_ini.php : OAI-Angaben zur eigenen Datenbank

  oai.php muß mit einem der 6 Verbs und den zugehörigen Argumenten aufgerufen werden.
  Für jedes Verb gibt es darin eine PHP-Funktion, bis auf oai_id() wird
  darin jeweils eine JOB-Datei gestartet:

  Identify :            oai_id()
  ListSets :            oai_ls()       oai_ls.job
  ListMetadataFormats : oai_lm()       oai_lm.job
  ListIdentifiers :     oai_lr("i")    oai_lr.job
  ListRecords :         oai_lr("r")    oai_lr.job
  GetRecord :           oai_gr()       oai_gr.job


oai_ini.php
  OAI-Angaben zur eigenen Datenbank
  In diese muß der Data Provider für seine Datenbank die nötigen
  Angaben eintragen. Interne Kommentare erklären alles.


-----------------------------------------------------------------------

Bei der Datenbank (also auf dem DbDIr) müssen diese Dateien liegen:

oaidc.apr
  Export im Format oai_dc

oailist.apr
  Export der Datensatz-Idnummern für die Funktion ListIdentifiers

Beide sind intern kommentiert und müssen bei anderen Formaten als
$A.CFG geeignet umgeschrieben werden.


Test: Mit a99 und dem Menü  oai.rtf 
      Vorher setzen:  $Serv LOCAL
                      $Burl http://localhost/<path>/oai.php
      dann  h oai


Zum Thema "Resumption Token"  (RT)
----------------------------------

Was ist ein RT?
Bei großen Ergebnismengen kann der OAI-Service bei einer vom Admin
zu setzenden Grenze erst mal Schluß machen. Dann muß er im gelieferten
Datenpaket ein individuelles Kennwort mitliefern, den sog. RT
Der Endanwender merkt an der Anwesenheit dieses Kennworts, daß die
Lieferung unvollständig ist. Mit dem Kennwort kann er den Rest - oder
die nächste Teillieferung - abrufen. Ist es eine Teillieferung, muß
sie wiederum einen RT - einen anderen natürlich - enthalten.
Ein RT kann mehrfach verwendet werden, um dieselbe Teillieferung
etwa nach einem Fehlversuch nochmals abrufen zu können.
Der Admin kann die RTs nach einer von ihm selbst zu setzenden Frist
löschen, d.h. der Endanwender kann nicht davon ausgehen, nach Jahren
noch eine bestimmte Teillieferung erneut abrufen zu können...

Realisierung
Für die RTs zu einer Datenbank wird an das DbDir ein Unterverzeichnis
"rt" angehängt. "avanti" braucht dort Schreibzugriff.
Ein RT ist dann der Name einer Datei, die auf DbDir/rt liegt.
Der Dateiname ergibt sich aus dem momentanen Datum+Uhrzeit
, und zwar
allein aus den Ziffern, z.B. 20090201135622. Das dürfte als Dateiname
sowohl eindeutig wie auch einfach sein. Die Namensstruktur ermöglicht
auch ein schnelles Sichten und vor allem Löschen alter Dateien.
Was enthält eine RT-Datei? Es handelt sich dabei um eine Liste der
internen Satznummern aller Sätze, die noch nicht ausgeliefert wurden.
Hatte also die erste Erg.Menge 10000 Sätze und hat der Admin
entschieden, daß jeweils mit 500 Sätzen erstmal Schluß ist, dann
enthält die erste solche Datei die restlichen 9500 Nummern, die
zweite nur noch 9000 Nummern usw.
Die erste Zeile einer RT-Datei enthält folgende Angaben:
anfang-ende (ErstellDatum) : Suchbefehl
  z.B. 501-10000 (2009-01-31) : 2008-01-01 bis 2008-12-31

ACHTUNG
Ein Neuaufbau der Datenbank macht die RT-Dateien ungültig! WENN der
Admin einen Neuaufbau veranstaltet, muß er die zu dem Zeitpunkt vor-
liegenden RT-Dateien alle löschen und eine "Sorry"-Meldung senden,
wenn jemand noch eine davon abrufen will.






[i] zuletzt aktualisiert: 08.04.2011
Email: ub@tu-bs.de