1. Intent
Implement an OLE SRU server and integrate with an existing open source Z39.50/SRU bridge, prime candidate: Metaproxy.
2. Implementation
OLE SRU will be a new module added to the ole-docstore web application. Docstore currently supports retrieval of indexed data via SOLR api, and it will further enable SRU support.
Image RemovedImage Added
2. Supported OLE-SRU Services
* SearchRetrieve
* Explain
*
...
Scan (Will leave it out for the 1st pass, and then pick it up later)
3. OPAC Schema
Panel |
---|
<?xml version="1.0" encoding="UTF-8"?> <!- - OPAC XML. This is the output of yaz_display_OPAC - -> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="opacRecord"> <xs:complexType> <xs:sequence> <xs:element name="bibliographicRecord"> </xs:element> <xs:element name="holdings"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" ref="holding"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="holding"> <xs:complexType> <xs:sequence> <xs:element name="typeOfRecord" minOccurs="0" type="xs:string"/> <xs:element name="encodingLevel" minOccurs="0" type="xs:string"/> <xs:element name="format" minOccurs="0" type="xs:string"/> <xs:element name="receiptAcqStatus" minOccurs="0" type="xs:string"/> <xs:element name="generalRetention" minOccurs="0" type="xs:string"/> <xs:element name="completeness" minOccurs="0" type="xs:string"/> <xs:element name="dateOfReport" minOccurs="0" type="xs:string"/> <xs:element name="nucCode" minOccurs="0" type="xs:string"/> <xs:element name="localLocation" minOccurs="0" type="xs:string"/> <xs:element name="shelvingLocation" minOccurs="0" type="xs:string"/> <xs:element name="callNumber" minOccurs="0" type="xs:string"/> <xs:element name="shelvingData" minOccurs="0" type="xs:string"/> <xs:element name="copyNumber" minOccurs="0" type="xs:string"/> <xs:element name="publicNote" minOccurs="0" type="xs:string"/> <xs:element name="reproductionNote" minOccurs="0" type="xs:string"/> <xs:element name="termsUseRepro" minOccurs="0" type="xs:string"/> <xs:element name="enumAndChron" minOccurs="0" type="xs:string"/> <xs:element name="volumes" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" ref="volume"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="circulations" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" ref="circulation"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="volume"> <xs:complexType> <xs:sequence> <xs:element name="enumeration" minOccurs="0" type="xs:string"/> <xs:element name="chronology" minOccurs="0" type="xs:string"/> <xs:element name="enumAndChron" minOccurs="0" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="circulation"> <xs:complexType> <xs:sequence> <xs:element name="availableNow"> <xs:complexType> <xs:attribute name="value" use="required" type="xs:string"/> </xs:complexType> </xs:element> <xs:element name="availabilityDate" minOccurs="0" type="xs:string"/> <xs:element name="availableThru" minOccurs="0" type="xs:string"/> <xs:element name="restrictions" minOccurs="0" type="xs:string"/> <xs:element name="itemId" minOccurs="0" type="xs:string"/> <xs:element name="renewable"> <xs:complexType> <xs:attribute name="value" use="required" type="xs:string"/> </xs:complexType> </xs:element> <xs:element name="onHold"> <xs:complexType> <xs:attribute name="value" use="required" type="xs:string"/> </xs:complexType> </xs:element> <xs:element name="enumAndChron" minOccurs="0"/> <xs:element name="midspine" minOccurs="0"/> <xs:element name="temporaryLocation" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
...
- CQLParser - Parser that will parse the request into search parameters.
- SearchRetrieveWorker - Responsibility is to take the search parameters, retrieve SOLR/Docstore/Circulaation data
- OLESruResponseBuilder - Responsibility is to take the response from the SearchRetrieveWorker and build the OPAC response that z30.50 clients would understand as pe the schema above.
5. Testing
...
...
- Initial testing will be done using unit tests that will take in a request, parse and build the search parameters, retrieve the appropriate information, build the OPAC response and send it back to the client.
- Testing using meta proxy will be done once we have more clarity on how we wil use meta proxy as a front end client.