X-Git-Url: http://git.indexdata.com/?p=mp-xquery-moved-to-github.git;a=blobdiff_plain;f=src%2Fmetaproxy_filter_xquery.cpp;h=4864ce419d979b8edd48cb5f05ddbe972c5cf538;hp=466164c28b786ff8da208c7853e386a7157a7532;hb=0fbac7326ab3b1f0dcf912bb45b1e0be303116ea;hpb=1699ede93aee42c8a0944de672ab8c4f88a634f3 diff --git a/src/metaproxy_filter_xquery.cpp b/src/metaproxy_filter_xquery.cpp index 466164c..4864ce4 100644 --- a/src/metaproxy_filter_xquery.cpp +++ b/src/metaproxy_filter_xquery.cpp @@ -59,6 +59,8 @@ namespace metaproxy_1 { std::string zorba_filename; std::string zorba_script; std::string zorba_record_variable; + std::string elementset_input; + std::string elementset_output; Zorba *lZorba; XQuery_t lQuery; }; @@ -182,10 +184,10 @@ void yf::XQuery::process(Package &package) const const char *backend_schema = 0; const Odr_oid *backend_syntax = 0; - if (input_schema && !strcmp(input_schema, "bibframe") && + if (input_schema && !strcmp(input_schema, elementset_input.c_str()) && (!input_syntax || !oid_oidcmp(input_syntax, yaz_oid_recsyn_xml))) { - backend_schema = "marcxml"; + backend_schema = elementset_output.c_str(); backend_syntax = yaz_oid_recsyn_xml; } else @@ -319,7 +321,20 @@ void yf::XQuery::configure(const xmlNode * ptr, bool test_only, { if (ptr->type != XML_ELEMENT_NODE) continue; - if (!strcmp((const char *) ptr->name, "variable")) + if (!strcmp((const char *) ptr->name, "elementset")) + { + struct _xmlAttr *attr; + for (attr = ptr->properties; attr; attr = attr->next) + if (!strcmp((const char *) attr->name, "name")) + elementset_input = mp::xml::get_text(attr->children); + else if (!strcmp((const char *) attr->name, "backend")) + elementset_output = mp::xml::get_text(attr->children); + else + throw mp::filter::FilterException( + "Bad attribute " + std::string((const char *) + attr->name)); + } + else if (!strcmp((const char *) ptr->name, "variable")) { std::string name; std::string value;