From 44082770642275dd993aa621d9dc5c5b0dc454d3 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 18 Aug 2005 12:50:17 +0000 Subject: [PATCH] Added support for static ranking. Bug #174. The staticrank is enabled by specifying staticrank:1 in .cfg. The xslt1 was removed. Filter xslt can do it all and support specifying split=1. XSLT filter can specify staticrank using attribute 'z:rank'. Added tests for staticrank and record ID match in xslt3.c, xslt4.c. --- include/idzebra/recctrl.h | 3 +- index/extract.c | 71 ++++++++++++++++++++++++++--------------- index/index.h | 9 ++++-- index/zebraapi.c | 10 +++++- index/zinfo.c | 3 +- index/zinfo.h | 3 +- index/zsets.c | 21 +++++++++--- recctrl/xslt.c | 51 +++++++++++++---------------- test/api/testlib.c | 6 ++-- test/xslt/Makefile.am | 10 +++--- test/xslt/index.xsl | 17 +++++++--- test/xslt/marc-col.xml | 3 ++ test/xslt/marc-one.xml | 1 + test/xslt/marcschema-col.xml | 11 +++++++ test/xslt/marcschema-one.xml | 11 +++++++ test/xslt/marcschema.xml | 10 ------ test/xslt/xslt1.c | 6 ++-- test/xslt/xslt2.c | 6 ++-- test/xslt/xslt3.c | 19 ++++++++--- test/xslt/xslt4.c | 62 +++++++++++++++++++++++++++++++++++ test/xslt/zebra.cfg | 1 + test/xslt/zebrastaticrank.cfg | 6 ++++ 22 files changed, 244 insertions(+), 96 deletions(-) create mode 100644 test/xslt/marcschema-col.xml create mode 100644 test/xslt/marcschema-one.xml delete mode 100644 test/xslt/marcschema.xml create mode 100644 test/xslt/xslt4.c create mode 100644 test/xslt/zebrastaticrank.cfg diff --git a/include/idzebra/recctrl.h b/include/idzebra/recctrl.h index ab1941b..e2183e5 100644 --- a/include/idzebra/recctrl.h +++ b/include/idzebra/recctrl.h @@ -1,4 +1,4 @@ -/* $Id: recctrl.h,v 1.12 2005-06-23 06:45:46 adam Exp $ +/* $Id: recctrl.h,v 1.13 2005-08-18 12:50:17 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -76,6 +76,7 @@ struct recExtractCtrl { int flagShowRecords; int seqno[256]; char match_criteria[256]; + int staticrank; void (*schemaAdd)(struct recExtractCtrl *p, Odr_oid *oid); data1_handle dh; void *handle; diff --git a/index/extract.c b/index/extract.c index 25a20fc..5cc475e 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.188 2005-08-05 10:40:13 adam Exp $ +/* $Id: extract.c,v 1.189 2005-08-18 12:50:17 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -403,6 +403,7 @@ static int file_extract_record(ZebraHandle zh, SYSNO sysnotmp; Record rec; off_t recordOffset = 0; + struct recExtractCtrl extractCtrl; /* announce database */ if (zebraExplain_curDatabase (zh->reg->zei, zh->basenames[0])) @@ -414,8 +415,6 @@ static int file_extract_record(ZebraHandle zh, if (fi->fd != -1) { - struct recExtractCtrl extractCtrl; - /* we are going to read from a file, so prepare the extraction */ create_rec_keys_codec(&zh->reg->keys); #if NATTR @@ -436,6 +435,8 @@ static int file_extract_record(ZebraHandle zh, extractCtrl.schemaAdd = extract_schema_add; extractCtrl.dh = zh->reg->dh; extractCtrl.match_criteria[0] = '\0'; + extractCtrl.staticrank = 0; + extractCtrl.first_record = fi->file_offset ? 0 : 1; extract_set_store_data_prepare(&extractCtrl); @@ -480,7 +481,7 @@ static int file_extract_record(ZebraHandle zh, return 0; } if (extractCtrl.match_criteria[0]) - matchStr = extractCtrl.match_criteria; + matchStr = extractCtrl.match_criteria; } /* perform match if sysno not known and if match criteria is specified */ @@ -541,13 +542,15 @@ static int file_extract_record(ZebraHandle zh, *sysno = rec->sysno; recordAttr = rec_init_attr (zh->reg->zei, rec); + recordAttr->staticrank = extractCtrl.staticrank; if (matchStr) { dict_insert (zh->reg->matchDict, matchStr, sizeof(*sysno), sysno); } extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); - extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys); + extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys, + recordAttr->staticrank); zh->records_inserted++; } @@ -578,6 +581,7 @@ static int file_extract_record(ZebraHandle zh, logRecord (zh); return 1; } + /* flush old keys for sort&search etc. */ delkeys.buf_used = rec->size[recInfo_delKeys]; delkeys.buf = rec->info[recInfo_delKeys]; @@ -585,7 +589,8 @@ static int file_extract_record(ZebraHandle zh, sortKeys.buf = rec->info[recInfo_sortKeys]; extract_flushSortKeys (zh, *sysno, 0, &sortKeys); - extract_flushRecordKeys (zh, *sysno, 0, &delkeys); + extract_flushRecordKeys (zh, *sysno, 0, &delkeys, + recordAttr->staticrank); /* old values */ if (deleteFlag) { /* record going to be deleted */ @@ -620,11 +625,14 @@ static int file_extract_record(ZebraHandle zh, } else { + /* flush new keys for sort&search etc */ if (zh->records_processed < zh->m_file_verbose_limit) yaz_log (YLOG_LOG, "update %s %s " PRINTF_OFF_T, zh->m_record_type, fname, recordOffset); + recordAttr->staticrank = extractCtrl.staticrank; extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); - extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys); + extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys, + recordAttr->staticrank); zh->records_updated++; } } @@ -920,6 +928,7 @@ ZEBRA_RES buffer_extract_record (ZebraHandle zh, extractCtrl.dh = zh->reg->dh; extractCtrl.handle = zh; extractCtrl.match_criteria[0] = '\0'; + extractCtrl.staticrank = 0; init_extractCtrl(zh, &extractCtrl); @@ -1005,7 +1014,7 @@ ZEBRA_RES buffer_extract_record (ZebraHandle zh, sizeof(*sysno), sysno); } extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); - extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys); + extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys, 0); zh->records_inserted++; } @@ -1054,7 +1063,7 @@ ZEBRA_RES buffer_extract_record (ZebraHandle zh, sortKeys.buf = rec->info[recInfo_sortKeys]; extract_flushSortKeys (zh, *sysno, 0, &sortKeys); - extract_flushRecordKeys (zh, *sysno, 0, &delkeys); + extract_flushRecordKeys (zh, *sysno, 0, &delkeys, 0); if (delete_flag) { /* record going to be deleted */ @@ -1100,7 +1109,7 @@ ZEBRA_RES buffer_extract_record (ZebraHandle zh, yaz_log (YLOG_LOG, "update %s %s %ld", recordType, pr_fname, (long) recordOffset); extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); - extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys); + extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys, 0); zh->records_updated++; } } @@ -1220,6 +1229,7 @@ int explain_extract (void *handle, Record rec, data1_node *n) extractCtrl.flagShowRecords = 0; extractCtrl.match_criteria[0] = '\0'; + extractCtrl.staticrank = 0; extractCtrl.handle = handle; extractCtrl.first_record = 1; @@ -1244,9 +1254,9 @@ int explain_extract (void *handle, Record rec, data1_node *n) sortkeys.buf = rec->info[recInfo_sortKeys]; extract_flushSortKeys (zh, rec->sysno, 0, &sortkeys); - extract_flushRecordKeys (zh, rec->sysno, 0, &delkeys); + extract_flushRecordKeys (zh, rec->sysno, 0, &delkeys, 0); } - extract_flushRecordKeys (zh, rec->sysno, 1, &zh->reg->keys); + extract_flushRecordKeys (zh, rec->sysno, 1, &zh->reg->keys, 0); extract_flushSortKeys (zh, rec->sysno, 1, &zh->reg->sortKeys); xfree (rec->info[recInfo_delKeys]); @@ -1265,7 +1275,8 @@ int explain_extract (void *handle, Record rec, data1_node *n) } void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, - int cmd, struct recKeys *reckeys) + int cmd, struct recKeys *reckeys, + zint staticrank) { void *decode_handle = iscz1_start(); int off = 0; @@ -1293,11 +1304,14 @@ void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, while (off < reckeys->buf_used) { const char *src = reckeys->buf + off; - struct it_key key; - char *dst = (char*) &key; + struct it_key key_in; + struct it_key key_out; + char *dst = (char*) &key_in; + zint *keyp = key_out.mem; + size_t key_idx = 0; iscz1_decode(decode_handle, &dst, &src); - assert(key.len == 4); + assert(key_in.len == 4); if (zh->reg->key_buf_used + 1024 > (zh->reg->ptr_top -zh->reg->ptr_i)*sizeof(char*)) @@ -1307,7 +1321,7 @@ void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, (zh->reg->key_buf)[zh->reg->ptr_top - zh->reg->ptr_i] = (char*)zh->reg->key_buf + zh->reg->key_buf_used; - ch = (int) key.mem[0]; /* ordinal for field/use/attribute */ + ch = (int) key_in.mem[0]; /* ordinal for field/use/attribute */ zh->reg->key_buf_used += key_SU_encode (ch,((char*)zh->reg->key_buf) + @@ -1318,17 +1332,24 @@ void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, ((char*)(zh->reg->key_buf))[(zh->reg->key_buf_used)++] = '\0'; ((char*)(zh->reg->key_buf))[(zh->reg->key_buf_used)++] = cmd; - key.len = 3; - if (key.mem[1]) /* filter specified record ID */ - key.mem[0] = key.mem[1]; + if (zh->m_staticrank) /* rank config enabled ? */ + { + *keyp++ = staticrank; + key_out.len = 4; + } + else + key_out.len = 3; + + if (key_in.mem[1]) /* filter specified record ID */ + *keyp++ = key_in.mem[1]; else - key.mem[0] = sysno; - key.mem[1] = key.mem[2]; /* section_id */ - key.mem[2] = key.mem[3]; /* sequence .. */ + *keyp++ = sysno; + *keyp++ = key_in.mem[2]; /* section_id */ + *keyp++ = key_in.mem[3]; /* sequence .. */ memcpy ((char*)zh->reg->key_buf + zh->reg->key_buf_used, - &key, sizeof(key)); - (zh->reg->key_buf_used) += sizeof(key); + &key_out, sizeof(key_out)); + (zh->reg->key_buf_used) += sizeof(key_out); off = src - reckeys->buf; } assert (off == reckeys->buf_used); diff --git a/index/index.h b/index/index.h index 4e32913..753dac0 100644 --- a/index/index.h +++ b/index/index.h @@ -1,4 +1,4 @@ -/* $Id: index.h,v 1.146 2005-08-17 21:29:44 adam Exp $ +/* $Id: index.h,v 1.147 2005-08-18 12:50:17 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -54,7 +54,7 @@ YAZ_BEGIN_CDECL #define IT_MAX_WORD 256 -#define IT_KEY_LEVEL_MAX 4 +#define IT_KEY_LEVEL_MAX 5 struct it_key { int len; zint mem[IT_KEY_LEVEL_MAX]; @@ -292,6 +292,8 @@ struct zebra_session { #endif int shadow_enable; + int m_staticrank; + zint records_inserted; zint records_updated; zint records_deleted; @@ -477,7 +479,8 @@ ZEBRA_RES zebra_snippets_hit_vector(ZebraHandle zh, const char *setname, zint sysno, zebra_snippets *snippets); void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, - int cmd, struct recKeys *reckeys); + int cmd, struct recKeys *reckeys, + zint staticrank); #if NATTR void extract_flushSortKeys (ZebraHandle zh, SYSNO sysno, int cmd, struct recKeys *skp); diff --git a/index/zebraapi.c b/index/zebraapi.c index 8b393ec..8a48f7a 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.181 2005-08-17 21:29:44 adam Exp $ +/* $Id: zebraapi.c,v 1.182 2005-08-18 12:50:17 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -126,6 +126,7 @@ ZebraHandle zebra_open (ZebraService zs) zh->lock_shadow = 0; zh->shadow_enable = 1; + zh->m_staticrank = 0; default_encoding = res_get_def(zs->global_res, "encoding", "ISO-8859-1"); @@ -699,6 +700,13 @@ static void zebra_select_register (ZebraHandle zh, const char *new_reg) if (res_get_int(zh->res, "estimatehits", &approx) == ZEBRA_OK) zebra_set_approx_limit(zh, approx); } + if (zh->res) + { + if (res_get_int(zh->res, "staticrank", &zh->m_staticrank) == ZEBRA_OK) + yaz_log(YLOG_LOG, "static rank set and is %d", zh->m_staticrank); + else + yaz_log(YLOG_LOG, "static rank unset"); + } } void map_basenames_func (void *vp, const char *name, const char *value) diff --git a/index/zinfo.c b/index/zinfo.c index 3816e51..60ae415 100644 --- a/index/zinfo.c +++ b/index/zinfo.c @@ -1,4 +1,4 @@ -/* $Id: zinfo.c,v 1.48 2005-08-09 12:30:46 adam Exp $ +/* $Id: zinfo.c,v 1.49 2005-08-18 12:50:18 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -1562,6 +1562,7 @@ RecordAttr *rec_init_attr (ZebraExplainInfo zei, Record rec) recordAttr->recordSize = 0; recordAttr->recordOffset = 0; recordAttr->runNumber = zei->runNumber; + recordAttr->staticrank = 0; return recordAttr; } diff --git a/index/zinfo.h b/index/zinfo.h index 1c55b81..e2b74b6 100644 --- a/index/zinfo.h +++ b/index/zinfo.h @@ -1,4 +1,4 @@ -/* $Id: zinfo.h,v 1.25 2005-08-05 10:40:13 adam Exp $ +/* $Id: zinfo.h,v 1.26 2005-08-18 12:50:18 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -79,6 +79,7 @@ typedef struct { int recordSize; off_t recordOffset; zint runNumber; + zint staticrank; } RecordAttr; RecordAttr *rec_init_attr (ZebraExplainInfo zei, Record rec); diff --git a/index/zsets.c b/index/zsets.c index 999f443..260f567 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.90 2005-06-22 19:42:38 adam Exp $ +/* $Id: zsets.c,v 1.91 2005-08-18 12:50:18 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -398,6 +398,10 @@ ZebraMetaRecord *zebra_meta_records_create(ZebraHandle zh, const char *name, RSET rset; int i; struct zset_sort_info *sort_info; + size_t sysno_mem_index = 0; + + if (zh->m_staticrank) + sysno_mem_index = 1; if (!log_level_set) loglevels(); @@ -483,7 +487,7 @@ ZebraMetaRecord *zebra_meta_records_create(ZebraHandle zh, const char *name, } while (num_i < num && rset_read (rfd, &key, 0)) { - zint this_sys = key.mem[0]; + zint this_sys = key.mem[sysno_mem_index]; if (this_sys != psysno) { psysno = this_sys; @@ -711,6 +715,11 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, TERMID termid; TERMID *terms; int numTerms = 0; + size_t sysno_mem_index = 0; + + if (zh->m_staticrank) + sysno_mem_index = 1; + assert(nmem); /* compiler shut up about unused param */ sset->sort_info->num_entries = 0; @@ -785,7 +794,7 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, rfd = rset_open (rset, RSETF_READ); while (rset_read (rfd, &key, &termid)) { - zint this_sys = key.mem[0]; + zint this_sys = key.mem[sysno_mem_index]; if (log_level_searchhits) key_logdump_txt(log_level_searchhits, &key, termid->name); kno++; @@ -838,6 +847,10 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, rset_getterms(rset, 0, 0, &n); terms = (TERMID *) nmem_malloc(nmem, sizeof(*terms)*n); rset_getterms(rset, terms, n, &numTerms); + size_t sysno_mem_index = 0; + + if (zh->m_staticrank) + sysno_mem_index = 1; rank_class = zebraRankLookup(zh, rank_handler_name); if (!rank_class) @@ -859,7 +872,7 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, zint psysno = 0; while (rset_read(rfd, &key, &termid)) { - zint this_sys = key.mem[0]; + zint this_sys = key.mem[sysno_mem_index]; zint seqno = key.mem[key.len-1]; kno++; if (log_level_searchhits) diff --git a/recctrl/xslt.c b/recctrl/xslt.c index 6331754..54bf008 100644 --- a/recctrl/xslt.c +++ b/recctrl/xslt.c @@ -1,4 +1,4 @@ -/* $Id: xslt.c,v 1.12 2005-06-24 13:45:54 adam Exp $ +/* $Id: xslt.c,v 1.13 2005-08-18 12:50:18 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -116,10 +116,6 @@ int zebra_xmlInputCloseCallback (void * context) return 0; } - - - - static void *filter_init_xslt(Res res, RecType recType) { struct filter_info *tinfo = (struct filter_info *) xmalloc(sizeof(*tinfo)); @@ -141,14 +137,6 @@ static void *filter_init_xslt(Res res, RecType recType) return tinfo; } -static void *filter_init_xslt1(Res res, RecType recType) -{ - struct filter_info *tinfo = (struct filter_info *) - filter_init_xslt(res, recType); - tinfo->split_level = "1"; - return tinfo; -} - static int attr_content(struct _xmlAttr *attr, const char *name, const char **dst_content) { @@ -341,21 +329,30 @@ static void index_node(struct filter_info *tinfo, struct recExtractCtrl *ctrl, static void index_record(struct filter_info *tinfo,struct recExtractCtrl *ctrl, xmlNodePtr ptr, RecWord *recWord) { - if (ptr->type == XML_ELEMENT_NODE && ptr->ns && + if (ptr && ptr->type == XML_ELEMENT_NODE && ptr->ns && !strcmp(ptr->ns->href, zebra_xslt_ns) && !strcmp(ptr->name, "record")) { const char *type_str = "update"; const char *id_str = 0; + const char *rank_str = 0; struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) { attr_content(attr, "type", &type_str); attr_content(attr, "id", &id_str); + attr_content(attr, "rank", &rank_str); } if (id_str) sscanf(id_str, "%255s", ctrl->match_criteria); - + if (rank_str) + { + ctrl->staticrank = atoi(rank_str); + yaz_log(YLOG_LOG, "rank=%d",ctrl->staticrank); + } + else + yaz_log(YLOG_LOG, "no rank"); + ptr = ptr->children; } index_node(tinfo, ctrl, ptr, recWord); @@ -378,6 +375,7 @@ static int extract_doc(struct filter_info *tinfo, struct recExtractCtrl *p, if (schema && schema->stylesheet_xsp) { + xmlNodePtr root_ptr; xmlDocPtr resDoc = xsltApplyStylesheet(schema->stylesheet_xsp, doc, params); @@ -387,7 +385,15 @@ static int extract_doc(struct filter_info *tinfo, struct recExtractCtrl *p, fwrite(buf_out, len_out, 1, stdout); xmlFree(buf_out); } - index_record(tinfo, p, xmlDocGetRootElement(resDoc), &recWord); + root_ptr = xmlDocGetRootElement(resDoc); + if (root_ptr) + index_record(tinfo, p, root_ptr, &recWord); + else + { + yaz_log(YLOG_WARN, "No root for index XML record." + " split_level=%s stylesheet=%s", + tinfo->split_level, schema->stylesheet); + } xmlFreeDoc(resDoc); } xmlDocDumpMemory(doc, &buf_out, &len_out); @@ -649,16 +655,6 @@ static struct recType filter_type_xslt = { filter_retrieve }; -static struct recType filter_type_xslt1 = { - 0, - "xslt1", - filter_init_xslt1, - filter_config, - filter_destroy, - filter_extract, - filter_retrieve -}; - RecType #ifdef IDZEBRA_STATIC_XSLT idzebra_filter_xslt @@ -668,8 +664,5 @@ idzebra_filter [] = { &filter_type_xslt, -#ifdef LIBXML_READER_ENABLED - &filter_type_xslt1, -#endif 0, }; diff --git a/test/api/testlib.c b/test/api/testlib.c index e5a7745..79cdc41 100644 --- a/test/api/testlib.c +++ b/test/api/testlib.c @@ -1,4 +1,4 @@ -/* $Id: testlib.c,v 1.25 2005-08-09 12:30:47 adam Exp $ +/* $Id: testlib.c,v 1.26 2005-08-18 12:50:18 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -141,10 +141,10 @@ void init_data(ZebraHandle zh, const char **recs) zebra_select_database(zh, "Default"); yaz_log(log_level, "going to call init"); i = zebra_init(zh); - yaz_log(log_level, "init returned %d", i); + yaz_log(log_level, "init_data returned %d", i); if (i) { - printf("init failed with %d\n",i); + printf("init_data failed with %d\n",i); zebra_result(zh, &i, &addinfo); printf(" Error %d %s\n", i, addinfo); exit(1); diff --git a/test/xslt/Makefile.am b/test/xslt/Makefile.am index 8936ba8..01ff86f 100644 --- a/test/xslt/Makefile.am +++ b/test/xslt/Makefile.am @@ -1,14 +1,16 @@ -# $Id: Makefile.am,v 1.6 2005-06-07 11:38:16 adam Exp $ +# $Id: Makefile.am,v 1.7 2005-08-18 12:50:18 adam Exp $ -check_PROGRAMS = xslt1 xslt2 xslt3 +check_PROGRAMS = xslt1 xslt2 xslt3 xslt4 TESTS = $(check_PROGRAMS) -EXTRA_DIST=zebra.cfg marc-col.xml marc-one.xml index.xsl id.xsl \ - marcschema.xml snippet.xsl +EXTRA_DIST=zebra.cfg zebrastaticrank.cfg \ + marc-col.xml marc-one.xml index.xsl id.xsl \ + marcschema-col.xml marcschema-one.xml snippet.xsl xslt1_SOURCES = xslt1.c xslt2_SOURCES = xslt2.c xslt3_SOURCES = xslt3.c +xslt4_SOURCES = xslt4.c AM_CPPFLAGS = -I$(srcdir)/../api -I$(top_srcdir)/include $(YAZINC) diff --git a/test/xslt/index.xsl b/test/xslt/index.xsl index ccdec83..2fbecb3 100644 --- a/test/xslt/index.xsl +++ b/test/xslt/index.xsl @@ -2,7 +2,7 @@ xmlns:m="http://www.loc.gov/MARC21/slim" xmlns:z="http://indexdata.dk/zebra/xslt/1" version="1.0"> - + @@ -10,7 +10,9 @@ - + @@ -22,11 +24,18 @@ + + + + + + + + - - + diff --git a/test/xslt/marc-col.xml b/test/xslt/marc-col.xml index 195be74..c5d527f 100644 --- a/test/xslt/marc-col.xml +++ b/test/xslt/marc-col.xml @@ -1,5 +1,6 @@ + 1 00366nam 22001698a 4500 11224466 DLC @@ -32,6 +33,7 @@ + 5 00366nam 22001698a 4500 11224467 DLC @@ -64,6 +66,7 @@ + 3 01369cam 2200265 i 4500 73090924 //r82 DLC diff --git a/test/xslt/marc-one.xml b/test/xslt/marc-one.xml index 0a61202..3c80ed4 100644 --- a/test/xslt/marc-one.xml +++ b/test/xslt/marc-one.xml @@ -1,4 +1,5 @@ + 42 00366nam 22001698a 4500 11224466 DLC diff --git a/test/xslt/marcschema-col.xml b/test/xslt/marcschema-col.xml new file mode 100644 index 0000000..6a329ae --- /dev/null +++ b/test/xslt/marcschema-col.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/test/xslt/marcschema-one.xml b/test/xslt/marcschema-one.xml new file mode 100644 index 0000000..2707ab3 --- /dev/null +++ b/test/xslt/marcschema-one.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/test/xslt/marcschema.xml b/test/xslt/marcschema.xml deleted file mode 100644 index 952ec49..0000000 --- a/test/xslt/marcschema.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/test/xslt/xslt1.c b/test/xslt/xslt1.c index 07788ee..8266fe5 100644 --- a/test/xslt/xslt1.c +++ b/test/xslt/xslt1.c @@ -1,4 +1,4 @@ -/* $Id: xslt1.c,v 1.3 2005-05-31 14:18:17 adam Exp $ +/* $Id: xslt1.c,v 1.4 2005-08-18 12:50:20 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -29,13 +29,13 @@ int main(int argc, char **argv) ZebraService zs = start_up(0, argc, argv); ZebraHandle zh = zebra_open(zs); - check_filter(zs, "xslt1"); + check_filter(zs, "xslt"); zebra_select_database(zh, "Default"); zebra_init(zh); - zebra_set_resource(zh, "recordType", "xslt1.marcschema.xml"); + zebra_set_resource(zh, "recordType", "xslt.marcschema-col.xml"); zebra_begin_trans(zh, 1); sprintf(path, "%.200s/marc-col.xml", get_srcdir()); diff --git a/test/xslt/xslt2.c b/test/xslt/xslt2.c index fe42211..0d63762 100644 --- a/test/xslt/xslt2.c +++ b/test/xslt/xslt2.c @@ -1,4 +1,4 @@ -/* $Id: xslt2.c,v 1.3 2005-05-31 14:18:17 adam Exp $ +/* $Id: xslt2.c,v 1.4 2005-08-18 12:50:20 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -36,13 +36,13 @@ int main(int argc, char **argv) ZebraService zs = start_up(0, argc, argv); ZebraHandle zh = zebra_open(zs); - check_filter(zs, "xslt1"); + check_filter(zs, "xslt"); zebra_select_database(zh, "Default"); zebra_init(zh); - zebra_set_resource(zh, "recordType", "xslt1.marcschema.xml"); + zebra_set_resource(zh, "recordType", "xslt.marcschema-col.xml"); sprintf(path, "%.200s/marc-col.xml", get_srcdir()); f = fopen(path, "rb"); diff --git a/test/xslt/xslt3.c b/test/xslt/xslt3.c index 0fb1405..7bab9e8 100644 --- a/test/xslt/xslt3.c +++ b/test/xslt/xslt3.c @@ -1,4 +1,4 @@ -/* $Id: xslt3.c,v 1.2 2005-05-31 14:18:17 adam Exp $ +/* $Id: xslt3.c,v 1.3 2005-08-18 12:50:20 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -42,7 +42,7 @@ int main(int argc, char **argv) zebra_init(zh); - zebra_set_resource(zh, "recordType", "xslt.marcschema.xml"); + zebra_set_resource(zh, "recordType", "xslt.marcschema-one.xml"); sprintf(path, "%.200s/marc-one.xml", get_srcdir()); f = fopen(path, "rb"); @@ -61,14 +61,25 @@ int main(int argc, char **argv) record_buf[r] = '\0'; - /* for now only the first of the records in the collection is - indexed. That can be seen as a bug */ + /* index this one record */ init_data(zh, records_array); /* only get hits from first record .. */ do_query(__LINE__, zh, "@attr 1=title computer", 1); do_query(__LINE__, zh, "@attr 1=control 11224466", 1); do_query_x(__LINE__, zh, "@attr 1=titl computer", 0, 121); + + + /* index one more time to see that we don't get dups, since + index.xsl has a record ID associated with them */ + zebra_add_record(zh, record_buf, strlen(record_buf)); + + /* only get hits from first record .. */ + do_query(__LINE__, zh, "@attr 1=title computer", 1); + do_query(__LINE__, zh, "@attr 1=control 11224466", 1); + do_query_x(__LINE__, zh, "@attr 1=titl computer", 0, 121); + + return close_down(zh, zs, 0); } diff --git a/test/xslt/xslt4.c b/test/xslt/xslt4.c new file mode 100644 index 0000000..26d1a9c --- /dev/null +++ b/test/xslt/xslt4.c @@ -0,0 +1,62 @@ +/* $Id: xslt4.c,v 1.1 2005-08-18 12:50:20 adam Exp $ + Copyright (C) 1995-2005 + Index Data ApS + +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 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 Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + +#include "testlib.h" + +int main(int argc, char **argv) +{ + char path[256]; + + ZebraService zs = start_up("zebrastaticrank.cfg", argc, argv); + ZebraHandle zh = zebra_open(zs); + + check_filter(zs, "xslt"); + + zebra_select_database(zh, "Default"); + + zebra_init(zh); + + zebra_set_resource(zh, "recordType", "xslt.marcschema-col.xml"); + zebra_set_resource(zh, "staticrank", "1"); + + zebra_begin_trans(zh, 1); + sprintf(path, "%.200s/marc-col.xml", get_srcdir()); + zebra_repository_update(zh, path); + + zebra_end_trans(zh); + zebra_commit(zh); + + + do_query(__LINE__, zh, "@attr 1=title computer", 3); + do_query(__LINE__, zh, "@attr 1=control 11224466", 1); + do_query_x(__LINE__, zh, "@attr 1=titl computer", 0, 121); + + if (1) + { + zint ids[5]; + ids[0] = 2; + ids[1] = 4; + ids[2] = 3; + do_sort(zh, "@attr 1=title computer", 3, ids); + } + return close_down(zh, zs, 0); +} diff --git a/test/xslt/zebra.cfg b/test/xslt/zebra.cfg index 50b32c7..c890599 100644 --- a/test/xslt/zebra.cfg +++ b/test/xslt/zebra.cfg @@ -2,3 +2,4 @@ profilePath: ${srcdir:-.}/../../tab modulePath: ../../recctrl/.libs + diff --git a/test/xslt/zebrastaticrank.cfg b/test/xslt/zebrastaticrank.cfg new file mode 100644 index 0000000..4fe0f24 --- /dev/null +++ b/test/xslt/zebrastaticrank.cfg @@ -0,0 +1,6 @@ +profilePath: ${srcdir:-.}/../../tab + +modulePath: ../../recctrl/.libs + +staticrank: 1 + -- 1.7.10.4