+ else
+ md->brief = 0;
+
+ if (termlist)
+ {
+ if (!strcmp(termlist, "yes"))
+ md->termlist = 1;
+ else if (strcmp(termlist, "no"))
+ {
+ yaz_log(YLOG_FATAL, "metadata/termlist must be yes or no");
+ return 0;
+ }
+ }
+ else
+ md->termlist = 0;
+
+ if (rank)
+ md->rank = atoi(rank);
+ else
+ md->rank = 0;
+
+ if (type)
+ {
+ if (!strcmp(type, "generic"))
+ md->type = Metadata_type_generic;
+ else if (!strcmp(type, "year"))
+ md->type = Metadata_type_year;
+ else
+ {
+ yaz_log(YLOG_FATAL, "Unknown value for metadata/type: %s", type);
+ return 0;
+ }
+ }
+ else
+ md->type = Metadata_type_generic;
+
+ if (merge)
+ {
+ if (!strcmp(merge, "no"))
+ md->merge = Metadata_merge_no;
+ else if (!strcmp(merge, "unique"))
+ md->merge = Metadata_merge_unique;
+ else if (!strcmp(merge, "longest"))
+ md->merge = Metadata_merge_longest;
+ else if (!strcmp(merge, "range"))
+ md->merge = Metadata_merge_range;
+ else if (!strcmp(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(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(sortkey, "numeric"))
+ sk->type = Metadata_sortkey_numeric;
+ else if (!strcmp(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++;