yaz_xml_to_opac: OID for embedded MARC may be given
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 29 Jan 2013 14:32:43 +0000 (15:32 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 29 Jan 2013 14:32:43 +0000 (15:32 +0100)
include/yaz/marcdisp.h
src/seshigh.c
src/xml_to_opac.c
test/test_record_conv.c

index 752de41..f1eaae8 100644 (file)
@@ -440,19 +440,20 @@ YAZ_EXPORT void yaz_opac_decode_wrbuf2(yaz_marc_t mt, Z_OPACRecord *r,
 
 #if YAZ_HAVE_XML2
 /** \brief Converts XML to OPAC
 
 #if YAZ_HAVE_XML2
 /** \brief Converts XML to OPAC
-    \param mt marc handle 
+    \param mt marc handle
     \param buf_in XML buffer
     \param size_in size of XML buffer
     \param dst Z39.50 OPAC result - allocated by NMEM on marc handle
     \param cd iconv handle for the OPAC content (not ISO2709 part)
     \param nmem memory for OPACRecord (if NULL, mt NMEM memory is used)
     \param buf_in XML buffer
     \param size_in size of XML buffer
     \param dst Z39.50 OPAC result - allocated by NMEM on marc handle
     \param cd iconv handle for the OPAC content (not ISO2709 part)
     \param nmem memory for OPACRecord (if NULL, mt NMEM memory is used)
+    \param syntax OID for embedded MARC (if NULL, USMARC is used)
     \retval 1 conversion OK
     \retval 0 conversion NOT OK
     \*/
 YAZ_EXPORT int yaz_xml_to_opac(yaz_marc_t mt,
                                const char *buf_in, size_t size_in,
                                Z_OPACRecord **dst, yaz_iconv_t cd,
     \retval 1 conversion OK
     \retval 0 conversion NOT OK
     \*/
 YAZ_EXPORT int yaz_xml_to_opac(yaz_marc_t mt,
                                const char *buf_in, size_t size_in,
                                Z_OPACRecord **dst, yaz_iconv_t cd,
-                               NMEM nmem);
+                               NMEM nmem, const Odr_oid *syntax);
 #endif
 
 /** \brief flushes records
 #endif
 
 /** \brief flushes records
index 1154016..803f767 100644 (file)
@@ -665,7 +665,7 @@ static int retrieve_fetch(association *assoc, bend_fetch_rr *rr)
             Z_OPACRecord *opac = 0;
             if (yaz_xml_to_opac(mt, wrbuf_buf(output_record),
                                 wrbuf_len(output_record),
             Z_OPACRecord *opac = 0;
             if (yaz_xml_to_opac(mt, wrbuf_buf(output_record),
                                 wrbuf_len(output_record),
-                                &opac, 0 /* iconv */, rr->stream->mem)
+                                &opac, 0 /* iconv */, rr->stream->mem, 0)
                 && opac)
             {
                 rr->len = -1;
                 && opac)
             {
                 rr->len = -1;
index e6735c9..ead47bd 100644 (file)
@@ -95,7 +95,7 @@ static int match_v_next(xmlNode **ptr, const char *elem, NMEM nmem,
 }
 
 static int bibliographicRecord(yaz_marc_t mt, xmlNode *ptr, Z_External **ext,
 }
 
 static int bibliographicRecord(yaz_marc_t mt, xmlNode *ptr, Z_External **ext,
-                               yaz_iconv_t cd, NMEM nmem)
+                               yaz_iconv_t cd, NMEM nmem, const Odr_oid *syntax)
 {
     int ret = 0;
     if (yaz_marc_read_xml(mt, ptr) == 0)
 {
     int ret = 0;
     if (yaz_marc_read_xml(mt, ptr) == 0)
@@ -103,8 +103,9 @@ static int bibliographicRecord(yaz_marc_t mt, xmlNode *ptr, Z_External **ext,
         WRBUF wr = wrbuf_alloc();
         if (yaz_marc_write_iso2709(mt, wr) == 0)
         {
         WRBUF wr = wrbuf_alloc();
         if (yaz_marc_write_iso2709(mt, wr) == 0)
         {
-            *ext = z_ext_record_oid_nmem(nmem, yaz_oid_recsyn_usmarc,
-                                         wrbuf_buf(wr), wrbuf_len(wr));
+            *ext = z_ext_record_oid_nmem(
+                nmem, syntax ? syntax : yaz_oid_recsyn_usmarc,
+                wrbuf_buf(wr), wrbuf_len(wr));
             ret = 1;
         }
         wrbuf_destroy(wr);
             ret = 1;
         }
         wrbuf_destroy(wr);
@@ -260,7 +261,8 @@ static int holdingsRecord(xmlNode *ptr, Z_HoldingsRecord **r, NMEM nmem)
 
 static int yaz_xml_to_opac_ptr(yaz_marc_t mt, xmlNode *ptr,
                                Z_OPACRecord **dst,
 
 static int yaz_xml_to_opac_ptr(yaz_marc_t mt, xmlNode *ptr,
                                Z_OPACRecord **dst,
-                               yaz_iconv_t cd, NMEM nmem)
+                               yaz_iconv_t cd, NMEM nmem,
+                               const Odr_oid *syntax)
 {
     int i;
     Z_External *ext = 0;
 {
     int i;
     Z_External *ext = 0;
@@ -276,7 +278,7 @@ static int yaz_xml_to_opac_ptr(yaz_marc_t mt, xmlNode *ptr,
         ptr = ptr->next;
     if (!match_element(ptr, "bibliographicRecord"))
         return 0;
         ptr = ptr->next;
     if (!match_element(ptr, "bibliographicRecord"))
         return 0;
-    if (!bibliographicRecord(mt, ptr->children, &ext, cd, nmem))
+    if (!bibliographicRecord(mt, ptr->children, &ext, cd, nmem, syntax))
         return 0;
     *dst = opac = (Z_OPACRecord *) nmem_malloc(nmem, sizeof(*opac));
     opac->num_holdingsData = 0;
         return 0;
     *dst = opac = (Z_OPACRecord *) nmem_malloc(nmem, sizeof(*opac));
     opac->num_holdingsData = 0;
@@ -322,13 +324,15 @@ static int yaz_xml_to_opac_ptr(yaz_marc_t mt, xmlNode *ptr,
 }
 
 int yaz_xml_to_opac(yaz_marc_t mt, const char *buf_in, size_t size_in,
 }
 
 int yaz_xml_to_opac(yaz_marc_t mt, const char *buf_in, size_t size_in,
-                    Z_OPACRecord **dst, yaz_iconv_t cd, NMEM nmem)
+                    Z_OPACRecord **dst, yaz_iconv_t cd, NMEM nmem,
+                    const Odr_oid *syntax)
 {
     xmlDocPtr doc = xmlParseMemory(buf_in, size_in);
     int r = 0;
     if (doc)
     {
 {
     xmlDocPtr doc = xmlParseMemory(buf_in, size_in);
     int r = 0;
     if (doc)
     {
-        r = yaz_xml_to_opac_ptr(mt, xmlDocGetRootElement(doc), dst, cd, nmem);
+        r = yaz_xml_to_opac_ptr(mt, xmlDocGetRootElement(doc), dst, cd, nmem,
+                                syntax);
         xmlFreeDoc(doc);
     }
     return r;
         xmlFreeDoc(doc);
     }
     return r;
index 3cb5bfd..dc9bb0c 100644 (file)
@@ -504,7 +504,7 @@ static void tst_convert3(void)
         Z_OPACRecord *opac = 0;
         yaz_marc_t mt =  yaz_marc_create();
         ret = yaz_xml_to_opac(mt, opacxml_rec, strlen(opacxml_rec),
         Z_OPACRecord *opac = 0;
         yaz_marc_t mt =  yaz_marc_create();
         ret = yaz_xml_to_opac(mt, opacxml_rec, strlen(opacxml_rec),
-                              &opac, 0 /* iconv */, nmem);
+                              &opac, 0 /* iconv */, nmem, 0);
         YAZ_CHECK(ret);
         YAZ_CHECK(opac);
 
         YAZ_CHECK(ret);
         YAZ_CHECK(opac);