return match_xsd_string_n(ptr, elem, o, val, 0);
}
-static int match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o,
- char **val, int *len)
+static int match_xsd_XML_n2(xmlNodePtr ptr, const char *elem, ODR o,
+ char **val, int *len, int fixup_root)
{
xmlBufferPtr buf;
+ int no_root_nodes = 0;
if (!match_element(ptr, elem))
return 0;
xmlNodeDump(buf, tmp->doc, tmp, 0, 0);
xmlFreeNode(tmp);
+ no_root_nodes++;
}
}
-
- *val = (char *) odr_malloc(o, buf->use+1);
- memcpy (*val, buf->content, buf->use);
+ if (no_root_nodes != 1 && fixup_root)
+ {
+ /* does not appear to be an XML document. Make it so */
+ xmlBufferAddHead(buf, (const xmlChar *) "<yaz_record>", -1);
+ xmlBufferAdd(buf, (const xmlChar *) "</yaz_record>", -1);
+ }
+ *val = (char *) odr_malloc(o, buf->use + 1);
+ memcpy(*val, buf->content, buf->use);
(*val)[buf->use] = '\0';
if (len)
return 1;
}
-
+
+static int match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o,
+ char **val, int *len)
+{
+ 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)
{
if (!strcmp(input_ver, "1.1"))
return "1.1";
- return "1.2"; /* our latest supported version */
+ return "1.2"; /* our latest supported version */
}
static int yaz_srw_record(ODR o, xmlNodePtr pptr, Z_SRW_record *rec,
}
if (data_ptr)
{
- switch(pack)
+ switch (pack)
{
case Z_SRW_recordPacking_XML:
- match_xsd_XML_n(data_ptr, "recordData", o,
- &rec->recordData_buf, &rec->recordData_len);
+ match_xsd_XML_n2(data_ptr, "recordData", o,
+ &rec->recordData_buf, &rec->recordData_len, 1);
break;
case Z_SRW_recordPacking_URL:
/* just store it as a string.
add_xsd_string(ptr, "recordSchema", rec->recordSchema);
if (spack)
add_xsd_string(ptr, "recordPacking", spack);
- switch(pack)
+ switch (pack)
{
case Z_SRW_recordPacking_string:
add_xsd_string_n(ptr, "recordData", rec->recordData_buf,
Z_FacetTerm *yaz_sru_proxy_get_facet_term_count(ODR odr, xmlNodePtr node)
{
- int freq;
+ Odr_int freq;
xmlNodePtr child;
WRBUF wrbuf = wrbuf_alloc();
- const char *freq_string = yaz_element_attribute_value_get(node, "facetvalue", "est_representation");
- Z_Term *term;
+ Z_FacetTerm *facet_term;
+ const char *freq_string = yaz_element_attribute_value_get(
+ node, "facetvalue", "est_representation");
if (freq_string)
- freq = atoi(freq_string);
+ freq = odr_atoi(freq_string);
else
freq = -1;
- for (child = node->children; child ; child = child->next) {
+ for (child = node->children; child ; child = child->next)
+ {
if (child->type == XML_TEXT_NODE)
wrbuf_puts(wrbuf, (const char *) child->content);
}
- term = term_create(odr, wrbuf_cstr(wrbuf));
- yaz_log(YLOG_DEBUG, "sru-proxy facet: %s %d", wrbuf_cstr(wrbuf), freq);
+ facet_term = facet_term_create_cstr(odr, wrbuf_cstr(wrbuf), freq);
wrbuf_destroy(wrbuf);
- return facet_term_create(odr, term, freq);
+ return facet_term;
};
static Z_FacetField *yaz_sru_proxy_decode_facet_field(ODR odr, xmlNodePtr ptr)
{
if (match_element(node, "facetvalue"))
{
- facet_field_term_set(odr, facet_field, yaz_sru_proxy_get_facet_term_count(odr, node), index);
+ facet_field_term_set(odr, facet_field,
+ yaz_sru_proxy_get_facet_term_count(odr, node),
+ index);
index++;
}
}
num_facets = 0;
for (node = ptr->children; node; node= node->next)
{
- if (match_element(node, "facet")) {
- facet_list_field_set(o, facet_list, yaz_sru_proxy_decode_facet_field(o, node), num_facets);
+ if (match_element(node, "facet"))
+ {
+ facet_list_field_set(
+ o, facet_list,
+ yaz_sru_proxy_decode_facet_field(o, node), num_facets);
num_facets++;
}
}
if ((*p)->srw_version)
add_xsd_string(ptr, "version", (*p)->srw_version);
- switch(req->query_type)
+ switch (req->query_type)
{
case Z_SRW_query_type_cql:
add_xsd_string(ptr, "query", req->query.cql);
add_xsd_string(ptr, "recordSchema", req->recordSchema);
add_xsd_string(ptr, "recordXPath", req->recordXPath);
add_xsd_integer(ptr, "resultSetTTL", req->resultSetTTL);
- switch(req->sort_type)
+ switch (req->sort_type)
{
case Z_SRW_sort_type_none:
break;
xmlSetNs(ptr, ns_srw);
add_xsd_string(ptr, "version", (*p)->srw_version);
- switch(req->query_type)
+ switch (req->query_type)
{
case Z_SRW_query_type_cql:
add_xsd_string(ptr, "scanClause", req->scanClause.cql);
;
else if (match_xsd_string(ptr, "action", o,
&oper)){
- if ( oper ){
- if ( !strcmp(oper, "info:srw/action/1/delete"))
+ if (oper)
+ {
+ if (!strcmp(oper, "info:srw/action/1/delete"))
req->operation = "delete";
else if (!strcmp(oper,"info:srw/action/1/replace" ))
req->operation = "replace";
- else if ( !strcmp( oper, "info:srw/action/1/create"))
+ else if (!strcmp(oper, "info:srw/action/1/create"))
req->operation = "insert";
}
}
Z_SRW_PDU **p = handler_data;
xmlNsPtr ns_ucp, ns_srw;
-
if ((*p)->which == Z_SRW_update_request)
{
Z_SRW_updateRequest *req = (*p)->u.update_request;
}
else
return -1;
-
}
return 0;
}