SRU (Search/Retrieve via URL) ist ein auf HTTP basierendes Protokoll für Datenbankabfragen. Als Nachfolger von Z39.50 wird es ebenso praktisch nur für Bibliotheksdatenbanken verwendet. Suchanfragen werden über einen URL-Parameter in der Abfragesprache CQL (Contextual Query Language) angegeben. Die Ergebnisse werden per XML in verschiedenen bibliographischen Formaten zurückgeliefert. Die Erweiterung SRU Record Update wird nur intern zur Änderung von Datensätzen verwendet. Weitere Informationen gibt es in Wikipedia und bei bei der Library of Congress.

Neben der hier beschrieben SRU-Schnittstellen unter sru.k10plus.de für den K10plus betreibt das BSZ einen eigene SRU-Server für den SWB.

Datenbanken

Die Basis-URL der SRU-Schnittstelle für den gesamten K10plus-Katalog ist https://sru.k10plus.de/opac-de-627. Für weitere Datenbanken muss der URL-Pfad (opac-de-627) durch das jeweilige Datenbankkürzel ersetzt werden. Eine Liste aller unterstützen Datenbanken ist unter  https://uri.gbv.de/database/ einsehbar. Für einige Datenbanken gibt es Zugangsbeschränkungen. Die Authentifizierung erfolgt automatisch per IP-Adresse oder mittels Zugangsdaten, die Sie von der VZG oder dem BSZ erhalten.

Suchabfrage

Suchanfragen und Darstellung erfolgen im Zeichensatz UTF-8.

Beispiel-URL für eine searchRetrieve-Operation; gesucht wird das Stichwort "McCarthyism" im Titelindex des K10plus-Verbundkataloges "opac-de-627", Anzeige von 10 Treffern im Format "mods":

http://sru.k10plus.de/opac-de-627?version=1.1&operation=searchRetrieve&query=pica.tit%3DMcCarthyism&maximumRecords=10&recordSchema=mods

Suchattribute

Eine Liste der konfigurierten Suchattribute können Sie dem SRU-Explain-Record der Datenbank entnehmen, unter Datenbanken ist der jeweilige SRU-BaseURL verlinkt.

Als Suchattribute stehen sämtliche Indexschlüssel (IKTs) zur Verfügung, die auch in der jeweiligen Web-Datenbank benutzbar sind. Eine detaillierte Liste der verfügbaren Suchschlüssel erhalten Sie, wenn Sie die gewünschte Datenbank via http://uri.gbv.de/database/ aufrufen und den Link "IKT-Liste" wählen.

Formate

Grundsätzlich können Exportformate auf Grundlage von XML (Typ application/xml) auch  per SRU abgerufen werden. Insbesondere werden unterstützt:

FormatNameTypBeschreibung
picaxmlPica+ XMLapplication/xmlPICA+ in XML
marcxmlMARC-XMLapplication/xmlMARC21-Daten in XML (MARC-Exportformat)
marcxml-legacyMARC-XML "Legacy"application/xmlMARC21-XML für einzelne GBV-OPACs
turbomarcTurbomarcapplication/xmlTurbomarc, faster XML for MARC records
modsMODSapplication/xmlMetadata Object Description Schema (via MARC)
dcDublin Coreapplication/xmlDublin Core (experimentell)

Sofern Sie Anregungen und Fehler bezüglich der Metadaten-Konvertierung haben, teilen Sie uns diese bitte unter Angabe eines konkreten Anwendungsbeispiels mit!

Sortierung

Als Sortierung der Treffer werden "relevance", "year", "author" und "title" unterstützt, der Standardwert ist "year" (absteigend sortiert). Wird auf die Angabe der Sortierreihenfolge verzichtet, dann ist sie ansonsten immer aufsteigend. Die Sortierung kann entweder über URL-Parameter (v1.1) oder über CQL (v1.2) festgelegt werden.

Beispiel für SRU v1.1

