+ yaz_log(YLOG_FATAL, "Must specify name in metadata element");
+ return 0;
+ }
+ md->name = nmem_strdup(nmem, (const char *) name);
+ if (brief)
+ {
+ if (!strcmp((const char *) brief, "yes"))
+ md->brief = 1;
+ else if (strcmp((const char *) brief, "no"))
+ {
+ yaz_log(YLOG_FATAL, "metadata/brief must be yes or no");
+ return 0;
+ }
+ }
+ else
+ md->brief = 0;
+
+ if (termlist)
+ {
+ if (!strcmp((const char *) termlist, "yes"))
+ md->termlist = 1;
+ else if (strcmp((const char *) termlist, "no"))
+ {
+ yaz_log(YLOG_FATAL, "metadata/termlist must be yes or no");
+ return 0;
+ }
+ }
+ else
+ md->termlist = 0;
+
+ if (rank)
+ md->rank = atoi((const char *) rank);
+ else
+ md->rank = 0;
+
+ if (type)
+ {
+ if (!strcmp((const char *) type, "generic"))
+ md->type = Metadata_type_generic;
+ else if (!strcmp((const char *) 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((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++;