X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fsrw.c;h=17b7c399bc098ce9ec945dc68f0e53708263881b;hb=2fc1ed65e59499ef747922ea9763d8f21f056f6e;hp=386100cc3edd27d64674e220ac51e0ca83d95457;hpb=23d3217defe73218069ac17be28742b39637a144;p=yaz-moved-to-github.git diff --git a/src/srw.c b/src/srw.c index 386100c..17b7c39 100644 --- a/src/srw.c +++ b/src/srw.c @@ -21,64 +21,6 @@ #include #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) @@ -626,6 +568,8 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, 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 *) @@ -688,10 +632,17 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, 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) @@ -708,7 +659,8 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, { 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")) { @@ -983,8 +935,13 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, 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)