Protocolo OAI (Open Archives Initiative) Iniciativa de Archivos Abiertos
Como implementar búsquedas en servidores OAI
La Iniciativa de Archivos Abiertos (OAI, por sus siglas en inglés) establece un protocolo de comunicación para compartir información a través de Internet y basado sobre el protocolo http. Esto permite que no sea necesario contar con un servidor extra, tal como pasa con el z39.50, ya que es un servidor Web quien despacha la información y es un programa tipo CGI el que proporciona la misma.
La comunicación con el servidor se realiza por medio de parámetros en formato GET o bien en formato POST. Y la respuesta se realiza en formato XML. El protocolo OAI no considera aspectos de seguridad (no hay una opción para suministrar un password) y tampoco implementa sistemas de búsqueda booleanos o de otros tipos, siendo posible únicamente recuperar registros especificando una fecha o un rango de fechas, o bien recuperar un registro especifico por su identificador. Por esta razón, las aplicaciones que proporcionan acceso a información en este formato tienen que realizar un proceso de recolección de datos llamado “cosecha” (Harvesting) y posteriormente realizar los índices necesarios de manera local para sobre ellos buscar, ya sea manteniendo una copia completa de la información o simplemente una referencia a la información y acceder a la ficha en el servidor.
En este momento tenemos identificados tres servidores públicos disponibles que soportan el protocolo OAI en las siguientes direcciones:
URL-Base | Institución |
http://www.pubmedcentral.gov/oai/oai.cgi | Pub Med Central |
http://ict.udlap.mx:9090/Tales/Oai_tesis | Universidad de Puebla |
http://copernico.mty.itesm.mx/bibliotecas/oai/oa/request.cgi | ITESM |
Tenemos disponibles 6 (seis) comandos para recuperar información de los servidores OAI, cada uno se ejecuta enviándoselo a un programa CGI como un parámetro bajo el nombre de verb, por ejemplo: CGI?verb=comando.
Comandos OAI
Los comandos utilizados son los siguientes:
- Identify Hace que el servidor se identifique.
Ejemplo:
http://www.pubmedcentral.nih.gov/oai/oai.cgi?verb=Identify
Nos daría como respuesta:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2007-01-19T18:03:20Z</responseDate> <request verb="Identify">http://www.pubmedcentral.nih.gov/oai/oai.cgi</request> <Identify> <repositoryName>PubMed Central</repositoryName> <baseURL>http://www.pubmedcentral.nih.gov/oai/oai.cgi</baseURL> <protocolVersion>2.0</protocolVersion> <adminEmail>oai@ncbi.nlm.nih.gov</adminEmail> <earliestDatestamp>1999-01-01</earliestDatestamp> <deletedRecord>no</deletedRecord> <granularity>YYYY-MM-DD</granularity> <description> <oai-identifier xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai-identifier http://www.openarchives.org/OAI/2.0/oai-identifier.xsd"> <scheme>oai</scheme> <repositoryIdentifier>pubmedcentral.nih.gov</repositoryIdentifier> <delimiter>:</delimiter> <sampleIdentifier>oai:pubmedcentral.nih.gov:13900</sampleIdentifier> </oai-identifier> </description> </Identify> </OAI-PMH> |
Nos presenta información relativa a la identidad del servidor al que nos estamos conectando, toda esta información está en formato XML sin formato, por lo que se puede manipular fácilmente desde nuestra aplicación. De esta información, podemos sacar en claro lo siguiente:
- El nombre del repositorio de datos: (repositoryName) PDLib
- La versión del protocolo: (protocolVersion) 2.0
- Correo del responsable: (adminEmail) pdlib@itesm.mx
- Fecha de actualización: (earliestDatestamp) 2004-11-18
- Entre otras.
- ListMetadataFormats Muestra los formatos válidos para los metadatos.
Ejemplo:
http://www.pubmedcentral.nih.gov/oai/oai.cgi?verb=ListMetadataFormats
Nos daría como respuesta:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2007-01-19T18:10:45Z</responseDate> <request verb="ListMetadataFormats">http://www.pubmedcentral.nih.gov/oai/oai.cgi</request> <ListMetadataFormats> <metadataFormat> <metadataPrefix>oai_dc</metadataPrefix> <schema>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema> <metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamespace> </metadataFormat> <metadataFormat> <metadataPrefix>pmc</metadataPrefix> <schema>http://dtd.nlm.nih.gov/2.0/xsd/archivearticle.xsd</schema> <metadataNamespace>http://dtd.nlm.nih.gov/2.0/xsd/archivearticle</metadataNamespace> </metadataFormat> <metadataFormat> <metadataPrefix>pmc_fm</metadataPrefix> <schema>http://dtd.nlm.nih.gov/2.0/xsd/archivearticle.xsd</schema> <metadataNamespace>http://dtd.nlm.nih.gov/2.0/xsd/archivearticle</metadataNamespace> </metadataFormat> </ListMetadataFormats> </OAI-PMH> |
Con este comando podemos recuperar los formatos de metadatos que están disponibles en este servidor. Para el proyecto de nuestro interés, es necesario estandarizar el proceso a un único formato de información (siempre que esto sea posible). Elegimos el formato “Dublín Core“, debido a que es un estándar implementado en prácticamente todas las OAIs. Por esta razón, solamente verificamos que aparezca la línea:
<metadataPrefix>oai_dc</metadataPrefix> |
- ListSets Muestra las bases de datos disponibles (o colecciones dentro de la base).
Ejemplo:
http://www.pubmedcentral.nih.gov/oai/oai.cgi?verb=ListSets
Nos daría como respuesta:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2007-01-19T18:15:13Z</responseDate> <request verb="ListSets">http://www.pubmedcentral.nih.gov/oai/oai.cgi</request> <ListSets> <set> <setSpec>aac</setSpec> <setName>Antimicrobial Agents and Chemotherapy</setName> <setDescription> <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:publisher>American Society for Microbiology (ASM)</dc:publisher> <dc:identifier> http://www.pubmedcentral.nih.gov/tocrender.fcgi?journal=82 </dc:identifier> </oai_dc:dc> </setDescription> </set> <set> <setSpec>actavets</setSpec> <setName>Acta Veterinaria Scandinavica</setName> <setDescription> <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:publisher>BioMed Central</dc:publisher> <dc:identifier> http://www.pubmedcentral.nih.gov/tocrender.fcgi?journal=424 </dc:identifier> </oai_dc:dc> </setDescription> </set> <set> <setSpec>aem</setSpec> <setName>Applied and Environmental Microbiology</setName> <setDescription> <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:publisher>American Society for Microbiology (ASM)</dc:publisher> <dc:identifier> http://www.pubmedcentral.nih.gov/tocrender.fcgi?journal=83 </dc:identifier> </oai_dc:dc> </setDescription> </set> </ListSets> </OAI-PMH> |
Este comando nos devuelve una lista que puede ser bastante extensa de todas las colecciones o conjuntos de registros que estén disponibles en el servidor. De esta respuesta, nos interesarán de manera principal los datos:
<setSpec>aac</setSpec> <setName>Antimicrobial Agents and Chemotherapy</setName> |
Que son los que nos describen la colección y ya de manera secundaria, los parámetros opcionales que están dentro de la etiqueta "setDescription" que nos dan información adicional sobre cada colección.
- GetRecord Recuperar un registro (Argumentos: Identificador y Formato).
Ejemplo:
http://www.pubmedcentral.nih.gov/oai/oai.cgi?verb=GetRecord&identifier=oai:pubmedcentral.nih.gov:13900&metadataPrefix=oai_dc
Que nos daría como respuesta
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2007-01-19T23:47:38Z</responseDate> <request verb="GetRecord" identifier="oai:pubmedcentral.nih.gov:13900" metadataPrefix="oai_dc"> http://www.pubmedcentral.nih.gov/oai/oai.cgi </request> <GetRecord> <record> <header> <identifier>oai:pubmedcentral.nih.gov:13900</identifier> <datestamp>2001-02-27</datestamp> <setSpec>brcnres</setSpec> <setSpec>pmc-open</setSpec> </header> <metadata> <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:title> Comparison of written reports of mammography, sonography and magnetic resonance mammography for preoperative evaluation of breast lesions, with special emphasis on magnetic resonance mammography </dc:title> <dc:creator>Malur, Sabine</dc:creator> <dc:creator>Wurdinger, Susanne</dc:creator> <dc:creator>Moritz, Andreas</dc:creator> <dc:creator>Michels, Wolfgang</dc:creator> <dc:creator>Schneider, Achim</dc:creator> <dc:subject>Primary Research</dc:subject> <dc:description> Patients with abnormal breast findings (n = 413) were examined by mammography, sonography and magnetic resonance (MR) mammography; 185 invasive cancers, 38 carcinoma in situ and 254 benign tumours were confirmed histologically. Sensitivity for mammography was 83.7%, for sonography it was 89.1% and for MR mammography it was 94.6% for invasive cancers. In 42 patients with multifocal invasive cancers, multifocality had been detected by mammography and sonography in 26.2%, and by MR mammography in 66.7%. In nine patients with multicentric cancers, detection rates were 55.5, 55.5 and 88.8%, respectively. Carcinoma in situ was diagnosed by mammography in 78.9% and by MR mammography in 68.4% of patients. Combination of all three diagnostic methods lead to the best results for detection of invasive cancer and multifocal disease. However, sensitivity of mammography and sonography combined was identical to that of MR mammography (ie 94.6%). </dc:description> <dc:publisher>BioMed Central</dc:publisher> <dc:identifier> http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=13900 </dc:identifier> <dc:type>Text</dc:type> <dc:language>en</dc:language> <dc:rights> Copyright © 2000 BioMed Central Ltd on behalf of the copyright holders </dc:rights> </oai_dc:dc> </metadata> </record> </GetRecord> </OAI-PMH> |
Con este comando podemos recuperar un registro completo, los parámetros adicionales fueron identifier=oai:pubmedcentral.nih.gov:13900 que corresponde con el meta dato
<identifier>oai:pubmedcentral.nih.gov:13900</identifier> | del registro recuperado. Este parámetro nos permite recuperar un registro especifico gracias al identificador único que posee. El otro parámetro fue metadataPrefix=oai_dc que es simplemente la especificación del formato Dublín Core que queríamos que utilizara en la recuperación.
NOTA: En la versión 2.0 los nombres de los campos (metadatos) llevan como prefijo la descripción del formato en que se presentan. En el ejemplo mostrado llevan el prefijo dc: y ván dentro de la etiqueta oai_dc:dc
- ListIdentifiers Recupera los encabezamientos de los registros. (Argumentos: Formato, Rango de fechas)
Ejemplo:
http://www.pubmedcentral.nih.gov/oai/oai.cgi?verb=ListIdentifiers&metadataPrefix=oai_dc&from=2001-03-01&until=2001-04-01
Que nos daría como respuesta:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2007-01-19T23:56:24Z</responseDate> <request verb="ListIdentifiers" from="2001-03-01" metadataPrefix="oai_dc" until="2001-04-01">http://www.pubmedcentral.nih.gov/oai/oai.cgi</request> <ListIdentifiers> <header> <identifier>oai:pubmedcentral.nih.gov:14538</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <header> <identifier>oai:pubmedcentral.nih.gov:14539</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <header> <identifier>oai:pubmedcentral.nih.gov:14540</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <header> <identifier>oai:pubmedcentral.nih.gov:14541</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <header> <identifier>oai:pubmedcentral.nih.gov:14542</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <resumptionToken> oai%3Apubmedcentral.nih.gov%3A15044!2001-03-01!2001-04-01!oai_dc! </resumptionToken> </ListIdentifiers> </OAI-PMH> |
Con este comando podemos recuperar un conjunto de registros que coincidan con un rango de fechas, pero solamente nos recupera los encabezados de los registros por lo que la consulta es más rápida que si recuperaramos el registro completo. Cada registro recuperado es identificado por las etiquetas header. Cada uno de los registros se presenta de la siguiente manera:
<header> <identifier>oai:pubmedcentral.nih.gov:14542</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> |
El primer campo devuelto es el identificador, por lo que posteriormente podemos utilizarlo para recuperar los registros completos por medio del comando GetRecord.
NOTA: En la versión 2.0 nos puede aparecer paginado, es decir que si la consulta devuelve demasiados registros, nos devolverá solamente una parte y deberémos solicitarle al servidor el resto utilizando el id proporcionado por la etiqueta resumptionToken.
<resumptionToken> oai%3Apubmedcentral.nih.gov%3A15044!2001-03-01!2001-04-01!oai_dc! </resumptionToken> |
- ListRecords Recupera los registros completos. (Argumentos: Igual que ListIdentifiers)
Ejemplo:
http://www.pubmedcentral.nih.gov/oai/oai.cgi?verb=ListRecords&metadataPrefix=oai_dc&from=2001-03-01&until=2001-04-01
Que nos daría como respuesta:
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2007-01-22T15:57:22Z</responseDate> <request verb="ListRecords" from="2001-03-01" metadataPrefix="oai_dc" until="2001-04-01">http://www.pubmedcentral.nih.gov/oai/oai.cgi</request> <ListRecords> <record> <header> <identifier>oai:pubmedcentral.nih.gov:14539</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <metadata> <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:title> Model-based analysis of oligonucleotide arrays: Expression index computation and outlier detection </dc:title> <dc:creator>Li, Cheng</dc:creator> <dc:creator>Wong, Wing Hung</dc:creator> <dc:subject>Physical Sciences</dc:subject> <dc:description> Recent advances in cDNA and oligonucleotide DNA arrays have made it possible to measure the abundance of mRNA transcripts for many genes simultaneously. The analysis of such experiments is nontrivial because of large data size and many levels of variation introduced at different stages of the experiments. The analysis is further complicated by the large differences that may exist among different probes used to interrogate the same gene. However, an attractive feature of high-density oligonucleotide arrays such as those produced by photolithography and inkjet technology is the standardization of chip manufacturing and hybridization process. As a result, probe-specific biases, although significant, are highly reproducible and predictable, and their adverse effect can be reduced by proper modeling and analysis methods. Here, we propose a statistical model for the probe-level data, and develop model-based estimates for gene expression indexes. We also present model-based methods for identifying and handling cross-hybridizing probes and contaminating array regions. Applications of these results will be presented elsewhere. </dc:description> <dc:publisher>The National Academy of Sciences</dc:publisher> <dc:identifier> http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=14539 </dc:identifier> <dc:type>Text</dc:type> <dc:language>en</dc:language> <dc:rights>Copyright © 2001, The National Academy of Sciences</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:pubmedcentral.nih.gov:14554</identifier> <datestamp>2001-03-07</datestamp> <setSpec>pnas</setSpec> </header> <metadata> <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:title> Disruption of matrix metalloproteinase 2 binding to integrin avß3 by an organic molecule inhibits angiogenesis and tumor growth in vivo </dc:title> <dc:creator>Silletti, Steve</dc:creator> <dc:creator>Kessler, Torsten</dc:creator> <dc:creator>Goldberg, Joel</dc:creator> <dc:creator>Boger, Dale L.</dc:creator> <dc:creator>Cheresh, David A.</dc:creator> <dc:subject>Biological Sciences</dc:subject> <dc:description> Matrix metalloproteinase 2 (MMP2) can associate with integrin avß3 on the surface of endothelial cells, thereby promoting vascular invasion. Here, we describe an organic molecule (TSRI265) selected for its ability to bind to integrin avß3 and block avß3 interaction with MMP2. Although disrupting avß3/MMP2 complex formation, TSRI265 has no effect on avß3 binding to its extracellular matrix ligand vitronectin and does not influence MMP2 activation or catalytic activity directly. However, TSRI265 acts as a potent antiangiogenic agent and thereby blocks tumor growth in vivo. These findings suggest that activated MMP2 does not facilitate vascular invasion during angiogenesis unless it forms a complex with avß3 on the endothelial cell surface. By disrupting endothelial cell invasion without broadly suppressing cell adhesion or MMP function, the use of compounds such as TSRI265 may provide a novel therapeutic approach for diseases associated with uncontrolled angiogenesis. </dc:description> <dc:publisher>The National Academy of Sciences</dc:publisher> <dc:identifier> http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=14554 </dc:identifier> <dc:type>Text</dc:type> <dc:language>en</dc:language> <dc:rights>Copyright © 2001, The National Academy of Sciences</dc:rights> </oai_dc:dc> </metadata> </record> <resumptionToken> oai%3Apubmedcentral.nih.gov%3A14588!2001-03-01!2001-04-01!oai_dc! </resumptionToken> </ListRecords> </OAI-PMH> |
En este caso el resultado incluye los registros completos, con todos los metadatos correspondientes al formato elegido (Dublín Core). La respuesta puede demorar desde unos segundos hasta varios minutos ya que en caso de recuperarse muchos registros, la cantidad de información puede ser muy grande. En caso de querer recuperar la totalidad de registros de una base de datos, es recomendable especificar rangos de fechas continuos no muy grandes para no saturar al servidor con peticiones. En la versión 2.0 aplica el uso de resumptionToken para la recuperación por partes.
|