Die Sortierreihenfolge mittels des dritten Wertes für sortKeys bestimmt werden: 1 = aufsteigend (Standardwert), 0 = absteigend:

    http://sru.k10plus.de/gvk?version=1.1&operation=searchRetrieve&query=pica.all%3Dreformation&maximumRecords=5&sortKeys=year,,1

Beispiel für SRU v1.2

    http://sru.k10plus.de/gvk?version=1.2&operation=searchRetrieve&query=pica.all%3Dreformation+sortby+year%2Fdescending&maximumRecords=5

Suche nach zugehörigen Publikationen (Bandsuche)

Die Suche nach verknüpften Titeln funktioniert über eine Kombination der Suchattribute 1001, 1045 und 1049 mittels booleschem Operator "AND".

SuchattributBezeichnung
1001Record type
1045Record-linking
1049Control-number-linking

Mögliche Werte für das Attribut 1001 sind:

Wert für 1001Bezeichnung
bTiteldatensätze
nNormdatensätze

Mögliche Werte für das Attribut 1045 sind:

Wert für 1045BezeichnungEntsprechung in PSI/CBS
famFinde gesamte Familie/FAM?PPN=<ppn>
rel-btFinde verknüpfte Eltern-Datensätze/REL?PPN=<ppn>&RELTYPE=BT
rel-ntFinde verknüpfte Kinder-Datensätze/REL?PPN=<ppn>&RELTYPE=NT
rel-rtFinde nicht-hierarchisch verknüpfte Datensätze/REL?PPN=<ppn>&RELTYPE=RT
rel-ttFinde verknüpfte Datensätze für einen Thesaurus-Eintrag/REL?PPN=<ppn>&RELTYPE=TT
Beispiel für eine FAM-Suche
Z> open http://sru.k10plus.de/opac-de-627
Connecting...OK.
Z> f pica.1001="b" and pica.1045="fam" and pica.1049="267838395"
Received SRW SearchRetrieve Response
Number of hits: 4
Elapsed: 0.050591
Z>

Beispiel für eine REL-NT-Suche:

http://sru.k10plus.de/opac-de-627?version=1.1&operation=searchRetrieve&query=pica.1049%3D267838395+and+pica.1045%3Drel-nt+and+pica.1001%3Db&maximumRecords=5&recordSchema=picaxml

Flags

Der Datenbestand einer Datenbank kann durch folgende Flags kontrolliert werden, die direkt an die Basis-URL angefügt werden:

!xpn=offline | !xpn=online

Bei Ausgabe im PICA-Format kann ausgewählt werden, ob die Offline (Standard) oder Online-Expansion geliefert wird.

!rec=1 | !rec=2

Filterung auf Titeldaten (rec=1) oder Normdaten (rec=2).

!levels=0 | !levels=1 | !levels=1,2 | ...

Beschränkung der PICA-Datensätze auf eine oder mehrere Datensatz-Ebenen

Beispiele:

Beispiel für die Einschränkung der Suchergebnisse im Gemeinsamen Verbundkatalog "gvk" auf Titeldatensätze (Standardeinstellung) :

http://sru.k10plus.de/gvk!rec=1?version=1.1&operation=searchRetrieve&query=pica.all%3Dhamburg&maximumRecords=10&recordSchema=marcxml

Beispiel für die Einschränkung der Suchergebnisse in der Datenbank "vd17" auf Normdatensätze:

http://sru.k10plus.de/vd17!rec=2?version=1.1&operation=searchRetrieve&query=pica.all%3Dhamburg&maximumRecords=10&recordSchema=marcxml

Beispiel für die Anzeige von Titel- und Normdatensätzen aus dem Katalogisierungsbestand "k10plus":

http://sru.k10plus.de/k10plus!rec=*?version=1.1&operation=searchRetrieve&query=pica.all%3Dhamburg&maximumRecords=10&recordSchema=marcxml

Beispiel zur Beschränkung der Datensatz-Anzeige in "gvk" auf die Titelebene (Ausblenden von Lokal- und Exemplardaten):

http://sru.k10plus.de/gvk!levels=0?version=1.1&operation=searchRetrieve&query=pica.all%3Dschifffahrt&maximumRecords=10&recordSchema=marcxml

