18#include <libxml/parser.h>
19#include <libxml/tree.h>
36 const char *cp2 = strstr(cp,
"@attr 1=");
40 if (!strncmp(cp, field, length) &&
41 (cp[length] ==
' ' || cp[length] ==
',' || cp[length] ==
'\0'))
50 while (*cp && *cp !=
',')
62 const char **start,
const char **sort)
70 int general_start = -1;
71 int general_sortorder = -1;
72 int general_limit = -1;
74 for (i = 0; i < fl->
num; i++)
94 general_limit = av.
limit;
97 general_start = av.
start;
102 if (general_limit != -1)
113 if (general_start != -1)
119 if (general_sortorder == 1)
129 int general_limit = -1;
133 const char *cp = *
limit;
136 while (sscanf(cp,
"%d%n", &val, &nor) >= 1 && nor > 0)
142 const char *cp0 = ++cp;
143 while (*cp && *cp !=
',')
153 if (*sort && !strcmp(*sort,
"alphanumeric"))
166 if (*sort || *
start || general_limit != -1)
170 if (*sort && !strcmp(*sort,
"alphanumeric"))
174 if (general_limit != -1)
199 "http://docs.oasis-open.org/ns/search-ws/facetedResults";
200 xmlNode *p1 = xmlNewChild(n, 0, BAD_CAST
"facetedResults", 0);
201 xmlNsPtr ns_fr = xmlNewNs(p1, BAD_CAST ns, BAD_CAST
"fr");
202 for (i = 0; i < fl->
num; i++)
205 xmlNode *p2 = xmlNewChild(p1, ns_fr, BAD_CAST
"facet", 0);
212 p3 = xmlNewChild(p2, 0, BAD_CAST
"terms", 0);
217 xmlNode *p4 = xmlNewChild(p3, 0, BAD_CAST
"term", 0);
234 for (p1 = n->children; p1; p1 = p1->next)
243 for (p1 = n->children; p1; p1 = p1->next)
246 char *index_name = 0;
247 xmlNode *p_terms = 0;
248 xmlNode *p2 = p1->children;
255 for (; p2; p2 = p2->next)
269 for (p = p_terms->children; p; p = p->next)
278 for (p = p_terms->children; p; p = p->next)
284 xmlNode *p2 = p->children;
285 for (; p2; p2 = p2->next)
Z_FacetTerm * facet_term_create_cstr(ODR odr, const char *cstr, Odr_int freq)
void yaz_facet_attr_init(struct yaz_facet_attr *attr_values)
void yaz_facet_attr_get_z_attributes(const Z_AttributeList *attributes, struct yaz_facet_attr *av)
Header for the facet utilities.
void * odr_malloc(ODR o, size_t size)
char * odr_strdup(ODR o, const char *str)
Z_FacetList * yaz_pqf_parse_facet_list(ODR o, const char *qbuf)
Z_AttributeList * zget_AttributeList_use_string(ODR o, const char *name)
creates AttributeList with type=1(use) and string value
void yaz_snprintf(char *buf, size_t size, const char *fmt,...)
Header for config file reading utilities.
int yaz_match_xsd_element(xmlNodePtr ptr, const char *elem)
void add_xsd_integer(xmlNodePtr ptr, const char *elem, const Odr_int *val)
xmlNodePtr add_xsd_string(xmlNodePtr ptr, const char *elem, const char *val)
int yaz_match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o, char **val)
xmlNodePtr add_xsd_string_n(xmlNodePtr ptr, const char *elem, const char *val, int len)
int yaz_match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o, Odr_int **val)
void yaz_sru_facet_request(ODR o, Z_FacetList **facetList, const char **limit, const char **start, const char **sort)
void yaz_sru_facet_response(ODR o, Z_FacetList **facetList, xmlNodePtr n)
static void insert_field(WRBUF w, const char *field, size_t length, const char *attr)
Z_AttributeList * attributes
union Z_Term::@023217361022206241314262227377164117366363003164 u
void wrbuf_destroy(WRBUF b)
destroy WRBUF and its buffer
void wrbuf_insert(WRBUF b, size_t pos, const char *buf, size_t size)
inserts buffer into WRBUF at some position
const char * wrbuf_cstr(WRBUF b)
returns WRBUF content as C-string
WRBUF wrbuf_alloc(void)
construct WRBUF
void wrbuf_printf(WRBUF b, const char *fmt,...)
writes printf result to WRBUF
void wrbuf_cut_right(WRBUF b, size_t no_to_remove)
cut size of WRBUF
void wrbuf_puts(WRBUF b, const char *buf)
appends C-string to WRBUF
void wrbuf_write(WRBUF b, const char *buf, size_t size)
append constant size buffer to WRBUF
Header for WRBUF (growing buffer).