OLE z39.50 Technical Specification
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.
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
<?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>
4. Technical Details
- 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.
Operated as a Community Resource by the Open Library Foundation