Anwendungen

Zur Vereinfachung von SRU Abfragen gibt es einige Anwendungen:

  • catmandu ist ein Kommandozeilenwerkzeug und Framework zur Verarbeitung von Metadaten, das auch SRU unterstützt.
  • yaz-client zur Abfrage von SRU oder Z39.50 auf der Kommandozeile.

Beispiele mit Catmandu

Suche nach einer ISBN im K10plus, Ausgabe in PICA Plain

catmandu convert SRU --base http://sru.k10plus.de/opac-de-627 --query "pica.isb=9783894017316" --recordSchema picaxml --parser picaxml to PICA --type plain

Suche nach dem Stichwort "McCarthyism" im Titelindex des K10plus, Ausgabe von 10 Treffern im Format MARCXML

catmandu convert SRU --base http://sru.k10plus.de/opac-de-627 --query "pica.tit=McCarthyism" --total 10 --recordSchema marcxml --parser marcxml to MARC --type XML

Es empfielt sich, eine Konfigurationsdatei catmandu.yaml anzulegen, so dass die Aufrufe kürzer sind z.B.

catmandu convert k10plus-pica --query "pica.isb=9783894017316" to pp
catmandu convert k10plus-marc --query "pica.tit=McCarthyism" --total 10 to marcxml

Beispiele mit yaz-client

