#include <yaz/facet.h>
#include "sru-p.h"
-static void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len,
- xmlNsPtr ns_ptr)
-{
- if (val)
- {
- xmlDocPtr doc = xmlParseMemory(val,len);
- if (doc)
- {
- xmlNodePtr c = xmlNewChild(ptr, ns_ptr, BAD_CAST elem, 0);
- xmlNodePtr t = xmlDocGetRootElement(doc);
- xmlAddChild(c, xmlCopyNode(t,1));
- xmlFreeDoc(doc);
- }
- }
-}
-
-xmlNodePtr add_xsd_string_n(xmlNodePtr ptr, const char *elem, const char *val,
- int len)
-{
- if (val)
- {
- xmlNodePtr c = xmlNewChild(ptr, 0, BAD_CAST elem, 0);
- xmlNodePtr t = xmlNewTextLen(BAD_CAST val, len);
- xmlAddChild(c, t);
- return t;
- }
- return 0;
-}
-
-xmlNodePtr add_xsd_string_ns(xmlNodePtr ptr, const char *elem, const char *val,
- xmlNsPtr ns_ptr)
-{
- if (val)
- {
- xmlNodePtr c = xmlNewChild(ptr, ns_ptr, BAD_CAST elem, 0);
- xmlNodePtr t = xmlNewText(BAD_CAST val);
- xmlAddChild(c, t);
- return t;
- }
- return 0;
-}
-
-xmlNodePtr add_xsd_string(xmlNodePtr ptr, const char *elem, const char *val)
-{
- return add_xsd_string_ns(ptr, elem, val, 0);
-}
-
-void add_xsd_integer(xmlNodePtr ptr, const char *elem,
- const Odr_int *val)
-{
- if (val)
- {
- char str[40];
- sprintf(str, ODR_INT_PRINTF, *val);
- xmlNewTextChild(ptr, 0, BAD_CAST elem, BAD_CAST str);
- }
-}
-
char *yaz_negotiate_sru_version(char *input_ver)
{
if (!input_ver)
char *recordPacking = 0;
char *recordXMLEscaping = 0;
const char *facetLimit = 0;
+ const char *facetStart = 0;
+ const char *facetSort = 0;
(*p)->which = Z_SRW_searchRetrieve_request;
req = (*p)->u.request = (Z_SRW_searchRetrieveRequest *)
else if (yaz_match_xsd_string(ptr, "stylesheet", o,
&req->stylesheet))
;
- else if (yaz_match_xsd_string(ptr, "database", o, &req->database))
+ else if (yaz_match_xsd_string(ptr, "database", o,
+ &req->database))
;
else if (yaz_match_xsd_string(ptr, "facetLimit", o,
- (char**) &facetLimit))
+ (char**) &facetLimit))
+ ;
+ else if (yaz_match_xsd_string(ptr, "facetStart", o,
+ (char**) &facetStart))
+ ;
+ else if (yaz_match_xsd_string(ptr, "facetSort", o,
+ (char**) &facetSort))
;
}
if (!req->query)
{
req->recordPacking = recordPacking;
}
- yaz_sru_facet_request(o, &req->facetList, &facetLimit);
+ yaz_sru_facet_request(o, &req->facetList, &facetLimit, &facetStart,
+ &facetSort);
}
else if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveResponse"))
{
add_xsd_string(ptr, "database", req->database);
{
const char *limit = 0;
- yaz_sru_facet_request(o, &req->facetList, &limit);
+ const char *start = 0;
+ const char *sort = 0;
+ yaz_sru_facet_request(o, &req->facetList, &limit, &start,
+ &sort);
add_xsd_string(ptr, "facetLimit", limit);
+ add_xsd_string(ptr, "facetStart", start);
+ add_xsd_string(ptr, "facetSort", sort);
}
}
else if ((*p)->which == Z_SRW_searchRetrieve_response)