Capítulo 19. Utilizando el servidor SRU

Tabla de contenidos

19.1. Utilizando el servidor SRU
19.1.1. Explain
19.1.2. Buscar
19.1.3. Retrieve

19.1. Utilizando el servidor SRU

Nicolas Morin

BibLibre

Diciembre 2009

Koha implementa el protocolo de búsqueda y recuperación vía URL (SRU). Se puede encontrar más información acerca del protocolo en http://www.loc.gov/standards/sru/. La versión implementada es la versión 1.1.

19.1.1. Explain

Si desea obtener información sobre la implementación de SRU en un determinado servidor, debería poder acceder a el archivo Explain haciendo una petición al servidor sin ningún parámetro. Ejemplo <http://myserver.com:9999/biblios/>. La respuesta del servidor es un archivo XML que debe ser similar al siguiente y le dará información acerca de la configuración por defecto del servidor SRU.

               <zs:explainResponse>
                    <zs:version>1.1</zs:version>
                    <zs:record>
                         <zs:recordSchema>http://explain.z3950.org/dtd/2.0/</zs:recordSchema>
                         <zs:recordPacking>xml</zs:recordPacking>
                         <zs:recordData>
                         <explain xml:base="zebradb/explain-biblios.xml">
                         <!--
                         try stylesheet url: http://./?stylesheet=docpath/sru2.xsl
                         -->
                    <serverInfo protocol="SRW/SRU/Z39.50">
                         <host>biblibre</host>
                         <port>9999</port>
                         <database>biblios</database>
                    </serverInfo>
                    <databaseInfo>
                         <title lang="en" primary="true">Koha 3 Bibliographic SRU/SRW/Z39.50 server</title>
                         <description lang="en" primary="true">Koha 3 Bibliographic Server</description>
                         <links>
                              <sru>http://biblibre:9999</sru>
                         </links>
                    </databaseInfo>
                    <indexInfo>
                         <set name="cql" identifier="info:srw/cql-context-set/1/cql-v1.1">
                              <title>CQL Standard Set</title>
                         </set>
                         <index search="true" scan="true" sort="false">
                         <title lang="en">CQL Server Choice</title>
                         <map>
                              <name set="cql">serverChoice</name>
                         </map>
                    <map>
                       <attr type="1" set="bib1">text</attr>
                       </map>
                  </index>
              <index search="true" scan="true" sort="false">
                 <title lang="en">CQL All</title>
                     <map>
        <name set="cql">all</name>
        </map>
        <map>
        <attr type="1" set="bib1">text</attr>
        </map>
        </index>
        <!-- Record ID index -->
        <index search="true" scan="true" sort="false">
        <title lang="en">Record ID</title>
        <map>
        <name set="rec">id</name>
        </map>
        <map>
        <attr type="1" set="bib1">rec:id</attr>
        <attr type="4" set="bib1">3</attr>
        </map>
        </index>
          

19.1.2. Buscar

Esta url : http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=reefs está compuesta de los siguientes elementos:

  • URL base del servidor SRU: http://myserver.com:9999/biblios?

  • parte de búsqueda con los 3 parámetros necesarios: version, operation y query. Los parámetros dentro de la parte de búsqueda deberían ser de la forma clave=valor, y pueden ser combinados con el carácter &.

One can add optional parameters to the query, for instance maximumRecords indicating the maximum number of records to be returned by the server. So http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=reefs&maximumRecords=5 will only get the first 5 results results from the server.

http://www.loc.gov/standards/sru/sru1-1archive/search-retrieve-operation.html da más detalles sobre las operaciones de búsqueda y, en particular, la lista de parámetros opcionales para la búsqueda.

19.1.2.1. Más información sobre Search

La clave "operation" puede tomar dos valores: scan o searchRetrieve.

If operation=searchRetrieve, then the search key should be query. As in : operation=searchRetrieve&query=reefs

If operation=scan, then the search key should be scanClause. As in : operation=scan&scanClause=reefs