Beispiel für eine Recherchesitzung: gesucht wird das Stichwort "Nuklearwaffenkonvention" im Titelindex des K10plus-Verbundkataloges "opac-de-627", Anzeige des ersten Treffers im Format MARC-XML:
Z> open http://sru.k10plus.de/opac-de-627
Connecting...OK.
Z> find pica.tit=Nuklearwaffenkonvention
Received SRW SearchRetrieve Response
Number of hits: 5
Elapsed: 0.091077
Z> s 1
Received SRW SearchRetrieve Response
Number of hits: 5
pos=1 schema=
<?xml version="1.0" encoding="UTF-8"?>
<record xmlns="http://www.loc.gov/MARC21/slim">
  <leader>     cam a22        4500</leader>
  <controlfield tag="001">341384666</controlfield>
  <controlfield tag="003">DE-627</controlfield>
  <controlfield tag="005">20180725111243.0</controlfield>
  <controlfield tag="007">tu</controlfield>
  <controlfield tag="008">040309s2000    xx |||||      00| ||ger c</controlfield>
  <datafield tag="015" ind1=" " ind2=" ">
    <subfield code="a">02,B07,0325</subfield>
    <subfield code="2">dnb</subfield>
  </datafield>
  <datafield tag="016" ind1="7" ind2=" ">
    <subfield code="a">963553054</subfield>
    <subfield code="2">DE-101</subfield>
  </datafield>
  <datafield tag="020" ind1=" " ind2=" ">
    <subfield code="a">3000067434</subfield>
    <subfield code="c">kart.</subfield>
    <subfield code="9">3-00-006743-4</subfield>
  </datafield>
  <datafield tag="035" ind1=" " ind2=" ">
    <subfield code="a">(DE-627)341384666</subfield>
  </datafield>
  <datafield tag="035" ind1=" " ind2=" ">
    <subfield code="a">(DE-576)11027458X</subfield>
  </datafield>
  <datafield tag="035" ind1=" " ind2=" ">
    <subfield code="a">(DE-599)GBV341384666</subfield>
  </datafield>
  <datafield tag="035" ind1=" " ind2=" ">
    <subfield code="a">(OCoLC)76367678</subfield>
  </datafield>
  <datafield tag="035" ind1=" " ind2=" ">
    <subfield code="a">(DE-615)00577661</subfield>
  </datafield>
  <datafield tag="040" ind1=" " ind2=" ">
    <subfield code="a">DE-627</subfield>
    <subfield code="b">ger</subfield>
    <subfield code="c">DE-627</subfield>
    <subfield code="e">rakwb</subfield>
  </datafield>
  <datafield tag="041" ind1=" " ind2=" ">
    <subfield code="a">ger</subfield>
  </datafield>
  <datafield tag="044" ind1=" " ind2=" ">
    <subfield code="c">XA-DE</subfield>
  </datafield>
  <datafield tag="084" ind1=" " ind2=" ">
    <subfield code="a">19</subfield>
    <subfield code="a">16</subfield>
    <subfield code="a">21</subfield>
    <subfield code="2">sdnb</subfield>
  </datafield>
  <datafield tag="084" ind1=" " ind2=" ">
    <subfield code="a">MK 3600</subfield>
    <subfield code="2">rvk</subfield>
    <subfield code="0">(DE-625)rvk/123050:</subfield>
  </datafield>
  <datafield tag="084" ind1=" " ind2=" ">
    <subfield code="a">SC03</subfield>
    <subfield code="2">FIV</subfield>
  </datafield>
  <datafield tag="084" ind1=" " ind2=" ">
    <subfield code="a">RQ</subfield>
    <subfield code="2">FIV</subfield>
  </datafield>
  <datafield tag="084" ind1=" " ind2=" ">
    <subfield code="a">89.78</subfield>
    <subfield code="2">bkl</subfield>
  </datafield>
  <datafield tag="245" ind1="1" ind2="0">
    <subfield code="a">Sicherheit und Überleben</subfield>
    <subfield code="b">Argumente für eine Nuklearwaffenkonvention; Modellentwurf eines Übereinkommens über das Verbot der Entwicklung, Erprobung, Herstellung, Lagerung, Weitergabe, des Einsatzes und der Drohung mit einem Einsatz von Atomwaffen sowie über deren Abschaffung; einschließlich Kommentare und Reaktionen</subfield>
    <subfield code="c">IPPNW, Deutsche Sektion der Internationalen Ärzte für die Verhütung des Atomkriegs. [Federführende Autorinnen: Merav Datan; Alyn Ware. Übers.: Regina Hagen]</subfield>
  </datafield>
  <datafield tag="264" ind1=" " ind2="1">
    <subfield code="a">Berlin</subfield>
    <subfield code="b">IPPNW [u.a.]</subfield>
    <subfield code="c">c 2000</subfield>
  </datafield>
  <datafield tag="300" ind1=" " ind2=" ">
    <subfield code="a">352 S.</subfield>
    <subfield code="b">Ill.</subfield>
    <subfield code="c">21 cm</subfield>
  </datafield>
  <datafield tag="336" ind1=" " ind2=" ">
    <subfield code="a">Text</subfield>
    <subfield code="b">txt</subfield>
    <subfield code="2">rdacontent</subfield>
  </datafield>
  <datafield tag="337" ind1=" " ind2=" ">
    <subfield code="a">ohne Hilfsmittel zu benutzen</subfield>
    <subfield code="b">n</subfield>
    <subfield code="2">rdamedia</subfield>
  </datafield>
  <datafield tag="338" ind1=" " ind2=" ">
    <subfield code="a">Band</subfield>
    <subfield code="b">nc</subfield>
    <subfield code="2">rdacarrier</subfield>
  </datafield>
  <datafield tag="591" ind1=" " ind2=" ">
    <subfield code="a">580,720 ddsu/srm ; IMD-Felder und 1131 maschinell ergänzt (SWB)</subfield>
  </datafield>
  <datafield tag="650" ind1=" " ind2="4">
    <subfield code="a">Global</subfield>
    <subfield code="x">Abrüstung</subfield>
    <subfield code="x">Nuklearwaffen</subfield>
    <subfield code="x">Massenvernichtungswaffen</subfield>
    <subfield code="x">Verifikation (Rüstungskontrolle)</subfield>
    <subfield code="x">Sicherheitspolitische Friedenssicherung</subfield>
    <subfield code="x">Initiativen/Absichtserklärungen zu Rüstungskontrolle</subfield>
  </datafield>
  <datafield tag="650" ind1=" " ind2="4">
    <subfield code="a">Abschreckung/Abschreckungsstrategie</subfield>
    <subfield code="x">Ziele und Programme internationalen Akteurs</subfield>
    <subfield code="x">Durchsetzbarkeit von Entscheidungen/Rechtsnormen internationaler Akteure</subfield>
    <subfield code="x">International Physicians for the Prevention of Nuclear War</subfield>
  </datafield>
  <datafield tag="689" ind1="0" ind2="0">
    <subfield code="D">s</subfield>
    <subfield code="0">(DE-588)4003434-3</subfield>
    <subfield code="0">(DE-627)106389599</subfield>
    <subfield code="0">(DE-576)208851577</subfield>
    <subfield code="a">Kernwaffe</subfield>
    <subfield code="2">gnd</subfield>
  </datafield>
  <datafield tag="689" ind1="0" ind2="1">
    <subfield code="D">s</subfield>
    <subfield code="0">(DE-588)4000197-0</subfield>
    <subfield code="0">(DE-627)10640184X</subfield>
    <subfield code="0">(DE-576)208837302</subfield>
    <subfield code="a">Abrüstung</subfield>
    <subfield code="2">gnd</subfield>
  </datafield>
  <datafield tag="689" ind1="0" ind2=" ">
    <subfield code="5">(DE-627)</subfield>
  </datafield>
  <datafield tag="700" ind1="1" ind2=" ">
    <subfield code="a">Datan, Merav</subfield>
  </datafield>
  <datafield tag="700" ind1="1" ind2=" ">
    <subfield code="a">Ware, Alyn</subfield>
  </datafield>
  <datafield tag="700" ind1="1" ind2=" ">
    <subfield code="a">Hagen, Regina</subfield>
    <subfield code="e">Übers.</subfield>
  </datafield>
  <datafield tag="710" ind1="2" ind2=" ">
    <subfield code="a">Internationale Ärzte für die Verhütung des Atomkrieges</subfield>
    <subfield code="0">(DE-588)2084646-0</subfield>
    <subfield code="0">(DE-627)100187153</subfield>
    <subfield code="0">(DE-576)192521705</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">552265535</subfield>
    <subfield code="b">DE-Hv14</subfield>
    <subfield code="9">Hv 14</subfield>
    <subfield code="c">GBV</subfield>
    <subfield code="d">c</subfield>
    <subfield code="g">2002.425</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302072</subfield>
    <subfield code="b">DE-14</subfield>
    <subfield code="9">14</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">c</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302110</subfield>
    <subfield code="b">DE-24</subfield>
    <subfield code="9">24</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">b</subfield>
    <subfield code="g">D 7921</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302196</subfield>
    <subfield code="b">DE-15</subfield>
    <subfield code="9">15</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">c</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302250</subfield>
    <subfield code="b">DE-He79</subfield>
    <subfield code="9">He 79</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">b</subfield>
    <subfield code="g">8532 Data</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302315</subfield>
    <subfield code="b">DE-Bol1</subfield>
    <subfield code="9">Bol 1</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">b</subfield>
    <subfield code="g">I 1036</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302404</subfield>
    <subfield code="b">DE-615</subfield>
    <subfield code="9">615</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">b</subfield>
  </datafield>
  <datafield tag="924" ind1="0" ind2=" ">
    <subfield code="a">3150302412</subfield>
    <subfield code="b">DE-2421</subfield>
    <subfield code="9">2421</subfield>
    <subfield code="c">BSZ</subfield>
    <subfield code="d">b</subfield>
    <subfield code="g">BI 01462</subfield>
  </datafield>
  <datafield tag="935" ind1=" " ind2=" ">
    <subfield code="i">Blocktest</subfield>
  </datafield>
  <datafield tag="936" ind1="b" ind2="k">
    <subfield code="a">89.78</subfield>
    <subfield code="j">Friedensbewegung</subfield>
    <subfield code="0">(DE-627)106413724</subfield>
  </datafield>
  <datafield tag="951" ind1=" " ind2=" ">
    <subfield code="a">BO</subfield>
  </datafield>
</record>

Elapsed: 0.078286
Z>
  • No labels