X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fmod_dom.c;h=babee870da05c9b7138a6263bb60841624659141;hb=527dab66d9847bb7f8a931c558306a070064bf25;hp=05f2009592e3095ccdb01ce1d986f7dce5a07b2c;hpb=f22aee0a271559cb1fc0eed0b7583019e34fc4e0;p=idzebra-moved-to-github.git diff --git a/index/mod_dom.c b/index/mod_dom.c index 05f2009..babee87 100644 --- a/index/mod_dom.c +++ b/index/mod_dom.c @@ -1,5 +1,4 @@ - -/* $Id: mod_dom.c,v 1.33 2007-04-02 16:57:08 adam Exp $ +/* $Id: mod_dom.c,v 1.42 2007-12-13 19:59:21 adam Exp $ Copyright (C) 1995-2007 Index Data ApS @@ -44,6 +43,7 @@ #include #include +#include /* DOM filter style indexing */ #define ZEBRA_DOM_NS "http://indexdata.com/zebra-2.0" @@ -727,7 +727,7 @@ static void index_value_of(struct filter_info *tinfo, { xmlChar *text = xmlNodeGetContent(node); size_t text_len = strlen((const char *)text); - + /* if there is no text, we do not need to proceed */ if (text_len) { @@ -777,15 +777,10 @@ static void index_value_of(struct filter_info *tinfo, } /* actually indexing the text given */ - dom_log(YLOG_DEBUG, tinfo, 0, - "INDEX '%s:%s' '%s'", - index ? (const char *) index : "null", - type ? (const char *) type : "null", - text ? (const char *) text : "null"); recword->index_name = (const char *)index; if (type && *type) - recword->index_type = *type; + recword->index_type = (const char *) type; /* writing debug out */ if (extctr->flagShowRecords) @@ -795,10 +790,6 @@ static void index_value_of(struct filter_info *tinfo, type ? (const char *) type : "null", text ? (const char *) text : "null"); - /* actually indexing the text given */ - recword->index_name = (const char *)index; - if (type && *type) - recword->index_type = *type; (extctr->tokenAdd)(recword); /* eat whitespaces */ @@ -850,7 +841,6 @@ static void set_record_info(struct filter_info *tinfo, else dom_log(YLOG_WARN, tinfo, node, "bad @type value: %s", type_p); extctr->action = action; - yaz_log(YLOG_LOG, "In mod_dom.c: setting action to %d", action); } if (tinfo->record_info_invoked == 1) @@ -1090,9 +1080,25 @@ static int convert_extract_doc(struct filter_info *tinfo, params[0] = 0; set_param_str(params, "schema", zebra_dom_ns, tinfo->odr_record); + if (p && p->flagShowRecords) + { + xmlChar *buf_out; + int len_out; +#if 0 + FILE *outf = fopen("extract.xml", "w"); + xmlDocDumpMemory(doc, &buf_out, &len_out); + fwrite(buf_out, 1, len_out, outf); +#endif + yaz_log(YLOG_LOG, "Extract Doc: %.*s", len_out, buf_out); +#if 0 + fclose(outf); +#endif + } + /* input conversion */ perform_convert(tinfo, p, input->convert, params, &doc, 0); + if (tinfo->store) { /* store conversion */ @@ -1108,7 +1114,8 @@ static int convert_extract_doc(struct filter_info *tinfo, else xmlDocDumpMemory(store_doc ? store_doc : doc, &buf_out, &len_out); - (*p->setStoreData)(p, buf_out, len_out); + if (p->setStoreData) + (*p->setStoreData)(p, buf_out, len_out); xmlFree(buf_out); if (store_doc) @@ -1276,7 +1283,8 @@ static int extract_iso2709(struct filter_info *tinfo, { xmlDocPtr rdoc; xmlNode *root_ptr; - yaz_marc_write_xml(input->u.marc.handle, &root_ptr, 0, 0, 0); + yaz_marc_write_xml(input->u.marc.handle, &root_ptr, + "http://www.loc.gov/MARC21/slim", 0, 0); rdoc = xmlNewDoc((const xmlChar*) "1.0"); xmlDocSetRootElement(rdoc, root_ptr); return convert_extract_doc(tinfo, input, p, rdoc); @@ -1293,6 +1301,9 @@ static int filter_extract(void *clientData, struct recExtractCtrl *p) return RECCTRL_EXTRACT_ERROR_GENERIC; odr_reset(tinfo->odr_record); + + if (p->setStoreData == 0) + return extract_xml_full(tinfo, input, p); switch(input->type) { case DOM_INPUT_XMLREADER: @@ -1348,6 +1359,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) { p->diagnostic = YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_; + p->addinfo = odr_strdup(p->odr, esn); return 0; } @@ -1388,7 +1400,8 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) { p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; } - else if (p->input_format == VAL_NONE || p->input_format == VAL_TEXT_XML) + else if (!p->input_format + || !oid_oidcmp(p->input_format, yaz_oid_recsyn_xml)) { xmlChar *buf_out; int len_out; @@ -1398,13 +1411,13 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) else xmlDocDumpMemory(doc, &buf_out, &len_out); - p->output_format = VAL_TEXT_XML; + p->output_format = yaz_oid_recsyn_xml; p->rec_len = len_out; p->rec_buf = odr_malloc(p->odr, p->rec_len); memcpy(p->rec_buf, buf_out, p->rec_len); xmlFree(buf_out); } - else if (p->output_format == VAL_SUTRS) + else if (!oid_oidcmp(p->output_format, yaz_oid_recsyn_sutrs)) { xmlChar *buf_out; int len_out; @@ -1414,7 +1427,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) else xmlDocDumpMemory(doc, &buf_out, &len_out); - p->output_format = VAL_SUTRS; + p->output_format = yaz_oid_recsyn_sutrs; p->rec_len = len_out; p->rec_buf = odr_malloc(p->odr, p->rec_len); memcpy(p->rec_buf, buf_out, p->rec_len);