#include <libxml/parser.h>
#include <libxml/tree.h>
#include <assert.h>
-
+#include <yaz/facet.h>
#include "sru-p.h"
static void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len,
return add_xsd_string_ns(ptr, elem, val, 0);
}
-static void add_xsd_integer(xmlNodePtr ptr, const char *elem,
+void add_xsd_integer(xmlNodePtr ptr, const char *elem,
const Odr_int *val)
{
if (val)
}
}
-static int match_element(xmlNodePtr ptr, const char *elem)
+int match_element(xmlNodePtr ptr, const char *elem)
{
if (ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST elem))
{
#define CHECK_TYPE 0
-static int match_xsd_string_n(xmlNodePtr ptr, const char *elem, ODR o,
- char **val, int *len)
+int match_xsd_string_n(xmlNodePtr ptr, const char *elem, ODR o,
+ char **val, int *len)
{
#if CHECK_TYPE
struct _xmlAttr *attr;
}
-static int match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o,
- char **val)
+int match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o, char **val)
{
return match_xsd_string_n(ptr, elem, o, val, 0);
}
return match_xsd_XML_n2(ptr, elem, o, val, len, 0);
}
-static int match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o,
- Odr_int **val)
+int match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o, Odr_int **val)
{
#if CHECK_TYPE
struct _xmlAttr *attr;
Z_SRW_searchRetrieveRequest *req;
char *recordPacking = 0;
char *recordXMLEscaping = 0;
+ const char *facetLimit = 0;
(*p)->which = Z_SRW_searchRetrieve_request;
req = (*p)->u.request = (Z_SRW_searchRetrieveRequest *)
else if (match_xsd_string(ptr, "stylesheet", o,
&req->stylesheet))
;
- else
- match_xsd_string(ptr, "database", o, &req->database);
+ else if (match_xsd_string(ptr, "database", o, &req->database))
+ ;
+ else if (match_xsd_string(ptr, "facetLimit", o,
+ (char**) &facetLimit))
+ ;
}
if (!req->query)
{
{
req->recordPacking = recordPacking;
}
+ yaz_sru_facet_request(o, &req->facetList, &facetLimit);
}
else if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveResponse"))
{
client_data, ns);
else if (match_element(ptr, "facet_analysis"))
yaz_sru_proxy_decode_facets(o, ptr, &res->facetList);
+ else if (match_element(ptr, "facetedResults"))
+ yaz_sru_facet_response(o, &res->facetList, ptr);
}
}
else if (!xmlStrcmp(method->name, BAD_CAST "explainRequest"))
}
add_xsd_string(ptr, "stylesheet", req->stylesheet);
add_xsd_string(ptr, "database", req->database);
+ {
+ const char *limit = 0;
+ yaz_sru_facet_request(o, &req->facetList, &limit);
+ add_xsd_string(ptr, "facetLimit", limit);
+ }
}
else if ((*p)->which == Z_SRW_searchRetrieve_response)
{
if (res->resultCountPrecision)
add_xsd_string(ptr, "resultCountPrecision",
res->resultCountPrecision);
+ yaz_sru_facet_response(o, &res->facetList, ptr);
}
else if ((*p)->which == Z_SRW_explain_request)
{