
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 preferably 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 | Current Record Count | 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 | recommended |
|
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 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 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. |
| x-cs-filter-database | optional | Single database code used to filter the results for a search. | Not applicable | This parameter allows the client to limit the returned results to a single database. Note: This parameter is only used in searchRetrieve operations. |
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. Note: The cs.date parameter is limited to one year only and does not support a year range. |
| 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. Refinement 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 hierarchy 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 hierarchy. 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 identified 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 representing 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.2
This initiates a search against the three databases specified and specifies
the total number of matches (Total Record Count) for the query
"title contains tree" as well as the partial number of records available
(Current Record Count) for retrieval.
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&query=title+any+tree&x-cs-databases=AFU,NN3,PAG&operation=searchRetrieve&recordSchema=cs1.2&startRecord=1&maximumRecords=20
And then use subsequent queries using the cql.resultSetId to get the next pages:
?version=1.1&cql.resultSetId=result_set_id_string&operation=searchRetrieve&recordSchema=cs1.2&startRecord=21&maximumRecords=20
?version=1.1&operation=searchRetrieve&query=cql.resultSetId=result_set_id_string&x-cs-action=continue&recordSchema=cs1.2After 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.2&sortKeys=received&startRecord=21
?version=1.1&operation=searchRetrieve&query=cql.resultSetId=result_set_id_string&x-cs-action=continue&recordSchema=cs1.2&x-cs-databases=AFU
?version=1.1&query=title+any+tree&x-cs-databases=AFU,NN3,PAG&operation=searchStatus&recordSchema=cs1.2
The server will respond with a
status
document, which contains the result set identifier 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.2
This returns an updated status
for the search. Since some results have been returned, the client may then
want to retrieve results from a specific database that is "Completed" or "Idle". This can be done using the
searchRetrieve operation
along with the x-cs-filter-database parameter and the resultSetId associated
with the search:
?version=1.1&query=cql.resultSetId=asych_result_set_id&operation=searchRetrieve&recordSchema=cs1.2&x-cs-filter-database=PAG
The resulting result set
document contains the records returned from the filtered database.
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.2
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.2
will return the entire result set.
?version=1.1&query=cql.resultSetId=asych_result_set_id&operation=searchRetrieve&recordSchema=cs1.2&startRecord=1&maximumRecords=20
?version=1.1&operation=searchStatus&query=cql.resultSetId=ascyh_result_set_id&x-cs-action=continue&recordSchema=cs1.2The 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 identifier 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&recordSchema=cs1.2
If x-cs-action=continue is
used in conjunction with a result set identifier 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 databases
(e.g., result_set_id_string).
As with 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 (cs) and schema version 1.1 (cs1.1) as well.