etc/zebradb/biblios/etc/bib1.att define los índices Zebra/3950 que existen en el sistema. Por ejemplo usted verá que tenemos índices por Materia y por Título: att 21 Subject y att Title 4, respectivamente.

In the pqf.properties file located under etc/zebradb/pqf.properties I see that an access point already uses my Subject index (index.dc.subject = 1=21) while another uses my Title index (index.dc.title = 1=4) I know this is my Subject index because as I've seen just before in my bib1.att file, it's called with =1=21 in Z3950: so index.dc.subject = 1=21 correctly points to my Subject index. And Title was called with 1=4 so index.dc.title = 1=4 correctly points to my Title index. I can now construct my query just like I would in a search box, just preceding it with the "query" key: query=Subject=reefs and Title=coral searches "reefs" in the subject and "coral" in the title. The full url would be http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=Subject=reefs and Title=coral If I want to limit the result set to just 5 records, I can do http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=Subject=reefs and Title=coral&maximumRecords=5

También puedo hacerlo con truncamiento, relaciones, etc. Éstas se definen también en el archivo pqf.properties. Se puede ver por ejemplo las propiedades de posición definidas como:

               position.first              = 3=1 6=1
              # "first in field"
               position.any                = 3=3 6=1
                 # "any position in field"
               

So as an example if I want "coral" to be at the beginning of the title, I can do this query : http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=Title=coral first

19.1.3. Retrieve

Mi búsqueda de http://univ_lyon3.biblibre.com:9999/biblios?version=1.1amp;operation=searchRetrieve&query=coralreefs&maximumRecords=1 recupera solo un registro. La respuesta se parece a:

          <zs:searchRetrieveResponse>
<zs:version>1.1</zs:version>
<zs:numberOfRecords>1</zs:numberOfRecords>
<zs:records>
<zs:record>
<zs:recordPacking>xml</zs:recordPacking>
<zs:recordData>
<record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd">
<leader> cam a22 4500</leader>
<datafield tag="010" ind1=" " ind2=" ">
<subfield code="a">2-603-01193-6</subfield>
<subfield code="b">rel.</subfield>
<subfield code="d">159 F</subfield>
</datafield>
<datafield tag="020" ind1=" " ind2=" ">
<subfield code="a">FR</subfield>
<subfield code="b">00065351</subfield>
</datafield>
<datafield tag="101" ind1="1" ind2=" ">
<subfield code="c">ita</subfield>
</datafield>
<datafield tag="105" ind1=" " ind2=" ">
<subfield code="a">a z 00|y|</subfield>
</datafield>
<datafield tag="106" ind1=" " ind2=" ">
<subfield code="a">r</subfield>
</datafield>
<datafield tag="100" ind1=" " ind2=" ">
<subfield code="a">20091130 frey50 </subfield>
</datafield>
<datafield tag="200" ind1="1" ind2=" ">
<subfield code="a">Guide des récifs coralliens / A Guide to Coral Reefs</subfield>
<subfield code="b">Texte imprimé</subfield>
<subfield code="e">la faune sous-marine des coraux</subfield>
<subfield code="f">A. et A. Ferrari</subfield>
</datafield>
<datafield tag="210" ind1=" " ind2=" ">
<subfield code="a">Lausanne</subfield>
<subfield code="a">Paris</subfield>
<subfield code="c">Delachaux et Niestlé</subfield>
<subfield code="d">cop. 2000</subfield>
<subfield code="e">impr. en Espagne</subfield>
</datafield>
<datafield tag="215" ind1=" " ind2=" ">
<subfield code="a">287 p.</subfield>
<subfield code="c">ill. en coul., couv. ill. en coul.</subfield>
<subfield code="d">20 cm</subfield>
</datafield>
......
<idzebra>
<size>4725</size>
<localnumber>2</localnumber>
<filename>/tmp/nw10BJv9Pk/upd_biblio/exported_records</filename>
</idzebra>
</record>
</zs:recordData>
<zs:recordPosition>1</zs:recordPosition>
</zs:record>
</zs:records>
</zs:searchRetrieveResponse>