Apéndice N. Utilizando el servidor SRU

Nicolas Morin

BibLibre

Diciembre de 2009

Tabla de contenidos

1. Utilizando el servidor SRU
1.1. Explica
1.2. Buscar
1.3. Recuperar

1. Utilizando el servidor SRU

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

1.1. Explica

Si desea obtener información sobre la implementación de SRU en un determinado servidor, debería poder acceder a el archivo Explain haicendo un requerimiento 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>
                        

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: versión, operación y consulta. 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 &.

Se pueden añadir parámetros opcionales para la consulta, por ejemplo maximumRecords que indica el número máximo de registros que devuelve el servidor. Así http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=reefs&maximumRecords=5 retornará los primeros resultados 5 resultados desde el servidor.

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.

1.2.1. Más información sobre la búsqueda

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

Si operation=searchRetrieve, entonces se consultará la clave de búsqueda. Tal como : operation=searchRetrieve&query=reefs

Si operation=scan, entonces la clave de búsqueda debe ser scanClause. Tar como : 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 tema y por título: att 21 Subject y att Title 4, respectivamente.

En el archivo pqf.properties ubicado en etc/zebradb/pqf.properties veo que un punto de acceso ya utiliza mi índice Subject (index.dc.subject = 1=21) mientras que otro usa mi índice Title (index.dc.title = 1=4) Sé que este es mi índice de Subject porque lo he visto antes en el archivo bib1.att, se llama con un = 1=21 en Z3950: así index.dc.subject = 1=21corresponde al índice de Subject. Y Title fue llamado con un 1=4 por los tanto index.dc.title = 1=4 corresponde al índice Title. Ahora puedo construir mi consulta tal como en una caja de búsqueda, solo precédala conla clave 'query': query=Subject=arrecife and Title=coral busca 'arrecifes' como tema y 'coral' en el título. La URL completa sería http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=Subject=arrecifes and Title=coral. Si desea limitar el resultado a sólo 5 registros, puede hacer http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=Subject=arrecifes and Title=coral&maximumRecords=5

También puedo jugar con truncar, relaciones, etc. Estas se definen también en el archivo pqf.properties. Puedo 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"
                              

Por ejemplo si deseo que 'coral' esté al cominenzo del título, puedo hacer esta consulta : http://myserver.com:9999/biblios?version=1.1&operation=searchRetrieve&query=Title=coral first

1.3. Recuperar

Mi búsqueda de http://univ_lyon3.biblibre.com:9999/biblios?version=1.1&operation=searchRetrieve&query=coral reefs&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>