Omit CVS Id. Update copyright year.
[idzebra-moved-to-github.git] / index / mod_dom.c
index 0670ab4..76ba9ca 100644 (file)
@@ -1,22 +1,19 @@
-/* $Id: mod_dom.c,v 1.36 2007-04-16 21:54:37 adam Exp $
-   Copyright (C) 1995-2007
-   Index Data ApS
+/* This file is part of the Zebra server.
+   Copyright (C) 1995-2008 Index Data
 
-   This file is part of the Zebra server.
+Zebra is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
 
-   Zebra is free software; you can redistribute it and/or modify it under
-   the terms of the GNU General Public License as published by the Free
-   Software Foundation; either version 2, or (at your option) any later
-   version.
+Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
 
-   Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
-   WARRANTY; without even the implied warranty of MERCHANTABILITY or
-   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-   for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 */
 
@@ -727,7 +724,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 +774,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 +787,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 +838,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 +1077,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 +1111,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 +1280,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 +1298,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 +1356,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;
     }