+ else
+ md->type = Metadata_type_generic;
+
+ if (merge)
+ {
+ if (!strcmp((const char *) merge, "no"))
+ md->merge = Metadata_merge_no;
+ else if (!strcmp((const char *) merge, "unique"))
+ md->merge = Metadata_merge_unique;
+ else if (!strcmp((const char *) merge, "longest"))
+ md->merge = Metadata_merge_longest;
+ else if (!strcmp((const char *) merge, "range"))
+ md->merge = Metadata_merge_range;
+ else if (!strcmp((const char *) merge, "all"))
+ md->merge = Metadata_merge_all;
+ else
+ {
+ yaz_log(YLOG_FATAL, "Unknown value for metadata/merge: %s", merge);
+ return 0;
+ }
+ }
+ else
+ md->merge = Metadata_merge_no;
+
+ if (sortkey && strcmp((const char *) sortkey, "no"))
+ {
+ struct conf_sortkey *sk = &r->sortkeys[sk_node];
+ if (md->merge == Metadata_merge_no)
+ {
+ yaz_log(YLOG_FATAL, "Can't specify sortkey on a non-merged field");
+ return 0;
+ }
+ if (!strcmp((const char *) sortkey, "numeric"))
+ sk->type = Metadata_sortkey_numeric;
+ else if (!strcmp((const char *) sortkey, "skiparticle"))
+ sk->type = Metadata_sortkey_skiparticle;
+ else
+ {
+ yaz_log(YLOG_FATAL, "Unknown sortkey in metadata element: %s", sortkey);
+ return 0;
+ }
+ sk->name = md->name;
+ md->sortkey_offset = sk_node;
+ sk_node++;
+ }
+ else
+ md->sortkey_offset = -1;
+
+ xmlFree(name);
+ xmlFree(brief);
+ xmlFree(sortkey);
+ xmlFree(merge);
+ xmlFree(termlist);
+ xmlFree(rank);
+ md_node++;