1 /* $Id: srw-client.c,v 1.2 2003-01-13 14:32:41 adam Exp $
2 Copyright (C) 2002-2003
5 This file is part of the YAZ toolkit.
7 See file LICENSE for details.
12 #include <yaz/options.h>
13 #include <yaz/srw-util.h>
15 int main (int argc, char **argv)
20 struct zs__searchRetrieveResponse res;
22 struct xcql__operandType *xQuery = 0;
23 xsd__integer startRecord = 1;
24 xsd__integer maximumRecord = 0;
25 char *recordSchema = "http://www.loc.gov/marcxml/";
26 xsd__string recordPacking = 0;
32 while ((ret = options("er:xs:", argv, argc, &arg)) != -2)
46 sscanf (arg, "%d,%d", &startRecord, &maximumRecord);
57 printf ("usage:\n srw-client");
58 printf (" [-e] [-r start,number] [-x] [-s schema] <service> <query>\n");
59 printf (" http://localhost:8001/indexdata.dk/gils computer\n");
63 soap.namespaces = srw_namespaces;
67 struct zs__explainResponse eres;
68 ret = soap_call_zs__explainRequest(&soap, service, action,
73 printf ("%s\n", eres.Explain);
75 printf ("no record\n");
78 soap_print_fault(&soap, stderr);
81 if (xcql) /* xquery */
82 { /* just a hacked query for testing .. */
83 struct xcql__searchClauseType *sc1, *sc2;
84 struct xcql__relationType *relation;
85 struct xcql__tripleType *triple;
86 xQuery = soap_malloc (&soap, sizeof(*xQuery));
87 sc1 = soap_malloc (&soap, sizeof(*sc1));
89 sc1->index = "dc.title";
90 relation = sc1->relation = soap_malloc(&soap, sizeof(*relation));
91 sc1->term = "computer";
92 relation->value = "=";
93 relation->modifiers = 0;
95 sc2 = soap_malloc (&soap, sizeof(*sc2));
97 sc2->index = "dc.author";
98 relation = sc2->relation = soap_malloc(&soap, sizeof(*relation));
100 relation->value = "=";
101 relation->modifiers =
102 soap_malloc (&soap, sizeof(*relation->modifiers));
103 relation->modifiers->__sizeModifier = 1;
104 relation->modifiers->modifier =
105 soap_malloc (&soap, sizeof(*relation->modifiers->modifier));
106 relation->modifiers->modifier[0] =
107 soap_malloc (&soap, sizeof(**relation->modifiers->modifier));
108 relation->modifiers->modifier[0]->type = 0;
109 relation->modifiers->modifier[0]->value = soap_malloc (&soap, 6);
110 strcpy(relation->modifiers->modifier[0]->value, "fuzzy");
112 triple = soap_malloc (&soap, sizeof(*triple));
113 triple->prefixes = 0;
114 triple->boolean = soap_malloc (&soap, sizeof(*triple->boolean));
115 triple->boolean->value = "and";
116 triple->boolean->modifiers = 0;
117 triple->leftOperand =
118 soap_malloc (&soap, sizeof(*triple->leftOperand));
119 triple->leftOperand->searchClause = sc1;
120 triple->rightOperand =
121 soap_malloc (&soap, sizeof(*triple->rightOperand));
122 triple->rightOperand->searchClause = sc2;
123 xQuery->triple = triple;
127 ret = soap_call_zs__searchRetrieveRequest(&soap, service, action,
138 if (res.diagnostics.__sizeDiagnostics > 0)
142 res.diagnostics.__sizeDiagnostics;
145 int code = res.diagnostics.diagnostic[i]->code;
147 res.diagnostics.diagnostic[i]->details;
148 printf ("error = %d", code);
150 printf (" details = %s", details);
158 printf ("set: %s\n", res.resultSetId);
159 printf ("numberOfRecords: %d\n", res.numberOfRecords);
160 for (i = 0; i<res.records.__sizeRecords;
163 if (res.records.record[i]->recordData)
165 printf ("rec %d schema=%s string:\n%s\n", i+1,
166 res.records.record[i]->recordSchema,
167 res.records.record[i]->recordData);
174 soap_print_fault(&soap, stderr);