When mod.dom alwo sets additional info when it returns diagnostic
[idzebra-moved-to-github.git] / index / mod_dom.c
index eb4bc63..39733af 100644 (file)
@@ -1,5 +1,4 @@
-
-/* $Id: mod_dom.c,v 1.32 2007-03-14 14:16:14 adam Exp $
+/* $Id: mod_dom.c,v 1.38 2007-06-19 19:39:54 adam Exp $
    Copyright (C) 1995-2007
    Index Data ApS
 
@@ -44,6 +43,7 @@
 
 #include <idzebra/util.h>
 #include <idzebra/recctrl.h>
+#include <yaz/oid_db.h>
 
 /* 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,11 +777,6 @@ 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)
@@ -822,7 +817,7 @@ static void set_record_info(struct filter_info *tinfo,
                             const char * type_p)
 {
     /* writing debug info out */
-    if (1 || extctr->flagShowRecords)
+    if (extctr && extctr->flagShowRecords)
         dom_log(YLOG_LOG, tinfo, node,
                 "RECORD id=%s rank=%s type=%s", 
                 id_p ? (const char *) id_p : "(null)",
@@ -1090,9 +1085,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 */
@@ -1276,7 +1287,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);        
@@ -1348,6 +1360,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 +1401,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 +1412,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 +1428,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);