Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

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 

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

MetaProxy

Meta proxy server will be used as a client to test the OLE-SRU server.

  • No labels