
360 Search is a federated search engine that allows users to search multiple resources using a single query. For this API, we are implementing an extension of the Search/Retrieve via URL standard protocol for Internet search queries. Readers should become familiar with the documentation of this standard before reading the rest of this document as we include here only the details of how our interface meets and extends this standard.
The extensions to the standard that we offer are necessary to accommodate
the unique nature of federated searching. In particular, we offer
search continuation to account for
the fact that when searching across multiple databases only a subset of
the matches for a particular query are retrieved from each database. We
also support asynchronous as well as
synchronous searching since searching across multiple
databases can take some time and applications may want to know something
about the status of the search, or retrieve a subset of the results that
have been gathered, before it has completed.
http://<client identifier>.cs.xml.serialssolutions.com/sru
Both HTTP POST and GET requests are supported.
| Parameter Name | Mandatory or Optional |
Values | Default | Description |
|---|---|---|---|---|
| version | mandatory | 1.1 | Not applicable | The SRU version. |
| recordPacking | optional | xml | xml | How the explain record should be escaped in the response. Currently only an xml response is supported. |
| stylesheet | optional | valid URLs | none | A URL for an xml stylesheet to be included in the response. |
| operation | mandatory | explain | Not applicable | Indicates the type of operation being requested. |
| Parameter Name | Supported? | Mandatory or Optional |
Values | Default | Description |
|---|---|---|---|---|---|
| version | yes | mandatory | 1.1 | Not applicable | the version of the request, and a statement by the client that it wants the response to conform to a version less than or preferabley equal to this version. |
| query | yes | mandatory | A CQL query. | Not applicable | Contains the query expressed in CQL to be processed by the server. |
| startRecord | yes | optional | integer greater than 0 | 1 | The position within the sequence of matched records of the first record to be returned. The first position in the sequence is 1. If the value given is larger than the current number of results associated with the result set, an appropriate diagnostic will be returned. Note: This parameter is only used in searchRetrieve operations. |
| maximumRecords | yes | optional | integer greater than or equal to 0 | 20 | Indicates the maximum number of records to be returned. Note: This parameter is only used in searchRetrieve operations. |
| recordPacking | yes | optional | xml | xml | Indicates how the record should be escaped in the response. |
| recordSchema | yes | optional |
|
cs | See the explanation from the standard. |
| recordSetTTL | no | ||||
| sortKeys | limited | optional | See below. | date | Contains a sort key to be applied to the results. See sorting below. |
| stylesheet | yes | optional | A URL for an XML stylesheet | none | The client requests that the server simply return this URL in the response. See the description in the standard. |
| operation | yes | mandatory | searchRetrieve | Not applicable | Indicates the type of operation being requested. |
| Parameter Name | Mandatory or Optional |
Values | Default | Description |
|---|---|---|---|---|
| x-cs-action | optional | continue | none | This parameter should be used to continue searching over a set of databases where a previous search left off. This must be used in conjunction with a cql.resultSetId= query to specify the previous result set. This query will result in creation of a new resultSetId for the expanded set of results. If a continue request is sent using an identifier for a result set for which no more records can be retrieved an appropriate diagnostic will be returned. |
| x-cs-databases | optional | Comma-separated list of Serials Solutions identifiers for the databases to be searched. | Not applicable | Though this parameter is not required, at least one of x-cs-databases, x-cs-categories, and x-cs-groups must be present in the query that starts a search. More than one of these parmeters is possible. If used in conjunction with a x-cs-action=continue parameter, this indicates that the search should be continued only for the given databases. |
| x-cs-categories | optional | Comma-separated list of Serials Solutions identifiers for the categories to be searched. | Not applicable | Though this parameter is not required, at least one of x-cs-databases, x-cs-categories, and x-cs-groups must be present in the query that starts a search. More than one of these parameters is possible. If used in conjunction with a x-cs-action=continue parameter, this indicates that the search should be continued only for the given categories. |
| x-cs-groups | optional | comma-separated list of Serials Solutions identifiers for the category groups to be searched. | Not applicable | Though this parameter is not required, at least one of x-cs-databases, x-cs-categories, and x-cs-groups must be present in the query that starts a search. More than one of these parameters is possible. If used in conjunction with a x-cs-action=continue parameter, this indicates that the search should be continued only for the given category groups. |
A query consists of one or more search clauses joined by boolean operators. The service currently supports:
| Query Feature | Values | Default | Description |
|---|---|---|---|
| Index Name |
|
Defined by configuration parameter for each Serials Solutions client independently. | The index is used to specify what field to search over. The qualifier cs need not be specified as it is the default assumed by the server. When the cql.resultSetId index is used, it should be the only index in the query. |
| Relation |
|
all | any means find any of the terms; all means find all of them; = means find the phrase given within the field indicated by the index. |
| Boolean Operators |
|
Not applicable | These have their usual meaning, except that not means "and not" and is thus a binary operator, not a unary one. |
| Metadata | Element | Description |
|---|---|---|
| Author | dc:creator | An author (or creator) of the document. |
| cs:normalizedData/dc:creator | The first author of the document, normalized to be in the format Last First Middle, if possible. Refinement of dc:creator. | |
| Abstract | dc:abstract | The abstract describing a particular citation. |
| Call number | cs:callNumber | The call number of the item if it came from an OPAC. Refinement of dc:identifier |
| Content provider id | cs:providerId | The unique Serials Solutions identifier for the content provider from which a citation was retrieved. Refinement of dc:identifer. |
| Content provider name | cs:providerName | The (possibly customized) name of the content provider from which a citation was retrieved. |
| Database id | cs:databaseId | The unique Serials Solutions identifier for the database from which a citation was retrieved. Refinement of dc:identifer. |
| Database name | cs:databaseName | The (possibly customized) name of the database from which a citation was retrieved. |
| Date published | dc:issued | The publication date as presented from the original source. |
| cs:normalizedData/dc:issued | The publication date normalized to YYYY-MM-DD, if possible. Refinement of dc:issued | |
| Document Id | cs:docId | The source-specific unique identifier for a given citation (e.g., an accession number). Refinement of dc:identifer. |
| Document URL | cs:url | A URL that gives access to the document. Two types of document URLs may be provided: one to the content provider (no type attribute specified) and one to a link resolver (type="linkresolver"). |
| Duplicate identifier | cs:duplicateId | Identifier of the "duplicate group" this citation belongs to. If there are no duplicates this element will not be present. Refinement of dc:identifier. |
| Full-text available flag | cs:fullTextAvailable | A Boolean flag indication whether or not a particular citation is available in full text from a particular source. Possible values are "yes" and "no". Note that a value of "no" indicates only that we have no clear indication that full text for the document is available. |
| Identifier | dc:identifier | Unique identifier within the result set for the citation. |
| ISBN | cs:isbn | The publication ISBN. Refinment of dc:identifier |
| ISSN | cs:issn | The publication ISSN, displayed with a hyphen. dc:identifier |
| Issue | cs:issue | The publication issue of the citation. |
| Pages | cs:pages | The page range, if available. |
| Peer-reviewed flag | cs:peerReviewed | A Boolean flag indicating whether or not a citation is for a document published in a peer-reviewed publication. Note that a value of "no" indicates only that we have no indication that the document has been peer reviewed. |
| Publication | dc:source | The publication name. |
| Publication Type | dc:type | The type of publication (e.g. article, book, etc.), as provided by the source. |
| Start page | cs:spage | The starting page for the document. |
| Title | dc:title | The article/document title |
| Volume | cs:volume | The publication volume, if available |
The
schema definitions
describe the XML structure and target namespaces for the response.
A small example illustrates what
can be expected. Notice that not all data fields are present in every record.
| Parameter Name | Supported? | Mandatory or Optional |
Values | Default | Description |
|---|---|---|---|---|---|
| operation | yes | mandatory | searchStatus | Not applicable | Indicates the type of operation being requested. |
Each level in the heirarchy is represented by a cs.searchProfile element. A cs.searchProfile element contains a partial and total count as well as a search state and a cs.searchProfile child element for each of its children in the heirarchy. The counts are sums of the corresponding counts in the child cs.searchProfile elements. The state is a summary of the child states.
Eventually a schema will be provided that describes this response. See the example XML for an example with two providers, one with a single database and one with two databases. A second example illustrates the same profile before all searching completed.
The table below outlines the metadata returned.
| Metadata | Element | Attributes | Parent Element | Description |
|---|---|---|---|---|
| Search Profile | cs:searchProfile |
|
none or cs.searchProfile | Container for the search status information for the entity identfied by id |
| Current Record Count | cs:citationCount | type=partial | cs.searchProfile | The number of records that have been retrieved from this source so far. |
| Total Record Count | cs:citationCount | type=total | cs.searchProfile | The total number of records that match the query for this source |
| Search State | cs:searchState | none | cs.searchProfile | Text representation of the state of the search. See the schema file for details on the possible values for this element. |
| Error State | cs:errorState | none | cs.searchProfile | Text represending what type of error, if any occurred while searching. See the schema file for details about the possible values for this element. |
?version=1.1&query=title+any+tree&x-cs-databases=AFU,NN3,PAG&operation=searchRetrieve&recordSchema=cs1.1
This initiates a search against the three databases specified and retrieves
the total number of matches for the query "title contains tree" for each database
as well as a subset of those matching records for each database.
The response contains the
resultSetId for this
set (in this example, result_set_id_string),
the status information about the search, and the records retrieved.
?version=1.1&operation=searchRetrieve&query=cql.resultSetId=result_set_id_string&x-cs-action=continue&recordSchema=cs1.1After some time, a response will be returned that contains a new resultSetId and an augmented set of records.
To receive only the new records that were retrieved for the continue operation, the client can request that the results be sorted by the order in which they were received and that the start record is the first record after the last record previously seen:
?version=1.1&operation=searchRetrieve&query=cql.resultSetId=result_set_id_string&x-cs-action=continue&recordSchema=cs1.1&sortKeys=received&startRecord=21
?version=1.1&operation=searchRetrieve&query=cql.resultSetId=result_set_id_string&x-cs-action=continue&recordSchema=cs1.1&x-cs-databases=AFU
?version=1.1&query=title+any+tree&x-cs-databases=AFU,NN3,PAG&operation=searchStatus&recordSchema=cs1.1
The server will respond with a
status
document, which contains the result set identifer for the result set being
built for the query
(in this case,
asych_result_set_id).
After a short pause, the client can send another
searchStatus request, this
time using the resultSetId
returned in the original response as part of the query:
?version=1.1&query=cql.resultSetId=asych_result_set_id&operation=searchStatus&recordSchema=cs1.1
If the status returned
indicates that the search has completed (In this case, indicated by the
summary cs:searchState being
"idle".), a subsequent
searchRetrieve query using
the original resultSetId:
?version=1.1&query=cql.resultSetId=asych_result_set_id&operation=searchRetrieve&recordSchema=cs1.1
will return the entire result set.
This returns an updated status
for the search. Notice that
a new resultSetId is
returned with this document. This is the identifier associated with this
particular subset of the entire result set. A subsequent
searchRetrieve query using
this new resutlSetId:
?version=1.1&query=cql.resultSetId=NEW_asych_result_set_id&operation=searchRetrieve&recordSchema=cs1.1
will retrieve the same set of results
(provided it is still available on the server).
A subsequent status query
using the original resultSetId
will still return status information about the original search:
?version=1.1&query=cql.resultSetId=asych_result_set_id&operation=searchStatus&recordSchema=cs1.1
?version=1.1&operation=searchStatus&query=cql.resultSetId=ascyh_result_set_id&x-cs-action=continue&recordSchema=cs1.1The response indicates that more searching is going on to augment the existing set of records. Notice that a new result set identifier is returned with this response since more results are being added to the original set. This new identfier is the one that should be used when polling for the status of the continued search:
?version=1.1&query=cql.resultSetId=CONTINUE_ascyh_result_set_id&operation=searchStatus
If x-cs-action=continue is
used in conjunction with a result set identfier already associated with an
ongoing search, the returned status will be for the given result set identifier.
If used in conjunction with an identifier for a partial result set
(e.g., the NEW_result_set_id_string from above),
the continue operation will
result in a status for the largest full result set associated with the same
query and dataases
(e.g., result_set_id_string).
As for synchronous searching, the client can continue a search for a subset of the databases, categories, or
category groups by using the x-cs-databases,
x-cs-categories,
or x-cs-groups parameter in conjunction with the
x-cs-action=continue parameter.
Example:
curl -d "version=1.1&query=cql.resultSetId=result_set_id_string&operation=searchRetrieve" http://<client identifier>.cs.xml.serialssolutions.com/sru?sessionId=result_set_id_string
We continue to support schema version 1.0 (recordSchema=cs), the default schema, as well.