* Copyright (C) 1994-2002, Index Data
* All rights reserved.
*
- * $Id: recgrs.c,v 1.51 2002-05-28 21:10:34 adam Exp $
+ * $Id: recgrs.c,v 1.54 2002-07-05 16:07:02 adam Exp $
*/
#include <stdio.h>
tag_path_full[flen++] = '/';
}
else if (nn->which == DATA1N_root)
- {
- size_t tlen = strlen(nn->u.root.type);
- if (tlen + flen > (sizeof(tag_path_full)-2))
- return;
- memcpy (tag_path_full + flen, nn->u.root.type, tlen);
- flen += tlen;
- tag_path_full[flen++] = '/';
break;
- }
}
wrd->reg_type = '0';
wrd->string = tag_path_full;
wrd->length = flen;
- wrd->attrSet = VAL_IDXPATH,
+ wrd->attrSet = VAL_IDXPATH;
wrd->attrUse = use;
if (p->flagShowRecords)
{
(*p->schemaAdd)(p, oidtmp);
}
(*p->init)(p, &wrd);
+
return dumpkeys(n, p, 0, &wrd);
}
#if 0
data1_pr_tree (p->dh, n, stdout);
#endif
+ data1_iconv (p->dh, mem, n, "ISO-8859-1", "UTF-8");
+
(*p->init)(p, &wrd);
if (dumpkeys(n, p, 0, &wrd) < 0)
{
}
}
+static void add_idzebra_info (struct recRetrieveCtrl *p, data1_node *top,
+ NMEM mem)
+{
+ const char *idzebra_ns[7];
+
+ idzebra_ns[0] = "xmlns:idzebra";
+ idzebra_ns[1] = "http://www.indexdata.dk/zebra/";
+ idzebra_ns[2] = 0;
+
+ data1_tag_add_attr (p->dh, mem, top, idzebra_ns);
+
+ 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);
+
+ data1_mk_tag_data_int (p->dh, top, "idzebra:localnumber", p->localno,
+ mem);
+ if (p->fname)
+ data1_mk_tag_data_text(p->dh, top, "idzebra:filename",
+ p->fname, mem);
+}
+
static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
{
- data1_node *node = 0, *onode = 0;
+ data1_node *node = 0, *onode = 0, *top;
data1_node *dnew;
data1_maptab *map;
int res, selected = 0;
char *tagname;
struct grs_handlers *h = (struct grs_handlers *) clientData;
int requested_schema = VAL_NONE;
+ data1_marctab *marctab;
+ int dummy;
mem = nmem_create();
gri.readf = p->readf;
#if 0
data1_pr_tree (p->dh, node, stdout);
#endif
+ top = data1_get_root_tag (p->dh, node);
+
logf (LOG_DEBUG, "grs_retrieve: size");
- if ((dnew = data1_mk_tag_data_wd(p->dh, node, "size", mem)))
+ if ((dnew = data1_mk_tag_data_wd(p->dh, top, "size", mem)))
{
dnew->u.data.what = DATA1I_text;
dnew->u.data.data = dnew->lbuf;
tagname = res_get_def(p->res, "tagrank", "rank");
if (strcmp(tagname, "0") && p->score >= 0 &&
- (dnew = data1_mk_tag_data_wd(p->dh, node, tagname, mem)))
+ (dnew = data1_mk_tag_data_wd(p->dh, top, tagname, mem)))
{
logf (LOG_DEBUG, "grs_retrieve: %s", tagname);
dnew->u.data.what = DATA1I_num;
tagname = res_get_def(p->res, "tagsysno", "localControlNumber");
if (strcmp(tagname, "0") && p->localno > 0 &&
- (dnew = data1_mk_tag_data_wd(p->dh, node, tagname, mem)))
+ (dnew = data1_mk_tag_data_wd(p->dh, top, tagname, mem)))
{
logf (LOG_DEBUG, "grs_retrieve: %s", tagname);
dnew->u.data.what = DATA1I_text;
dnew->u.data.data = dnew->lbuf;
+
sprintf(dnew->u.data.data, "%d", p->localno);
dnew->u.data.len = strlen(dnew->u.data.data);
}
#if 0
data1_pr_tree (p->dh, node, stdout);
#endif
+#if 1
+ data1_iconv (p->dh, mem, node, "ISO-8859-1", "UTF-8");
+#endif
logf (LOG_DEBUG, "grs_retrieve: transfer syntax mapping");
switch (p->output_format = (p->input_format != VAL_NONE ?
p->input_format : VAL_SUTRS))
{
- data1_marctab *marctab;
- int dummy;
case VAL_TEXT_XML:
+ add_idzebra_info (p, top, mem);
+
if (!(p->rec_buf = data1_nodetoidsgml(p->dh, node, selected,
&p->rec_len)))
p->diagnostic = 238;