X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Frecgrs.c;h=0e44cf2c6a33e300e59b079f1227561768bd6d4f;hb=c8504e6a297055834322bd89b52e8410f549f337;hp=5514b2b2b69691695876300155bd57b32baf7d33;hpb=583fe2d2582ab4078527c152b232ddf359336e91;p=idzebra-moved-to-github.git diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index 5514b2b..0e44cf2 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -1,4 +1,4 @@ -/* $Id: recgrs.c,v 1.63 2002-08-28 19:52:29 adam Exp $ +/* $Id: recgrs.c,v 1.69 2002-11-15 21:57:41 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -102,6 +102,9 @@ static void *grs_init(RecType recType) #if HAVE_EXPAT_H grs_add_handler (h, recTypeGrs_xml); #endif +#if HAVE_PERL + grs_add_handler (h, recTypeGrs_perl); +#endif return h; } @@ -236,12 +239,14 @@ static void index_xpath (data1_node *n, struct recExtractCtrl *p, wrd->length = strlen(attr_tag_path_full); (*p->tokenAdd)(wrd); - wrd->attrUse = 1015; - wrd->reg_type = 'w'; - wrd->string = xp->value; - wrd->length = strlen(xp->value); - - (*p->tokenAdd)(wrd); + if (xp->value) + { + wrd->attrUse = 1015; + wrd->reg_type = 'w'; + wrd->string = xp->value; + wrd->length = strlen(xp->value); + (*p->tokenAdd)(wrd); + } wrd->reg_type = '0'; wrd->attrUse = 2; @@ -590,28 +595,52 @@ static int process_comp(data1_handle dh, data1_node *n, Z_RecordComposition *c) } } -static void add_idzebra_info (struct recRetrieveCtrl *p, data1_node *top, - NMEM mem) +/* Add Zebra info in separate namespace ... + + 359 + 447 + records/genera.xml + + +*/ + +static void zebra_xml_metadata (struct recRetrieveCtrl *p, data1_node *top, + NMEM mem) { - const char *idzebra_ns[7]; + const char *idzebra_ns[3]; + const char *i2 = "\n "; + const char *i4 = "\n "; + data1_node *n; - idzebra_ns[0] = "xmlns:idzebra"; + idzebra_ns[0] = "xmlns"; idzebra_ns[1] = "http://www.indexdata.dk/zebra/"; idzebra_ns[2] = 0; - data1_tag_add_attr (p->dh, mem, top, idzebra_ns); + data1_mk_text (p->dh, mem, i2, top); - data1_mk_tag_data_int (p->dh, top, "idzebra:size", p->recordSize, - mem); - if (p->score != -1) - data1_mk_tag_data_int (p->dh, top, "idzebra:score", - p->score, mem); + n = data1_mk_tag (p->dh, mem, "idzebra", idzebra_ns, top); + + data1_mk_text (p->dh, mem, "\n", top); + + data1_mk_text (p->dh, mem, i4, n); - data1_mk_tag_data_int (p->dh, top, "idzebra:localnumber", p->localno, - mem); + data1_mk_tag_data_int (p->dh, n, "size", p->recordSize, mem); + + if (p->score != -1) + { + data1_mk_text (p->dh, mem, i4, n); + data1_mk_tag_data_int (p->dh, n, "score", p->score, mem); + } + data1_mk_text (p->dh, mem, i4, n); + data1_mk_tag_data_int (p->dh, n, "localnumber", p->localno, mem); if (p->fname) - data1_mk_tag_data_text(p->dh, top, "idzebra:filename", - p->fname, mem); + { + data1_mk_text (p->dh, mem, i4, n); + data1_mk_tag_data_text(p->dh, n, "filename", p->fname, mem); + } + data1_mk_text (p->dh, mem, i2, n); } static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p) @@ -654,7 +683,7 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p) /* ensure our data1 tree is UTF-8 */ data1_iconv (p->dh, mem, node, "UTF-8", data1_get_encoding(p->dh, node)); -#if 1 +#if 0 data1_pr_tree (p->dh, node, stdout); #endif top = data1_get_root_tag (p->dh, node); @@ -778,9 +807,7 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p) sprintf(p, "%d", *ii); p += strlen(p); } - *(p++) = '\0'; - - if ((dnew = data1_mk_tag_data_wd(dh, node, + if ((dnew = data1_mk_tag_data_wd(dh, top, "schemaIdentifier", mem))) { dnew->u.data.what = DATA1I_oid; @@ -812,7 +839,11 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p) p->input_format : VAL_SUTRS)) { case VAL_TEXT_XML: - add_idzebra_info (p, top, mem); + zebra_xml_metadata (p, top, mem); + +#if 0 + data1_pr_tree (p->dh, node, stdout); +#endif if (p->encoding) data1_iconv (p->dh, mem, node, p->encoding, "UTF-8");