X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=doc%2Fzoom.xml;h=b08d798c8ad69243e95ff1505cf1696ffe4b8dc6;hp=2937474acbd5f6cd68b16bd5334c7100a234317f;hb=3599bbc013ec757862d8a2d6e62aa6a432ba4514;hpb=49218d3cab22778f7460f1099d0534e057be629f diff --git a/doc/zoom.xml b/doc/zoom.xml index 2937474..b08d798 100644 --- a/doc/zoom.xml +++ b/doc/zoom.xml @@ -1,4 +1,4 @@ - + Building clients with ZOOM @@ -10,16 +10,16 @@ The lack of a simple Z39.50 client API for &yaz; has become more - and more apparent over time. So when the first ZOOM specification + and more apparent over time. So when the first &zoom; specification became available, an implementation for &yaz; was quickly developed. For the first time, it is now as easy (or easier!) to develop clients than servers with &yaz;. This - chapter describes the ZOOM C binding. Before going futher, please + chapter describes the &zoom; C binding. Before going futher, please reconsider whether C is the right programming language for the job. There are other language bindings available for &yaz;, and still more - are in active development. See the ZOOM website at - zoom.z3950.org for + are in active development. See the + ZOOM website for more information. @@ -31,7 +31,7 @@ - The C language misses many features found in object oriented languages + The C language misses features found in object oriented languages such as C++, Java, etc. For example, you'll have to manually, destroy all objects you create, even though you may think of them as temporary. Most objects has a _create - and a @@ -52,23 +52,23 @@ #include <yaz/zoom.h> - Z3950_connection Z3950_connection_new (const char *host, int portnum); + ZOOM_connection ZOOM_connection_new (const char *host, int portnum); - Z3950_connection Z3950_connection_create (Z3950_options options); + ZOOM_connection ZOOM_connection_create (ZOOM_options options); - void Z3950_connection_connect(Z3950_connection c, const char *host, + void ZOOM_connection_connect(ZOOM_connection c, const char *host, int portnum); - void Z3950_connection_destroy (Z3950_connection c); + void ZOOM_connection_destroy (ZOOM_connection c); Connection objects are created with either function - Z3950_connection_new or - Z3950_connection_create. + ZOOM_connection_new or + ZOOM_connection_create. The former creates and automatically attempts to establish a network connection with the target. The latter doesn't establish a connection immediately, thus allowing you to specify options before establishing network connection using the function - Z3950_connection_connect. + ZOOM_connection_connect. If the portnumber, portnum, is zero, the host is consulted for a port specification. If no port is given, 210 is used. A colon denotes the beginning of @@ -77,26 +77,24 @@ Connection objects should be destroyed using the function - Z3950_connection_destroy. + ZOOM_connection_destroy. - const char *Z3950_connection_option (Z3950_connection c, - const char *key, - const char *val); - const char *Z3950_connection_host (Z3950_connection c); + void ZOOM_connection_option_set (ZOOM_connection c, + const char *key, + const char *val); + + const char *ZOOM_connection_option_get (ZOOM_connection c, + const char *key); - The Z3950_connection_option allows you to - inspect or set an option given by key - for the connection. - If val is non-NULL that - holds the new value for option. - Otherwise, if val is - NULL, - the option is unchanged. - The function returns the previous value of the option. + The ZOOM_connection_option_set allows you to + set an option given by key to the value + value for the connection. + Function ZOOM_connection_option_get returns + the value for an option given by key. - ZOOM Connection Options +
ZOOM Connection Options @@ -122,13 +120,17 @@ passAuthentication password none + hostTarget host. This setting is "read-only". + It's automatically set internally when connecting to a target. + none + proxyProxy host none asyncIf true (1) the connection operates in asynchronous operation which means that all calls are non-blocking except - Z3950_event. + ZOOM_event. 0 maximumRecordSize Maximum size of single record. @@ -139,20 +141,12 @@
- - Function Z3950_connection_host returns - the host for the connection as specified in a call to - Z3950_connection_new or - Z3950_connection_connect. - This function returns NULL if host isn't - set for the connection. - - int Z3950_connection_error (Z3950_connection c, const char **cp, + int ZOOM_connection_error (ZOOM_connection c, const char **cp, const char **addinfo); - Use Z3950_connection_error to check for + Use ZOOM_connection_error to check for errors for the last operation(s) performed. The function returns zero if no errors occurred; non-zero otherwise indicating the error. Pointers cp and addinfo @@ -161,8 +155,8 @@ Protocol behavior - The calls Z3950_connection_new and - Z3950_connection_connect establises a TCP/IP + The calls ZOOM_connection_new and + ZOOM_connection_connect establises a TCP/IP connection and sends an Initialize Request to the target if possible. In addition, the calls waits for an Initialize Response from the target and the result is inspected (OK or rejected). @@ -190,9 +184,9 @@ When option async is 1, it really means that all network operations are postponed (and queued) until the - function Z3950_event is invoked. When doing so + function ZOOM_event is invoked. When doing so it doesn't make sense to check for errors after - Z3950_connection_new is called since that + ZOOM_connection_new is called since that operation "connecting - and init" is still incomplete and the API cannot tell the outcome (yet). @@ -203,24 +197,24 @@ Query objects represents queries. - Z3950_query Z3950_query_create(void); + ZOOM_query ZOOM_query_create(void); - void Z3950_query_destroy(Z3950_query q); + void ZOOM_query_destroy(ZOOM_query q); - int Z3950_query_prefix(Z3950_query q, const char *str); + int ZOOM_query_prefix(ZOOM_query q, const char *str); - int Z3950_query_sortby(Z3950_query q, const char *criteria); + int ZOOM_query_sortby(ZOOM_query q, const char *criteria); - Create query objects using Z3950_query_create - and destroy them by calling Z3950_query_destroy. + Create query objects using ZOOM_query_create + and destroy them by calling ZOOM_query_destroy. RPN-queries can be specified in PQF notation by using the - function Z3950_query_prefix. More + function ZOOM_query_prefix. More query types will be added later, such as CCL to RPN-mapping, native CCL query, etc. In addition to a search, a sort criteria may be set. Function - Z3950_query_sortby specifies a + ZOOM_query_sortby specifies a sort criteria using the same string notation for sort as offered by the YAZ client. @@ -238,48 +232,42 @@ a target.
- Z3950_resultset Z3950_connection_search(Z3950_connection, - Z3950_query q); + ZOOM_resultset ZOOM_connection_search(ZOOM_connection, + ZOOM_query q); - Z3950_resultset Z3950_connection_search_pqf(Z3950_connection c, - const char *q); + ZOOM_resultset ZOOM_connection_search_pqf(ZOOM_connection c, + const char *q); - void Z3950_resultset_destroy(Z3950_resultset r); + void ZOOM_resultset_destroy(ZOOM_resultset r); - Function Z3950_connection_search creates + Function ZOOM_connection_search creates a result set given a connection and query. Destroy a result set by calling - Z3950_resultset_destroy. + ZOOM_resultset_destroy. Simple clients may using PQF only may use function - Z3950_connection_search_pqf in which case + ZOOM_connection_search_pqf in which case creating query objects is not necessary. - const char *Z3950_resultset_option (Z3950_resultset r, - const char *key, - const char *val); + void ZOOM_resultset_option_set (ZOOM_resultset r, + const char *key, + const char *val); - int Z3950_resultset_size (Z3950_resultset r); + const char *ZOOM_resultset_option_get (ZOOM_resultset r, + const char *key); - void *Z3950_resultset_get (Z3950_resultset s, size_t pos, - const char *type, size_t *len); + size_t ZOOM_resultset_size (ZOOM_resultset r); - Function Z3950_resultset_options sets or - modifies an option for a result set similar to - Z3950_connection_option. + Functions ZOOM_resultset_options_set and + ZOOM_resultset_get sets and gets an option + for a result set similar to ZOOM_connection_option_get + and ZOOM_connection_option_set. The number of hits also called result-count is returned by - function Z3950_resultset_size. - - - Function Z3950_resultset_get is similar to - - Z3950_record_get but - instead of operating on a record object, it operates on a record on - a given offset within a result set. + function ZOOM_resultset_size. ZOOM Result set Options @@ -316,6 +304,10 @@ USMARC, SUTRS, etc. none + schemaSchema for retrieval, such as + Gils-schema, Geo-schema, etc. + none + smallSetUpperBoundIf hits is less than or equal to this value, then target will return all records using small element set name 0 @@ -341,6 +333,11 @@ databaseNameOne or more database names separated by character plus (+). Default + + setnameName of Result Set (Result Set ID). + If this option isn't set, the ZOOM module will automatically + allocate a result set name. + default
@@ -402,57 +399,65 @@ created from result sets. - void Z3950_resultset_records (Z3950_resultset r, - Z3950_record *recs, - size_t start, size_t count); - Z3950_record Z3950_resultset_record (Z3950_resultset s, size_t pos); + void ZOOM_resultset_records (ZOOM_resultset r, + ZOOM_record *recs, + size_t start, size_t count); + ZOOM_record ZOOM_resultset_record (ZOOM_resultset s, size_t pos); + + void *ZOOM_record_get (ZOOM_record rec, const char *type, + size_t *len); - void *Z3950_record_get (Z3950_record rec, const char *type, - size_t *len); + ZOOM_record ZOOM_record_clone (ZOOM_record rec); - void Z3950_record_destroy (Z3950_record rec); + void ZOOM_record_destroy (ZOOM_record rec); - Records are created by functions - Z3950_resultset_records or - Z3950_resultset_record - and destroyed by Z3950_record_destroy. + References to temporary records are returned by functions + ZOOM_resultset_records or + ZOOM_resultset_record. + + + If a persistent reference to a record is desired + ZOOM_record_clone should be used. + It returns a record reference that should be destroyed + by a call to ZOOM_record_destroy. - A single record is created and returned by function - Z3950_resultset_record that takes a + A single record is returned by function + ZOOM_resultset_record that takes a position as argument. First record has position zero. If no record could be obtained NULL is returned. - Function Z3950_resultset_records retrieves + Function ZOOM_resultset_records retrieves a number of records from a result set. Parameter start and count specifies the range of records to be returned. Upon completion array recs[0], ..recs[count-1] holds record objects for the records. The array of records - recs should be allocate prior to calling - Z3950_resultset_records. Note that for those + recs should be allocated prior the call + ZOOM_resultset_records. Note that for those records that couldn't be retrieved from the target recs[ ..] is set to NULL. In order to extract information about a single record, - Z3950_record_get is provided. The + ZOOM_record_get is provided. The function returns a pointer to certain record information. The - nature (type) of the pointer depends on the type - given. In addition for certain types, the length + nature (type) of the pointer depends on the parameter, + type. + In addition, for certain types, the length len passed will be set to the size in bytes of the returned information. database - The database that holds the record is returned - as a C string. Return type char *. + Database of record is returned + as a C null-terminated string. Return type char *. syntax The transfer syntax (OID) of the record is returned - as a C string. Return type char *. + as a C null-terminated string. Return type char *. render @@ -465,7 +470,7 @@ raw The record is returned in the internal YAZ specific format. The raw data is returned as type - Z_External * is just the type for + Z_External * which is just the type for the member retrievalRecord in type NamePlusRecord. @@ -474,58 +479,106 @@ Protocol behavior - The functions Z3950_resultset_record and - Z3950_resultset_records inspects the client-side - record cache. If the records(s) were not found, i.e. not yet retrieved - from, they are fetched using Present Requests. + The functions ZOOM_resultset_record and + ZOOM_resultset_records inspects the client-side + record cache. Records not found in cache are fetched using + Present. + The functions may block (and perform network I/O) - even though option + async is 1, because they return records objects. + (and there's no way to return records objects without retrieving them!). + + + There is a trick, however, in the usage of function + ZOOM_resultset_records that allows for + delayed retrieval (and makes it non-blocking). By passing + a null pointer for recs you're indicating + you're not interested in getting records objects + now. Options - Most &zoom; objects provide a way to specify options to default behavior. + Most &zoom; objects provide a way to specify options to change behavior. From an implementation point of view a set of options is just like - an associate array / hash array, etc. + an associative array / hash array, etc. - Z3950_options Z3950_options_create (void); + ZOOM_options ZOOM_options_create (void); - Z3950_options Z3950_options_create_with_parent (Z3950_options parent); + ZOOM_options ZOOM_options_create_with_parent (ZOOM_options parent); - void Z3950_options_destroy (Z3950_options opt); + void ZOOM_options_destroy (ZOOM_options opt); - const char *Z3950_options_get (Z3950_options opt, const char *name); + const char *ZOOM_options_get (ZOOM_options opt, const char *name); - void Z3950_options_set (Z3950_options opt, const char *name, - const char *v); + void ZOOM_options_set (ZOOM_options opt, const char *name, + const char *v); - typedef const char *(*Z3950_options_callback) + typedef const char *(*ZOOM_options_callback) (void *handle, const char *name); - Z3950_options_callback - Z3950_options_set_callback (Z3950_options opt, - Z3950_options_callback c, - void *handle); + ZOOM_options_callback + ZOOM_options_set_callback (ZOOM_options opt, + ZOOM_options_callback c, + void *handle); + Scsn + + This section describes an interface for Scan. Scan is not an + official part of the ZOOM model yet. The result of a scan operation + is the ZOOM_scanset which is a set of terms + returned by a target. + + + ZOOM_scanset ZOOM_connection_scan (ZOOM_connection c, + const char *startterm); + + size_t ZOOM_scanset_size(ZOOM_scanset scan); + + const char * ZOOM_scanset_term(ZOOM_scanset scan, size_t pos, + int *occ, size_t *len); + + + void ZOOM_scanset_destroy (ZOOM_scanset scan); + + + The scan set is created by function + ZOOM_connection_scan which performs a scan + operation on the connection and start term given. + If the operation was successful, the size of the scan set can be + retrived by a call to ZOOM_scanset_size. + Like result sets, the items are numbered 0,..size-1. + To obtain information about a particular scan term, call function + ZOOM_scanset_term. This function takes + a scan set offset pos and returns a pointer + to an actual term or NULL if non-present. + If present, the occ and len + are set to the number of occurrences and the length + of the actual term respectively. + A scan set may be freed by a call to function + ZOOM_scanset_destroy. + + Events If you're developing non-blocking applications, you have to deal with events. - int Z3950_event (int no, Z3950_connection *cs); + int ZOOM_event (int no, ZOOM_connection *cs); - The Z3950_event executes pending events for + The ZOOM_event executes pending events for a number of connections. Supply the number of connections in no and an array of connections in cs (cs[0] ... cs[no-1]). A pending event could be a sending a search, receiving a response, etc. - When an event has a occured for one of the connections, this function + When an event has occured for one of the connections, this function returns a positive integer n denoting that an event occurred for connection cs[n-1]. When no events are pending for the connections, a value of zero is