Possible compatibility problems with earlier versions marked with '*'.
+Move retrieval (data1) module to Zebra since nobody seems
+to be using it.
+
Add GRS-1 render for ZOOM using same format as yaz-client.
--- 1.9.1 2002/10/05
-## $Id: Makefile.am,v 1.16 2002-09-25 07:43:29 adam Exp $
+## $Id: Makefile.am,v 1.17 2002-10-22 12:51:18 adam Exp $
AUTOMAKE_OPTIONS = foreign
-SUBDIRS = util odr comstack z39.50 ill zutil ccl tab retrieval server include lib client ztest zoom doc
+SUBDIRS = util odr comstack z39.50 ill zutil ccl server include lib client ztest zoom doc
aclocaldir=$(datadir)/aclocal
dnl YAZ Toolkit, Index Data 1994-2002
dnl See the file LICENSE for details.
-dnl $Id: configure.in,v 1.93 2002-09-25 08:11:33 adam Exp $
+dnl $Id: configure.in,v 1.94 2002-10-22 12:51:18 adam Exp $
AC_INIT(include/yaz/yaz-version.h)
AM_INIT_AUTOMAKE(yaz, 1.9.1)
dnl
zutil/Makefile
comstack/Makefile
ccl/Makefile
-tab/Makefile
-retrieval/Makefile
server/Makefile
include/Makefile
include/yaz/Makefile
-## $Id: Makefile.am,v 1.16 2002-06-04 11:36:11 adam Exp $
+## $Id: Makefile.am,v 1.17 2002-10-22 12:51:18 adam Exp $
pkginclude_HEADERS= backend.h ccl.h comstack.h \
- d1_attset.h d1_map.h data1.h diagbib1.h sortspec.h \
- log.h logrpn.h marcdisp.h nmem.h odr.h oid.h options.h otherinfo.h \
- pquery.h prt-ext.h readconf.h statserv.h tcpip.h unix.h tpath.h wrbuf.h xmalloc.h \
+ diagbib1.h sortspec.h log.h logrpn.h marcdisp.h nmem.h odr.h oid.h \
+ options.h otherinfo.h pquery.h prt-ext.h readconf.h statserv.h \
+ tcpip.h unix.h tpath.h wrbuf.h xmalloc.h \
yaz-ccl.h yaz-util.h yaz-version.h yconfig.h proto.h \
\
ill.h ill-core.h item-req.h z-accdes1.h z-accform1.h \
+++ /dev/null
-/*
- * Copyright (c) 1995-2000, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef D1_ATTSET_H
-#define D1_ATTSET_H
-
-#include <yaz/oid.h>
-
-YAZ_BEGIN_CDECL
-
-/*
- * This structure describes a attset, perhaps made up by inclusion
- * (supersetting) of other attribute sets. When indexing and searching,
- * we perform a normalisation, where we associate a given tag with
- * the set that originally defined it, rather than the superset. This
- * allows the most flexible access. Eg, the tags common to GILS and BIB-1
- * should be searchable by both names.
- */
-
-struct data1_attset;
-
-typedef struct data1_local_attribute
-{
- int local;
- struct data1_local_attribute *next;
-} data1_local_attribute;
-
-typedef struct data1_attset data1_attset;
-typedef struct data1_att data1_att;
-typedef struct data1_attset_child data1_attset_child;
-
-struct data1_att
-{
- data1_attset *parent; /* attribute set */
- char *name; /* symbolic name of this attribute */
- int value; /* attribute value */
- data1_local_attribute *locals; /* local index values */
- data1_att *next;
-};
-
-struct data1_attset_child {
- data1_attset *child;
- data1_attset_child *next;
-};
-
-struct data1_attset
-{
- char *name; /* symbolic name */
- oid_value reference; /* external ID of attset */
- data1_att *atts; /* attributes */
- data1_attset_child *children; /* included attset */
- data1_attset *next; /* next in cache */
-};
-
-typedef struct data1_handle_info *data1_handle;
-
-YAZ_EXPORT data1_att *data1_getattbyname(data1_handle dh, data1_attset *s,
- char *name);
-YAZ_EXPORT data1_attset *data1_read_attset(data1_handle dh, const char *file);
-
-YAZ_EXPORT data1_attset *data1_empty_attset(data1_handle dh);
-
-YAZ_END_CDECL
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 1995-2000, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef D1_MAP_H
-#define D1_MAP_H
-
-YAZ_BEGIN_CDECL
-
-typedef struct data1_maptag
-{
- int new_field;
- int type;
-#define D1_MAPTAG_numeric 1
-#define D1_MAPTAG_string 2
- int which;
- union
- {
- int numeric;
- char *string;
- } value;
- struct data1_maptag *next;
-} data1_maptag;
-
-typedef struct data1_mapunit
-{
- int no_data;
- char *source_element_name;
- data1_maptag *target_path;
- struct data1_mapunit *next;
-} data1_mapunit;
-
-typedef struct data1_maptab
-{
- char *name;
- oid_value target_absyn_ref;
- char *target_absyn_name;
- data1_mapunit *map;
- struct data1_maptab *next;
-} data1_maptab;
-
-YAZ_END_CDECL
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- * $Id: data1.h,v 1.18 2002-10-08 20:14:44 adam Exp $
- */
-
-#ifndef DATA1_H
-#define DATA1_H
-
-#include <stdio.h>
-
-#include <yaz/nmem.h>
-#include <yaz/oid.h>
-#include <yaz/proto.h>
-
-#include <yaz/d1_attset.h>
-#include <yaz/d1_map.h>
-#include <yaz/yaz-util.h>
-#include <yaz/wrbuf.h>
-
-#define d1_isspace(c) strchr(" \r\n\t\f", c)
-#define d1_isdigit(c) ((c) <= '9' && (c) >= '0')
-
-YAZ_BEGIN_CDECL
-
-#define data1_matchstr(s1, s2) yaz_matchstr(s1, s2)
-
-#define DATA1_MAX_SYMBOL 31
-
-typedef struct data1_name
-{
- char *name;
- struct data1_name *next;
-} data1_name;
-
-typedef struct data1_absyn_cache_info *data1_absyn_cache;
-typedef struct data1_attset_cache_info *data1_attset_cache;
-
-typedef enum data1_datatype
-{
- DATA1K_unknown,
- DATA1K_structured,
- DATA1K_string,
- DATA1K_numeric,
- DATA1K_bool,
- DATA1K_oid,
- DATA1K_generalizedtime,
- DATA1K_intunit,
- DATA1K_int,
- DATA1K_octetstring,
- DATA1K_null
-} data1_datatype;
-
-typedef struct data1_marctab
-{
- char *name;
- oid_value reference;
-
- char record_status[2];
- char implementation_codes[5];
- int indicator_length;
- int identifier_length;
- char user_systems[4];
-
- int length_data_entry;
- int length_starting;
- int length_implementation;
- char future_use[2];
-
- int force_indicator_length;
- int force_identifier_length;
- struct data1_marctab *next;
-} data1_marctab;
-
-typedef struct data1_esetname
-{
- char *name;
- Z_Espec1 *spec;
- struct data1_esetname *next;
-} data1_esetname;
-
-/*
- * Variant set definitions.
- */
-
-typedef struct data1_vartype
-{
- char *name;
- struct data1_varclass *zclass;
- int type;
- data1_datatype datatype;
- struct data1_vartype *next;
-} data1_vartype;
-
-typedef struct data1_varclass
-{
- char *name;
- struct data1_varset *set;
- int zclass;
- data1_vartype *types;
- struct data1_varclass *next;
-} data1_varclass;
-
-typedef struct data1_varset
-{
- char *name;
- oid_value reference;
- data1_varclass *classes;
-} data1_varset;
-
-/*
- * Tagset definitions
- */
-
-struct data1_tagset;
-
-typedef struct data1_tag
-{
- data1_name *names;
-#define DATA1T_numeric 1
-#define DATA1T_string 2
- int which;
- union
- {
- int numeric;
- char *string;
- } value;
- data1_datatype kind;
-
- struct data1_tagset *tagset;
- struct data1_tag *next;
-} data1_tag;
-
-typedef struct data1_tagset data1_tagset;
-
-struct data1_tagset
-{
- int type; /* type of tagset in current context */
- char *name; /* symbolic name */
- oid_value reference;
- data1_tag *tags; /* tags defined by this set */
- data1_tagset *children; /* children */
- data1_tagset *next; /* sibling */
-};
-
-typedef struct data1_termlist
-{
- data1_att *att;
- char *structure;
- char *source;
- struct data1_termlist *next;
-} data1_termlist;
-
-/*
- * abstract syntax specification
- */
-
-typedef struct data1_element
-{
- char *name;
- data1_tag *tag;
- data1_termlist *termlists;
- char *sub_name;
- struct data1_element *children;
- struct data1_element *next;
-} data1_element;
-
-typedef struct data1_sub_elements {
- char *name;
- struct data1_sub_elements *next;
- data1_element *elements;
-} data1_sub_elements;
-
-typedef struct data1_xattr {
- char *name;
- char *value;
- struct data1_xattr *next;
- unsigned short what; /* DATA1I_text, .. see data1_node.u.data */
-} data1_xattr;
-
-typedef struct data1_absyn
-{
- char *name;
- oid_value reference;
- data1_tagset *tagset;
- data1_attset *attset;
- data1_varset *varset;
- data1_esetname *esetnames;
- data1_maptab *maptabs;
- data1_marctab *marc;
- data1_sub_elements *sub_elements;
- data1_element *main_elements;
- char *encoding;
- int enable_xpath_indexing;
-} data1_absyn;
-
-/*
- * record data node (tag/data/variant)
- */
-
-typedef struct data1_node
-{
- /* the root of a record (containing global data) */
-#define DATA1N_root 1
- /* a tag */
-#define DATA1N_tag 2
- /* some data under a leaf tag or variant */
-#define DATA1N_data 3
- /* variant specification (a triple, actually) */
-#define DATA1N_variant 4
- /* comment (same as data) */
-#define DATA1N_comment 5
- /* preprocessing instruction */
-#define DATA1N_preprocess 6
- int which;
- union
- {
- struct
- {
- char *type;
- data1_absyn *absyn; /* abstract syntax for this type */
- } root;
-
- struct
- {
- char *tag;
- data1_element *element;
- int no_data_requested;
- int get_bytes;
- unsigned node_selected : 1;
- unsigned make_variantlist : 1;
- data1_xattr *attributes;
- } tag;
-
- struct
- {
- char *data; /* filename or data */
- int len;
- /* text inclusion */
-#define DATA1I_inctxt 1
- /* binary data inclusion */
-#define DATA1I_incbin 2
- /* text data */
-#define DATA1I_text 3
- /* numerical data */
-#define DATA1I_num 4
- /* object identifier */
-#define DATA1I_oid 5
- /* XML text */
-#define DATA1I_xmltext 6
- unsigned what:7;
- unsigned formatted_text : 1; /* newlines are significant */
- } data;
-
- struct
- {
- data1_vartype *type;
- char *value;
- } variant;
-
- struct
- {
- char *target;
- data1_xattr *attributes;
- } preprocess;
- } u;
-
- void (*destroy)(struct data1_node *n);
-#define DATA1_LOCALDATA 12
- char lbuf[DATA1_LOCALDATA]; /* small buffer for local data */
- struct data1_node *next;
- struct data1_node *child;
- struct data1_node *last_child;
- struct data1_node *parent;
- struct data1_node *root;
-} data1_node;
-
-YAZ_EXPORT data1_handle data1_create (void);
-
-#define DATA1_FLAG_XML 1
-YAZ_EXPORT data1_handle data1_createx (int flags);
-
-YAZ_EXPORT void data1_destroy(data1_handle dh);
-YAZ_EXPORT data1_node *get_parent_tag(data1_handle dh, data1_node *n);
-YAZ_EXPORT data1_node *data1_read_node(data1_handle dh, const char **buf,
- NMEM m);
-YAZ_EXPORT data1_node *data1_read_nodex (data1_handle dh, NMEM m,
- int (*get_byte)(void *fh), void *fh,
- WRBUF wrbuf);
-YAZ_EXPORT data1_node *data1_read_record(data1_handle dh,
- int (*rf)(void *, char *, size_t),
- void *fh, NMEM m);
-YAZ_EXPORT data1_absyn *data1_read_absyn(data1_handle dh, const char *file,
- int file_must_exist);
-YAZ_EXPORT data1_tag *data1_gettagbynum(data1_handle dh,
- data1_tagset *s,
- int type, int value);
-YAZ_EXPORT data1_tagset *data1_empty_tagset (data1_handle dh);
-YAZ_EXPORT data1_tagset *data1_read_tagset(data1_handle dh,
- const char *file,
- int type);
-YAZ_EXPORT data1_element *data1_getelementbytagname(data1_handle dh,
- data1_absyn *abs,
- data1_element *parent,
- const char *tagname);
-YAZ_EXPORT Z_GenericRecord *data1_nodetogr(data1_handle dh, data1_node *n,
- int select, ODR o,
- int *len);
-YAZ_EXPORT data1_tag *data1_gettagbyname(data1_handle dh, data1_tagset *s,
- const char *name);
-YAZ_EXPORT void data1_free_tree(data1_handle dh, data1_node *t);
-YAZ_EXPORT char *data1_nodetobuf(data1_handle dh, data1_node *n,
- int select, int *len);
-YAZ_EXPORT data1_node *data1_mk_tag_data_wd(data1_handle dh,
- data1_node *at,
- const char *tagname, NMEM m);
-YAZ_EXPORT data1_node *data1_mk_tag_data(data1_handle dh, data1_node *at,
- const char *tagname, NMEM m);
-YAZ_EXPORT data1_datatype data1_maptype(data1_handle dh, char *t);
-YAZ_EXPORT data1_varset *data1_read_varset(data1_handle dh, const char *file);
-YAZ_EXPORT data1_vartype *data1_getvartypebyct(data1_handle dh,
- data1_varset *set,
- char *zclass, char *type);
-YAZ_EXPORT Z_Espec1 *data1_read_espec1(data1_handle dh, const char *file);
-YAZ_EXPORT int data1_doespec1(data1_handle dh, data1_node *n, Z_Espec1 *e);
-YAZ_EXPORT data1_esetname *data1_getesetbyname(data1_handle dh,
- data1_absyn *a,
- const char *name);
-YAZ_EXPORT data1_element *data1_getelementbyname(data1_handle dh,
- data1_absyn *absyn,
- const char *name);
-YAZ_EXPORT data1_node *data1_mk_node2(data1_handle dh, NMEM m,
- int type, data1_node *parent);
-
-YAZ_EXPORT data1_node *data1_mk_tag (data1_handle dh, NMEM nmem,
- const char *tag, const char **attr,
- data1_node *at);
-YAZ_EXPORT data1_node *data1_mk_tag_n (data1_handle dh, NMEM nmem,
- const char *tag, size_t len,
- const char **attr,
- data1_node *at);
-YAZ_EXPORT void data1_tag_add_attr (data1_handle dh, NMEM nmem,
- data1_node *res, const char **attr);
-
-YAZ_EXPORT data1_node *data1_mk_text_n (data1_handle dh, NMEM mem,
- const char *buf, size_t len,
- data1_node *parent);
-YAZ_EXPORT data1_node *data1_mk_text_nf (data1_handle dh, NMEM mem,
- const char *buf, size_t len,
- data1_node *parent);
-YAZ_EXPORT data1_node *data1_mk_text (data1_handle dh, NMEM mem,
- const char *buf, data1_node *parent);
-
-YAZ_EXPORT data1_node *data1_mk_comment_n (data1_handle dh, NMEM mem,
- const char *buf, size_t len,
- data1_node *parent);
-
-YAZ_EXPORT data1_node *data1_mk_comment (data1_handle dh, NMEM mem,
- const char *buf, data1_node *parent);
-
-YAZ_EXPORT data1_node *data1_mk_preprocess_n (data1_handle dh, NMEM nmem,
- const char *target, size_t len,
- const char **attr,
- data1_node *at);
-
-YAZ_EXPORT data1_node *data1_mk_preprocess (data1_handle dh, NMEM nmem,
- const char *target,
- const char **attr,
- data1_node *at);
-
-YAZ_EXPORT data1_node *data1_mk_root (data1_handle dh, NMEM nmem,
- const char *name);
-YAZ_EXPORT void data1_set_root(data1_handle dh, data1_node *res,
- NMEM nmem, const char *name);
-
-YAZ_EXPORT data1_node *data1_mk_tag_data_int (data1_handle dh, data1_node *at,
- const char *tag, int num,
- NMEM nmem);
-YAZ_EXPORT data1_node *data1_mk_tag_data_oid (data1_handle dh, data1_node *at,
- const char *tag, Odr_oid *oid,
- NMEM nmem);
-YAZ_EXPORT data1_node *data1_mk_tag_data_text (data1_handle dh, data1_node *at,
- const char *tag,
- const char *str,
- NMEM nmem);
-YAZ_EXPORT data1_node *data1_mk_tag_data_text_uni (data1_handle dh,
- data1_node *at,
- const char *tag,
- const char *str,
- NMEM nmem);
-
-YAZ_EXPORT data1_absyn *data1_get_absyn (data1_handle dh, const char *name);
-
-YAZ_EXPORT data1_node *data1_search_tag (data1_handle dh, data1_node *n,
- const char *tag);
-YAZ_EXPORT data1_node *data1_mk_tag_uni (data1_handle dh, NMEM nmem,
- const char *tag, data1_node *at);
-YAZ_EXPORT data1_attset *data1_get_attset (data1_handle dh, const char *name);
-YAZ_EXPORT data1_maptab *data1_read_maptab(data1_handle dh, const char *file);
-YAZ_EXPORT data1_node *data1_map_record(data1_handle dh, data1_node *n,
- data1_maptab *map, NMEM m);
-YAZ_EXPORT data1_marctab *data1_read_marctab (data1_handle dh,
- const char *file);
-YAZ_EXPORT char *data1_nodetomarc(data1_handle dh, data1_marctab *p,
- data1_node *n, int selected, int *len);
-YAZ_EXPORT char *data1_nodetoidsgml(data1_handle dh, data1_node *n,
- int select, int *len);
-YAZ_EXPORT Z_ExplainRecord *data1_nodetoexplain(data1_handle dh,
- data1_node *n, int select,
- ODR o);
-YAZ_EXPORT Z_BriefBib *data1_nodetosummary(data1_handle dh,
- data1_node *n, int select,
- ODR o);
-YAZ_EXPORT char *data1_nodetosoif(data1_handle dh, data1_node *n, int select,
- int *len);
-YAZ_EXPORT void data1_set_tabpath(data1_handle dh, const char *path);
-YAZ_EXPORT void data1_set_tabroot (data1_handle dp, const char *p);
-YAZ_EXPORT const char *data1_get_tabpath(data1_handle dh);
-YAZ_EXPORT const char *data1_get_tabroot(data1_handle dh);
-
-YAZ_EXPORT WRBUF data1_get_wrbuf (data1_handle dp);
-YAZ_EXPORT char **data1_get_read_buf (data1_handle dp, int **lenp);
-YAZ_EXPORT char **data1_get_map_buf (data1_handle dp, int **lenp);
-YAZ_EXPORT data1_absyn_cache *data1_absyn_cache_get (data1_handle dh);
-YAZ_EXPORT data1_attset_cache *data1_attset_cache_get (data1_handle dh);
-YAZ_EXPORT NMEM data1_nmem_get (data1_handle dh);
-YAZ_EXPORT void data1_pr_tree (data1_handle dh, data1_node *n, FILE *out);
-YAZ_EXPORT char *data1_insert_string (data1_handle dh, data1_node *res,
- NMEM m, const char *str);
-YAZ_EXPORT char *data1_insert_string_n (data1_handle dh, data1_node *res,
- NMEM m, const char *str, size_t len);
-YAZ_EXPORT data1_node *data1_read_sgml (data1_handle dh, NMEM m,
- const char *buf);
-YAZ_EXPORT data1_node *data1_read_xml (data1_handle dh,
- int (*rf)(void *, char *, size_t),
- void *fh, NMEM m);
-YAZ_EXPORT void data1_absyn_trav (data1_handle dh, void *handle,
- void (*fh)(data1_handle dh,
- void *h, data1_absyn *a));
-
-YAZ_EXPORT data1_attset *data1_attset_search_id (data1_handle dh, int id);
-
-YAZ_EXPORT char *data1_getNodeValue(data1_node* node, char* pTagPath);
-YAZ_EXPORT data1_node *data1_LookupNode(data1_node* node, char* pTagPath);
-YAZ_EXPORT int data1_CountOccurences(data1_node* node, char* pTagPath);
-
-YAZ_EXPORT FILE *data1_path_fopen (data1_handle dh, const char *file,
- const char *mode);
-
-/* obsolete functions ... */
-
-YAZ_EXPORT data1_node *data1_mk_node (data1_handle dh, NMEM m);
-YAZ_EXPORT data1_node *data1_insert_taggeddata (data1_handle dh,
- data1_node *root,
- data1_node *at,
- const char *tagname, NMEM m);
-YAZ_EXPORT data1_node *data1_mk_node_type (data1_handle dh, NMEM m, int type);
-YAZ_EXPORT data1_node *data1_add_taggeddata (data1_handle dh, data1_node *root,
- data1_node *at,
- const char *tagname,
- NMEM m);
-
-YAZ_EXPORT data1_node *data1_get_root_tag (data1_handle dh, data1_node *n);
-
-YAZ_EXPORT int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
- const char *tocode,
- const char *fromcode);
-
-YAZ_EXPORT const char *data1_get_encoding (data1_handle dh, data1_node *n);
-
-YAZ_EXPORT int data1_is_xmlmode(data1_handle dh);
-
-YAZ_END_CDECL
-
-#endif
-## $Id: Makefile.am,v 1.23 2002-09-16 18:45:13 adam Exp $
+## $Id: Makefile.am,v 1.24 2002-10-22 12:51:18 adam Exp $
if ISTHR
extra=libyazthread.la
libyaz_la_LIBADD=../odr/libodr.la \
../comstack/libcomstack.la ../server/libserver.la \
- ../util/libutil.la ../retrieval/libret.la \
- ../ccl/libccl.la ../zutil/libzutil.la \
+ ../util/libutil.la ../ccl/libccl.la ../zutil/libzutil.la \
../ill/libill.la ../z39.50/libz39.50.la
+++ /dev/null
-## $Id: Makefile.am,v 1.8 2002-09-11 21:25:57 adam Exp $
-
-noinst_LTLIBRARIES=libret.la
-
-libret_la_SOURCES = d1_handle.c d1_read.c d1_attset.c d1_tagset.c d1_absyn.c \
- d1_grs.c d1_sutrs.c d1_varset.c d1_espec.c d1_doespec.c d1_map.c d1_marc.c \
- d1_write.c d1_expout.c d1_sumout.c d1_soif.c d1_prtree.c d1_if.c
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_absyn.c,v 1.34 2002-08-29 21:26:08 mike Exp $
- */
-
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/oid.h>
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-#define D1_MAX_NESTING 128
-
-struct data1_absyn_cache_info
-{
- char *name;
- data1_absyn *absyn;
- data1_absyn_cache next;
-};
-
-struct data1_attset_cache_info
-{
- char *name;
- data1_attset *attset;
- data1_attset_cache next;
-};
-
-data1_absyn *data1_absyn_search (data1_handle dh, const char *name)
-{
- data1_absyn_cache p = *data1_absyn_cache_get (dh);
-
- while (p)
- {
- if (!strcmp (name, p->name))
- return p->absyn;
- p = p->next;
- }
- return NULL;
-}
-
-void data1_absyn_trav (data1_handle dh, void *handle,
- void (*fh)(data1_handle dh, void *h, data1_absyn *a))
-{
- data1_absyn_cache p = *data1_absyn_cache_get (dh);
-
- while (p)
- {
- (*fh)(dh, handle, p->absyn);
- p = p->next;
- }
-}
-
-data1_absyn *data1_absyn_add (data1_handle dh, const char *name)
-{
- char fname[512];
- NMEM mem = data1_nmem_get (dh);
-
- data1_absyn_cache p = (data1_absyn_cache)nmem_malloc (mem, sizeof(*p));
- data1_absyn_cache *pp = data1_absyn_cache_get (dh);
-
- sprintf(fname, "%s.abs", name);
- p->absyn = data1_read_absyn (dh, fname, 0);
- p->name = nmem_strdup (mem, name);
- p->next = *pp;
- *pp = p;
- return p->absyn;
-}
-
-data1_absyn *data1_get_absyn (data1_handle dh, const char *name)
-{
- data1_absyn *absyn;
-
- if (!(absyn = data1_absyn_search (dh, name)))
- absyn = data1_absyn_add (dh, name);
- return absyn;
-}
-
-data1_attset *data1_attset_search_name (data1_handle dh, const char *name)
-{
- data1_attset_cache p = *data1_attset_cache_get (dh);
-
- while (p)
- {
- if (!strcmp (name, p->name))
- return p->attset;
- p = p->next;
- }
- return NULL;
-}
-
-data1_attset *data1_attset_search_id (data1_handle dh, int id)
-{
- data1_attset_cache p = *data1_attset_cache_get (dh);
-
- while (p)
- {
- if (id == p->attset->reference)
- return p->attset;
- p = p->next;
- }
- return NULL;
-}
-
-data1_attset *data1_attset_add (data1_handle dh, const char *name)
-{
- char fname[512], aname[512];
- NMEM mem = data1_nmem_get (dh);
- data1_attset *attset;
-
- strcpy (aname, name);
- sprintf(fname, "%s.att", name);
- attset = data1_read_attset (dh, fname);
- if (!attset)
- {
- char *cp;
- attset = data1_read_attset (dh, name);
- if (attset && (cp = strrchr (aname, '.')))
- *cp = '\0';
- }
- if (!attset)
- yaz_log (LOG_WARN|LOG_ERRNO, "Couldn't load attribute set %s", name);
- else
- {
- data1_attset_cache p = (data1_attset_cache)
- nmem_malloc (mem, sizeof(*p));
- data1_attset_cache *pp = data1_attset_cache_get (dh);
-
- attset->name = p->name = nmem_strdup (mem, aname);
- p->attset = attset;
- p->next = *pp;
- *pp = p;
- }
- return attset;
-}
-
-data1_attset *data1_get_attset (data1_handle dh, const char *name)
-{
- data1_attset *attset;
-
- if (!(attset = data1_attset_search_name (dh, name)))
- attset = data1_attset_add (dh, name);
- return attset;
-}
-
-data1_esetname *data1_getesetbyname(data1_handle dh, data1_absyn *a,
- const char *name)
-{
- data1_esetname *r;
-
- for (r = a->esetnames; r; r = r->next)
- if (!data1_matchstr(r->name, name))
- return r;
- return 0;
-}
-
-data1_element *data1_getelementbytagname (data1_handle dh, data1_absyn *abs,
- data1_element *parent,
- const char *tagname)
-{
- data1_element *r;
-
- /* It's now possible to have a data1 tree with no abstract syntax */
- if ( !abs )
- return 0;
-
- if (!parent)
- r = abs->main_elements;
- else
- r = parent->children;
-
- for (; r; r = r->next)
- {
- data1_name *n;
-
- for (n = r->tag->names; n; n = n->next)
- if (!data1_matchstr(tagname, n->name))
- return r;
- }
- return 0;
-}
-
-data1_element *data1_getelementbyname (data1_handle dh, data1_absyn *absyn,
- const char *name)
-{
- data1_element *r;
-
- /* It's now possible to have a data1 tree with no abstract syntax */
- if ( !absyn )
- return 0;
- for (r = absyn->main_elements; r; r = r->next)
- if (!data1_matchstr(r->name, name))
- return r;
- return 0;
-}
-
-
-void fix_element_ref (data1_handle dh, data1_absyn *absyn, data1_element *e)
-{
- /* It's now possible to have a data1 tree with no abstract syntax */
- if ( !absyn )
- return;
-
- for (; e; e = e->next)
- {
- if (!e->sub_name)
- {
- if (e->children)
- fix_element_ref (dh, absyn, e->children);
- }
- else
- {
- data1_sub_elements *sub_e = absyn->sub_elements;
- while (sub_e && strcmp (e->sub_name, sub_e->name))
- sub_e = sub_e->next;
- if (sub_e)
- e->children = sub_e->elements;
- else
- yaz_log (LOG_WARN, "Unresolved reference to sub-elements %s",
- e->sub_name);
- }
- }
-}
-
-
-static int parse_termlists (data1_handle dh, data1_termlist ***tpp,
- char *p, const char *file, int lineno,
- const char *element_name, data1_absyn *res)
-{
- data1_termlist **tp = *tpp;
- do
- {
- char attname[512], structure[512];
- char *source;
- int r;
-
- if (!(r = sscanf(p, "%511[^:,]:%511[^,]", attname,
- structure)))
- {
- yaz_log(LOG_WARN,
- "%s:%d: Syntax error in termlistspec '%s'",
- file, lineno, p);
- return -1;
- }
- if (*attname == '!')
- strcpy(attname, element_name);
- *tp = (data1_termlist *)
- nmem_malloc(data1_nmem_get(dh), sizeof(**tp));
- (*tp)->next = 0;
- if (!((*tp)->att = data1_getattbyname(dh, res->attset,
- attname)))
- {
- yaz_log(LOG_WARN,
- "%s:%d: Couldn't find att '%s' in attset",
- file, lineno, attname);
- return -1;
- }
- if (r == 2 && (source = strchr(structure, ':')))
- *source++ = '\0'; /* cut off structure .. */
- else
- source = "data"; /* ok: default is leaf data */
- (*tp)->source = (char *)
- nmem_strdup (data1_nmem_get (dh), source);
-
- if (r < 2) /* is the structure qualified? */
- (*tp)->structure = "w";
- else
- (*tp)->structure = (char *)
- nmem_strdup (data1_nmem_get (dh), structure);
- tp = &(*tp)->next;
- }
- while ((p = strchr(p, ',')) && *(++p));
- *tpp = tp;
- return 0;
-}
-
-data1_absyn *data1_read_absyn (data1_handle dh, const char *file,
- int file_must_exist)
-{
- data1_sub_elements *cur_elements = NULL;
- data1_absyn *res = 0;
- FILE *f;
- data1_element **ppl[D1_MAX_NESTING];
- data1_esetname **esetpp;
- data1_maptab **maptabp;
- data1_marctab **marcp;
- data1_termlist *all = 0;
- data1_attset_child **attset_childp;
- data1_tagset **tagset_childp;
- int level = 0;
- int lineno = 0;
- int argc;
- char *argv[50], line[512];
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- {
- yaz_log(LOG_WARN|LOG_ERRNO, "Couldn't open %s", file);
- if (file_must_exist)
- return 0;
- }
-
- res = (data1_absyn *) nmem_malloc(data1_nmem_get(dh), sizeof(*res));
- res->name = 0;
- res->reference = VAL_NONE;
- res->tagset = 0;
- res->encoding = 0;
- res->enable_xpath_indexing = (f ? 0 : 1);
- tagset_childp = &res->tagset;
-
- res->attset = data1_empty_attset (dh);
- attset_childp = &res->attset->children;
-
- res->varset = 0;
- res->esetnames = 0;
- esetpp = &res->esetnames;
- res->maptabs = 0;
- maptabp = &res->maptabs;
- res->marc = 0;
- marcp = &res->marc;
-
- res->sub_elements = NULL;
- res->main_elements = NULL;
-
- while (f && (argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- {
- char *cmd = *argv;
- if (!strcmp(cmd, "elm") || !strcmp(cmd, "element"))
- {
- data1_element *new_element;
- int i;
- char *p, *sub_p, *path, *name, *termlists;
- int type, value;
- data1_termlist **tp;
-
- if (argc < 4)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to elm", file, lineno);
- continue;
- }
- path = argv[1];
- name = argv[2];
- termlists = argv[3];
-
- if (!cur_elements)
- {
- cur_elements = (data1_sub_elements *)
- nmem_malloc(data1_nmem_get(dh), sizeof(*cur_elements));
- cur_elements->next = res->sub_elements;
- cur_elements->elements = NULL;
- cur_elements->name = "main";
- res->sub_elements = cur_elements;
-
- level = 0;
- ppl[level] = &cur_elements->elements;
- }
- p = path;
- for (i = 1;; i++)
- {
- char *e;
-
- if ((e = strchr(p, '/')))
- p = e+1;
- else
- break;
- }
- if (i > level+1)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad level increase", file, lineno);
- fclose(f);
- return 0;
- }
- level = i;
- new_element = *ppl[level-1] = (data1_element *)
- nmem_malloc(data1_nmem_get(dh), sizeof(*new_element));
- new_element->next = new_element->children = 0;
- new_element->tag = 0;
- new_element->termlists = 0;
- new_element->sub_name = 0;
-
- tp = &new_element->termlists;
- ppl[level-1] = &new_element->next;
- ppl[level] = &new_element->children;
-
- /* consider subtree (if any) ... */
- if ((sub_p = strchr (p, ':')) && sub_p[1])
- {
- *sub_p++ = '\0';
- new_element->sub_name =
- nmem_strdup (data1_nmem_get(dh), sub_p);
- }
- /* well-defined tag */
- if (sscanf(p, "(%d,%d)", &type, &value) == 2)
- {
- if (!res->tagset)
- {
- yaz_log(LOG_WARN, "%s:%d: No tagset loaded", file, lineno);
- fclose(f);
- return 0;
- }
- if (!(new_element->tag = data1_gettagbynum (dh, res->tagset,
- type, value)))
- {
- yaz_log(LOG_WARN, "%s:%d: Couldn't find tag %s in tagset",
- file, lineno, p);
- fclose(f);
- return 0;
- }
- }
- /* private tag */
- else if (*p)
- {
- data1_tag *nt =
- new_element->tag = (data1_tag *)
- nmem_malloc(data1_nmem_get (dh),
- sizeof(*new_element->tag));
- nt->which = DATA1T_string;
- nt->value.string = nmem_strdup(data1_nmem_get (dh), p);
- nt->names = (data1_name *)
- nmem_malloc(data1_nmem_get(dh),
- sizeof(*new_element->tag->names));
- nt->names->name = nt->value.string;
- nt->names->next = 0;
- nt->kind = DATA1K_string;
- nt->next = 0;
- nt->tagset = 0;
- }
- else
- {
- yaz_log(LOG_WARN, "%s:%d: Bad element", file, lineno);
- fclose(f);
- return 0;
- }
- /* parse termList definitions */
- p = termlists;
- if (*p != '-')
- {
- assert (res->attset);
-
- if (parse_termlists (dh, &tp, p, file, lineno, name, res))
- {
- fclose (f);
- return 0;
- }
- *tp = all; /* append any ALL entries to the list */
- }
- new_element->name = nmem_strdup(data1_nmem_get (dh), name);
- }
- else if (!strcmp(cmd, "section"))
- {
- char *name;
-
- if (argc < 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to section",
- file, lineno);
- continue;
- }
- name = argv[1];
-
- cur_elements = (data1_sub_elements *)
- nmem_malloc(data1_nmem_get(dh), sizeof(*cur_elements));
- cur_elements->next = res->sub_elements;
- cur_elements->elements = NULL;
- cur_elements->name = nmem_strdup (data1_nmem_get(dh), name);
- res->sub_elements = cur_elements;
-
- level = 0;
- ppl[level] = &cur_elements->elements;
- }
- else if (!strcmp(cmd, "xpath"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to 'xpath' directive",
- file, lineno);
- continue;
- }
- if (!strcmp(argv[1], "enable"))
- res->enable_xpath_indexing = 1;
- else if (!strcmp (argv[1], "disable"))
- res->enable_xpath_indexing = 0;
- else
- {
- yaz_log(LOG_WARN, "%s:%d: Expecting disable/enable "
- "after 'xpath' directive", file, lineno);
- }
- }
- else if (!strcmp(cmd, "all"))
- {
- data1_termlist **tp = &all;
- if (all)
- {
- yaz_log(LOG_WARN, "%s:%d: Too many 'all' directives - ignored",
- file, lineno);
- continue;
- }
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to 'all' directive",
- file, lineno);
- continue;
- }
- if (parse_termlists (dh, &tp, argv[1], file, lineno, 0, res))
- {
- fclose (f);
- return 0;
- }
- }
- else if (!strcmp(cmd, "name"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to name directive",
- file, lineno);
- continue;
- }
- res->name = nmem_strdup(data1_nmem_get(dh), argv[1]);
- }
- else if (!strcmp(cmd, "reference"))
- {
- char *name;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to reference",
- file, lineno);
- continue;
- }
- name = argv[1];
- if ((res->reference = oid_getvalbyname(name)) == VAL_NONE)
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown tagset ref '%s'",
- file, lineno, name);
- continue;
- }
- }
- else if (!strcmp(cmd, "attset"))
- {
- char *name;
- data1_attset *attset;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to attset",
- file, lineno);
- continue;
- }
- name = argv[1];
- if (!(attset = data1_get_attset (dh, name)))
- {
- yaz_log(LOG_WARN, "%s:%d: Couldn't find attset %s",
- file, lineno, name);
- continue;
- }
- *attset_childp = (data1_attset_child *)
- nmem_malloc (data1_nmem_get(dh), sizeof(**attset_childp));
- (*attset_childp)->child = attset;
- (*attset_childp)->next = 0;
- attset_childp = &(*attset_childp)->next;
- }
- else if (!strcmp(cmd, "tagset"))
- {
- char *name;
- int type = 0;
- if (argc < 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to tagset",
- file, lineno);
- continue;
- }
- name = argv[1];
- if (argc == 3)
- type = atoi(argv[2]);
- *tagset_childp = data1_read_tagset (dh, name, type);
- if (!(*tagset_childp))
- {
- yaz_log(LOG_WARN, "%s:%d: Couldn't load tagset %s",
- file, lineno, name);
- continue;
- }
- tagset_childp = &(*tagset_childp)->next;
- }
- else if (!strcmp(cmd, "varset"))
- {
- char *name;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args in varset",
- file, lineno);
- continue;
- }
- name = argv[1];
- if (!(res->varset = data1_read_varset (dh, name)))
- {
- yaz_log(LOG_WARN, "%s:%d: Couldn't load Varset %s",
- file, lineno, name);
- continue;
- }
- }
- else if (!strcmp(cmd, "esetname"))
- {
- char *name, *fname;
-
- if (argc != 3)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args in esetname",
- file, lineno);
- continue;
- }
- name = argv[1];
- fname = argv[2];
-
- *esetpp = (data1_esetname *)
- nmem_malloc(data1_nmem_get(dh), sizeof(**esetpp));
- (*esetpp)->name = nmem_strdup(data1_nmem_get(dh), name);
- (*esetpp)->next = 0;
- if (*fname == '@')
- (*esetpp)->spec = 0;
- else if (!((*esetpp)->spec = data1_read_espec1 (dh, fname)))
- {
- yaz_log(LOG_WARN, "%s:%d: Espec-1 read failed for %s",
- file, lineno, fname);
- continue;
- }
- esetpp = &(*esetpp)->next;
- }
- else if (!strcmp(cmd, "maptab"))
- {
- char *name;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args for maptab",
- file, lineno);
- continue;
- }
- name = argv[1];
- if (!(*maptabp = data1_read_maptab (dh, name)))
- {
- yaz_log(LOG_WARN, "%s:%d: Couldn't load maptab %s",
- file, lineno, name);
- continue;
- }
- maptabp = &(*maptabp)->next;
- }
- else if (!strcmp(cmd, "marc"))
- {
- char *name;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # or args for marc",
- file, lineno);
- continue;
- }
- name = argv[1];
- if (!(*marcp = data1_read_marctab (dh, name)))
- {
- yaz_log(LOG_WARN, "%s:%d: Couldn't read marctab %s",
- file, lineno, name);
- continue;
- }
- marcp = &(*marcp)->next;
- }
- else if (!strcmp(cmd, "encoding"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # or args for encoding",
- file, lineno);
- continue;
- }
- res->encoding = nmem_strdup (data1_nmem_get(dh), argv[1]);
- }
- else
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'", file,
- lineno, cmd);
- continue;
- }
- }
- if (f)
- fclose(f);
-
- for (cur_elements = res->sub_elements; cur_elements;
- cur_elements = cur_elements->next)
- {
- if (!strcmp (cur_elements->name, "main"))
- res->main_elements = cur_elements->elements;
- fix_element_ref (dh, res, cur_elements->elements);
- }
- yaz_log (LOG_DEBUG, "%s: data1_read_absyn end", file);
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_attset.c,v $
- * Revision 1.15 2002-04-04 20:49:46 adam
- * New functions yaz_is_abspath, yaz_path_fopen_base
- *
- * Revision 1.14 1999/11/30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.13 1999/10/21 12:06:29 adam
- * Retrieval module no longer uses ctype.h - functions.
- *
- * Revision 1.12 1999/08/27 09:40:32 adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.11 1998/10/14 13:31:56 adam
- * Bug fix. Bug introduced by previous commit.
- *
- * Revision 1.10 1998/10/13 16:09:48 adam
- * Added support for arbitrary OID's for tagsets, schemas and attribute sets.
- * Added support for multiple attribute set references and tagset references
- * from an abstract syntax file.
- * Fixed many bad logs-calls in routines that read the various
- * specifications regarding data1 (*.abs,*.att,...) and made the messages
- * consistent whenever possible.
- * Added extra 'lineno' argument to function readconf_line.
- *
- * Revision 1.9 1998/05/18 13:07:03 adam
- * Changed the way attribute sets are handled by the retriaval module.
- * Extended Explain conversion / schema.
- * Modified server and client to work with ASN.1 compiled protocol handlers.
- *
- * Revision 1.8 1998/02/11 11:53:35 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.7 1997/09/17 12:10:34 adam
- * YAZ version 1.4.
- *
- * Revision 1.6 1997/09/05 09:50:56 adam
- * Removed global data1_tabpath - uses data1_get_tabpath() instead.
- *
- * Revision 1.5 1996/05/09 07:27:43 quinn
- * Multiple local attributes values supported.
- *
- * Revision 1.4 1996/02/21 15:23:36 quinn
- * Reversed fclose and return;
- *
- * Revision 1.3 1995/12/13 17:14:26 quinn
- * *** empty log message ***
- *
- * Revision 1.2 1995/11/01 16:34:55 quinn
- * Making data1 look for tables in data1_tabpath
- *
- * Revision 1.1 1995/11/01 11:56:07 quinn
- * Added Retrieval (data management) functions en masse.
- *
- *
- */
-
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include <yaz/log.h>
-#include <yaz/d1_attset.h>
-#include <yaz/data1.h>
-
-data1_att *data1_getattbyname(data1_handle dh, data1_attset *s, char *name)
-{
- data1_att *r;
- data1_attset_child *c;
-
- /* scan local set */
- for (r = s->atts; r; r = r->next)
- if (!data1_matchstr(r->name, name))
- return r;
- for (c = s->children; c; c = c->next)
- {
- assert (c->child);
- /* scan included sets */
- if ((r = data1_getattbyname (dh, c->child, name)))
- return r;
- }
- return 0;
-}
-
-data1_attset *data1_empty_attset(data1_handle dh)
-{
- NMEM mem = data1_nmem_get (dh);
- data1_attset *res = (data1_attset*) nmem_malloc(mem,sizeof(*res));
-
- res->name = 0;
- res->reference = VAL_NONE;
- res->atts = 0;
- res->children = 0;
- res->next = 0;
- return res;
-}
-
-data1_attset *data1_read_attset(data1_handle dh, const char *file)
-{
- data1_attset *res = 0;
- data1_attset_child **childp;
- data1_att **attp;
- FILE *f;
- NMEM mem = data1_nmem_get (dh);
- int lineno = 0;
- int argc;
- char *argv[50], line[512];
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- return NULL;
- res = data1_empty_attset (dh);
-
- childp = &res->children;
- attp = &res->atts;
-
- while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- {
- char *cmd = argv[0];
- if (!strcmp(cmd, "att"))
- {
- int num;
- char *name;
- data1_att *t;
- data1_local_attribute *locals;
-
- if (argc < 3)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to att", file, lineno);
- continue;
- }
- num = atoi (argv[1]);
- name = argv[2];
-
- if (argc == 3) /* no local attributes given */
- {
- locals = (data1_local_attribute *)
- nmem_malloc(mem, sizeof(*locals));
- locals->local = num;
- locals->next = 0;
- }
- else /* parse the string "local{,local}" */
- {
- char *p = argv[3];
- data1_local_attribute **ap = &locals;
- do
- {
- *ap = (data1_local_attribute *)
- nmem_malloc(mem, sizeof(**ap));
- (*ap)->local = atoi(p);
- (*ap)->next = 0;
- ap = &(*ap)->next;
- }
- while ((p = strchr(p, ',')) && *(++p));
- }
- t = *attp = (data1_att *)nmem_malloc(mem, sizeof(*t));
- t->parent = res;
- t->name = nmem_strdup(mem, name);
- t->value = num;
- t->locals = locals;
- t->next = 0;
- attp = &t->next;
- }
- else if (!strcmp(cmd, "name"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to name", file, lineno);
- continue;
- }
- }
- else if (!strcmp(cmd, "reference"))
- {
- char *name;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to reference",
- file, lineno);
- continue;
- }
- name = argv[1];
- if ((res->reference = oid_getvalbyname(name)) == VAL_NONE)
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown reference oid '%s'",
- file, lineno, name);
- fclose(f);
- return 0;
- }
- }
- else if (!strcmp(cmd, "ordinal"))
- {
- yaz_log (LOG_WARN, "%s:%d: Directive ordinal ignored",
- file, lineno);
- }
- else if (!strcmp(cmd, "include"))
- {
- char *name;
- data1_attset *attset;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args to include",
- file, lineno);
- continue;
- }
- name = argv[1];
-
- if (!(attset = data1_get_attset (dh, name)))
- {
- yaz_log(LOG_WARN, "%s:%d: Include of attset %s failed",
- file, lineno, name);
- continue;
-
- }
- *childp = (data1_attset_child *)
- nmem_malloc (mem, sizeof(**childp));
- (*childp)->child = attset;
- (*childp)->next = 0;
- childp = &(*childp)->next;
- }
- else
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'",
- file, lineno, cmd);
- }
- }
- fclose(f);
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_doespec.c,v 1.15 2002-09-24 13:58:13 adam Exp $
- */
-
-#include <assert.h>
-
-#include <yaz/oid.h>
-#include <yaz/log.h>
-#include <yaz/proto.h>
-#include <yaz/data1.h>
-
-static int match_children(data1_handle dh, data1_node *n,
- Z_Espec1 *e, int i, Z_ETagUnit **t,
- int num);
-
-static int match_children_wildpath(data1_handle dh, data1_node *n,
- Z_Espec1 *e, int i,
- Z_ETagUnit **t, int num)
-{
- return 0;
-}
-
-/*
- * Locate a specific triple within a variant.
- * set is the set to look for, universal set is the set that applies to a
- * triple with an unknown set.
- */
-static Z_Triple *find_triple(Z_Variant *var, oid_value universalset,
- oid_value set, int zclass, int type)
-{
- int i;
- oident *defaultsetent = oid_getentbyoid(var->globalVariantSetId);
- oid_value defaultset = defaultsetent ? defaultsetent->value :
- universalset;
-
- for (i = 0; i < var->num_triples; i++)
- {
- oident *cursetent =
- oid_getentbyoid(var->triples[i]->variantSetId);
- oid_value curset = cursetent ? cursetent->value : defaultset;
-
- if (set == curset &&
- *var->triples[i]->zclass == zclass &&
- *var->triples[i]->type == type)
- return var->triples[i];
- }
- return 0;
-}
-
-static void mark_subtree(data1_node *n, int make_variantlist, int no_data,
- int get_bytes, Z_Variant *vreq)
-{
- data1_node *c;
-
-#if 1
- if (n->which == DATA1N_tag)
-#else
- if (n->which == DATA1N_tag && (!n->child || n->child->which != DATA1N_tag))
- /*
- * This seems to cause multi-level elements to fall out when only a
- * top-level elementRequest has been given... Problem is, I can't figure
- * out what it was supposed to ACHIEVE.... delete when code has been
- * verified.
- */
-#endif
- {
- n->u.tag.node_selected = 1;
- n->u.tag.make_variantlist = make_variantlist;
- n->u.tag.no_data_requested = no_data;
- n->u.tag.get_bytes = get_bytes;
- }
-
- for (c = n->child; c; c = c->next)
- {
- if (c->which == DATA1N_tag && (!n->child ||
- n->child->which != DATA1N_tag))
- {
- c->u.tag.node_selected = 1;
- c->u.tag.make_variantlist = make_variantlist;
- c->u.tag.no_data_requested = no_data;
- c->u.tag.get_bytes = get_bytes;
- }
- mark_subtree(c, make_variantlist, no_data, get_bytes, vreq);
- }
-}
-
-
-static void match_triple (data1_handle dh, Z_Variant *vreq,
- oid_value defsetval,
- oid_value var1, data1_node *n)
-{
- data1_node **c;
-
- if (!(n = n->child))
- return;
- if (n->which != DATA1N_variant)
- return;
- c = &n->child;
- while (*c)
- {
- int remove_flag = 0;
- Z_Triple *r;
-
- assert ((*c)->which == DATA1N_variant);
-
- if ((*c)->u.variant.type->zclass->zclass == 4 &&
- (*c)->u.variant.type->type == 1)
- {
- if ((r = find_triple(vreq, defsetval, var1, 4, 1)) &&
- (r->which == Z_Triple_internationalString))
- {
- const char *string_value =
- r->value.internationalString;
- if (strcmp ((*c)->u.variant.value, string_value))
- remove_flag = 1;
- }
- }
- if (remove_flag)
- {
- data1_free_tree (dh, *c);
- *c = (*c)->next;
- }
- else
- {
- match_triple (dh, vreq, defsetval, var1, *c);
- c = &(*c)->next;
- }
- }
-}
-
-static int match_children_here (data1_handle dh, data1_node *n,
- Z_Espec1 *e, int i,
- Z_ETagUnit **t, int num)
-{
- int counter = 0, hits = 0;
- data1_node *c;
- Z_ETagUnit *tp = *t;
- Z_Occurrences *occur;
-
- for (c = n->child; c ; c = c->next)
- {
- data1_tag *tag = 0;
-
- if (c->which != DATA1N_tag)
- continue;
-
- if (tp->which == Z_ETagUnit_specificTag)
- {
- Z_SpecificTag *want = tp->u.specificTag;
- occur = want->occurrences;
- if (c->u.tag.element)
- tag = c->u.tag.element->tag;
- if (*want->tagType != ((tag && tag->tagset) ? tag->tagset->type :
- 3))
- continue;
- if (want->tagValue->which == Z_StringOrNumeric_numeric)
- {
- if (!tag || tag->which != DATA1T_numeric)
- continue;
- if (*want->tagValue->u.numeric != tag->value.numeric)
- continue;
- }
- else
- {
- assert(want->tagValue->which == Z_StringOrNumeric_string);
- if (tag && tag->which != DATA1T_string)
- continue;
- if (data1_matchstr(want->tagValue->u.string,
- tag ? tag->value.string : c->u.tag.tag))
- continue;
- }
- }
- else
- occur = tp->u.wildThing;
-
- /*
- * Ok, so we have a matching tag. Are we within occurrences-range?
- */
- counter++;
- if (occur && occur->which == Z_Occurrences_last)
- {
- yaz_log(LOG_WARN, "Can't do occurrences=last (yet)");
- return 0;
- }
- if (!occur || occur->which == Z_Occurrences_all ||
- (occur->which == Z_Occurrences_values && counter >=
- *occur->u.values->start))
- {
- if (match_children(dh, c, e, i, t + 1, num - 1))
- {
- c->u.tag.node_selected = 1;
- /*
- * Consider the variant specification if this is a complete
- * match.
- */
- if (num == 1)
- {
- int show_variantlist = 0;
- int no_data = 0;
- int get_bytes = -1;
-
- Z_Variant *vreq =
- e->elements[i]->u.simpleElement->variantRequest;
- oident *defset = oid_getentbyoid(e->defaultVariantSetId);
- oid_value defsetval = defset ? defset->value : VAL_NONE;
- oid_value var1 = oid_getvalbyname("Variant-1");
-
- if (!vreq)
- vreq = e->defaultVariantRequest;
-
- if (vreq)
- {
- Z_Triple *r;
-
- /*
- * 6,5: meta-data requested, variant list.
- */
- if (find_triple(vreq, defsetval, var1, 6, 5))
- show_variantlist = 1;
- /*
- * 9,1: Miscellaneous, no data requested.
- */
- if (find_triple(vreq, defsetval, var1, 9, 1))
- no_data = 1;
-
- /* howmuch */
- if ((r = find_triple(vreq, defsetval, var1, 5, 5)))
- if (r->which == Z_Triple_integer)
- get_bytes = *r->value.integer;
-
- if (!show_variantlist)
- match_triple (dh, vreq, defsetval, var1, c);
- }
- mark_subtree(c, show_variantlist, no_data, get_bytes, vreq);
- }
- hits++;
- /*
- * have we looked at enough children?
- */
- if (!occur || (occur->which == Z_Occurrences_values &&
- (!occur->u.values->howMany ||
- counter - *occur->u.values->start >=
- *occur->u.values->howMany - 1)))
- return hits;
- }
- }
- }
- return hits;
-}
-
-static int match_children(data1_handle dh, data1_node *n, Z_Espec1 *e,
- int i, Z_ETagUnit **t, int num)
-{
- int res;
-
- if (!num)
- return 1;
- switch (t[0]->which)
- {
- case Z_ETagUnit_wildThing:
- case Z_ETagUnit_specificTag:
- res = match_children_here(dh, n, e, i, t, num); break;
- case Z_ETagUnit_wildPath:
- res = match_children_wildpath(dh, n, e, i, t, num); break;
- default:
- abort();
- }
- return res;
-}
-
-int data1_doespec1 (data1_handle dh, data1_node *n, Z_Espec1 *e)
-{
- int i;
-
- n = data1_get_root_tag (dh, n);
- if (n && n->which == DATA1N_tag)
- n->u.tag.node_selected = 1;
-
- for (i = 0; i < e->num_elements; i++)
- {
- if (e->elements[i]->which != Z_ERequest_simpleElement)
- return 100;
- match_children(dh, n, e, i,
- e->elements[i]->u.simpleElement->path->tags,
- e->elements[i]->u.simpleElement->path->num_tags);
- }
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_espec.c,v 1.22 2002-05-03 13:48:27 adam Exp $
- */
-
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-
-#include <yaz/odr.h>
-#include <yaz/proto.h>
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-static Z_Variant *read_variant(int argc, char **argv, NMEM nmem,
- const char *file, int lineno)
-{
- Z_Variant *r = (Z_Variant *)nmem_malloc(nmem, sizeof(*r));
- oident var1;
- int i;
- int oid[OID_SIZE];
-
- var1.proto = PROTO_Z3950;
- var1.oclass = CLASS_VARSET;
- var1.value = VAL_VAR1;
- r->globalVariantSetId = odr_oiddup_nmem(nmem, oid_ent_to_oid(&var1, oid));
-
- if (argc)
- r->triples = (Z_Triple **)nmem_malloc(nmem, sizeof(Z_Triple*) * argc);
- else
- r->triples = 0;
- r->num_triples = argc;
- for (i = 0; i < argc; i++)
- {
- int zclass, type;
- char value[512];
- Z_Triple *t;
-
- if (sscanf(argv[i], "(%d,%d,%511[^)])", &zclass, &type, value) < 3)
- {
- yaz_log(LOG_WARN, "%s:%d: Syntax error in variant component '%s'",
- file, lineno, argv[i]);
- return 0;
- }
- t = r->triples[i] = (Z_Triple *)nmem_malloc(nmem, sizeof(Z_Triple));
- t->variantSetId = 0;
- t->zclass = (int *)nmem_malloc(nmem, sizeof(int));
- *t->zclass = zclass;
- t->type = (int *)nmem_malloc(nmem, sizeof(int));
- *t->type = type;
- /*
- * This is wrong.. we gotta look up the correct type for the
- * variant, I guess... damn this stuff.
- */
- if (*value == '@')
- {
- t->which = Z_Triple_null;
- t->value.null = odr_nullval();
- }
- else if (d1_isdigit(*value))
- {
- t->which = Z_Triple_integer;
- t->value.integer = (int *)
- nmem_malloc(nmem, sizeof(*t->value.integer));
- *t->value.integer = atoi(value);
- }
- else
- {
- t->which = Z_Triple_internationalString;
- t->value.internationalString = (char *)
- nmem_malloc(nmem, strlen(value)+1);
- strcpy(t->value.internationalString, value);
- }
- }
- return r;
-}
-
-static Z_Occurrences *read_occurrences(char *occ, NMEM nmem,
- const char *file, int lineno)
-{
- Z_Occurrences *op = (Z_Occurrences *)nmem_malloc(nmem, sizeof(*op));
- char *p;
-
- if (!occ)
- {
- op->which = Z_Occurrences_values;
- op->u.values = (Z_OccurValues *)
- nmem_malloc(nmem, sizeof(Z_OccurValues));
- op->u.values->start = (int *)nmem_malloc(nmem, sizeof(int));
- *op->u.values->start = 1;
- op->u.values->howMany = 0;
- }
- else if (!strcmp(occ, "all"))
- {
- op->which = Z_Occurrences_all;
- op->u.all = odr_nullval();
- }
- else if (!strcmp(occ, "last"))
- {
- op->which = Z_Occurrences_last;
- op->u.all = odr_nullval();
- }
- else
- {
- Z_OccurValues *ov = (Z_OccurValues *)nmem_malloc(nmem, sizeof(*ov));
-
- if (!d1_isdigit(*occ))
- {
- yaz_log(LOG_WARN, "%s:%d: Bad occurrences-spec %s",
- file, lineno, occ);
- return 0;
- }
- op->which = Z_Occurrences_values;
- op->u.values = ov;
- ov->start = (int *)nmem_malloc(nmem, sizeof(*ov->start));
- *ov->start = atoi(occ);
- if ((p = strchr(occ, '+')))
- {
- ov->howMany = (int *)nmem_malloc(nmem, sizeof(*ov->howMany));
- *ov->howMany = atoi(p + 1);
- }
- else
- ov->howMany = 0;
- }
- return op;
-}
-
-
-static Z_ETagUnit *read_tagunit(char *buf, NMEM nmem,
- const char *file, int lineno)
-{
- Z_ETagUnit *u = (Z_ETagUnit *)nmem_malloc(nmem, sizeof(*u));
- int terms;
- int type;
- char value[512], occ[512];
-
- if (*buf == '*')
- {
- u->which = Z_ETagUnit_wildPath;
- u->u.wildPath = odr_nullval();
- }
- else if (*buf == '?')
- {
- u->which = Z_ETagUnit_wildThing;
- if (buf[1] == ':')
- u->u.wildThing = read_occurrences(buf+2, nmem, file, lineno);
- else
- u->u.wildThing = read_occurrences(0, nmem, file, lineno);
- }
- else if ((terms = sscanf(buf, "(%d,%511[^)]):%511[a-zA-Z0-9+]",
- &type, value, occ)) >= 2)
- {
- int numval;
- Z_SpecificTag *t;
- char *valp = value;
- int force_string = 0;
-
- if (*valp == '\'')
- {
- valp++;
- force_string = 1;
- }
- u->which = Z_ETagUnit_specificTag;
- u->u.specificTag = t = (Z_SpecificTag *)nmem_malloc(nmem, sizeof(*t));
- t->tagType = (int *)nmem_malloc(nmem, sizeof(*t->tagType));
- *t->tagType = type;
- t->tagValue = (Z_StringOrNumeric *)
- nmem_malloc(nmem, sizeof(*t->tagValue));
- if (!force_string && (numval = atoi(valp)))
- {
- t->tagValue->which = Z_StringOrNumeric_numeric;
- t->tagValue->u.numeric = (int *)nmem_malloc(nmem, sizeof(int));
- *t->tagValue->u.numeric = numval;
- }
- else
- {
- t->tagValue->which = Z_StringOrNumeric_string;
- t->tagValue->u.string = (char *)nmem_malloc(nmem, strlen(valp)+1);
- strcpy(t->tagValue->u.string, valp);
- }
- if (terms > 2) /* an occurrences-spec exists */
- t->occurrences = read_occurrences(occ, nmem, file, lineno);
- else
- t->occurrences = 0;
- }
- return u;
-}
-
-/*
- * Read an element-set specification from a file.
- * NOTE: If !o, memory is allocated directly from the heap by nmem_malloc().
- */
-Z_Espec1 *data1_read_espec1 (data1_handle dh, const char *file)
-{
- FILE *f;
- NMEM nmem = data1_nmem_get (dh);
- int lineno = 0;
- int argc, size_esn = 0;
- char *argv[50], line[512];
- Z_Espec1 *res = (Z_Espec1 *)nmem_malloc(nmem, sizeof(*res));
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- {
- yaz_log(LOG_WARN|LOG_ERRNO, "%s", file);
- return 0;
- }
-
- res->num_elementSetNames = 0;
- res->elementSetNames = 0;
- res->defaultVariantSetId = 0;
- res->defaultVariantRequest = 0;
- res->defaultTagType = 0;
- res->num_elements = 0;
- res->elements = 0;
-
- while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- if (!strcmp(argv[0], "elementsetnames"))
- {
- int nnames = argc-1, i;
-
- if (!nnames)
- {
- yaz_log(LOG_WARN, "%s:%d: Empty elementsetnames directive",
- file, lineno);
- continue;
- }
-
- res->elementSetNames =
- (char **)nmem_malloc(nmem, sizeof(char**)*nnames);
- for (i = 0; i < nnames; i++)
- {
- res->elementSetNames[i] = (char *)
- nmem_malloc(nmem, strlen(argv[i+1])+1);
- strcpy(res->elementSetNames[i], argv[i+1]);
- }
- res->num_elementSetNames = nnames;
- }
- else if (!strcmp(argv[0], "defaultvariantsetid"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args for %s",
- file, lineno, argv[0]);
- continue;
- }
- if (!(res->defaultVariantSetId =
- odr_getoidbystr_nmem(nmem, argv[1])))
- {
- yaz_log(LOG_WARN, "%s:%d: Bad defaultvariantsetid",
- file, lineno);
- continue;
- }
- }
- else if (!strcmp(argv[0], "defaulttagtype"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args for %s",
- file, lineno, argv[0]);
- continue;
- }
- res->defaultTagType = (int *)nmem_malloc(nmem, sizeof(int));
- *res->defaultTagType = atoi(argv[1]);
- }
- else if (!strcmp(argv[0], "defaultvariantrequest"))
- {
- if (!(res->defaultVariantRequest =
- read_variant(argc-1, argv+1, nmem, file, lineno)))
- {
- yaz_log(LOG_WARN, "%s:%d: Bad defaultvariantrequest",
- file, lineno);
- continue;
- }
- }
- else if (!strcmp(argv[0], "simpleelement"))
- {
- Z_ElementRequest *er;
- Z_SimpleElement *se;
- Z_ETagPath *tp;
- char *path = argv[1];
- char *ep;
- int num, i = 0;
-
- if (!res->elements)
- res->elements = (Z_ElementRequest **)
- nmem_malloc(nmem, size_esn = 24*sizeof(er));
- else if (res->num_elements >= (int) (size_esn/sizeof(er)))
- {
- Z_ElementRequest **oe = res->elements;
- size_esn *= 2;
- res->elements = (Z_ElementRequest **)
- nmem_malloc (nmem, size_esn*sizeof(er));
- memcpy (res->elements, oe, size_esn/2);
- }
- if (argc < 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args for %s",
- file, lineno, argv[0]);
- continue;
- }
-
- res->elements[res->num_elements++] = er =
- (Z_ElementRequest *)nmem_malloc(nmem, sizeof(*er));
- er->which = Z_ERequest_simpleElement;
- er->u.simpleElement = se = (Z_SimpleElement *)
- nmem_malloc(nmem, sizeof(*se));
- se->variantRequest = 0;
- se->path = tp = (Z_ETagPath *)nmem_malloc(nmem, sizeof(*tp));
- tp->num_tags = 0;
- /*
- * Parse the element selector.
- */
- for (num = 1, ep = path; (ep = strchr(ep, '/')); num++, ep++)
- ;
- tp->tags = (Z_ETagUnit **)
- nmem_malloc(nmem, sizeof(Z_ETagUnit*)*num);
-
- for ((ep = strchr(path, '/')) ; path ;
- (void)((path = ep) && (ep = strchr(path, '/'))))
- {
- Z_ETagUnit *tagunit;
- if (ep)
- ep++;
-
- assert(i<num);
- tagunit = read_tagunit(path, nmem, file, lineno);
- if (!tagunit)
- {
- yaz_log (LOG_WARN, "%s%d: Bad tag unit at %s",
- file, lineno, path);
- break;
- }
- tp->tags[tp->num_tags++] = tagunit;
- }
-
- if (argc > 2 && !strcmp(argv[2], "variant"))
- se->variantRequest=
- read_variant(argc-3, argv+3, nmem, file, lineno);
- }
- else
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'",
- file, lineno, argv[0]);
- fclose (f);
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_expout.c,v $
- * Revision 1.17 1999-11-30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.16 1999/08/27 09:40:32 adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.15 1998/09/28 12:44:40 adam
- * Fixed bug in f_integer.
- *
- * Revision 1.14 1998/06/08 14:26:41 adam
- * Fixed bug in f_queryTypeDetails.
- *
- * Revision 1.13 1998/06/05 08:58:48 adam
- * Fixed un-initialised var in f_rpnCapabilities.
- *
- * Revision 1.12 1998/05/18 13:07:04 adam
- * Changed the way attribute sets are handled by the retriaval module.
- * Extended Explain conversion / schema.
- * Modified server and client to work with ASN.1 compiled protocol handlers.
- *
- * Revision 1.11 1998/04/02 08:27:37 adam
- * Minor change in definition of Z_TargetInfo. Furhter work on Explain
- * schema - added AttributeDetails.
- *
- * Revision 1.10 1998/03/31 15:13:20 adam
- * Development towards compiled ASN.1.
- *
- * Revision 1.9 1998/03/05 08:07:58 adam
- * Make data1 to EXPLAIN ignore local tags in root.
- *
- * Revision 1.8 1998/02/11 11:53:35 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.7 1997/12/09 16:18:16 adam
- * Work on EXPLAIN schema. First implementation of sub-schema facility
- * in the *.abs files.
- *
- * Revision 1.6 1997/11/24 11:33:56 adam
- * Using function odr_nullval() instead of global ODR_NULLVAL when
- * appropriate.
- *
- * Revision 1.5 1997/11/19 10:30:06 adam
- * More explain work.
- *
- * Revision 1.4 1997/11/18 09:51:08 adam
- * Removed element num_children from data1_node. Minor changes in
- * data1 to Explain.
- *
- * Revision 1.3 1997/09/17 12:10:36 adam
- * YAZ version 1.4.
- *
- * Revision 1.2 1995/12/14 16:28:30 quinn
- * More explain stuff.
- *
- * Revision 1.1 1995/12/14 11:09:51 quinn
- * Work on Explain
- *
- *
- */
-
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <yaz/log.h>
-#include <yaz/proto.h>
-#include <yaz/data1.h>
-
-typedef struct {
- data1_handle dh;
- ODR o;
- int select;
-
- bool_t *false_value;
- bool_t *true_value;
-} ExpHandle;
-
-static int is_numeric_tag (ExpHandle *eh, data1_node *c)
-{
- if (!c || c->which != DATA1N_tag)
- return 0;
- if (!c->u.tag.element)
- {
- yaz_log(LOG_WARN, "Tag %s is local", c->u.tag.tag);
- return 0;
- }
- if (c->u.tag.element->tag->which != DATA1T_numeric)
- {
- yaz_log(LOG_WARN, "Tag %s is not numeric", c->u.tag.tag);
- return 0;
- }
- if (eh->select && !c->u.tag.node_selected)
- return 0;
- return c->u.tag.element->tag->value.numeric;
-}
-
-static int is_data_tag (ExpHandle *eh, data1_node *c)
-{
- if (!c || c->which != DATA1N_data)
- return 0;
- if (eh->select && !c->u.tag.node_selected)
- return 0;
- return 1;
-}
-
-static int *f_integer(ExpHandle *eh, data1_node *c)
-{
- int *r;
- char intbuf[64];
-
- c = c->child;
- if (!is_data_tag (eh, c) || c->u.data.len > 63)
- return 0;
- r = (int *)odr_malloc(eh->o, sizeof(*r));
- sprintf(intbuf, "%.*s", c->u.data.len, c->u.data.data);
- *r = atoi(intbuf);
- return r;
-}
-
-static char *f_string(ExpHandle *eh, data1_node *c)
-{
- char *r;
-
- c = c->child;
- if (!is_data_tag (eh, c))
- return 0;
- r = (char *)odr_malloc(eh->o, c->u.data.len+1);
- memcpy(r, c->u.data.data, c->u.data.len);
- r[c->u.data.len] = '\0';
- return r;
-}
-
-static bool_t *f_bool(ExpHandle *eh, data1_node *c)
-{
- bool_t *tf;
- char intbuf[64];
-
- c = c->child;
- if (!is_data_tag (eh, c) || c->u.data.len > 63)
- return 0;
- tf = (int *)odr_malloc (eh->o, sizeof(*tf));
- sprintf(intbuf, "%.*s", c->u.data.len, c->u.data.data);
- *tf = atoi(intbuf);
- return tf;
-}
-
-static Odr_oid *f_oid(ExpHandle *eh, data1_node *c, oid_class oclass)
-{
- char oidstr[64];
- int oid_this[20];
- oid_value value_for_this;
-
- c = c->child;
- if (!is_data_tag (eh, c) || c->u.data.len > 63)
- return 0;
- sprintf(oidstr, "%.*s", c->u.data.len, c->u.data.data);
- value_for_this = oid_getvalbyname(oidstr);
- if (value_for_this == VAL_NONE)
- {
- Odr_oid *oid = odr_getoidbystr(eh->o, oidstr);
- assert (oid);
- return oid;
- }
- else
- {
- struct oident ident;
-
- ident.oclass = oclass;
- ident.proto = PROTO_Z3950;
- ident.value = value_for_this;
-
- oid_ent_to_oid (&ident, oid_this);
- }
- return odr_oiddup (eh->o, oid_this);
-}
-
-static Z_IntUnit *f_intunit(ExpHandle *eh, data1_node *c)
-{
- /* fix */
- return 0;
-}
-
-static Z_HumanString *f_humstring(ExpHandle *eh, data1_node *c)
-{
- Z_HumanString *r;
- Z_HumanStringUnit *u;
-
- c = c->child;
- if (!is_data_tag (eh, c))
- return 0;
- r = (Z_HumanString *)odr_malloc(eh->o, sizeof(*r));
- r->num_strings = 1;
- r->strings = (Z_HumanStringUnit **)odr_malloc(eh->o, sizeof(Z_HumanStringUnit*));
- r->strings[0] = u = (Z_HumanStringUnit *)odr_malloc(eh->o, sizeof(*u));
- u->language = 0;
- u->text = (char *)odr_malloc(eh->o, c->u.data.len+1);
- memcpy(u->text, c->u.data.data, c->u.data.len);
- u->text[c->u.data.len] = '\0';
- return r;
-}
-
-static Z_CommonInfo *f_commonInfo(ExpHandle *eh, data1_node *n)
-{
- Z_CommonInfo *res = (Z_CommonInfo *)odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->dateAdded = 0;
- res->dateChanged = 0;
- res->expiry = 0;
- res->humanStringLanguage = 0;
- res->otherInfo = 0;
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 601: res->dateAdded = f_string(eh, c); break;
- case 602: res->dateChanged = f_string(eh, c); break;
- case 603: res->expiry = f_string(eh, c); break;
- case 604: res->humanStringLanguage = f_string(eh, c); break;
- }
- }
- return res;
-}
-
-Odr_oid **f_oid_seq (ExpHandle *eh, data1_node *n, int *num, oid_class oclass)
-{
- Odr_oid **res;
- data1_node *c;
- int i;
-
- *num = 0;
- for (c = n->child ; c; c = c->next)
- if (is_numeric_tag (eh, c) == 1000)
- ++(*num);
- if (!*num)
- return NULL;
- res = (int **)odr_malloc (eh->o, sizeof(*res) * (*num));
- for (c = n->child, i = 0 ; c; c = c->next)
- if (is_numeric_tag (eh, c) == 1000)
- res[i++] = f_oid (eh, c, oclass);
- return res;
-}
-
-char **f_string_seq (ExpHandle *eh, data1_node *n, int *num)
-{
- char **res;
- data1_node *c;
- int i;
-
- *num = 0;
- for (c = n->child ; c; c = c->next)
- {
- if (is_numeric_tag (eh, c) != 1001)
- continue;
- ++(*num);
- }
- if (!*num)
- return NULL;
- res = (char **)odr_malloc (eh->o, sizeof(*res) * (*num));
- for (c = n->child, i = 0 ; c; c = c->next)
- {
- if (is_numeric_tag (eh, c) != 1001)
- continue;
- res[i++] = f_string (eh, c);
- }
- return res;
-}
-
-Z_ProximitySupport *f_proximitySupport (ExpHandle *eh, data1_node *n)
-{
- Z_ProximitySupport *res = (Z_ProximitySupport *)
- odr_malloc (eh->o, sizeof(*res));
- res->anySupport = eh->false_value;
- res->num_unitsSupported = 0;
- res->unitsSupported = 0;
- return res;
-}
-
-Z_RpnCapabilities *f_rpnCapabilities (ExpHandle *eh, data1_node *n)
-{
- Z_RpnCapabilities *res = (Z_RpnCapabilities *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->num_operators = 0;
- res->operators = NULL;
- res->resultSetAsOperandSupported = eh->false_value;
- res->restrictionOperandSupported = eh->false_value;
- res->proximity = NULL;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag(eh, c))
- {
- case 550:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 551)
- continue;
- (res->num_operators)++;
- }
- if (res->num_operators)
- res->operators = (int **)
- odr_malloc (eh->o, res->num_operators
- * sizeof(*res->operators));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 551)
- continue;
- res->operators[i++] = f_integer (eh, n);
- }
- break;
- case 552:
- res->resultSetAsOperandSupported = f_bool (eh, c);
- break;
- case 553:
- res->restrictionOperandSupported = f_bool (eh, c);
- break;
- case 554:
- res->proximity = f_proximitySupport (eh, c);
- break;
- }
- }
- return res;
-}
-
-Z_QueryTypeDetails *f_queryTypeDetails (ExpHandle *eh, data1_node *n)
-{
- Z_QueryTypeDetails *res = (Z_QueryTypeDetails *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->which = Z_QueryTypeDetails_rpn;
- res->u.rpn = 0;
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag(eh, c))
- {
- case 519:
- res->which = Z_QueryTypeDetails_rpn;
- res->u.rpn = f_rpnCapabilities (eh, c);
- break;
- case 520:
- break;
- case 521:
- break;
- }
- }
- return res;
-}
-
-static Z_AccessInfo *f_accessInfo(ExpHandle *eh, data1_node *n)
-{
- Z_AccessInfo *res = (Z_AccessInfo *)odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->num_queryTypesSupported = 0;
- res->queryTypesSupported = 0;
- res->num_diagnosticsSets = 0;
- res->diagnosticsSets = 0;
- res->num_attributeSetIds = 0;
- res->attributeSetIds = 0;
- res->num_schemas = 0;
- res->schemas = 0;
- res->num_recordSyntaxes = 0;
- res->recordSyntaxes = 0;
- res->num_resourceChallenges = 0;
- res->resourceChallenges = 0;
- res->restrictedAccess = 0;
- res->costInfo = 0;
- res->num_variantSets = 0;
- res->variantSets = 0;
- res->num_elementSetNames = 0;
- res->elementSetNames = 0;
- res->num_unitSystems = 0;
- res->unitSystems = 0;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 501:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 518)
- continue;
- (res->num_queryTypesSupported)++;
- }
- if (res->num_queryTypesSupported)
- res->queryTypesSupported =
- (Z_QueryTypeDetails **)
- odr_malloc (eh->o, res->num_queryTypesSupported
- * sizeof(*res->queryTypesSupported));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 518)
- continue;
- res->queryTypesSupported[i++] = f_queryTypeDetails (eh, n);
- }
- break;
- case 503:
- res->diagnosticsSets =
- f_oid_seq(eh, c, &res->num_diagnosticsSets, CLASS_DIAGSET);
- break;
- case 505:
- res->attributeSetIds =
- f_oid_seq(eh, c, &res->num_attributeSetIds, CLASS_ATTSET);
- break;
- case 507:
- res->schemas =
- f_oid_seq(eh, c, &res->num_schemas, CLASS_SCHEMA);
- break;
- case 509:
- res->recordSyntaxes =
- f_oid_seq (eh, c, &res->num_recordSyntaxes, CLASS_RECSYN);
- break;
- case 511:
- res->resourceChallenges =
- f_oid_seq (eh, c, &res->num_resourceChallenges, CLASS_RESFORM);
- break;
- case 513: res->restrictedAccess = NULL; break; /* fix */
- case 514: res->costInfo = NULL; break; /* fix */
- case 515:
- res->variantSets =
- f_oid_seq (eh, c, &res->num_variantSets, CLASS_VARSET);
- break;
- case 516:
- res->elementSetNames =
- f_string_seq (eh, c, &res->num_elementSetNames);
- break;
- case 517:
- res->unitSystems = f_string_seq (eh, c, &res->num_unitSystems);
- break;
- }
- }
- return res;
-}
-
-static int *f_recordCount(ExpHandle *eh, data1_node *c, int *which)
-{
- int *r= (int *)odr_malloc(eh->o, sizeof(*r));
- int *wp = which;
- char intbuf[64];
-
- c = c->child;
- if (!is_numeric_tag (eh, c))
- return 0;
- if (c->u.tag.element->tag->value.numeric == 210)
- *wp = Z_DatabaseInfo_actualNumber;
- else if (c->u.tag.element->tag->value.numeric == 211)
- *wp = Z_DatabaseInfo_approxNumber;
- else
- return 0;
- if (!c->child || c->child->which != DATA1N_data)
- return 0;
- sprintf(intbuf, "%.*s", c->child->u.data.len, c->child->u.data.data);
- *r = atoi(intbuf);
- return r;
-}
-
-static Z_ContactInfo *f_contactInfo(ExpHandle *eh, data1_node *n)
-{
- Z_ContactInfo *res = (Z_ContactInfo *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->name = 0;
- res->description = 0;
- res->address = 0;
- res->email = 0;
- res->phone = 0;
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 102: res->name = f_string (eh, c); break;
- case 113: res->description = f_humstring (eh, c); break;
- case 127: res->address = f_humstring (eh, c); break;
- case 128: res->email = f_string (eh, c); break;
- case 129: res->phone = f_string (eh, c); break;
- }
- }
- return res;
-}
-
-static Z_DatabaseList *f_databaseList(ExpHandle *eh, data1_node *n)
-{
- data1_node *c;
- Z_DatabaseList *res;
- int i = 0;
-
- for (c = n->child; c; c = c->next)
- {
- if (!is_numeric_tag (eh, c) != 102)
- continue;
- ++i;
- }
- if (!i)
- return NULL;
-
- res = (Z_DatabaseList *)odr_malloc (eh->o, sizeof(*res));
-
- res->num_databases = i;
- res->databases = (char **)odr_malloc (eh->o, sizeof(*res->databases) * i);
- i = 0;
- for (c = n->child; c; c = c->next)
- {
- if (!is_numeric_tag (eh, c) != 102)
- continue;
- res->databases[i++] = f_string (eh, c);
- }
- return res;
-}
-
-static Z_NetworkAddressIA *f_networkAddressIA(ExpHandle *eh, data1_node *n)
-{
- Z_NetworkAddressIA *res = (Z_NetworkAddressIA *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->hostAddress = 0;
- res->port = 0;
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 121: res->hostAddress = f_string (eh, c); break;
- case 122: res->port = f_integer (eh, c); break;
- }
- }
- return res;
-}
-
-static Z_NetworkAddressOther *f_networkAddressOther(ExpHandle *eh,
- data1_node *n)
-{
- Z_NetworkAddressOther *res = (Z_NetworkAddressOther *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->type = 0;
- res->address = 0;
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 124: res->type = f_string (eh, c); break;
- case 121: res->address = f_string (eh, c); break;
- }
- }
- return res;
-}
-
-static Z_NetworkAddress **f_networkAddresses(ExpHandle *eh, data1_node *n,
- int *num)
-{
- Z_NetworkAddress **res = NULL;
- data1_node *c;
- int i = 0;
-
- *num = 0;
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 120:
- case 123:
- (*num)++;
- break;
- }
- }
-
- if (*num)
- res = (Z_NetworkAddress **) odr_malloc (eh->o, sizeof(*res) * (*num));
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 120:
- res[i] = (Z_NetworkAddress *) odr_malloc (eh->o, sizeof(**res));
- res[i]->which = Z_NetworkAddress_iA;
- res[i]->u.internetAddress = f_networkAddressIA(eh, c);
- i++;
- break;
- case 123:
- res[i] = (Z_NetworkAddress *) odr_malloc (eh->o, sizeof(**res));
- res[i]->which = Z_NetworkAddress_other;
- res[i]->u.other = f_networkAddressOther(eh, c);
- i++;
- break;
- }
- }
- return res;
-}
-
-static Z_CategoryInfo *f_categoryInfo(ExpHandle *eh, data1_node *n)
-{
- Z_CategoryInfo *res = (Z_CategoryInfo *)odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->category = 0;
- res->originalCategory = 0;
- res->description = 0;
- res->asn1Module = 0;
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 102: res->category = f_string(eh, c); break;
- case 302: res->originalCategory = f_string(eh, c); break;
- case 113: res->description = f_humstring(eh, c); break;
- case 303: res->asn1Module = f_string (eh, c); break;
- }
- }
- return res;
-}
-
-static Z_CategoryList *f_categoryList(ExpHandle *eh, data1_node *n)
-{
- Z_CategoryList *res = (Z_CategoryList *)odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->commonInfo = 0;
- res->num_categories = 0;
- res->categories = NULL;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
-
- switch (is_numeric_tag (eh, c))
- {
- case 600: res->commonInfo = f_commonInfo(eh, c); break;
- case 300:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 301)
- continue;
- (res->num_categories)++;
- }
- if (res->num_categories)
- res->categories =
- (Z_CategoryInfo **)odr_malloc (eh->o, res->num_categories
- * sizeof(*res->categories));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 301)
- continue;
- res->categories[i++] = f_categoryInfo (eh, n);
- }
- break;
- }
- }
- assert (res->num_categories && res->categories);
- return res;
-}
-
-static Z_TargetInfo *f_targetInfo(ExpHandle *eh, data1_node *n)
-{
- Z_TargetInfo *res = (Z_TargetInfo *)odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->commonInfo = 0;
- res->name = 0;
- res->recentNews = 0;
- res->icon = 0;
- res->namedResultSets = 0;
- res->multipleDBsearch = 0;
- res->maxResultSets = 0;
- res->maxResultSize = 0;
- res->maxTerms = 0;
- res->timeoutInterval = 0;
- res->welcomeMessage = 0;
- res->contactInfo = 0;
- res->description = 0;
- res->num_nicknames = 0;
- res->nicknames = 0;
- res->usageRest = 0;
- res->paymentAddr = 0;
- res->hours = 0;
- res->num_dbCombinations = 0;
- res->dbCombinations = 0;
- res->num_addresses = 0;
- res->addresses = 0;
- res->num_languages = 0;
- res->languages = NULL;
- res->commonAccessInfo = 0;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
-
- switch (is_numeric_tag (eh, c))
- {
- case 600: res->commonInfo = f_commonInfo(eh, c); break;
- case 102: res->name = f_string(eh, c); break;
- case 103: res->recentNews = f_humstring(eh, c); break;
- case 104: res->icon = NULL; break; /* fix */
- case 105: res->namedResultSets = f_bool(eh, c); break;
- case 106: res->multipleDBsearch = f_bool(eh, c); break;
- case 107: res->maxResultSets = f_integer(eh, c); break;
- case 108: res->maxResultSize = f_integer(eh, c); break;
- case 109: res->maxTerms = f_integer(eh, c); break;
- case 110: res->timeoutInterval = f_intunit(eh, c); break;
- case 111: res->welcomeMessage = f_humstring(eh, c); break;
- case 112: res->contactInfo = f_contactInfo(eh, c); break;
- case 113: res->description = f_humstring(eh, c); break;
- case 114:
- res->num_nicknames = 0;
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 102)
- continue;
- (res->num_nicknames)++;
- }
- if (res->num_nicknames)
- res->nicknames =
- (char **)odr_malloc (eh->o, res->num_nicknames
- * sizeof(*res->nicknames));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 102)
- continue;
- res->nicknames[i++] = f_string (eh, n);
- }
- break;
- case 115: res->usageRest = f_humstring(eh, c); break;
- case 116: res->paymentAddr = f_humstring(eh, c); break;
- case 117: res->hours = f_humstring(eh, c); break;
- case 118:
- res->num_dbCombinations = 0;
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) != 605)
- continue;
- (res->num_dbCombinations)++;
- }
- if (res->num_dbCombinations)
- res->dbCombinations =
- (Z_DatabaseList **)odr_malloc (eh->o, res->num_dbCombinations
- * sizeof(*res->dbCombinations));
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) != 605)
- continue;
- res->dbCombinations[i++] = f_databaseList (eh, n);
- }
- break;
- case 119:
- res->addresses =
- f_networkAddresses (eh, c, &res->num_addresses);
- break;
- case 125:
- res->num_languages = 0;
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) != 126)
- continue;
- (res->num_languages)++;
- }
- if (res->num_languages)
- res->languages = (char **)
- odr_malloc (eh->o, res->num_languages *
- sizeof(*res->languages));
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) != 126)
- continue;
- res->languages[i++] = f_string (eh, n);
- }
- break;
- case 500: res->commonAccessInfo = f_accessInfo(eh, c); break;
- }
- }
- if (!res->namedResultSets)
- res->namedResultSets = eh->false_value;
- if (!res->multipleDBsearch)
- res->multipleDBsearch = eh->false_value;
- return res;
-}
-
-static Z_DatabaseInfo *f_databaseInfo(ExpHandle *eh, data1_node *n)
-{
- Z_DatabaseInfo *res = (Z_DatabaseInfo *)odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->commonInfo = 0;
- res->name = 0;
- res->explainDatabase = 0;
- res->num_nicknames = 0;
- res->nicknames = 0;
- res->icon = 0;
- res->userFee = 0;
- res->available = 0;
- res->titleString = 0;
- res->num_keywords = 0;
- res->keywords = 0;
- res->description = 0;
- res->associatedDbs = 0;
- res->subDbs = 0;
- res->disclaimers = 0;
- res->news = 0;
- res->u.actualNumber = 0;
- res->defaultOrder = 0;
- res->avRecordSize = 0;
- res->maxRecordSize = 0;
- res->hours = 0;
- res->bestTime = 0;
- res->lastUpdate = 0;
- res->updateInterval = 0;
- res->coverage = 0;
- res->proprietary = 0;
- res->copyrightText = 0;
- res->copyrightNotice = 0;
- res->producerContactInfo = 0;
- res->supplierContactInfo = 0;
- res->submissionContactInfo = 0;
- res->accessInfo = 0;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
-
- switch (is_numeric_tag (eh, c))
- {
- case 600: res->commonInfo = f_commonInfo(eh, c); break;
- case 102: res->name = f_string(eh, c); break;
- case 226: res->explainDatabase = odr_nullval(); break;
- case 114:
- res->num_nicknames = 0;
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) ||
- n->u.tag.element->tag->value.numeric != 102)
- continue;
- (res->num_nicknames)++;
- }
- if (res->num_nicknames)
- res->nicknames =
- (char **)odr_malloc (eh->o, res->num_nicknames
- * sizeof(*res->nicknames));
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) ||
- n->u.tag.element->tag->value.numeric != 102)
- continue;
- res->nicknames[i++] = f_string (eh, n);
- }
- break;
- case 104: res->icon = 0; break; /* fix */
- case 201: res->userFee = f_bool(eh, c); break;
- case 202: res->available = f_bool(eh, c); break;
- case 203: res->titleString = f_humstring(eh, c); break;
- case 227:
- res->num_keywords = 0;
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) != 1000)
- continue;
- (res->num_keywords)++;
- }
- if (res->num_keywords)
- res->keywords =
- (Z_HumanString **)odr_malloc (eh->o, res->num_keywords
- * sizeof(*res->keywords));
- for (n = c->child; n; n = n->next)
- {
- if (!is_numeric_tag(eh, n) != 1000)
- continue;
- res->keywords[i++] = f_humstring (eh, n);
- }
- break;
- case 113: res->description = f_humstring(eh, c); break;
- case 205:
- res->associatedDbs = f_databaseList (eh, c);
- break;
- case 206:
- res->subDbs = f_databaseList (eh, c);
- break;
- case 207: res->disclaimers = f_humstring(eh, c); break;
- case 103: res->news = f_humstring(eh, c); break;
- case 209: res->u.actualNumber =
- f_recordCount(eh, c, &res->which); break;
- case 212: res->defaultOrder = f_humstring(eh, c); break;
- case 213: res->avRecordSize = f_integer(eh, c); break;
- case 214: res->maxRecordSize = f_integer(eh, c); break;
- case 215: res->hours = f_humstring(eh, c); break;
- case 216: res->bestTime = f_humstring(eh, c); break;
- case 217: res->lastUpdate = f_string(eh, c); break;
- case 218: res->updateInterval = f_intunit(eh, c); break;
- case 219: res->coverage = f_humstring(eh, c); break;
- case 220: res->proprietary = f_bool(eh, c); break;
- case 221: res->copyrightText = f_humstring(eh, c); break;
- case 222: res->copyrightNotice = f_humstring(eh, c); break;
- case 223: res->producerContactInfo = f_contactInfo(eh, c); break;
- case 224: res->supplierContactInfo = f_contactInfo(eh, c); break;
- case 225: res->submissionContactInfo = f_contactInfo(eh, c); break;
- case 500: res->accessInfo = f_accessInfo(eh, c); break;
- }
- }
- if (!res->userFee)
- res->userFee = eh->false_value;
- if (!res->available)
- res->available = eh->true_value;
- return res;
-}
-
-Z_StringOrNumeric *f_stringOrNumeric (ExpHandle *eh, data1_node *n)
-{
- Z_StringOrNumeric *res = (Z_StringOrNumeric *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 1001:
- res->which = Z_StringOrNumeric_string;
- res->u.string = f_string (eh, c);
- break;
- case 1002:
- res->which = Z_StringOrNumeric_numeric;
- res->u.numeric = f_integer (eh, c);
- break;
- }
- }
- return res;
-}
-
-Z_AttributeDescription *f_attributeDescription (
- ExpHandle *eh, data1_node *n)
-{
- Z_AttributeDescription *res = (Z_AttributeDescription *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
- int i = 0;
-
- res->name = 0;
- res->description = 0;
- res->attributeValue = 0;
- res->num_equivalentAttributes = 0;
- res->equivalentAttributes = 0;
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 102: res->name = f_string (eh, c); break;
- case 113: res->description = f_humstring (eh, c); break;
- case 710: res->attributeValue = f_stringOrNumeric (eh, c); break;
- case 752: (res->num_equivalentAttributes++); break;
- }
- }
- if (res->num_equivalentAttributes)
- res->equivalentAttributes = (Z_StringOrNumeric **)
- odr_malloc (eh->o, sizeof(*res->equivalentAttributes) *
- res->num_equivalentAttributes);
- for (c = n->child; c; c = c->next)
- if (is_numeric_tag (eh, c) == 752)
- res->equivalentAttributes[i++] = f_stringOrNumeric (eh, c);
- return res;
-}
-
-Z_AttributeType *f_attributeType (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeType *res = (Z_AttributeType *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->name = 0;
- res->description = 0;
- res->attributeType = 0;
- res->num_attributeValues = 0;
- res->attributeValues = 0;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 102: res->name = f_string (eh, c); break;
- case 113: res->description = f_humstring (eh, c); break;
- case 704: res->attributeType = f_integer (eh, c); break;
- case 708:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 709)
- continue;
- (res->num_attributeValues)++;
- }
- if (res->num_attributeValues)
- res->attributeValues = (Z_AttributeDescription **)
- odr_malloc (eh->o, res->num_attributeValues
- * sizeof(*res->attributeValues));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 709)
- continue;
- res->attributeValues[i++] = f_attributeDescription (eh, n);
- }
- break;
- }
- }
- return res;
-}
-
-Z_AttributeSetInfo *f_attributeSetInfo (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeSetInfo *res = (Z_AttributeSetInfo *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->commonInfo = 0;
- res->attributeSet = 0;
- res->name = 0;
- res->num_attributes = 0;
- res->attributes = 0;
- res->description = 0;
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 600: res->commonInfo = f_commonInfo (eh, c); break;
- case 1000: res->attributeSet = f_oid (eh, c, CLASS_ATTSET); break;
- case 102: res->name = f_string (eh, c); break;
- case 750:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 751)
- continue;
- (res->num_attributes)++;
- }
- if (res->num_attributes)
- res->attributes = (Z_AttributeType **)
- odr_malloc (eh->o, res->num_attributes
- * sizeof(*res->attributes));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 751)
- continue;
- res->attributes[i++] = f_attributeType (eh, n);
- }
- break;
- case 113: res->description = f_humstring (eh, c); break;
- }
- }
- return res;
-}
-
-Z_OmittedAttributeInterpretation *f_omittedAttributeInterpretation (
- ExpHandle *eh, data1_node *n)
-{
- Z_OmittedAttributeInterpretation *res = (Z_OmittedAttributeInterpretation*)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->defaultValue = 0;
- res->defaultDescription = 0;
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 706:
- res->defaultValue = f_stringOrNumeric (eh, c);
- break;
- case 113:
- res->defaultDescription = f_humstring(eh, c);
- break;
- }
- }
- return res;
-}
-
-Z_AttributeValue *f_attributeValue (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeValue *res = (Z_AttributeValue *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->value = 0;
- res->description = 0;
- res->num_subAttributes = 0;
- res->subAttributes = 0;
- res->num_superAttributes = 0;
- res->superAttributes = 0;
- res->partialSupport = 0;
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 710:
- res->value = f_stringOrNumeric (eh, c); break;
- case 113:
- res->description = f_humstring (eh, c); break;
- case 712:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 713)
- continue;
- (res->num_subAttributes)++;
- }
- if (res->num_subAttributes)
- res->subAttributes =
- (Z_StringOrNumeric **)
- odr_malloc (eh->o, res->num_subAttributes
- * sizeof(*res->subAttributes));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 713)
- continue;
- res->subAttributes[i++] = f_stringOrNumeric (eh, n);
- }
- break;
- case 714:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 715)
- continue;
- (res->num_superAttributes)++;
- }
- if (res->num_superAttributes)
- res->superAttributes =
- (Z_StringOrNumeric **)
- odr_malloc (eh->o, res->num_superAttributes
- * sizeof(*res->superAttributes));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 715)
- continue;
- res->superAttributes[i++] = f_stringOrNumeric (eh, n);
- }
- break;
- case 711:
- res->partialSupport = odr_nullval ();
- break;
- }
- }
- return res;
-}
-
-Z_AttributeTypeDetails *f_attributeTypeDetails (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeTypeDetails *res = (Z_AttributeTypeDetails *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
- res->attributeType = 0;
- res->defaultIfOmitted = 0;
- res->num_attributeValues = 0;
- res->attributeValues = 0;
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 704: res->attributeType = f_integer (eh, c); break;
- case 705:
- res->defaultIfOmitted = f_omittedAttributeInterpretation (eh, c);
- break;
- case 708:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 709)
- continue;
- (res->num_attributeValues)++;
- }
- if (res->num_attributeValues)
- res->attributeValues =
- (Z_AttributeValue **)
- odr_malloc (eh->o, res->num_attributeValues
- * sizeof(*res->attributeValues));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 709)
- continue;
- res->attributeValues[i++] = f_attributeValue (eh, n);
- }
- break;
- }
- }
- return res;
-}
-
-Z_AttributeSetDetails *f_attributeSetDetails (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeSetDetails *res = (Z_AttributeSetDetails *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->attributeSet = 0;
- res->num_attributesByType = 0;
- res->attributesByType = 0;
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 1000: res->attributeSet = f_oid(eh, c, CLASS_ATTSET); break;
- case 702:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 703)
- continue;
- (res->num_attributesByType)++;
- }
- if (res->num_attributesByType)
- res->attributesByType =
- (Z_AttributeTypeDetails **)
- odr_malloc (eh->o, res->num_attributesByType
- * sizeof(*res->attributesByType));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 703)
- continue;
- res->attributesByType[i++] = f_attributeTypeDetails (eh, n);
- }
- break;
- }
- }
- return res;
-}
-
-Z_AttributeValueList *f_attributeValueList (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeValueList *res = (Z_AttributeValueList *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
- int i = 0;
-
- res->num_attributes = 0;
- res->attributes = 0;
- for (c = n->child; c; c = c->next)
- if (is_numeric_tag (eh, c) == 710)
- (res->num_attributes)++;
- if (res->num_attributes)
- {
- res->attributes = (Z_StringOrNumeric **)
- odr_malloc (eh->o, res->num_attributes * sizeof(*res->attributes));
- }
- for (c = n->child; c; c = c->next)
- if (is_numeric_tag(eh, c) == 710)
- res->attributes[i++] = f_stringOrNumeric (eh, c);
- return res;
-}
-
-Z_AttributeOccurrence *f_attributeOccurrence (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeOccurrence *res = (Z_AttributeOccurrence *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
-
- res->attributeSet = 0;
- res->attributeType = 0;
- res->mustBeSupplied = 0;
- res->which = Z_AttributeOcc_any_or_none;
- res->attributeValues.any_or_none = odr_nullval ();
-
- for (c = n->child; c; c = c->next)
- {
- switch (is_numeric_tag (eh, c))
- {
- case 1000:
- res->attributeSet = f_oid (eh, c, CLASS_ATTSET); break;
- case 704:
- res->attributeType = f_integer (eh, c); break;
- case 720:
- res->mustBeSupplied = odr_nullval (); break;
- case 721:
- res->which = Z_AttributeOcc_any_or_none;
- res->attributeValues.any_or_none = odr_nullval ();
- break;
- case 722:
- res->which = Z_AttributeOcc_specific;
- res->attributeValues.specific = f_attributeValueList (eh, c);
- break;
- }
- }
- return res;
-}
-
-Z_AttributeCombination *f_attributeCombination (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeCombination *res = (Z_AttributeCombination *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
- int i = 0;
-
- res->num_occurrences = 0;
- res->occurrences = 0;
- for (c = n->child; c; c = c->next)
- if (is_numeric_tag (eh, c) == 719)
- (res->num_occurrences)++;
- if (res->num_occurrences)
- {
- res->occurrences = (Z_AttributeOccurrence **)
- odr_malloc (eh->o, res->num_occurrences * sizeof(*res->occurrences));
- }
- for (c = n->child; c; c = c->next)
- if (is_numeric_tag(eh, c) == 719)
- res->occurrences[i++] = f_attributeOccurrence (eh, c);
- assert (res->num_occurrences);
- return res;
-}
-
-Z_AttributeCombinations *f_attributeCombinations (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeCombinations *res = (Z_AttributeCombinations *)
- odr_malloc (eh->o, sizeof(*res));
- data1_node *c;
- res->defaultAttributeSet = 0;
- res->num_legalCombinations = 0;
- res->legalCombinations = 0;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 1000:
- res->defaultAttributeSet = f_oid (eh, c, CLASS_ATTSET);
- break;
- case 717:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 718)
- continue;
- (res->num_legalCombinations)++;
- }
- if (res->num_legalCombinations)
- res->legalCombinations =
- (Z_AttributeCombination **)
- odr_malloc (eh->o, res->num_legalCombinations
- * sizeof(*res->legalCombinations));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 718)
- continue;
- res->legalCombinations[i++] = f_attributeCombination (eh, n);
- }
- break;
- }
- }
- assert (res->num_legalCombinations);
- return res;
-}
-
-Z_AttributeDetails *f_attributeDetails (ExpHandle *eh, data1_node *n)
-{
- Z_AttributeDetails *res = (Z_AttributeDetails *)
- odr_malloc(eh->o, sizeof(*res));
- data1_node *c;
-
- res->commonInfo = 0;
- res->databaseName = 0;
- res->num_attributesBySet = 0;
- res->attributesBySet = NULL;
- res->attributeCombinations = NULL;
-
- for (c = n->child; c; c = c->next)
- {
- int i = 0;
- switch (is_numeric_tag (eh, c))
- {
- case 600: res->commonInfo = f_commonInfo(eh, c); break;
- case 102: res->databaseName = f_string (eh, c); break;
- case 700:
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 701)
- continue;
- (res->num_attributesBySet)++;
- }
- if (res->num_attributesBySet)
- res->attributesBySet =
- (Z_AttributeSetDetails **)
- odr_malloc (eh->o, res->num_attributesBySet
- * sizeof(*res->attributesBySet));
- for (n = c->child; n; n = n->next)
- {
- if (is_numeric_tag(eh, n) != 701)
- continue;
- res->attributesBySet[i++] = f_attributeSetDetails (eh, n);
- }
- break;
- case 716:
- res->attributeCombinations = f_attributeCombinations (eh, c);
- break;
- }
- }
- return res;
-}
-
-Z_ExplainRecord *data1_nodetoexplain (data1_handle dh, data1_node *n,
- int select, ODR o)
-{
- ExpHandle eh;
- Z_ExplainRecord *res = (Z_ExplainRecord *)odr_malloc(o, sizeof(*res));
-
- eh.dh = dh;
- eh.select = select;
- eh.o = o;
- eh.false_value = (int *)odr_malloc(eh.o, sizeof(eh.false_value));
- *eh.false_value = 0;
- eh.true_value = (int *)odr_malloc(eh.o, sizeof(eh.true_value));
- *eh.true_value = 1;
-
- assert(n->which == DATA1N_root);
- if (strcmp(n->u.root.type, "explain"))
- {
- yaz_log(LOG_WARN, "Attempt to convert a non-Explain record");
- return 0;
- }
- for (n = n->child; n; n = n->next)
- {
- switch (is_numeric_tag (&eh, n))
- {
- case 1:
- res->which = Z_Explain_categoryList;
- if (!(res->u.categoryList = f_categoryList(&eh, n)))
- return 0;
- return res;
- case 2:
- res->which = Z_Explain_targetInfo;
- if (!(res->u.targetInfo = f_targetInfo(&eh, n)))
- return 0;
- return res;
- case 3:
- res->which = Z_Explain_databaseInfo;
- if (!(res->u.databaseInfo = f_databaseInfo(&eh, n)))
- return 0;
- return res;
- case 7:
- res->which = Z_Explain_attributeSetInfo;
- if (!(res->u.attributeSetInfo = f_attributeSetInfo(&eh, n)))
- return 0;
- return res;
- case 10:
- res->which = Z_Explain_attributeDetails;
- if (!(res->u.attributeDetails = f_attributeDetails(&eh, n)))
- return 0;
- return res;
- }
- }
- yaz_log(LOG_WARN, "No category in Explain record");
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_grs.c,v 1.26 2002-10-08 22:18:22 adam Exp $
- *
- */
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include <yaz/proto.h>
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-#define D1_VARIANTARRAY 20 /* fixed max length on sup'd variant-list. Lazy me */
-
-static Z_ElementMetaData *get_ElementMetaData(ODR o)
-{
- Z_ElementMetaData *r = (Z_ElementMetaData *)odr_malloc(o, sizeof(*r));
-
- r->seriesOrder = 0;
- r->usageRight = 0;
- r->num_hits = 0;
- r->hits = 0;
- r->displayName = 0;
- r->num_supportedVariants = 0;
- r->supportedVariants = 0;
- r->message = 0;
- r->elementDescriptor = 0;
- r->surrogateFor = 0;
- r->surrogateElement = 0;
- r->other = 0;
-
- return r;
-}
-
-/*
- * N should point to the *last* (leaf) triple in a sequence. Construct a variant
- * from each of the triples beginning (ending) with 'n', up to the
- * nearest parent tag. num should equal the number of triples in the
- * sequence.
- */
-static Z_Variant *make_variant(data1_node *n, int num, ODR o)
-{
- Z_Variant *v = (Z_Variant *)odr_malloc(o, sizeof(*v));
- data1_node *p;
-
- v->globalVariantSetId = 0;
- v->num_triples = num;
- v->triples = (Z_Triple **)odr_malloc(o, sizeof(Z_Triple*) * num);
-
- /*
- * cycle back up through the tree of variants
- * (traversing exactly 'level' variants).
- */
- for (p = n, num--; p && num >= 0; p = p->parent, num--)
- {
- Z_Triple *t;
-
- assert(p->which == DATA1N_variant);
- t = v->triples[num] = (Z_Triple *)odr_malloc(o, sizeof(*t));
- t->variantSetId = 0;
- t->zclass = (int *)odr_malloc(o, sizeof(int));
- *t->zclass = p->u.variant.type->zclass->zclass;
- t->type = (int *)odr_malloc(o, sizeof(int));
- *t->type = p->u.variant.type->type;
-
- switch (p->u.variant.type->datatype)
- {
- case DATA1K_string:
- t->which = Z_Triple_internationalString;
- t->value.internationalString =
- odr_strdup(o, p->u.variant.value);
- break;
- default:
- yaz_log(LOG_WARN, "Unable to handle value for variant %s",
- p->u.variant.type->name);
- return 0;
- }
- }
- return v;
-}
-
-/*
- * Traverse the variant children of n, constructing a supportedVariant list.
- */
-static int traverse_triples(data1_node *n, int level, Z_ElementMetaData *m,
- ODR o)
-{
- data1_node *c;
-
- for (c = n->child; c; c = c->next)
- if (c->which == DATA1N_data && level)
- {
- if (!m->supportedVariants)
- m->supportedVariants = (Z_Variant **)odr_malloc(o, sizeof(Z_Variant*) *
- D1_VARIANTARRAY);
- else if (m->num_supportedVariants >= D1_VARIANTARRAY)
- {
- yaz_log(LOG_WARN, "Too many variants (D1_VARIANTARRAY==%d)",
- D1_VARIANTARRAY);
- return -1;
- }
-
- if (!(m->supportedVariants[m->num_supportedVariants++] =
- make_variant(n, level, o)))
- return -1;
- }
- else if (c->which == DATA1N_variant)
- if (traverse_triples(c, level+1, m, o) < 0)
- return -1;
- return 0;
-}
-
-/*
- * Locate some data under this node. This routine should handle variants
- * prettily.
- */
-static char *get_data(data1_node *n, int *len)
-{
- char *r;
- data1_node *np = 0;
-
- while (n)
- {
- if (n->which == DATA1N_data)
- {
- int i;
- *len = n->u.data.len;
-
- for (i = 0; i<*len; i++)
- if (!d1_isspace(n->u.data.data[i]))
- break;
- while (*len && d1_isspace(n->u.data.data[*len - 1]))
- (*len)--;
- *len = *len - i;
- if (*len > 0)
- return n->u.data.data + i;
- }
- if (n->which == DATA1N_tag)
- np = n->child;
- n = n->next;
- if (!n)
- {
- n = np;
- np = 0;
- }
- }
- r = "";
- *len = strlen(r);
- return r;
-}
-
-static Z_ElementData *nodetoelementdata(data1_handle dh, data1_node *n,
- int select, int leaf,
- ODR o, int *len)
-{
- Z_ElementData *res = (Z_ElementData *)odr_malloc(o, sizeof(*res));
-
- if (!n)
- {
- res->which = Z_ElementData_elementNotThere;
- res->u.elementNotThere = odr_nullval();
- }
- else if (n->which == DATA1N_data && leaf)
- {
- char str[64], *cp;
- int toget = n->u.data.len;
-
- cp = get_data (n, &toget);
-
- switch (n->u.data.what)
- {
- case DATA1I_num:
- res->which = Z_ElementData_numeric;
- res->u.numeric = (int *)odr_malloc(o, sizeof(int));
- *res->u.numeric = atoi_n (cp, toget);
- *len += 4;
- break;
- case DATA1I_text:
- case DATA1I_xmltext:
- res->which = Z_ElementData_string;
- res->u.string = (char *)odr_malloc(o, toget+1);
- if (toget)
- memcpy(res->u.string, cp, toget);
- res->u.string[toget] = '\0';
- *len += toget;
- break;
- case DATA1I_oid:
- res->which = Z_ElementData_oid;
- if (toget > 63)
- toget = 63;
- memcpy (str, cp, toget);
- str[toget] = '\0';
- res->u.oid = odr_getoidbystr(o, str);
- *len += oid_oidlen(res->u.oid) * sizeof(int);
- break;
- default:
- yaz_log(LOG_WARN, "Can't handle datatype.");
- return 0;
- }
- }
- else
- {
- res->which = Z_ElementData_subtree;
- if (!(res->u.subtree = data1_nodetogr (dh, n->parent, select, o, len)))
- return 0;
- }
- return res;
-}
-
-static int is_empty_data (data1_node *n)
-{
- if (n && n->which == DATA1N_data && (n->u.data.what == DATA1I_text
- || n->u.data.what == DATA1I_xmltext))
- {
- int i = n->u.data.len;
-
- while (i > 0 && strchr("\n ", n->u.data.data[i-1]))
- i--;
- if (i == 0)
- return 1;
- }
- return 0;
-}
-
-
-static Z_TaggedElement *nodetotaggedelement(data1_handle dh, data1_node *n,
- int select, ODR o,
- int *len)
-{
- Z_TaggedElement *res = (Z_TaggedElement *)odr_malloc(o, sizeof(*res));
- data1_tag *tag = 0;
- data1_node *data;
- int leaf = 0;
-
- if (n->which == DATA1N_tag)
- {
- if (n->u.tag.element)
- tag = n->u.tag.element->tag;
- data = n->child;
-
- /* skip empty data children */
- while (is_empty_data(data))
- data = data->next;
- if (!data)
- data = n->child;
- else
- { /* got one. see if this is the only non-empty one */
- data1_node *sub = data->next;
- while (sub && is_empty_data(sub))
- sub = sub->next;
- if (!sub)
- leaf = 1; /* all empty. 'data' is the only child */
- }
- }
- /*
- * If we're a data element at this point, we need to insert a
- * wellKnown tag to wrap us up.
- */
- else if (n->which == DATA1N_data || n->which == DATA1N_variant)
- {
- if (n->root->u.root.absyn &&
- !(tag = data1_gettagbyname (dh, n->root->u.root.absyn->tagset,
- "wellKnown")))
- {
- yaz_log(LOG_WARN, "Unable to locate tag for 'wellKnown'");
- return 0;
- }
- data = n;
- leaf = 1;
- if (is_empty_data(data))
- return 0;
- }
- else
- {
- yaz_log(LOG_WARN, "Bad data.");
- return 0;
- }
-
- res->tagType = (int *)odr_malloc(o, sizeof(int));
- *res->tagType = (tag && tag->tagset) ? tag->tagset->type : 3;
- res->tagValue = (Z_StringOrNumeric *)odr_malloc(o, sizeof(Z_StringOrNumeric));
- if (tag && tag->which == DATA1T_numeric)
- {
- res->tagValue->which = Z_StringOrNumeric_numeric;
- res->tagValue->u.numeric = (int *)odr_malloc(o, sizeof(int));
- *res->tagValue->u.numeric = tag->value.numeric;
- }
- else
- {
- char *tagstr;
-
- if (n->which == DATA1N_tag)
- tagstr = n->u.tag.tag; /* tag at node */
- else if (tag)
- tagstr = tag->value.string; /* no take from well-known */
- else
- return 0;
- res->tagValue->which = Z_StringOrNumeric_string;
- res->tagValue->u.string = odr_strdup(o, tagstr);
- }
- res->tagOccurrence = 0;
- res->appliedVariant = 0;
- res->metaData = 0;
- if (n->which == DATA1N_variant || (data && data->which ==
- DATA1N_variant && data->next == NULL))
- {
- int nvars = 0;
-
- res->metaData = get_ElementMetaData(o);
- if (n->which == DATA1N_tag && n->u.tag.make_variantlist)
- if (traverse_triples(data, 0, res->metaData, o) < 0)
- return 0;
- while (data && data->which == DATA1N_variant)
- {
- nvars++;
- data = data->child;
- }
- if (n->which != DATA1N_tag || !n->u.tag.no_data_requested)
- res->appliedVariant = make_variant(data->parent, nvars-1, o);
- }
- if (n->which == DATA1N_tag && n->u.tag.no_data_requested)
- {
- res->content = (Z_ElementData *)odr_malloc(o, sizeof(*res->content));
- res->content->which = Z_ElementData_noDataRequested;
- res->content->u.noDataRequested = odr_nullval();
- }
- else if (!(res->content = nodetoelementdata (dh, data, select, leaf,
- o, len)))
- return 0;
- *len += 10;
- return res;
-}
-
-Z_GenericRecord *data1_nodetogr(data1_handle dh, data1_node *n,
- int select, ODR o, int *len)
-{
- Z_GenericRecord *res = (Z_GenericRecord *)odr_malloc(o, sizeof(*res));
- data1_node *c;
- int num_children = 0;
-
- if (n->which == DATA1N_root)
- n = data1_get_root_tag (dh, n);
-
- for (c = n->child; c; c = c->next)
- num_children++;
-
- res->elements = (Z_TaggedElement **)
- odr_malloc(o, sizeof(Z_TaggedElement *) * num_children);
- res->num_elements = 0;
- for (c = n->child; c; c = c->next)
- {
- if (c->which == DATA1N_tag && select && !c->u.tag.node_selected)
- continue;
- if ((res->elements[res->num_elements] =
- nodetotaggedelement (dh, c, select, o, len)))
- res->num_elements++;
- }
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: d1_handle.c,v 1.9 2002-07-29 20:04:08 adam Exp $
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-struct data1_handle_info {
- WRBUF wrbuf;
- char *tab_path;
- char *tab_root;
-
- char *read_buf;
- int read_len;
-
- data1_absyn_cache absyn_cache;
- data1_attset_cache attset_cache;
-
- char *map_buf;
- int map_len;
-
- NMEM mem;
- int flags;
-};
-
-data1_handle data1_create (void)
-{
- return data1_createx(0);
-}
-
-data1_handle data1_createx (int flags)
-{
- data1_handle p = (data1_handle)xmalloc (sizeof(*p));
- if (!p)
- return NULL;
- p->tab_path = NULL;
- p->tab_root = NULL;
- p->wrbuf = wrbuf_alloc();
- p->read_buf = NULL;
- p->read_len = 0;
- p->map_buf = NULL;
- p->map_len = 0;
- p->absyn_cache = NULL;
- p->attset_cache = NULL;
- p->mem = nmem_create ();
- p->flags = flags;
- return p;
-}
-
-NMEM data1_nmem_get (data1_handle dh)
-{
- return dh->mem;
-}
-
-data1_absyn_cache *data1_absyn_cache_get (data1_handle dh)
-{
- return &dh->absyn_cache;
-}
-
-data1_attset_cache *data1_attset_cache_get (data1_handle dh)
-{
- return &dh->attset_cache;
-}
-
-void data1_destroy (data1_handle dh)
-{
- if (!dh)
- return;
- wrbuf_free (dh->wrbuf, 1);
- if (dh->tab_path)
- xfree (dh->tab_path);
- if (dh->tab_root)
- xfree (dh->tab_root);
- if (dh->read_buf)
- xfree (dh->read_buf);
- if (dh->map_buf)
- xfree (dh->map_buf);
- nmem_destroy (dh->mem);
-
- xfree (dh);
-}
-
-WRBUF data1_get_wrbuf (data1_handle dp)
-{
- return dp->wrbuf;
-}
-
-char **data1_get_read_buf (data1_handle dp, int **lenp)
-{
- *lenp = &dp->read_len;
- yaz_log (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp);
- return &dp->read_buf;
-}
-
-char **data1_get_map_buf (data1_handle dp, int **lenp)
-{
- *lenp = &dp->map_len;
- yaz_log (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp);
- return &dp->map_buf;
-}
-
-void data1_set_tabpath (data1_handle dp, const char *p)
-{
- xfree (dp->tab_path);
- dp->tab_path = NULL;
- if (p)
- dp->tab_path = xstrdup (p);
-}
-
-void data1_set_tabroot (data1_handle dp, const char *p)
-{
- xfree (dp->tab_root);
- dp->tab_root = NULL;
- if (p)
- dp->tab_root = xstrdup (p);
-}
-
-const char *data1_get_tabpath (data1_handle dp)
-{
- return dp->tab_path;
-}
-
-const char *data1_get_tabroot (data1_handle dp)
-{
- return dp->tab_root;
-}
-
-FILE *data1_path_fopen (data1_handle dh, const char *file, const char *mode)
-{
- const char *path = data1_get_tabpath(dh);
- const char *root = data1_get_tabroot(dh);
- return yaz_fopen (path, file, "r", root);
-}
-
-int data1_is_xmlmode(data1_handle dh)
-{
- return dh->flags & DATA1_FLAG_XML;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2000, Index Data.
- * See the file LICENSE for details.
- *
- * d1_if.c : A simple interface for extracting strings from data1_node
- * tree structures
- *
- * $Log: d1_if.c,v $
- * Revision 1.5 2000-02-10 13:42:43 adam
- * Removed C++ comment.
- *
- * Revision 1.4 2000/01/06 14:30:56 adam
- * Minor change - to prevent warnings.
- *
- * Revision 1.3 2000/01/06 11:27:02 adam
- * Minor fix so that this source compiles using Visual C++.
- *
- * Revision 1.2 2000/01/04 17:46:17 ian
- * Added function to count occurences of a tag spec in a data1 tree.
- *
- * Revision 1.1 1999/12/21 14:16:19 ian
- * Changed retrieval module to allow data1 trees with no associated absyn.
- * Also added a simple interface for extracting values from data1 trees using
- * a string based tagpath.
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/data1.h>
-#include <yaz/log.h>
-
-#include <string.h>
-
-
-/*
- * Search for a token in the supplied string up to the supplied list of stop characters or EOL
- * At the end, return the character causing the break and fill pTokenBuffer with the token string so far
- * After the scan, *pPosInBuffer will point to the next character after the one causing the break and
- * pTokenBuffer will contain the actual token
- */
-char data1_ScanNextToken(char* pBuffer,
- char** pPosInBuffer,
- char* pBreakChars,
- char* pWhitespaceChars,
- char* pTokenBuffer)
-{
- char* pBuff = pTokenBuffer;
- *pBuff = '\0';
-
- while ( **pPosInBuffer )
- {
- if ( strchr(pBreakChars,**pPosInBuffer) != NULL )
- {
- /* Current character is a break character */
- *pBuff++ = '\0';
- return *((*pPosInBuffer)++);
- }
- else
- {
- if ( strchr(pWhitespaceChars, **pPosInBuffer) != NULL )
- (*pPosInBuffer)++;
- else
- *pBuff++ = *((*pPosInBuffer)++);
- }
- }
-
- *pBuff++ = *((*pPosInBuffer)++);
- return(**pPosInBuffer);
-}
-
-/*
- * Attempt to find a string value given the specified tagpath
- *
- * Need to make this safe by passing in a buffer.....
- *
- */
-char *data1_getNodeValue(data1_node* node, char* pTagPath)
-{
- data1_node* n = NULL;
-
- n = data1_LookupNode(node, pTagPath );
-
- if ( n )
- {
- /* n should be a tag node with some data under it.... */
- if ( n->child )
- {
- if ( n->child->which == DATA1N_data )
- {
- return n->child->u.data.data;
- }
- else
- {
- yaz_log(LOG_WARN,"Attempting to lookup data for tagpath: Child node is not a data node");
- }
- }
- else
- {
- yaz_log(LOG_WARN,"Found a node matching the tagpath, but it has no child data nodes");
- }
- }
- else
- {
- yaz_log(LOG_WARN,"Unable to lookup a node on the specified tag path");
- }
-
- return "";
-}
-
-
-/* Max length of a tag */
-#define MAX_TAG_SIZE 50
-
-/*
- * data1_LookupNode : Try and find a node as specified by a tagpath
- */
-data1_node *data1_LookupNode(data1_node* node, char* pTagPath)
-{
- /* Node matching the pattern in the tagpath */
- data1_node* matched_node = NULL;
-
- /* Current Child node as we search for nodes matching the pattern in the tagpath */
- data1_node* current_child = node->child;
-
- /* Current position in string */
- char* pCurrCharInPath = pTagPath;
-
- /* Work buffer */
- char Buffer[MAX_TAG_SIZE];
-
- /* The tag type of this node */
- int iTagType = 0;
-
- /* for non string tags, the tag value */
- int iTagValue = 0;
-
- /* for string tags, the tag value */
- char StringTagVal[MAX_TAG_SIZE];
-
- /* Which occurence of that tag under this node */
- int iOccurences=0;
-
- /* Character causing a break */
- char sepchr = '\0';
- Buffer[0] = '\0';
- StringTagVal[0] = '\0';
-
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, ",[(."," ", Buffer);
-
- if ( sepchr == '[' )
- {
- /* Next component in node value is [ TagType, TagVal, TagOccurence ] */
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, ","," ", Buffer);
- iTagType = atoi(Buffer);
-
- /* Occurence is optional... */
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, ",]."," ", Buffer);
-
- if ( iTagType == 3 )
- strcpy(StringTagVal,Buffer);
- else
- iTagValue = atoi(Buffer);
-
- /* If sepchar was a ',' there should be an instance */
- if ( sepchr == ',' )
- {
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, "]."," ", Buffer);
- iOccurences = atoi(Buffer);
- }
-
- if ( sepchr == ']' )
- {
- /* See if we can scan the . for the next component or the end of the line... */
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, "."," ", Buffer);
- }
- else
- {
- yaz_log(LOG_FATAL,"Node does not end with a ]");
- /* Fatal Error */
- return(NULL);
- }
- }
- else
- {
- /* We have a TagName so Read up to ( or . or EOL */
- iTagType = 3;
- strcpy(StringTagVal,Buffer);
-
- if ( sepchr == '(' )
- {
- /* Read the occurence */
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, ")"," ", Buffer);
- iOccurences = atoi(Buffer);
-
- /* See if we can find the . at the end of this clause */
- sepchr = data1_ScanNextToken(pTagPath, &pCurrCharInPath, "."," ", Buffer);
- }
-
- }
-
- yaz_log(LOG_DEBUG,"search node for child like [%d,%d,%s,%d]",iTagType,iTagValue,StringTagVal,iOccurences);
-
-
- /* OK.. We have extracted tagtype, Value and Occurence, see if we can find a node */
- /* Under the current parent matching that description */
-
- while ( ( current_child ) && ( matched_node == NULL ) )
- {
- if ( current_child->which == DATA1N_tag )
- {
- if ( iTagType == 3 )
- {
- if ( ( current_child->u.tag.element == NULL ) &&
- ( strcmp(current_child->u.tag.tag, StringTagVal) == 0 ) )
- {
- if ( iOccurences )
- {
- /* Everything matched, but not yet found the
- right occurence of the given tag */
- iOccurences--;
- }
- else
- {
- /* We have matched a string tag... Is there more to
- process? */
- matched_node = current_child;
- }
- }
- }
- else /* Attempt to match real element */
- {
- yaz_log(LOG_WARN,"Non string tag matching not yet implemented");
- }
- }
- current_child = current_child->next;
- }
-
-
- /* If there is more... Continue */
- if ( ( sepchr == '.' ) && ( matched_node ) )
- {
- return data1_LookupNode(matched_node, pCurrCharInPath);
- }
- else
- {
- return matched_node;
- }
-}
-
-/**
-
-data1_CountOccurences
-
-Count the number of occurences of the last instance on a tagpath.
-
-@param data1_node* node : The root of the tree we wish to look for occurences in
-@param const char* pTagPath : The tagpath we want to count the occurences of...
-
-*/
-int data1_CountOccurences(data1_node* node, char* pTagPath)
-{
- int iRetVal = 0;
- data1_node* n = NULL;
- data1_node* pParent = NULL;
-
- n = data1_LookupNode(node, pTagPath );
-
-
- if ( ( n ) &&
- ( n->which == DATA1N_tag ) &&
- ( n->parent ) )
- {
- data1_node* current_child;
- pParent = n->parent;
-
- for ( current_child = pParent->child;
- current_child;
- current_child = current_child->next )
- {
- if ( current_child->which == DATA1N_tag )
- {
- if ( current_child->u.tag.element == NULL )
- {
- if ( ( n->u.tag.tag ) &&
- ( current_child->u.tag.tag ) &&
- ( strcmp(current_child->u.tag.tag, n->u.tag.tag) == 0 ) )
- {
- iRetVal++;
- }
- }
- else if ( current_child->u.tag.element == n->u.tag.element )
- {
- /* Hmmm... Is the above right for non string tags???? */
- iRetVal++;
- }
- }
- }
- }
-
- return iRetVal;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_map.c,v 1.25 2002-09-24 08:05:41 adam Exp $
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/oid.h>
-#include <yaz/log.h>
-#include <yaz/readconf.h>
-#include <yaz/tpath.h>
-#include <yaz/data1.h>
-#include <yaz/d1_map.h>
-
-data1_maptab *data1_read_maptab (data1_handle dh, const char *file)
-{
- NMEM mem = data1_nmem_get (dh);
- data1_maptab *res = (data1_maptab *)nmem_malloc(mem, sizeof(*res));
- FILE *f;
- int lineno = 0;
- int argc;
- char *argv[50], line[512];
- data1_mapunit **mapp;
- int local_numeric = 0;
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- {
- yaz_log(LOG_WARN|LOG_ERRNO, "%s", file);
- return 0;
- }
-
- res->name = 0;
- res->target_absyn_ref = VAL_NONE;
- res->map = 0;
- mapp = &res->map;
- res->next = 0;
-
- while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- if (!strcmp(argv[0], "targetref"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args for targetref",
- file, lineno);
- continue;
- }
- if ((res->target_absyn_ref = oid_getvalbyname(argv[1]))
- == VAL_NONE)
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown reference '%s'",
- file, lineno, argv[1]);
- continue;
- }
- }
- else if (!strcmp(argv[0], "targetname"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args for targetname",
- file, lineno);
- continue;
- }
- res->target_absyn_name =
- (char *)nmem_malloc(mem, strlen(argv[1])+1);
- strcpy(res->target_absyn_name, argv[1]);
- }
- else if (!yaz_matchstr(argv[0], "localnumeric"))
- local_numeric = 1;
- else if (!strcmp(argv[0], "name"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args for name", file, lineno);
- continue;
- }
- res->name = (char *)nmem_malloc(mem, strlen(argv[1])+1);
- strcpy(res->name, argv[1]);
- }
- else if (!strcmp(argv[0], "map"))
- {
- data1_maptag **mtp;
- char *ep, *path = argv[2];
-
- if (argc < 3)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # of args for map",
- file, lineno);
- continue;
- }
- *mapp = (data1_mapunit *)nmem_malloc(mem, sizeof(**mapp));
- (*mapp)->next = 0;
- if (argc > 3 && !data1_matchstr(argv[3], "nodata"))
- (*mapp)->no_data = 1;
- else
- (*mapp)->no_data = 0;
- (*mapp)->source_element_name =
- (char *)nmem_malloc(mem, strlen(argv[1])+1);
- strcpy((*mapp)->source_element_name, argv[1]);
- mtp = &(*mapp)->target_path;
- if (*path == '/')
- path++;
- for (ep = strchr(path, '/'); path; (void)((path = ep) &&
- (ep = strchr(path, '/'))))
- {
- int type, np;
- char valstr[512], parm[512];
-
- if (ep)
- ep++;
- if ((np = sscanf(path, "(%d,%511[^)]):%511[^/]", &type, valstr,
- parm)) < 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Syntax error in map "
- "directive: %s", file, lineno, argv[2]);
- fclose(f);
- return 0;
- }
- *mtp = (data1_maptag *)nmem_malloc(mem, sizeof(**mtp));
- (*mtp)->next = 0;
- (*mtp)->type = type;
- if (np > 2 && !data1_matchstr(parm, "new"))
- (*mtp)->new_field = 1;
- else
- (*mtp)->new_field = 0;
- if ((type != 3 || local_numeric) && d1_isdigit(*valstr))
- {
- (*mtp)->which = D1_MAPTAG_numeric;
- (*mtp)->value.numeric = atoi(valstr);
- }
- else
- {
- (*mtp)->which = D1_MAPTAG_string;
- (*mtp)->value.string =
- (char *)nmem_malloc(mem, strlen(valstr)+1);
- strcpy((*mtp)->value.string, valstr);
- }
- mtp = &(*mtp)->next;
- }
- mapp = &(*mapp)->next;
- }
- else
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'",
- file, lineno, argv[0]);
-
- fclose(f);
- return res;
-}
-
-/*
- * Locate node with given elementname.
- * NOTE: This is stupid - we don't find repeats this way.
- */
-static data1_node *find_node(data1_node *p, char *elementname)
-{
- data1_node *c, *r;
-
- for (c = p->child; c; c = c->next)
- if (c->which == DATA1N_tag && c->u.tag.element &&
- !data1_matchstr(c->u.tag.element->name, elementname))
- return c;
- else if ((r = find_node(c, elementname)))
- return r;
- return 0;
-}
-
-/*
- * See if the node n is equivalent to the tag t.
- */
-static int tagmatch(data1_node *n, data1_maptag *t)
-{
- if (n->which != DATA1N_tag)
- return 0;
- if (n->u.tag.element)
- {
- if (n->u.tag.element->tag->tagset)
- {
- if (n->u.tag.element->tag->tagset->type != t->type)
- return 0;
- }
- else if (t->type != 3)
- return 0;
- if (n->u.tag.element->tag->which == DATA1T_numeric)
- {
- if (t->which != D1_MAPTAG_numeric)
- return 0;
- if (n->u.tag.element->tag->value.numeric != t->value.numeric)
- return 0;
- }
- else
- {
- if (t->which != D1_MAPTAG_string)
- return 0;
- if (data1_matchstr(n->u.tag.element->tag->value.string,
- t->value.string))
- return 0;
- }
- }
- else /* local tag */
- {
- char str[10];
-
- if (t->type != 3)
- return 0;
- if (t->which == D1_MAPTAG_numeric)
- sprintf(str, "%d", t->value.numeric);
- else
- strcpy(str, t->value.string);
- if (data1_matchstr(n->u.tag.tag, str))
- return 0;
- }
- return 1;
-}
-
-static data1_node *dup_child (data1_handle dh, data1_node *n,
- data1_node **last, NMEM mem,
- data1_node *parent)
-{
- data1_node *first = 0;
- data1_node **m = &first;
-
- for (; n; n = n->next)
- {
- *last = *m = (data1_node *) nmem_malloc (mem, sizeof(**m));
- memcpy (*m, n, sizeof(**m));
-
- (*m)->parent = parent;
- (*m)->root = parent->root;
- (*m)->child = dup_child(dh, n->child, &(*m)->last_child, mem, *m);
- m = &(*m)->next;
- }
- *m = 0;
- return first;
-}
-
-static int map_children(data1_handle dh, data1_node *n, data1_maptab *map,
- data1_node *res, NMEM mem)
-{
- data1_node *c;
- data1_mapunit *m;
- /*
- * locate each source element in turn.
- */
- for (c = n->child; c; c = c->next)
- if (c->which == DATA1N_tag && c->u.tag.element)
- {
- for (m = map->map; m; m = m->next)
- {
- if (!data1_matchstr(m->source_element_name,
- c->u.tag.element->name))
- {
- data1_node *pn = res;
- data1_node *cur = pn->last_child;
- data1_maptag *mt;
-
- /*
- * process the target path specification.
- */
- for (mt = m->target_path; mt; mt = mt->next)
- {
- if (!cur || mt->new_field || !tagmatch(cur, mt))
- {
- cur = data1_mk_node2 (dh, mem, DATA1N_tag, pn);
- cur->u.tag.tag = mt->value.string;
- }
-
- if (mt->next)
- pn = cur;
- else if (!m->no_data)
- {
- cur->child =
- dup_child (dh, c->child,
- &cur->last_child, mem, cur);
- }
- }
- }
- }
- if (map_children(dh, c, map, res, mem) < 0)
- return -1;
- }
- return 0;
-}
-
-/*
- * Create a (possibly lossy) copy of the given record based on the
- * table. The new copy will refer back to the data of the original record,
- * which should not be discarded during the lifetime of the copy.
- */
-data1_node *data1_map_record (data1_handle dh, data1_node *n,
- data1_maptab *map, NMEM m)
-{
- data1_node *res1, *res = data1_mk_node2 (dh, m, DATA1N_root, 0);
-
- res->which = DATA1N_root;
- res->u.root.type = map->target_absyn_name;
- if (!(res->u.root.absyn = data1_get_absyn(dh, map->target_absyn_name)))
- {
- yaz_log(LOG_WARN, "%s: Failed to load target absyn '%s'",
- map->name, map->target_absyn_name);
- }
- if (data1_is_xmlmode(dh))
- {
- n = n->child;
- if (!n)
- return 0;
- res1 = data1_mk_tag (dh, m, map->target_absyn_name, 0, res);
- }
- else
- res1 = res;
-
- if (map_children(dh, n, map, res1, m) < 0)
- {
- data1_free_tree(dh, res);
- return 0;
- }
- return res;
-}
-
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_marc.c,v 1.27 2002-08-28 19:34:50 adam Exp $
- */
-
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/oid.h>
-#include <yaz/log.h>
-#include <yaz/marcdisp.h>
-#include <yaz/readconf.h>
-#include <yaz/xmalloc.h>
-#include <yaz/data1.h>
-#include <yaz/tpath.h>
-
-data1_marctab *data1_read_marctab (data1_handle dh, const char *file)
-{
- FILE *f;
- NMEM mem = data1_nmem_get (dh);
- data1_marctab *res = (data1_marctab *)nmem_malloc(mem, sizeof(*res));
- char line[512], *argv[50];
- int lineno = 0;
- int argc;
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- {
- yaz_log(LOG_WARN|LOG_ERRNO, "%s", file);
- return 0;
- }
-
- res->name = 0;
- res->reference = VAL_NONE;
- res->next = 0;
- res->length_data_entry = 4;
- res->length_starting = 5;
- res->length_implementation = 0;
- strcpy(res->future_use, "4");
-
- strcpy(res->record_status, "n");
- strcpy(res->implementation_codes, " ");
- res->indicator_length = 2;
- res->identifier_length = 2;
- res->force_indicator_length = -1;
- res->force_identifier_length = -1;
- strcpy(res->user_systems, "z ");
-
- while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- if (!strcmp(*argv, "name"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d:Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- res->name = nmem_strdup(mem, argv[1]);
- }
- else if (!strcmp(*argv, "reference"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- if ((res->reference = oid_getvalbyname(argv[1])) == VAL_NONE)
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown tagset reference '%s'",
- file, lineno, argv[1]);
- continue;
- }
- }
- else if (!strcmp(*argv, "length-data-entry"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- res->length_data_entry = atoi(argv[1]);
- }
- else if (!strcmp(*argv, "length-starting"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- res->length_starting = atoi(argv[1]);
- }
- else if (!strcmp(*argv, "length-implementation"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- res->length_implementation = atoi(argv[1]);
- }
- else if (!strcmp(*argv, "future-use"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- strncpy(res->future_use, argv[1], 2);
- }
- else if (!strcmp(*argv, "force-indicator-length"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- res->force_indicator_length = atoi(argv[1]);
- }
- else if (!strcmp(*argv, "force-identifier-length"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Missing arg for %s", file, lineno,
- *argv);
- continue;
- }
- res->force_identifier_length = atoi(argv[1]);
- }
- else
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'", file, lineno,
- *argv);
-
- fclose(f);
- return res;
-}
-
-
-/*
- * Locate some data under this node. This routine should handle variants
- * prettily.
- */
-static char *get_data(data1_node *n, int *len)
-{
- char *r;
-
- while (n)
- {
- if (n->which == DATA1N_data)
- {
- int i;
- *len = n->u.data.len;
-
- for (i = 0; i<*len; i++)
- if (!d1_isspace(n->u.data.data[i]))
- break;
- while (*len && d1_isspace(n->u.data.data[*len - 1]))
- (*len)--;
- *len = *len - i;
- if (*len > 0)
- return n->u.data.data + i;
- }
- if (n->which == DATA1N_tag)
- n = n->child;
- else if (n->which == DATA1N_data)
- n = n->next;
- else
- break;
- }
- r = "";
- *len = strlen(r);
- return r;
-}
-
-static void memint (char *p, int val, int len)
-{
- char buf[10];
-
- if (len == 1)
- *p = val + '0';
- else
- {
- sprintf (buf, "%08d", val);
- memcpy (p, buf+8-len, len);
- }
-}
-
-static int is_indicator (data1_marctab *p, data1_node *subf)
-{
-#if 1
- if (p->indicator_length != 2 ||
- (subf && subf->which == DATA1N_tag && strlen(subf->u.tag.tag) == 2))
- return 1;
-#else
- if (subf && subf->which == DATA1N_tag && subf->child->which == DATA1N_tag)
- return 1;
-#endif
- return 0;
-}
-
-static int nodetomarc(data1_handle dh,
- data1_marctab *p, data1_node *n, int selected,
- char **buf, int *size)
-{
- int len = 26;
- int dlen;
- int base_address = 25;
- int entry_p, data_p;
- char *op;
- data1_node *field, *subf;
-
- yaz_log (LOG_DEBUG, "nodetomarc");
-
- for (field = n->child; field; field = field->next)
- {
- int is00X = 0;
-
- if (field->which != DATA1N_tag)
- {
- yaz_log(LOG_WARN, "Malformed field composition for marc output.");
- return -1;
- }
- if (selected && !field->u.tag.node_selected)
- continue;
-
- subf = field->child;
- if (!subf)
- continue;
-
- len += 4 + p->length_data_entry + p->length_starting
- + p->length_implementation;
- base_address += 3 + p->length_data_entry + p->length_starting
- + p->length_implementation;
-
- if (subf->which == DATA1N_data)
- is00X = 1;
- if (!data1_is_xmlmode(dh))
- {
- if (subf->which == DATA1N_tag && !strcmp(subf->u.tag.tag, "@"))
- is00X = 1;
- }
-
-
- if (!is00X)
- len += p->indicator_length;
- /* we'll allow no indicator if length is not 2 */
- if (is_indicator (p, subf))
- subf = subf->child;
-
- for (; subf; subf = subf->next)
- {
- if (!is00X)
- len += p->identifier_length;
- get_data(subf, &dlen);
- len += dlen;
- }
- }
-
- if (!*buf)
- *buf = (char *)xmalloc(*size = len);
- else if (*size <= len)
- *buf = (char *)xrealloc(*buf, *size = len);
-
- op = *buf;
- memint (op, len, 5);
- memcpy (op+5, p->record_status, 1);
- memcpy (op+6, p->implementation_codes, 4);
- memint (op+10, p->indicator_length, 1);
- memint (op+11, p->identifier_length, 1);
- memint (op+12, base_address, 5);
- memcpy (op+17, p->user_systems, 3);
- memint (op+20, p->length_data_entry, 1);
- memint (op+21, p->length_starting, 1);
- memint (op+22, p->length_implementation, 1);
- memcpy (op+23, p->future_use, 1);
-
- entry_p = 24;
- data_p = base_address;
-
- for (field = n->child; field; field = field->next)
- {
- int is00X = 0;
-
- int data_0 = data_p;
- char *indicator_data = " ";
- if (selected && !field->u.tag.node_selected)
- continue;
-
- subf = field->child;
- if (!subf)
- continue;
-
- if (subf->which == DATA1N_data)
- is00X = 1;
- if (!data1_is_xmlmode(dh))
- {
- if (subf->which == DATA1N_tag && !strcmp(subf->u.tag.tag, "@"))
- is00X = 1;
- }
-
- if (is_indicator (p, subf))
- {
- indicator_data = subf->u.tag.tag;
- subf = subf->child;
- }
- if (!is00X)
- {
- memcpy (op + data_p, indicator_data, p->indicator_length);
- data_p += p->indicator_length;
- }
- for (; subf; subf = subf->next)
- {
- char *data;
-
- if (!is00X)
- {
- const char *identifier = "a";
- if (subf->which != DATA1N_tag)
- yaz_log(LOG_WARN, "Malformed fields for marc output.");
- else
- identifier = subf->u.tag.tag;
- op[data_p] = ISO2709_IDFS;
- memcpy (op + data_p+1, identifier, p->identifier_length-1);
- data_p += p->identifier_length;
- }
- data = get_data(subf, &dlen);
- memcpy (op + data_p, data, dlen);
- data_p += dlen;
- }
- op[data_p++] = ISO2709_FS;
-
- memcpy (op + entry_p, field->u.tag.tag, 3);
- entry_p += 3;
- memint (op + entry_p, data_p - data_0, p->length_data_entry);
- entry_p += p->length_data_entry;
- memint (op + entry_p, data_0 - base_address, p->length_starting);
- entry_p += p->length_starting;
- entry_p += p->length_implementation;
- }
- op[entry_p++] = ISO2709_FS;
- assert (entry_p == base_address);
- op[data_p++] = ISO2709_RS;
- assert (data_p == len);
- return len;
-}
-
-char *data1_nodetomarc(data1_handle dh, data1_marctab *p, data1_node *n,
- int selected, int *len)
-{
- int *size;
- char **buf = data1_get_map_buf (dh, &size);
-
- n = data1_get_root_tag (dh, n);
- if (!n)
- return 0;
- *len = nodetomarc(dh, p, n, selected, buf, size);
- return *buf;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_prtree.c,v 1.11 2002-10-08 20:14:44 adam Exp $
- */
-
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-static void pr_string (FILE *out, const char *str, int len)
-{
- int i;
- for (i = 0; i<len; i++)
- {
- int c = str[i];
- if (c < 32 || c >126)
- fprintf (out, "\\x%02x", c & 255);
- else
- fputc (c, out);
- }
-}
-
-static void pr_tree (data1_handle dh, data1_node *n, FILE *out, int level)
-{
- fprintf (out, "%*s", level, "");
- switch (n->which)
- {
- case DATA1N_root:
- fprintf (out, "root abstract syntax=%s\n", n->u.root.type);
- break;
- case DATA1N_tag:
- fprintf (out, "tag type=%s sel=%d\n", n->u.tag.tag,
- n->u.tag.node_selected);
- if (n->u.tag.attributes)
- {
- data1_xattr *xattr = n->u.tag.attributes;
- fprintf (out, "%*s attr", level, "");
- for (; xattr; xattr = xattr->next)
- fprintf (out, " %s=%s ", xattr->name, xattr->value);
- fprintf (out, "\n");
- }
- break;
- case DATA1N_data:
- case DATA1N_comment:
- if (n->which == DATA1N_data)
- fprintf (out, "data type=");
- else
- fprintf (out, "comment type=");
- switch (n->u.data.what)
- {
- case DATA1I_inctxt:
- fprintf (out, "inctxt\n");
- break;
- case DATA1I_incbin:
- fprintf (out, "incbin\n");
- break;
- case DATA1I_text:
- fprintf (out, "text '");
- pr_string (out, n->u.data.data, n->u.data.len);
- fprintf (out, "'\n");
- break;
- case DATA1I_num:
- fprintf (out, "num '");
- pr_string (out, n->u.data.data, n->u.data.len);
- fprintf (out, "'\n");
- break;
- case DATA1I_oid:
- fprintf (out, "oid '");
- pr_string (out, n->u.data.data, n->u.data.len);
- fprintf (out, "'\n");
- break;
- case DATA1I_xmltext:
- fprintf (out, "xml text '");
- pr_string (out, n->u.data.data, n->u.data.len);
- fprintf (out, "'\n");
- break;
- default:
- fprintf (out, "unknown(%d)\n", n->u.data.what);
- break;
- }
- break;
- case DATA1N_preprocess:
- fprintf (out, "preprocess target=%s\n", n->u.preprocess.target);
- if (n->u.preprocess.attributes)
- {
- data1_xattr *xattr = n->u.preprocess.attributes;
- fprintf (out, "%*s attr", level, "");
- for (; xattr; xattr = xattr->next)
- fprintf (out, " %s=%s ", xattr->name, xattr->value);
- fprintf (out, "\n");
- }
- break;
- case DATA1N_variant:
- fprintf (out, "variant\n");
-#if 0
- if (n->u.variant.type->name)
- fprintf (out, " class=%s type=%d value=%s\n",
- n->u.variant.type->name, n->u.variant.type->type,
- n->u.variant.value);
-#endif
- break;
- default:
- fprintf (out, "unknown(%d)\n", n->which);
- }
- if (n->child)
- pr_tree (dh, n->child, out, level+4);
- if (n->next)
- pr_tree (dh, n->next, out, level);
-}
-
-
-void data1_pr_tree (data1_handle dh, data1_node *n, FILE *out)
-{
- pr_tree (dh, n, out, 0);
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_read.c,v 1.54 2002-10-08 23:00:09 adam Exp $
- */
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <yaz/xmalloc.h>
-#include <yaz/yaz-util.h>
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-data1_node *data1_get_root_tag (data1_handle dh, data1_node *n)
-{
- if (!n)
- return 0;
- if (data1_is_xmlmode(dh))
- {
- n = n->child;
- while (n && n->which != DATA1N_tag)
- n = n->next;
- }
- return n;
-}
-
-/*
- * get the tag which is the immediate parent of this node (this may mean
- * traversing intermediate things like variants and stuff.
- */
-data1_node *get_parent_tag (data1_handle dh, data1_node *n)
-{
- if (data1_is_xmlmode(dh))
- {
- for (; n && n->which != DATA1N_root; n = n->parent)
- if (n->which == DATA1N_tag && n->parent &&
- n->parent->which != DATA1N_root)
- return n;
- }
- else
- {
- for (; n && n->which != DATA1N_root; n = n->parent)
- if (n->which == DATA1N_tag)
- return n;
- }
- return 0;
-}
-
-data1_node *data1_mk_node (data1_handle dh, NMEM m)
-{
- return data1_mk_node2 (dh, m, DATA1N_root, 0);
-}
-
-data1_node *data1_mk_node_type (data1_handle dh, NMEM m, int type)
-{
- return data1_mk_node2 (dh, m, type, 0);
-}
-
-static void data1_init_node (data1_handle dh, data1_node *r, int type)
-{
- r->which = type;
- switch(type)
- {
- case DATA1N_tag:
- r->u.tag.tag = 0;
- r->u.tag.element = 0;
- r->u.tag.no_data_requested = 0;
- r->u.tag.node_selected = 0;
- r->u.tag.make_variantlist = 0;
- r->u.tag.get_bytes = -1;
- r->u.tag.attributes = 0;
- break;
- case DATA1N_root:
- r->u.root.type = 0;
- r->u.root.absyn = 0;
- break;
- case DATA1N_data:
- r->u.data.data = 0;
- r->u.data.len = 0;
- r->u.data.what = 0;
- r->u.data.formatted_text = 0;
- break;
- case DATA1N_comment:
- r->u.data.data = 0;
- r->u.data.len = 0;
- r->u.data.what = 0;
- r->u.data.formatted_text = 1;
- break;
- case DATA1N_variant:
- r->u.variant.type = 0;
- r->u.variant.value = 0;
- break;
- case DATA1N_preprocess:
- r->u.preprocess.target = 0;
- r->u.preprocess.attributes = 0;
- break;
- default:
- logf (LOG_WARN, "data_mk_node_type. bad type = %d\n", type);
- }
-}
-
-data1_node *data1_append_node (data1_handle dh, NMEM m, int type,
- data1_node *parent)
-{
- data1_node *r = (data1_node *)nmem_malloc(m, sizeof(*r));
- r->next = r->child = r->last_child = 0;
- r->destroy = 0;
-
- if (!parent)
- r->root = r;
- else
- {
- r->root = parent->root;
- r->parent = parent;
- if (!parent->child)
- parent->child = parent->last_child = r;
- else
- parent->last_child->next = r;
- parent->last_child = r;
- }
- data1_init_node(dh, r, type);
- return r;
-}
-
-data1_node *data1_mk_node2 (data1_handle dh, NMEM m, int type,
- data1_node *parent)
-{
- return data1_append_node (dh, m, type, parent);
-}
-
-data1_node *data1_insert_node (data1_handle dh, NMEM m, int type,
- data1_node *parent)
-{
- data1_node *r = (data1_node *)nmem_malloc(m, sizeof(*r));
- r->next = r->child = r->last_child = 0;
- r->destroy = 0;
-
- if (!parent)
- r->root = r;
- else
- {
- r->root = parent->root;
- r->parent = parent;
- if (!parent->child)
- parent->last_child = r;
- else
- r->next = parent->child;
- parent->child = r;
- }
- data1_init_node(dh, r, type);
- return r;
-}
-
-void data1_free_tree (data1_handle dh, data1_node *t)
-{
- data1_node *p = t->child, *pn;
-
- while (p)
- {
- pn = p->next;
- data1_free_tree (dh, p);
- p = pn;
- }
- if (t->destroy)
- (*t->destroy)(t);
-}
-
-data1_node *data1_mk_root (data1_handle dh, NMEM nmem, const char *name)
-{
- data1_absyn *absyn = data1_get_absyn (dh, name);
- data1_node *res;
- if (!absyn)
- {
- yaz_log(LOG_WARN, "Unable to acquire abstract syntax " "for '%s'",
- name);
- /* It's now OK for a record not to have an absyn */
- }
- res = data1_mk_node2 (dh, nmem, DATA1N_root, 0);
- res->u.root.type = data1_insert_string (dh, res, nmem, name);
- res->u.root.absyn = absyn;
- return res;
-}
-
-void data1_set_root(data1_handle dh, data1_node *res,
- NMEM nmem, const char *name)
-{
- data1_absyn *absyn = data1_get_absyn (dh, name);
-
- res->u.root.type = data1_insert_string (dh, res, nmem, name);
- res->u.root.absyn = absyn;
-}
-
-data1_node *data1_mk_preprocess (data1_handle dh, NMEM nmem,
- const char *target,
- const char **attr, data1_node *at)
-{
- return data1_mk_preprocess_n (dh, nmem, target, strlen(target),
- attr, at);
-}
-
-data1_node *data1_mk_preprocess_n (data1_handle dh, NMEM nmem,
- const char *target, size_t len,
- const char **attr, data1_node *at)
-{
- data1_xattr **p;
- data1_node *res = data1_mk_node2 (dh, nmem, DATA1N_preprocess, at);
- res->u.preprocess.target = data1_insert_string_n (dh, res, nmem,
- target, len);
-
- p = &res->u.preprocess.attributes;
- while (attr && *attr)
- {
- *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p));
- (*p)->name = nmem_strdup (nmem, *attr++);
- (*p)->value = nmem_strdup (nmem, *attr++);
- (*p)->what = DATA1I_text;
-
- p = &(*p)->next;
- }
- *p = 0;
- return res;
-}
-
-data1_node *data1_mk_tag_n (data1_handle dh, NMEM nmem,
- const char *tag, size_t len, const char **attr,
- data1_node *at)
-{
- data1_node *partag = get_parent_tag(dh, at);
- data1_node *res = data1_mk_node2 (dh, nmem, DATA1N_tag, at);
- data1_xattr **p;
- data1_element *e = 0;
-
- res->u.tag.tag = data1_insert_string_n (dh, res, nmem, tag, len);
-
- if (!partag) /* top tag? */
- e = data1_getelementbytagname (dh, at->root->u.root.absyn,
- 0 /* index as local */,
- res->u.tag.tag);
- else
- {
- /* only set element for known tags */
- e = partag->u.tag.element;
- if (e)
- e = data1_getelementbytagname (dh, at->root->u.root.absyn,
- e, res->u.tag.tag);
- }
- res->u.tag.element = e;
- p = &res->u.tag.attributes;
- while (attr && *attr)
- {
- *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p));
- (*p)->name = nmem_strdup (nmem, *attr++);
- (*p)->value = nmem_strdup (nmem, *attr++);
- (*p)->what = DATA1I_text;
- p = &(*p)->next;
- }
- *p = 0;
- return res;
-}
-
-void data1_tag_add_attr (data1_handle dh, NMEM nmem,
- data1_node *res, const char **attr)
-{
- data1_xattr **p;
-
- if (res->which != DATA1N_tag)
- return;
-
- p = &res->u.tag.attributes;
- while (*p)
- p = &(*p)->next;
-
- while (attr && *attr)
- {
- *p = (data1_xattr*) nmem_malloc (nmem, sizeof(**p));
- (*p)->name = nmem_strdup (nmem, *attr++);
- (*p)->value = nmem_strdup (nmem, *attr++);
- (*p)->what = DATA1I_text;
- p = &(*p)->next;
- }
- *p = 0;
-}
-
-data1_node *data1_mk_tag (data1_handle dh, NMEM nmem,
- const char *tag, const char **attr, data1_node *at)
-{
- return data1_mk_tag_n (dh, nmem, tag, strlen(tag), attr, at);
-}
-
-data1_node *data1_search_tag (data1_handle dh, data1_node *n,
- const char *tag)
-{
- if (*tag == '/')
- {
- n = data1_get_root_tag (dh, n);
- if (n)
- n = n->child;
- tag++;
- }
- for (; n; n = n->next)
- if (n->which == DATA1N_tag && n->u.tag.tag &&
- !yaz_matchstr (tag, n->u.tag.tag))
- {
- return n;
- }
- return 0;
-}
-
-data1_node *data1_mk_tag_uni (data1_handle dh, NMEM nmem,
- const char *tag, data1_node *at)
-{
- data1_node *node = data1_search_tag (dh, at->child, tag);
- if (!node)
- node = data1_mk_tag (dh, nmem, tag, 0 /* attr */, at);
- else
- node->child = node->last_child = 0;
- return node;
-}
-
-data1_node *data1_mk_text_n (data1_handle dh, NMEM mem,
- const char *buf, size_t len, data1_node *parent)
-{
- data1_node *res = data1_mk_node2 (dh, mem, DATA1N_data, parent);
- res->u.data.what = DATA1I_text;
- res->u.data.len = len;
-
- res->u.data.data = data1_insert_string_n (dh, res, mem, buf, len);
- return res;
-}
-
-data1_node *data1_mk_text_nf (data1_handle dh, NMEM mem,
- const char *buf, size_t len, data1_node *parent)
-{
- data1_node *res = data1_mk_text_n (dh, mem, buf, len, parent);
- res->u.data.formatted_text = 1;
- return res;
-}
-
-data1_node *data1_mk_text (data1_handle dh, NMEM mem,
- const char *buf, data1_node *parent)
-{
- return data1_mk_text_n (dh, mem, buf, strlen(buf), parent);
-}
-
-data1_node *data1_mk_comment_n (data1_handle dh, NMEM mem,
- const char *buf, size_t len,
- data1_node *parent)
-{
- data1_node *res = data1_mk_node2 (dh, mem, DATA1N_comment, parent);
- res->u.data.what = DATA1I_text;
- res->u.data.len = len;
-
- res->u.data.data = data1_insert_string_n (dh, res, mem, buf, len);
- return res;
-}
-
-data1_node *data1_mk_comment (data1_handle dh, NMEM mem,
- const char *buf, data1_node *parent)
-{
- return data1_mk_comment_n (dh, mem, buf, strlen(buf), parent);
-}
-
-char *data1_insert_string_n (data1_handle dh, data1_node *res,
- NMEM m, const char *str, size_t len)
-{
- char *b;
- if (len >= DATA1_LOCALDATA)
- b = (char *) nmem_malloc (m, len+1);
- else
- b = res->lbuf;
- memcpy (b, str, len);
- b[len] = 0;
- return b;
-}
-
-char *data1_insert_string (data1_handle dh, data1_node *res,
- NMEM m, const char *str)
-{
- return data1_insert_string_n (dh, res, m, str, strlen(str));
-}
-
-static data1_node *data1_add_insert_taggeddata(data1_handle dh,
- data1_node *at,
- const char *tagname, NMEM m,
- int local_allowed,
- int insert_mode)
-{
- data1_node *root = at->root;
- data1_node *partag = get_parent_tag (dh, at);
- data1_element *e = NULL;
- data1_node *datn = 0;
- data1_node *tagn = 0;
-
- if (!partag)
- e = data1_getelementbytagname (dh, root->u.root.absyn, 0, tagname);
- else
- {
- e = partag->u.tag.element;
- if (e)
- e = data1_getelementbytagname (dh, root->u.root.absyn, e, tagname);
- }
- if (local_allowed || e)
- {
- if (insert_mode)
- tagn = data1_insert_node (dh, m, DATA1N_tag, at);
- else
- tagn = data1_append_node (dh, m, DATA1N_tag, at);
- tagn->u.tag.tag = data1_insert_string (dh, tagn, m, tagname);
- tagn->u.tag.element = e;
- datn = data1_mk_node2 (dh, m, DATA1N_data, tagn);
- }
- return datn;
-}
-
-data1_node *data1_mk_tag_data(data1_handle dh, data1_node *at,
- const char *tagname, NMEM m)
-{
- return data1_add_insert_taggeddata (dh, at, tagname, m, 1, 0);
-}
-
-
-/*
- * Insert a tagged node into the record root as first child of the node at
- * which should be root or tag itself). Returns pointer to the data node,
- * which can then be modified.
- */
-data1_node *data1_mk_tag_data_wd(data1_handle dh, data1_node *at,
- const char *tagname, NMEM m)
-{
- return data1_add_insert_taggeddata (dh, at, tagname, m, 0, 1);
-}
-
-data1_node *data1_insert_taggeddata (data1_handle dh, data1_node *root,
- data1_node *at, const char *tagname,
- NMEM m)
-{
- return data1_add_insert_taggeddata (dh, at, tagname, m, 0, 1);
-}
-
-data1_node *data1_add_taggeddata (data1_handle dh, data1_node *root,
- data1_node *at, const char *tagname,
- NMEM m)
-{
- return data1_add_insert_taggeddata (dh, at, tagname, m, 1, 0);
-}
-
-data1_node *data1_mk_tag_data_int (data1_handle dh, data1_node *at,
- const char *tag, int num,
- NMEM nmem)
-{
- data1_node *node_data;
-
- node_data = data1_mk_tag_data (dh, at, tag, nmem);
- if (!node_data)
- return 0;
- node_data->u.data.what = DATA1I_num;
- node_data->u.data.data = node_data->lbuf;
- sprintf (node_data->u.data.data, "%d", num);
- node_data->u.data.len = strlen (node_data->u.data.data);
- return node_data;
-}
-
-data1_node *data1_mk_tag_data_oid (data1_handle dh, data1_node *at,
- const char *tag, Odr_oid *oid,
- NMEM nmem)
-{
- data1_node *node_data;
- char str[128], *p = str;
- Odr_oid *ii;
-
- node_data = data1_mk_tag_data (dh, at, tag, nmem);
- if (!node_data)
- return 0;
-
- for (ii = oid; *ii >= 0; ii++)
- {
- if (ii != oid)
- *p++ = '.';
- sprintf (p, "%d", *ii);
- p += strlen (p);
- }
- node_data->u.data.what = DATA1I_oid;
- node_data->u.data.len = strlen (str);
- node_data->u.data.data = data1_insert_string (dh, node_data, nmem, str);
- return node_data;
-}
-
-
-data1_node *data1_mk_tag_data_text (data1_handle dh, data1_node *at,
- const char *tag, const char *str,
- NMEM nmem)
-{
- data1_node *node_data;
-
- node_data = data1_mk_tag_data (dh, at, tag, nmem);
- if (!node_data)
- return 0;
- node_data->u.data.what = DATA1I_text;
- node_data->u.data.len = strlen (str);
- node_data->u.data.data = data1_insert_string (dh, node_data, nmem, str);
- return node_data;
-}
-
-
-data1_node *data1_mk_tag_data_text_uni (data1_handle dh, data1_node *at,
- const char *tag, const char *str,
- NMEM nmem)
-{
- data1_node *node = data1_search_tag (dh, at->child, tag);
- if (!node)
- return data1_mk_tag_data_text (dh, at, tag, str, nmem);
- else
- {
- data1_node *node_data = node->child;
- node_data->u.data.what = DATA1I_text;
- node_data->u.data.len = strlen (str);
- node_data->u.data.data = data1_insert_string (dh, node_data,
- nmem, str);
- node_data->child = node_data->last_child = 0;
- return node_data;
- }
-}
-
-static int ampr (int (*get_byte)(void *fh), void *fh, int *amp)
-{
-#if 1
- int c = (*get_byte)(fh);
- *amp = 0;
- return c;
-#else
- int c = (*get_byte)(fh);
- *amp = 0;
- if (c == '&')
- {
- char ent[20];
- int i = 0;
-
- while (1)
- {
- c = (*get_byte)(fh);
- if (c == ';')
- {
- ent[i] = 0;
-
- c = ' ';
- if (!strcmp (ent, "quot"))
- c = '"';
- if (!strcmp (ent, "apos"))
- c = '\'';
- if (!strcmp (ent, "gt"))
- c = '>';
- if (!strcmp (ent, "lt"))
- c = '<';
- if (!strcmp (ent, "amp"))
- c = '&';
- *amp = 1;
- break;
- }
- else if (c == 0 || d1_isspace(c))
- break;
- if (i < 19)
- ent[i++] = c;
- }
- }
- return c;
-#endif
-}
-
-data1_xattr *data1_read_xattr (data1_handle dh, NMEM m,
- int (*get_byte)(void *fh), void *fh,
- WRBUF wrbuf, int *ch, int *amp)
-{
- data1_xattr *p_first = 0;
- data1_xattr **pp = &p_first;
- int c = *ch;
- for (;;)
- {
- data1_xattr *p;
- int len;
- while (*amp || (c && d1_isspace(c)))
- c = ampr (get_byte, fh, amp);
- if (*amp == 0 && (c == 0 || c == '>' || c == '/'))
- break;
- *pp = p = (data1_xattr *) nmem_malloc (m, sizeof(*p));
- p->next = 0;
- pp = &p->next;
- p->value = 0;
- p->what = DATA1I_xmltext;
-
- wrbuf_rewind(wrbuf);
- while (c && c != '=' && c != '>' && c != '/' && !d1_isspace(c))
- {
- wrbuf_putc (wrbuf, c);
- c = ampr (get_byte, fh, amp);
- }
- wrbuf_putc (wrbuf, '\0');
- len = wrbuf_len(wrbuf);
- p->name = (char*) nmem_malloc (m, len);
- strcpy (p->name, wrbuf_buf(wrbuf));
- if (c == '=')
- {
- c = ampr (get_byte, fh, amp);
- if (*amp == 0 && c == '"')
- {
- c = ampr (get_byte, fh, amp);
- wrbuf_rewind(wrbuf);
- while (*amp || (c && c != '"'))
- {
- wrbuf_putc (wrbuf, c);
- c = ampr (get_byte, fh, amp);
- }
- if (c)
- c = ampr (get_byte, fh, amp);
- }
- else if (*amp == 0 && c == '\'')
- {
- c = ampr (get_byte, fh, amp);
- wrbuf_rewind(wrbuf);
- while (*amp || (c && c != '\''))
- {
- wrbuf_putc (wrbuf, c);
- c = ampr (get_byte, fh, amp);
- }
- if (c)
- c = ampr (get_byte, fh, amp);
- }
- else
- {
- wrbuf_rewind(wrbuf);
- while (*amp || (c && c != '>' && c != '/'))
- {
- wrbuf_putc (wrbuf, c);
- c = ampr (get_byte, fh, amp);
- }
- }
- wrbuf_putc (wrbuf, '\0');
- len = wrbuf_len(wrbuf);
- p->value = (char*) nmem_malloc (m, len);
- strcpy (p->value, wrbuf_buf(wrbuf));
- }
- }
- *ch = c;
- return p_first;
-}
-
-/*
- * Ugh. Sometimes functions just grow and grow on you. This one reads a
- * 'node' and its children.
- */
-data1_node *data1_read_nodex (data1_handle dh, NMEM m,
- int (*get_byte)(void *fh), void *fh, WRBUF wrbuf)
-{
- data1_node *d1_stack[256];
- data1_node *res;
- int c, amp;
- int level = 0;
- int line = 1;
-
- d1_stack[level] = 0;
- c = ampr (get_byte, fh, &);
- while (c != '\0')
- {
- data1_node *parent = level ? d1_stack[level-1] : 0;
-
- if (amp == 0 && c == '<') /* beginning of tag */
- {
- data1_xattr *xattr;
-
- char tag[64];
- char args[256];
- int null_tag = 0;
- int end_tag = 0;
- size_t i = 0;
-
- c = ampr (get_byte, fh, &);
- if (amp == 0 && c == '/')
- {
- end_tag = 1;
- c = ampr (get_byte, fh, &);
- }
- else if (amp == 0 && c == '!')
- {
- int c0, amp0;
-
- wrbuf_rewind(wrbuf);
-
- c0 = ampr (get_byte, fh, &0);
- if (amp0 == 0 && c0 == '\0')
- break;
- c = ampr (get_byte, fh, &);
-
- if (amp0 == 0 && c0 == '-' && amp == 0 && c == '-')
- {
- /* COMMENT: <!-- ... --> */
- int no_dash = 0;
-
- c = ampr (get_byte, fh, &);
- while (amp || c)
- {
- if (amp == 0 && c == '-')
- no_dash++;
- else if (amp == 0 && c == '>' && no_dash >= 2)
- {
- if (level > 0)
- d1_stack[level] =
- data1_mk_comment_n (
- dh, m,
- wrbuf_buf(wrbuf), wrbuf_len(wrbuf)-2,
- d1_stack[level-1]);
- c = ampr (get_byte, fh, &); /* skip > */
- break;
- }
- else
- no_dash = 0;
- wrbuf_putc (wrbuf, c);
- c = ampr (get_byte, fh, &);
- }
- continue;
- }
- else
- { /* DIRECTIVE: <! .. > */
-
- int blevel = 0;
- while (amp || c)
- {
- if (amp == 0 && c == '>' && blevel == 0)
- {
- c = ampr (get_byte, fh, &);
- break;
- }
- if (amp == 0 && c == '[')
- blevel++;
- if (amp == 0 && c == ']' && blevel > 0)
- blevel--;
- c = ampr (get_byte, fh, &);
- }
- continue;
- }
- }
- while (amp || (c && c != '>' && c != '/' && !d1_isspace(c)))
- {
- if (i < (sizeof(tag)-1))
- tag[i++] = c;
- c = ampr (get_byte, fh, &);
- }
- tag[i] = '\0';
- xattr = data1_read_xattr (dh, m, get_byte, fh, wrbuf, &c, &);
- args[0] = '\0';
- if (amp == 0 && c == '/')
- { /* <tag attrs/> or <tag/> */
- null_tag = 1;
- c = ampr (get_byte, fh, &);
- }
- if (amp || c != '>')
- {
- yaz_log(LOG_WARN, "d1: %d: Malformed tag", line);
- return 0;
- }
- else
- c = ampr (get_byte, fh, &);
-
- /* End tag? */
- if (end_tag)
- {
- if (*tag == '\0')
- --level; /* </> */
- else
- { /* </tag> */
- int i = level;
- while (i > 0)
- {
- parent = d1_stack[--i];
- if ((parent->which == DATA1N_root &&
- !strcmp(tag, parent->u.root.type)) ||
- (parent->which == DATA1N_tag &&
- !strcmp(tag, parent->u.tag.tag)))
- {
- level = i;
- break;
- }
- }
- if (i != level)
- {
- yaz_log (LOG_WARN, "%d: no begin tag for %s",
- line, tag);
- break;
- }
- }
- if (data1_is_xmlmode(dh))
- {
- if (level <= 1)
- return d1_stack[0];
- }
- else
- {
- if (level <= 0)
- return d1_stack[0];
- }
- continue;
- }
- else if (!strcmp(tag, "var"))
- {
- char tclass[DATA1_MAX_SYMBOL], type[DATA1_MAX_SYMBOL];
- data1_vartype *tp;
- int val_offset;
-
- if (sscanf(args, "%s %s %n", tclass, type, &val_offset) != 2)
- {
- yaz_log(LOG_WARN, "Malformed variant triple at '%s'", tag);
- continue;
- }
- if (!(tp =
- data1_getvartypebyct(dh,
- parent->root->u.root.absyn->varset,
- tclass, type)))
- continue;
- /*
- * If we're the first variant in this group, create a parent
- * variant, and insert it before the current variant.
- */
- if (parent->which != DATA1N_variant)
- {
- res = data1_mk_node2 (dh, m, DATA1N_variant, parent);
- }
- else
- {
- /*
- * now determine if one of our ancestor triples is of
- * same type. If so, we break here.
- */
- int i;
- for (i = level-1; d1_stack[i]->which==DATA1N_variant; --i)
- if (d1_stack[i]->u.variant.type == tp)
- {
- level = i;
- break;
- }
- res = data1_mk_node2 (dh, m, DATA1N_variant, parent);
- res->u.variant.type = tp;
- res->u.variant.value =
- data1_insert_string (dh, res, m, args + val_offset);
- }
- }
- else
- {
-
- /* tag .. acquire our element in the abstract syntax */
- if (level == 0)
- {
- parent = data1_mk_root (dh, m, tag);
- res = d1_stack[level] = parent;
-
- if (data1_is_xmlmode(dh))
- {
- level++;
- res = data1_mk_tag (dh, m, tag, 0 /* attr */, parent);
- res->u.tag.attributes = xattr;
- }
- }
- else
- {
- res = data1_mk_tag (dh, m, tag, 0 /* attr */, parent);
- res->u.tag.attributes = xattr;
- }
- }
- d1_stack[level] = res;
- d1_stack[level+1] = 0;
- if (level < 250 && !null_tag)
- ++level;
- }
- else /* != '<'... this is a body of text */
- {
- int len;
-
- if (level == 0)
- {
- c = ampr (get_byte, fh, &);
- continue;
- }
- res = data1_mk_node2 (dh, m, DATA1N_data, parent);
- res->u.data.what = DATA1I_xmltext;
- res->u.data.formatted_text = 0;
- d1_stack[level] = res;
-
- wrbuf_rewind(wrbuf);
-
- while (amp || (c && c != '<'))
- {
- wrbuf_putc (wrbuf, c);
- c = ampr (get_byte, fh, &);
- }
- len = wrbuf_len(wrbuf);
-
- /* use local buffer of nmem if too large */
- if (len >= DATA1_LOCALDATA)
- res->u.data.data = (char*) nmem_malloc (m, len);
- else
- res->u.data.data = res->lbuf;
-
- if (len)
- memcpy (res->u.data.data, wrbuf_buf(wrbuf), len);
- else
- res->u.data.data = 0;
- res->u.data.len = len;
- }
- }
- return 0;
-}
-
-int getc_mem (void *fh)
-{
- const char **p = (const char **) fh;
- if (**p)
- return *(*p)++;
- return 0;
-}
-
-data1_node *data1_read_node (data1_handle dh, const char **buf, NMEM m)
-{
- WRBUF wrbuf = wrbuf_alloc();
- data1_node *node;
-
- node = data1_read_nodex(dh, m, getc_mem, (void *) (buf), wrbuf);
- wrbuf_free (wrbuf, 1);
- return node;
-}
-
-/*
- * Read a record in the native syntax.
- */
-data1_node *data1_read_record(data1_handle dh,
- int (*rf)(void *, char *, size_t), void *fh,
- NMEM m)
-{
- int *size;
- char **buf = data1_get_read_buf (dh, &size);
- const char *bp;
- int rd = 0, res;
-
- if (!*buf)
- *buf = (char *)xmalloc(*size = 4096);
-
- for (;;)
- {
- if (rd + 2048 >= *size && !(*buf =(char *)xrealloc(*buf, *size *= 2)))
- abort();
- if ((res = (*rf)(fh, *buf + rd, 2048)) <= 0)
- {
- if (!res)
- {
- bp = *buf;
- (*buf)[rd] = '\0';
- return data1_read_node(dh, &bp, m);
- }
- else
- return 0;
- }
- rd += res;
- }
-}
-
-data1_node *data1_read_sgml (data1_handle dh, NMEM m, const char *buf)
-{
- const char *bp = buf;
- return data1_read_node (dh, &bp, m);
-}
-
-
-static int conv_item (NMEM m, yaz_iconv_t t,
- WRBUF wrbuf, char *inbuf, size_t inlen)
-{
- wrbuf_rewind (wrbuf);
- if (wrbuf->size < 10)
- wrbuf_grow (wrbuf, 10);
- for (;;)
- {
- char *outbuf = wrbuf->buf + wrbuf->pos;
- size_t outlen = wrbuf->size - wrbuf->pos;
- if (yaz_iconv (t, &inbuf, &inlen, &outbuf, &outlen) ==
- (size_t)(-1) && yaz_iconv_error(t) != YAZ_ICONV_E2BIG)
- {
- /* bad data. stop and skip conversion entirely */
- return -1;
- }
- else if (inlen == 0)
- { /* finished converting */
- wrbuf->pos = wrbuf->size - outlen;
- break;
- }
- else
- {
- /* buffer too small: make sure we expand buffer */
- wrbuf->pos = wrbuf->size - outlen;
- wrbuf_grow(wrbuf, 20);
- }
- }
- return 0;
-}
-
-static void data1_iconv_s (data1_handle dh, NMEM m, data1_node *n,
- yaz_iconv_t t, WRBUF wrbuf, const char *tocode)
-{
- for (; n; n = n->next)
- {
- switch (n->which)
- {
- case DATA1N_data:
- case DATA1N_comment:
- if (conv_item (m, t, wrbuf, n->u.data.data, n->u.data.len) == 0)
- {
- n->u.data.data =
- data1_insert_string_n (dh, n, m, wrbuf->buf,
- wrbuf->pos);
- n->u.data.len = wrbuf->pos;
- }
- break;
- case DATA1N_tag:
- if (conv_item (m, t, wrbuf, n->u.tag.tag, strlen(n->u.tag.tag))
- == 0)
- {
- n->u.tag.tag =
- data1_insert_string_n (dh, n, m,
- wrbuf->buf, wrbuf->pos);
- }
- if (n->u.tag.attributes)
- {
- data1_xattr *p;
- for (p = n->u.tag.attributes; p; p = p->next)
- {
- if (p->value &&
- conv_item(m, t, wrbuf, p->value, strlen(p->value))
- == 0)
- {
- wrbuf_puts (wrbuf, "");
- p->value = nmem_strdup (m, wrbuf->buf);
- }
- }
- }
- break;
- case DATA1N_preprocess:
- if (strcmp(n->u.preprocess.target, "xml") == 0)
- {
- data1_xattr *p = n->u.preprocess.attributes;
- for (; p; p = p->next)
- if (strcmp (p->name, "encoding") == 0)
- p->value = nmem_strdup (m, tocode);
- }
- break;
- }
- data1_iconv_s (dh, m, n->child, t, wrbuf, tocode);
- }
-}
-
-const char *data1_get_encoding (data1_handle dh, data1_node *n)
-{
- /* see if we have an xml header that specifies encoding */
- if (n && n->child && n->child->which == DATA1N_preprocess &&
- strcmp (n->child->u.preprocess.target, "xml") == 0)
- {
- data1_xattr *xp = n->child->u.preprocess.attributes;
- for (; xp; xp = xp->next)
- if (!strcmp (xp->name, "encoding") == 0)
- return xp->value;
- }
- /* no encoding in header, so see if "encoding" was specified for abs */
- if (n && n->which == DATA1N_root &&
- n->u.root.absyn && n->u.root.absyn->encoding)
- return n->u.root.absyn->encoding;
- /* none of above, return a hard coded default */
- return "ISO-8859-1";
-}
-
-int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
- const char *tocode,
- const char *fromcode)
-{
- if (strcmp (tocode, fromcode))
- {
- WRBUF wrbuf = wrbuf_alloc();
- yaz_iconv_t t = yaz_iconv_open (tocode, fromcode);
- if (!t)
- return -1;
- data1_iconv_s (dh, m, n, t, wrbuf, tocode);
- yaz_iconv_close (t);
- wrbuf_free (wrbuf, 1);
- }
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_soif.c,v $
- * Revision 1.4 1999-11-30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.3 1997/09/17 12:10:37 adam
- * YAZ version 1.4.
- *
- * Revision 1.2 1997/04/30 08:52:11 quinn
- * Null
- *
- * Revision 1.1 1996/10/08 10:43:20 quinn
- * Added SOIF syntax.
- *
- *
- */
-
-#include <yaz/wrbuf.h>
-#include <yaz/data1.h>
-
-/*
- * This module generates SOIF (Simple Object Interchange Format) records
- * from d1-nodes. nested elements are flattened out, depth first, by
- * concatenating the tag names at each level.
- */
-
-static int nodetoelement(data1_node *n, int select, char *prefix, WRBUF b)
-{
- data1_node *c;
- char tmp[1024];
-
- for (c = n->child; c; c = c->next)
- {
- char *tag;
-
- if (c->which == DATA1N_tag)
- {
- if (select && !c->u.tag.node_selected)
- continue;
- if (c->u.tag.element && c->u.tag.element->tag)
- tag = c->u.tag.element->tag->names->name; /* first name */
- else
- tag = c->u.tag.tag; /* local string tag */
-
- if (*prefix)
- sprintf(tmp, "%s-%s", prefix, tag);
- else
- strcpy(tmp, tag);
-
- if (nodetoelement(c, select, tmp, b) < 0)
- return 0;
- }
- else if (c->which == DATA1N_data)
- {
- char *p = c->u.data.data;
- int l = c->u.data.len;
-
- wrbuf_write(b, prefix, strlen(prefix));
-
- sprintf(tmp, "{%d}:\t", l);
- wrbuf_write(b, tmp, strlen(tmp));
- wrbuf_write(b, p, l);
- wrbuf_putc(b, '\n');
- }
- }
- return 0;
-}
-
-char *data1_nodetosoif (data1_handle dh, data1_node *n, int select, int *len)
-{
- WRBUF b = data1_get_wrbuf (dh);
- char buf[128];
-
- wrbuf_rewind(b);
-
- if (n->which != DATA1N_root)
- return 0;
- sprintf(buf, "@%s{\n", n->u.root.type);
- wrbuf_write(b, buf, strlen(buf));
- if (nodetoelement(n, select, "", b))
- return 0;
- wrbuf_write(b, "}\n", 2);
- *len = wrbuf_len(b);
- return wrbuf_buf(b);
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_sumout.c,v $
- * Revision 1.5 1999-11-30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.4 1999/08/27 09:40:32 adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.3 1998/02/11 11:53:35 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.2 1997/09/17 12:10:38 adam
- * YAZ version 1.4.
- *
- * Revision 1.1 1996/06/10 08:56:03 quinn
- * Work on Summary.
- *
- *
- */
-
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <yaz/log.h>
-#include <yaz/proto.h>
-#include <yaz/data1.h>
-
-static int *f_integer(data1_node *c, ODR o)
-{
- int *r;
- char intbuf[64];
-
- if (!c->child || c->child->which != DATA1N_data ||
- c->child->u.data.len > 63)
- return 0;
- r = (int *)odr_malloc(o, sizeof(*r));
- sprintf(intbuf, "%.*s", 63, c->child->u.data.data);
- *r = atoi(intbuf);
- return r;
-}
-
-static char *f_string(data1_node *c, ODR o)
-{
- char *r;
-
- if (!c->child || c->child->which != DATA1N_data)
- return 0;
- r = (char *)odr_malloc(o, c->child->u.data.len+1);
- memcpy(r, c->child->u.data.data, c->child->u.data.len);
- r[c->child->u.data.len] = '\0';
- return r;
-}
-
-Z_BriefBib *data1_nodetosummary (data1_handle dh, data1_node *n,
- int select, ODR o)
-{
- Z_BriefBib *res = (Z_BriefBib *)odr_malloc(o, sizeof(*res));
- data1_node *c;
-
- assert(n->which == DATA1N_root);
- if (strcmp(n->u.root.type, "summary"))
- {
- yaz_log(LOG_WARN, "Attempt to convert a non-summary record");
- return 0;
- }
-
- res->title = "[UNKNOWN]";
- res->author = 0;
- res->callNumber = 0;
- res->recordType = 0;
- res->bibliographicLevel = 0;
- res->num_format = 0;
- res->format = 0;
- res->publicationPlace = 0;
- res->publicationDate = 0;
- res->targetSystemKey = 0;
- res->satisfyingElement = 0;
- res->rank = 0;
- res->documentId = 0;
- res->abstract = 0;
- res->otherInfo = 0;
-
- for (c = n->child; c; c = c->next)
- {
- if (c->which != DATA1N_tag || !c->u.tag.element)
- {
- yaz_log(LOG_WARN, "Malformed element in Summary record");
- return 0;
- }
- if (select && !c->u.tag.node_selected)
- continue;
- switch (c->u.tag.element->tag->value.numeric)
- {
- case 0: res->title = f_string(c, o); break;
- case 1: res->author = f_string(c, o); break;
- case 2: res->callNumber = f_string(c, o); break;
- case 3: res->recordType = f_string(c, o); break;
- case 4: res->bibliographicLevel = f_string(c, o); break;
- case 5: abort(); /* TODO */
- case 10: res->publicationPlace = f_string(c, o); break;
- case 11: res->publicationDate = f_string(c, o); break;
- case 12: res->targetSystemKey = f_string(c, o); break;
- case 13: res->satisfyingElement = f_string(c, o); break;
- case 14: res->rank = f_integer(c, o); break;
- case 15: res->documentId = f_string(c, o); break;
- case 16: res->abstract = f_string(c, o); break;
- case 17: abort(); /* TODO */
- default:
- yaz_log(LOG_WARN, "Unknown element in Summary record.");
- }
- }
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_sutrs.c,v 1.8 2002-10-08 22:18:23 adam Exp $
- *
- */
-
-#include <yaz/data1.h>
-
-#define NTOBUF_INDENT 2
-#define NTOBUF_MARGIN 75
-
-static int wordlen(char *b, int i)
-{
- int l = 0;
-
- while (i && !d1_isspace(*b))
- l++, b++, i--;
- return l;
-}
-
-static int nodetobuf(data1_node *n, int select, WRBUF b, int indent, int col)
-{
- data1_node *c;
- char line[1024];
-
- for (c = n->child; c; c = c->next)
- {
- char *tag;
-
- if (c->which == DATA1N_tag)
- {
- if (select && !c->u.tag.node_selected)
- continue;
- if (c->u.tag.element && c->u.tag.element->tag)
- tag = c->u.tag.element->tag->names->name; /* first name */
- else
- tag = c->u.tag.tag; /* local string tag */
- if (data1_matchstr(tag, "wellknown")) /* skip wellknown */
- {
- if (col)
- wrbuf_putc(b, '\n');
- sprintf(line, "%*s%s:", indent * NTOBUF_INDENT, "", tag);
- wrbuf_write(b, line, strlen(line));
- col = strlen(line);
- }
- if (nodetobuf(c, select, b, indent+1, col) < 0)
- return 0;
- }
- else if (c->which == DATA1N_data)
- {
- char *p = c->u.data.data;
- int l = c->u.data.len;
- int first = 0;
-
- if ((c->u.data.what == DATA1I_text ||
- c->u.data.what == DATA1I_xmltext) && c->u.data.formatted_text)
- {
- wrbuf_putc(b, '\n');
- wrbuf_write(b, c->u.data.data, c->u.data.len);
- sprintf(line, "%*s", indent * NTOBUF_INDENT, "");
- wrbuf_write(b, line, strlen(line));
- col = indent * NTOBUF_INDENT;
- }
- else if (c->u.data.what == DATA1I_text ||
- c->u.data.what == DATA1I_xmltext)
- {
- while (l)
- {
- int wlen;
-
- while (l && d1_isspace(*p))
- p++, l--;
- if (!l)
- break;
- /* break if we'll cross margin and word is not too long */
- if (col + (wlen = wordlen(p, l)) > NTOBUF_MARGIN && wlen <
- NTOBUF_MARGIN - indent * NTOBUF_INDENT)
- {
- sprintf(line, "\n%*s", indent * NTOBUF_INDENT, "");
- wrbuf_write(b, line, strlen(line));
- col = indent * NTOBUF_INDENT;
- first = 1;
- }
- if (!first)
- {
- wrbuf_putc(b, ' ');
- col++;
- }
- while (l && !d1_isspace(*p))
- {
- if (col > NTOBUF_MARGIN)
- {
- wrbuf_putc(b, '=');
- wrbuf_putc(b, '\n');
- sprintf(line, "%*s", indent * NTOBUF_INDENT, "");
- wrbuf_write(b, line, strlen(line));
- col = indent * NTOBUF_INDENT;
- }
- wrbuf_putc(b, *p);
- p++;
- l--;
- col++;
- }
- first = 0;
- }
- }
- else if (c->u.data.what == DATA1I_num)
- {
- wrbuf_putc(b, ' ');
- wrbuf_write(b, c->u.data.data, c->u.data.len);
- }
- }
- }
- return 0;
-}
-
-/*
- * Return area containing SUTRS-formatted data. Ownership of this data
- * remains in this module, and the buffer is reused on next call. This may
- * need changing.
- */
-
-char *data1_nodetobuf (data1_handle dh, data1_node *n, int select, int *len)
-{
- WRBUF b = data1_get_wrbuf (dh);
-
- wrbuf_rewind(b);
- if (nodetobuf(n, select, b, 0, 0))
- return 0;
- wrbuf_putc(b, '\n');
- *len = wrbuf_len(b);
- return wrbuf_buf(b);
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_tagset.c,v $
- * Revision 1.15 2002-04-04 20:49:46 adam
- * New functions yaz_is_abspath, yaz_path_fopen_base
- *
- * Revision 1.14 1999/11/30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.13 1999/10/21 12:06:29 adam
- * Retrieval module no longer uses ctype.h - functions.
- *
- * Revision 1.12 1999/08/27 09:40:32 adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.11 1998/10/19 14:16:36 adam
- * Fixed data1_gettagbyname. Bug introduced by previous revision.
- *
- * Revision 1.10 1998/10/15 08:29:17 adam
- * Tag set type may be specified in reference to it using "tagset"
- * directive in .abs-files and "include" directive in .tag-files.
- *
- * Revision 1.9 1998/10/13 16:09:53 adam
- * Added support for arbitrary OID's for tagsets, schemas and attribute sets.
- * Added support for multiple attribute set references and tagset references
- * from an abstract syntax file.
- * Fixed many bad logs-calls in routines that read the various
- * specifications regarding data1 (*.abs,*.att,...) and made the messages
- * consistent whenever possible.
- * Added extra 'lineno' argument to function readconf_line.
- *
- * Revision 1.8 1998/05/18 13:07:07 adam
- * Changed the way attribute sets are handled by the retriaval module.
- * Extended Explain conversion / schema.
- * Modified server and client to work with ASN.1 compiled protocol handlers.
- *
- * Revision 1.7 1998/02/11 11:53:35 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.6 1997/09/17 12:10:38 adam
- * YAZ version 1.4.
- *
- * Revision 1.5 1997/09/05 09:50:57 adam
- * Removed global data1_tabpath - uses data1_get_tabpath() instead.
- *
- * Revision 1.4 1995/11/13 09:27:38 quinn
- * Fiddling with the variant stuff.
- *
- * Revision 1.3 1995/11/01 16:34:58 quinn
- * Making data1 look for tables in data1_tabpath
- *
- * Revision 1.2 1995/11/01 13:54:49 quinn
- * Minor adjustments
- *
- * Revision 1.1 1995/11/01 11:56:09 quinn
- * Added Retrieval (data management) functions en masse.
- *
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-/*
- * We'll probably want to add some sort of hashed index to these lookup-
- * functions eventually.
- */
-
-data1_datatype data1_maptype (data1_handle dh, char *t)
-{
- static struct
- {
- char *tname;
- data1_datatype type;
- } types[] =
- {
- {"structured", DATA1K_structured},
- {"string", DATA1K_string},
- {"numeric", DATA1K_numeric},
- {"oid", DATA1K_oid},
- {"bool", DATA1K_bool},
- {"generalizedtime", DATA1K_generalizedtime},
- {"intunit", DATA1K_intunit},
- {"int", DATA1K_int},
- {"octetstring", DATA1K_octetstring},
- {"null", DATA1K_null},
- {NULL, (data1_datatype) -1}
- };
- int i;
-
- for (i = 0; types[i].tname; i++)
- if (!data1_matchstr(types[i].tname, t))
- return types[i].type;
- return DATA1K_unknown;
-}
-
-data1_tag *data1_gettagbynum (data1_handle dh, data1_tagset *s,
- int type, int value)
-{
- data1_tag *r;
-
- for (; s; s = s->next)
- {
- /* scan local set */
- if (type == s->type)
- for (r = s->tags; r; r = r->next)
- if (r->which == DATA1T_numeric && r->value.numeric == value)
- return r;
- /* scan included sets */
- if (s->children &&
- (r = data1_gettagbynum (dh, s->children, type, value)))
- return r;
- }
- return 0;
-}
-
-data1_tag *data1_gettagbyname (data1_handle dh, data1_tagset *s,
- const char *name)
-{
- data1_tag *r;
-
- for (; s; s = s->next)
- {
- /* scan local set */
- for (r = s->tags; r; r = r->next)
- {
- data1_name *np;
-
- for (np = r->names; np; np = np->next)
- if (!data1_matchstr(np->name, name))
- return r;
- }
- /* scan included sets */
- if (s->children && (r = data1_gettagbyname (dh, s->children, name)))
- return r;
- }
- return 0;
-}
-
-data1_tagset *data1_empty_tagset (data1_handle dh)
-{
- data1_tagset *res =
- (data1_tagset *) nmem_malloc(data1_nmem_get (dh), sizeof(*res));
- res->name = 0;
- res->reference = VAL_NONE;
- res->tags = 0;
- res->type = 0;
- res->children = 0;
- res->next = 0;
- return res;
-}
-
-data1_tagset *data1_read_tagset (data1_handle dh, const char *file, int type)
-{
- NMEM mem = data1_nmem_get (dh);
- data1_tagset *res = 0;
- data1_tagset **childp;
- data1_tag **tagp;
- FILE *f;
- int lineno = 0;
- int argc;
- char *argv[50], line[512];
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- {
- yaz_log(LOG_WARN|LOG_ERRNO, "%s", file);
- return 0;
- }
- res = data1_empty_tagset (dh);
- res->type = type;
- childp = &res->children;
- tagp = &res->tags;
-
- while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- {
- char *cmd = *argv;
- if (!strcmp(cmd, "tag"))
- {
- int value;
- char *names, *type, *nm;
- data1_tag *rr;
- data1_name **npp;
-
- if (argc != 4)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args to tag", file, lineno);
- continue;
- }
- value = atoi(argv[1]);
- names = argv[2];
- type = argv[3];
-
- rr = *tagp = (data1_tag *)nmem_malloc(mem, sizeof(*rr));
- rr->tagset = res;
- rr->next = 0;
- rr->which = DATA1T_numeric;
- rr->value.numeric = value;
- /*
- * how to deal with local numeric tags?
- */
-
- if (!(rr->kind = data1_maptype(dh, type)))
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown datatype %s",
- file, lineno, type);
- fclose(f);
- return 0;
- }
-
- /* read namelist */
- nm = names;
- npp = &rr->names;
- do
- {
- char *e;
-
- *npp = (data1_name *)nmem_malloc(mem, sizeof(**npp));
- if ((e = strchr(nm, '/')))
- *(e++) = '\0';
- (*npp)->name = nmem_strdup(mem, nm);
- (*npp)->next = 0;
- npp = &(*npp)->next;
- nm = e;
- }
- while (nm);
- tagp = &rr->next;
- }
- else if (!strcmp(cmd, "name"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args to name", file, lineno);
- continue;
- }
- res->name = nmem_strdup(mem, argv[1]);
- }
- else if (!strcmp(cmd, "reference"))
- {
- char *name;
-
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args to reference",
- file, lineno);
- continue;
- }
- name = argv[1];
- if ((res->reference = oid_getvalbyname(name)) == VAL_NONE)
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown tagset ref '%s'",
- file, lineno, name);
- continue;
- }
- }
- else if (!strcmp(cmd, "type"))
- {
- if (argc != 2)
- {
- yaz_log (LOG_WARN, "%s:%d: Bad # args to type", file, lineno);
- continue;
- }
- if (!res->type)
- res->type = atoi(argv[1]);
- }
- else if (!strcmp(cmd, "include"))
- {
- char *name;
- int type = 0;
-
- if (argc < 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args to include",
- file, lineno);
- continue;
- }
- name = argv[1];
- if (argc == 3)
- type = atoi(argv[2]);
- *childp = data1_read_tagset (dh, name, type);
- if (!(*childp))
- {
- yaz_log(LOG_WARN, "%s:%d: Inclusion failed for tagset %s",
- file, lineno, name);
- continue;
- }
- childp = &(*childp)->next;
- }
- else
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'",
- file, lineno, cmd);
- }
- }
- fclose(f);
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_varset.c,v $
- * Revision 1.11 2002-04-04 20:49:46 adam
- * New functions yaz_is_abspath, yaz_path_fopen_base
- *
- * Revision 1.10 1999/11/30 13:47:12 adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.9 1999/08/27 09:40:32 adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.8 1998/10/13 16:09:54 adam
- * Added support for arbitrary OID's for tagsets, schemas and attribute sets.
- * Added support for multiple attribute set references and tagset references
- * from an abstract syntax file.
- * Fixed many bad logs-calls in routines that read the various
- * specifications regarding data1 (*.abs,*.att,...) and made the messages
- * consistent whenever possible.
- * Added extra 'lineno' argument to function readconf_line.
- *
- * Revision 1.7 1998/02/11 11:53:35 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.6 1997/09/17 12:10:39 adam
- * YAZ version 1.4.
- *
- * Revision 1.5 1997/09/05 09:50:58 adam
- * Removed global data1_tabpath - uses data1_get_tabpath() instead.
- *
- * Revision 1.4 1997/05/14 06:54:04 adam
- * C++ support.
- *
- * Revision 1.3 1995/11/01 16:34:58 quinn
- * Making data1 look for tables in data1_tabpath
- *
- * Revision 1.2 1995/11/01 13:54:50 quinn
- * Minor adjustments
- *
- * Revision 1.1 1995/11/01 11:56:09 quinn
- * Added Retrieval (data management) functions en masse.
- *
- *
- */
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <yaz/oid.h>
-#include <yaz/log.h>
-#include <yaz/data1.h>
-
-data1_vartype *data1_getvartypebyct (data1_handle dh, data1_varset *set,
- char *zclass, char *type)
-{
- data1_varclass *c;
- data1_vartype *t;
-
- for (c = set->classes; c; c = c->next)
- if (!data1_matchstr(c->name, zclass))
- {
- for (t = c->types; t; t = t->next)
- if (!data1_matchstr(t->name, type))
- return t;
- yaz_log(LOG_WARN, "Unknown variant type %s in class %s",
- type, zclass);
- return 0;
- }
- yaz_log(LOG_WARN, "Unknown variant class %s", zclass);
- return 0;
-}
-
-data1_varset *data1_read_varset (data1_handle dh, const char *file)
-{
- NMEM mem = data1_nmem_get (dh);
- data1_varset *res = (data1_varset *)nmem_malloc(mem, sizeof(*res));
- data1_varclass **classp = &res->classes, *zclass = 0;
- data1_vartype **typep = 0;
- FILE *f;
- int lineno = 0;
- int argc;
- char *argv[50],line[512];
-
- res->name = 0;
- res->reference = VAL_NONE;
- res->classes = 0;
-
- if (!(f = data1_path_fopen(dh, file, "r")))
- {
- yaz_log(LOG_WARN|LOG_ERRNO, "%s", file);
- return 0;
- }
- while ((argc = readconf_line(f, &lineno, line, 512, argv, 50)))
- if (!strcmp(argv[0], "class"))
- {
- data1_varclass *r;
-
- if (argc != 3)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # or args to class",
- file, lineno);
- continue;
- }
- *classp = r = zclass = (data1_varclass *)
- nmem_malloc(mem, sizeof(*r));
- r->set = res;
- r->zclass = atoi(argv[1]);
- r->name = nmem_strdup(mem, argv[2]);
- r->types = 0;
- typep = &r->types;
- r->next = 0;
- classp = &r->next;
- }
- else if (!strcmp(argv[0], "type"))
- {
- data1_vartype *r;
-
- if (!typep)
- {
- yaz_log(LOG_WARN, "%s:%d: Directive class must precede type",
- file, lineno);
- continue;
- }
- if (argc != 4)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # or args to type",
- file, lineno);
- continue;
- }
- *typep = r = (data1_vartype *)nmem_malloc(mem, sizeof(*r));
- r->name = nmem_strdup(mem, argv[2]);
- r->zclass = zclass;
- r->type = atoi(argv[1]);
- if (!(r->datatype = data1_maptype (dh, argv[3])))
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown datatype '%s'",
- file, lineno, argv[3]);
- fclose(f);
- return 0;
- }
- r->next = 0;
- typep = &r->next;
- }
- else if (!strcmp(argv[0], "name"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args for name",
- file, lineno);
- continue;
- }
- res->name = nmem_strdup(mem, argv[1]);
- }
- else if (!strcmp(argv[0], "reference"))
- {
- if (argc != 2)
- {
- yaz_log(LOG_WARN, "%s:%d: Bad # args for reference",
- file, lineno);
- continue;
- }
- if ((res->reference = oid_getvalbyname(argv[1])) == VAL_NONE)
- {
- yaz_log(LOG_WARN, "%s:%d: Unknown reference '%s'",
- file, lineno, argv[1]);
- continue;
- }
- }
- else
- yaz_log(LOG_WARN, "%s:%d: Unknown directive '%s'",
- file, lineno, argv[0]);
-
- fclose(f);
- return res;
-}
+++ /dev/null
-/*
- * Copyright (c) 1995-2002, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: d1_write.c,v 1.19 2002-10-08 20:14:44 adam Exp $
- */
-
-#include <string.h>
-
-#include <yaz/data1.h>
-#include <yaz/wrbuf.h>
-
-#define IDSGML_MARGIN 75
-
-#define PRETTY_FORMAT 0
-
-static int wordlen(char *b, int max)
-{
- int l = 0;
-
- while (l < max && !d1_isspace(*b))
- l++, b++;
- return l;
-}
-
-static void indent (WRBUF b, int col)
-{
- int i;
- for (i = 0; i<col; i++)
- wrbuf_putc (b, ' ');
-}
-
-static void wrbuf_write_cdata(WRBUF b, const char *msg, int len)
-{
- int i;
-
- for (i = 0; i < len; i++)
- {
- switch (msg[i])
- {
- case '"':
- wrbuf_puts (b, """);
- break;
- case '\'':
- wrbuf_puts (b, "'");
- break;
- case '>':
- wrbuf_puts (b, ">");
- break;
- case '<':
- wrbuf_puts (b, "<");
- break;
- case '&':
- wrbuf_puts (b, "&");
- break;
- default:
- wrbuf_putc(b, msg[i]);
- }
- }
-}
-
-static void wrbuf_put_cdata(WRBUF b, const char *msg)
-{
- wrbuf_write_cdata (b, msg, strlen(msg));
-}
-
-static void wrbuf_put_xattr(WRBUF b, data1_xattr *p)
-{
- for (; p; p = p->next)
- {
- wrbuf_putc (b, ' ');
- if (p->what == DATA1I_xmltext)
- wrbuf_puts (b, p->name);
- else
- wrbuf_put_cdata (b, p->name);
- if (p->value)
- {
- wrbuf_putc (b, '=');
- wrbuf_putc (b, '"');
- if (p->what == DATA1I_text)
- wrbuf_put_cdata (b, p->value);
- else
- wrbuf_puts (b, p->value);
- wrbuf_putc (b, '"');
- }
- }
-}
-
-static int nodetoidsgml(data1_node *n, int select, WRBUF b, int col,
- int pretty_format)
-{
- data1_node *c;
-
- for (c = n->child; c; c = c->next)
- {
- char *tag;
-
- if (c->which == DATA1N_preprocess)
- {
- data1_xattr *p;
-
- if (pretty_format)
- indent (b, col);
- wrbuf_puts (b, "<?");
- wrbuf_put_cdata (b, c->u.preprocess.target);
- wrbuf_put_xattr (b, c->u.preprocess.attributes);
- if (c->child)
- wrbuf_puts(b, " ");
- if (nodetoidsgml(c, select, b, (col > 40) ? 40 : col+2,
- pretty_format) < 0)
- return -1;
- wrbuf_puts (b, "?>\n");
- }
- else if (c->which == DATA1N_tag)
- {
- if (select && !c->u.tag.node_selected)
- continue;
- tag = c->u.tag.tag;
- if (!data1_matchstr(tag, "wellknown")) /* skip wellknown */
- {
- if (nodetoidsgml(c, select, b, col, pretty_format) < 0)
- return -1;
- }
- else
- {
- data1_xattr *p;
-
- if (pretty_format)
- indent (b, col);
- wrbuf_puts (b, "<");
- wrbuf_put_cdata (b, tag);
- wrbuf_put_xattr (b, c->u.tag.attributes);
- wrbuf_puts(b, ">");
- if (pretty_format)
- wrbuf_puts(b, "\n");
- if (nodetoidsgml(c, select, b, (col > 40) ? 40 : col+2,
- pretty_format) < 0)
- return -1;
- if (pretty_format)
- indent (b, col);
- wrbuf_puts(b, "</");
- wrbuf_put_cdata(b, tag);
- wrbuf_puts(b, ">");
- if (pretty_format)
- wrbuf_puts (b, "\n");
- }
- }
- else if (c->which == DATA1N_data || c->which == DATA1N_comment)
- {
- char *p = c->u.data.data;
- int l = c->u.data.len;
- int first = 1;
- int lcol = col;
-
- if (pretty_format && !c->u.data.formatted_text)
- indent (b, col);
- if (c->which == DATA1N_comment)
- wrbuf_puts (b, "<!--");
- switch (c->u.data.what)
- {
- case DATA1I_xmltext:
- wrbuf_write(b, c->u.data.data, c->u.data.len);
- break;
- case DATA1I_text:
- if (!pretty_format || c->u.data.formatted_text)
- {
- wrbuf_write_cdata (b, p, l);
- }
- else
- {
- while (l)
- {
- int wlen;
-
- while (l && d1_isspace(*p))
- p++, l--;
- if (!l)
- break;
- /* break if we cross margin and word is not too long */
- if (lcol + (wlen = wordlen(p, l)) > IDSGML_MARGIN &&
- wlen < IDSGML_MARGIN)
- {
- wrbuf_puts (b, "\n");
- indent (b, col);
- lcol = col;
- first = 1;
- }
- if (!first)
- {
- wrbuf_putc(b, ' ');
- lcol++;
- }
- while (l && !d1_isspace(*p))
- {
- wrbuf_putc(b, *p);
- p++;
- l--;
- lcol++;
- }
- first = 0;
- }
- wrbuf_puts(b, "\n");
- }
- break;
- case DATA1I_num:
- wrbuf_write_cdata(b, c->u.data.data, c->u.data.len);
- if (pretty_format)
- wrbuf_puts(b, "\n");
- break;
- case DATA1I_oid:
- wrbuf_write_cdata(b, c->u.data.data, c->u.data.len);
- if (pretty_format)
- wrbuf_puts(b, "\n");
- }
- if (c->which == DATA1N_comment)
- {
- wrbuf_puts(b, "-->");
- if (pretty_format)
- wrbuf_puts(b, "\n");
- }
- }
- }
- return 0;
-}
-
-char *data1_nodetoidsgml (data1_handle dh, data1_node *n, int select, int *len)
-{
- WRBUF b = data1_get_wrbuf (dh);
-
- wrbuf_rewind(b);
-
- if (!data1_is_xmlmode (dh))
- {
- wrbuf_puts (b, "<");
- wrbuf_puts (b, n->u.root.type);
- wrbuf_puts (b, ">\n");
- }
- if (nodetoidsgml(n, select, b, 0, 0 /* no pretty format */))
- return 0;
- if (!data1_is_xmlmode (dh))
- {
- wrbuf_puts (b, "</");
- wrbuf_puts (b, n->u.root.type);
- wrbuf_puts (b, ">\n");
- }
- *len = wrbuf_len(b);
- return wrbuf_buf(b);
-}
+++ /dev/null
-## $Id: Makefile.am,v 1.3 2000-05-18 11:55:47 adam Exp $
-
-tabdatadir = $(pkgdatadir)/tab
-tabdata_DATA = bib1.att dan1.att danmarc.abs danmarc.mar \
- explain.abs explain.att explain.tag generic.tag gils-a.est \
- gils-b.est gils-f.est gils-g.est \
- gils-summary.map gils-usmarc.map gils-variant.est gils.abs gils.att \
- gils.tag meta-b.est meta-usmarc.map meta.abs meta.tag summary.abs \
- summary.tag tagsetg.tag tagsetm.tag usmarc-b.est usmarc.abs usmarc.mar \
- usmarc.tag var1.var wais-b.est wais-variant.est wais.abs
-
-EXTRA_DIST = bib1.att dan1.att danmarc.abs danmarc.mar \
- explain.abs explain.att explain.tag generic.tag gils-a.est \
- gils-b.est gils-f.est gils-g.est \
- gils-summary.map gils-usmarc.map gils-variant.est gils.abs gils.att \
- gils.tag meta-b.est meta-usmarc.map meta.abs meta.tag summary.abs \
- summary.tag tagsetg.tag tagsetm.tag usmarc-b.est usmarc.abs usmarc.mar \
- usmarc.tag var1.var wais-b.est wais-variant.est wais.abs
-
+++ /dev/null
-# $Id: bib1.att,v 1.9 1999-11-30 13:47:12 adam Exp $
-# Bib-1 Attribute Set
-name bib1
-reference Bib-1
-
-att 1 Personal-name
-att 2 Corporate-name
-att 3 Conference-name
-att 4 Title
-att 5 Title-series
-att 6 Title-uniform
-att 7 ISBN
-att 8 ISSN
-att 9 LC-card-number
-att 10 BNB-card-number
-att 11 BGF-number
-att 12 Local-number
-att 13 Dewey-classification
-att 14 UDC-classification
-att 15 Bliss-classification
-att 16 LC-call-number
-att 17 NLM-call-number
-att 18 NAL-call-number
-att 19 MOS-call-number
-att 20 Local-classification
-att 21 Subject-heading
-att 22 Subject-Rameau
-att 23 BDI-index-subject
-att 24 INSPEC-subject
-att 25 MESH-subject
-att 26 PA-subject
-att 27 LC-subject-heading
-att 28 RVM-subject-heading
-att 29 Local-subject-index
-att 30 Date
-att 31 Date-of-publication
-att 32 Date-of-acquisition
-att 33 Title-key
-att 34 Title-collective
-att 35 Title-parallel
-att 36 Title-cover
-att 37 Title-added-title-page
-att 38 Title-caption
-att 39 Title-running
-att 40 Title-spine
-att 41 Title-other-variant
-att 42 Title-former
-att 43 Title-abbreviated
-att 44 Title-expanded
-att 45 Subject-precis
-att 46 Subject-rswk
-att 47 Subject-subdivision
-att 48 Number-natl-biblio
-att 49 Number-legal-deposit
-att 50 Number-govt-pub
-att 51 Number-music-publisher
-att 52 Number-db
-att 53 Number-local-call
-att 54 Code-language
-att 55 Code-geographic
-att 56 Code-institution
-att 57 Name-and-title
-att 58 Name-geographic
-att 59 Place-publication
-att 60 CODEN
-att 61 Microform-generation
-att 62 Abstract
-att 63 Note
-att 1000 Author-title
-att 1001 Record-type
-att 1002 Name
-att 1003 Author
-att 1004 Author-name-personal
-att 1005 Author-name-corporate
-att 1006 Author-name-conference
-att 1007 Identifier-standard
-att 1008 Subject-LC-childrens
-att 1009 Subject-name-personal
-att 1010 Body-of-text
-att 1011 Date/time-added-to-db
-att 1012 Date/time-last-modified
-att 1013 Authority/format-id
-att 1014 Concept-text
-att 1015 Concept-reference
-att 1016 Any 1016,4,1005,62
-att 1017 Server-choice
-att 1018 Publisher
-att 1019 Record-source
-att 1020 Editor
-att 1021 Bib-level
-att 1022 Geographic-class
-att 1023 Indexed-by
-att 1024 Map-scale
-att 1025 Music-key
-att 1026 Related-periodical
-att 1027 Report-number
-att 1028 Stock-number
-att 1030 Thematic-number
-att 1031 Material-type
-att 1032 Doc-id
-att 1033 Host-item
-att 1034 Content-type
-att 1035 Anywhere
-att 1036 Author-Title-Subject
+++ /dev/null
-name dan1
-reference 1.2.840.10003.3.15
-att 1 Classification-DK5-alfa-subdivision # au Alfabetisk underdeling DK-5
-att 2 Subject-controlled # ke Kontrollerede emneord
-att 3 Subject-DBC # db DBC emneord
-att 4 Subject-DBC-non-fiction # df DBC-faglitterære emneord
-att 5 Subject-DBC-fiction # ds DBC-skønlitterære emneord
-att 6 Subject-DBC-music # me DBC-Musikemneord
-att 7 Form-as-subject # fm Form betegnelse som emneord
-att 8 Level-as-subject # nb Niveau-emneord
-att 9 Shelf-mark # po Opstillingselement
-att 10 Classification-DK5-number # dk DK5
-att 11 Classification-as-shelf-mark # ok Klassifikation som opstilling
-att 12 Obsolete-shelf-mark # gd Forældet dk-klassemærke
-att 13 Subject-FUI # fg FUI-Koder
-att 14 Catalogue-code # kk Katalogkode
-att 15 LIX-number # ix LIX
-att 16 Music-notation # nm Musikalsk notation
-att 17 Item-number # nr Numre
-att 18 Local-item-number # en Numre på ens materiale
-att 19 Previous-FAUST-code # tf Tidligere og lokale faustnumre
-att 20 Title-host-publication # lvx Værtspublikationstitel (uden nummer)
+++ /dev/null
-name danmarc
-reference DANmarc
-attset bib1.att
-attset dan1.att
-
-marc danmarc.mar
-
-esetname B @
-esetname F @
-
-elm 10 DanBib-ID-nummer -
-elm 10/? DanBib-ID-nummer Item-number
-elm 10/?/a DanBib-ID-nummer Item-number
-elm 10/?/b Dataproducentens-biblioteksnummer -
-
-elm 11 ID-nummer-på-hovedmaterialets-post -
-elm 11/? ID-nummer-på-hovedmaterialets-post -
-elm 11/?/a ID-nummer-på-hovedmaterialets-post -
-
-elm 14 ID-nummer-på-post-på-højere-niveau -
-elm 14/? ID-nummer-på-post-på-højere-niveau -
-elm 14/?/a ID-nummer-på-post-på-højere-niveau -
-elm 14/?/x ID-nummer-på-post-på-højere-niveau Item-number
-
-elm 15 ID-nummer-på-post-på-lavere-niveau -
-elm 15/? ID-nummer-på-post-på-lavere-niveau Item-number
-elm 15/?/a ID-nummer-på-post-på-lavere-niveau Item-number
-
-elm 16 ID-nummer-på-værtspublikation -
-elm 16/? ID-nummer-på-værtspublikation -
-elm 16/?/a ID-nummer-på-værtspublikation -
-
-elm 17 ID-nummer-på-første-udgave -
-elm 17/? ID-nummer-på-første-udgave Item-number,Local-item-number
-elm 17/?/a ID-nummer-på-første-udgave Item-number,Local-item-number
-
-elm 18 ID-nummer-på-anden-post-for-samme-materiale -
-elm 18/? ID-nummer-på-anden-post-for-samme-materiale Item-number,Local-item-number
-elm 18/?/a ID-nummer-på-anden-post-for-samme-materiale Item-number,Local-item-number
-
-elm 20 Nationalbibliografisk-nummer -
-elm 20/? Nationalbibliografisk-nummer Item-number
-elm 20/?/a Landekode-for-nationalbibliografi -
-elm 20/?/b Nationalbibliografisk-nummer Item-number
-
-elm 21 ISBN -
-elm 21/? ISBN ISBN,Identifier-standard,Item-number
-elm 21/?/a ISBN ISBN,Identifier-standard,Item-number
-elm 21/?/b Tilføjelse -
-elm 21/?/c Bindtype -
-elm 21/?/d Anskaffelsesvilkår/pris -
-elm 21/?/n Bestillingsnummer Item-number
-elm 21/?/x Fejltryk-eller-fejlagtigt-anvendt-ISBN ISBN,Identifier-standard,Item-number
-
-elm 22 ISSN -
-elm 22/? ISSN ISBN,Identifier-standard,Item-number
-elm 22/?/a ISSN ISBN,Identifier-standard,Item-number
-elm 22/?/b Tilføjelse -
-elm 22/?/c Bindtype -
-elm 22/?/d Anskaffelsesvilkår/pris -
-elm 22/?/z Fejlagtigt-tildelt-ISSN ISBN,Identifier-standard,Item-number
-
-elm 28 ISMN -
-elm 28/? ISMN ISBN,Identifier-standard,Item-number
-elm 28/?/a ISMN ISBN,Identifier-standard,Item-number
-elm 28/?/b Tilføjelse -
-elm 28/?/c Bindtype -
-elm 28/?/d Anskaffelsesvilkår/pris -
-elm 28/?/n Bestillingsnummer Item-number
-
-elm 30 CODEN -
-elm 30/? CODEN CODEN,Item-number
-elm 30/?/a CODEN CODEN,Item-number
-
-elm 32 Kode-for-natio-eller-fagbibliografi -
-elm 32/? Kode-for-natio-eller-fagbibliografi Catalogue-code
-elm 32/?/a Kode-for-nationalbibliografi Catalogue-code
-elm 32/?/x Kode-for-fagbibliografi Catalogue-code
-
-#elm 34 Kodede-matematiske-oplysninger -
-#elm 34/? Kodede-matematiske-oplysninger Code-map-scale
-#elm 34/?/a MÃ¥lestokstype Code-map-scale
-#elm 34/?/b Konstant-lineær-vandret-målestok Code-map-scale
-#elm 34/?/d Koordinater Code-map-scale
-#elm 34/?/e Koordinater Code-map-scale
-#elm 34/?/f Koordinater Code-map-scale
-#elm 34/?/g Koordinater Code-map-scale
-
-elm 38 Opstillingskode-for-børnelitteratur -
-elm 38/? Opstillingskode-for-børnelitteratur -
-elm 38/?/a Opstillingskode-for-børnelitteratur -
-
-elm 39 Opstillingskode-for-musikoptagelser -
-elm 39/? Opstillingskode-for-musikoptagelser -
-elm 39/?/a Opstillingskode-for-musikoptagelser -
-
-elm 41 Sprogkode -
-elm 41/? Sprogkode -
-elm 41/?/a Materialets-sprog Code-language
-#elm 41/?/b Mellemoriginalens-sprog Code-language-original
-#elm 41/?/c Originaludgavens-sprog Code-language-original
-elm 41/?/d Sprog-i-resuméer Code-language
-elm 41/?/e Sprog-i-mindre-dele-af-materialet Code-language
-elm 41/?/p Sprog-i-parallel-tekst Code-language
-elm 41/?/u Sprog-i-undertekster-til-film/video Code-language
-
-elm 42 Lix-tal -
-elm 42/? Lix-tal -
-elm 42/?/a Samlet-lix-tal LIX-number
-elm 42/?/b Specifikation-af-lix-tal -
-
-elm 43 Kode-for-geografisk-område -
-elm 43/? Kode-for-geografisk-område -
-elm 43/?/a Kode-for-geografisk-område -
-
-elm 44 Pædagogisk-fagkode -
-elm 44/? Pædagogisk-fagkode Subject-FUI
-elm 44/?/a Kode-for-skoleretning Subject-FUI
-elm 44/?/b Kode-for-fag-og-undervisningsmateriale Subject-FUI
-
-elm 50 LC-klassifikation -
-#elm 50/? LC-klassifikation Classification-LC
-elm 50/? LC-klassifikation -
-elm 50/?/a LC-klassifikation -
-elm 50/?/b Materialenummer -
-
-elm 60 NLM-klassifikation -
-#elm 60/? NLM-klassifikation Classification-NLM
-elm 60/? NLM-klassifikation -
-elm 60/?/a NLM-klassifikation -
-elm 60/?/b Materialenummer -
-
-elm 70 NAL-klassifikation -
-#elm 70/? NAL-klassifikation Classification-NAL
-elm 70/? NAL-klassifikation -
-elm 70/?/a Materialenummer -
-
-elm 79 DB-klassifikation -
-elm 79/? DB-klassifikation -
-#elm 79/? DB-klassifikation Classification-DB
-elm 79/?/a Systemkode -
-
-elm 80 UDK -
-#elm 80/? UDK Classification-UDC
-elm 80/? UDK -
-elm 80/?/a UDK-notation -
-
-elm 82 DDC -
-elm 82/? DDC -
-#elm 82/? DDC Classification-Dewey
-elm 82/?/a Basisnummer -
-elm 82/?/b Udgivelse -
-elm 82/?/c DDC-udgave -
-
-elm 83 Felt-083 -
-elm 83/? Felt-083 -
-elm 83/?/a Felt-083 -
-elm 83/?/b Felt-083 -
-
-elm 85 BCM-klassifikation -
-elm 85/? BCM-klassifikation -
-#elm 85/? BCM-klassifikation Classification-BCM
-elm 85/?/a BCM-klassifikation -
-elm 85/?/b BCM-klassifikation -
-elm 85/?/c BCM-klassifikation -
-
-elm 87 Lokal-klassifikationsnotation-1 -
-elm 87/? Lokal-klassifikationsnotation-1 -
-#elm 87/?/a Lokal-klassifikationsnotation-1 Classification-local
-elm 87/?/b Lokal-klassifikationsnotation-1 -
-
-elm 88 Lokal-klassifikationsnotation-2 -
-elm 88/? Lokal-klassifikationsnotation-2 -
-#elm 88/?/a Lokal-klassifikationsnotation-2 Classification-local
-elm 88/?/b Lokal-klassifikationsnotation-2 -
-elm 88/?/c Lokal-klassifikationsnotation-2 -
-elm 88/?/d Lokal-klassifikationsnotation-2 -
-elm 88/?/e Lokal-klassifikationsnotation-2 -
-elm 88/?/f Lokal-klassifikationsnotation-2 -
-elm 88/?/n Lokal-klassifikationsnotation-2 -
-elm 88/?/p Lokal-klassifikationsnotation-2 -
-elm 88/?/q Lokal-klassifikationsnotation-2 -
-elm 88/?/t Lokal-klassifikationsnotation-2 -
-elm 88/?/u Lokal-klassifikationsnotation-2 -
-
-elm 89 Lokal-klassifikationsnotation-3 -
-elm 89/? Lokal-klassifikationsnotation-3 -
-#elm 89/?/a Lokal-klassifikationsnotation-3 Classification-local
-elm 89/?/b Lokal-klassifikationsnotation-3 -
-elm 89/?/c Lokal-klassifikationsnotation-3 -
-
-elm 96 Lokal-opstillingssignatur -
-elm 96/? Lokal-opstillingssignatur -
-elm 96/?/a Opstilling -
-elm 96/?/n Lokal-opstillingssignatur -
-elm 96/?/z Lokaliseringskode -
-
-elm 100 Personnavn -
-elm 100/? Personnavn Personal-name:w,Personal-name:p,Shelf-mark
-#elm 100/?/a Efternavn/fornavn-alene Personal-name:w,Personal-name:p,Personal-name-personal:w,Personal-name-personal:p,Shelf-mark
-#elm 100/?/c Fødselsår Personal-name:w,Personal-name:p,Personal-name-personal:w,Personal-name-personal:p,Shelf-mark
-#elm 100/?/f Tilføjelse Personal-name:w,Personal-name:p,Personal-name-personal:w,Personal-name-personal:p,Shelf-mark
-#elm 100/?/h Fornavn Personal-name:w,Personal-name:p,Personal-name-personal:w,Personal-name-personal:p,Shelf-mark
-#elm 100/?/k Fuldt-udskrevet-fornavn Personal-name:w,Personal-name:p,Personal-name-personal:w,Personal-name-personal:p,Shelf-mark
-
-elm 110 Korporationsnavn-opstillingselement -
-elm 110/? Korporationsnavn-opstillingselement Personal-name:w,Personal-name:p,Corporate-name:w,Corporate-name:p,Shelf-mark
-#elm 110/?/a Korporationsnavn Personal-name:w,Personal-name:p,Personal-name-corporate:w,Personal-name-corporate:p,Shelf-mark
-#elm 110/?/c Underkorporation Personal-name:w,Personal-name:p,Personal-name-corporate:w,Personal-name-corporate:p,Shelf-mark
-#elm 110/?/e Tilføjelse Personal-name:w,Personal-name:p,Personal-name-corporate:w,Personal-name-corporate:p,Shelf-mark
-#elm 110/?/i Nummer-på-konference Personal-name:w,Personal-name:p,Personal-name-corporate:w,Personal-name-corporate:p,Shelf-mark
-#elm 110/?/j Sted-for-konference Personal-name:w,Personal-name:p,Personal-name-corporate:w,Personal-name-corporate:p,Shelf-mark
-#elm 110/?/k Ã…r-for-konference Personal-name:w,Personal-name:p,Personal-name-corporate:w,Personal-name-corporate:p,Shelf-mark
-
-elm 210 Forkortet-nøgletitel -
-elm 210/? Forkortet-nøgletitel Title-key,Title,Title:p
-elm 210/?/a Forkortet-nøgletitel Title-key,Title,Title:p
-elm 210/?/b Forkortet-identificerende-tilføjelse Title-key,Title,Title:p
-
-elm 222 Nøgletitel -
-elm 222/? Nøgletitel Title-key,Title,Title:p
-elm 222/?/a Nøgletitel Title-key,Title,Title:p
-elm 222/?/b Identificerende-tilføjelse Title-key,Title,Title:p
-
-elm 239 Uniform-titel/standardtitel-opstillingselement -
-elm 239/? Uniform-titel/standardtitel-opstillingselement Title-uniform,Title,Title:p
-elm 239/?/t Uniform-titel Title-uniform,Title,Title:p
-elm 239/?/u Almindeligt-kendt-tilnavn Title-uniform,Title,Title:p
-elm 239/?/v Uddragstitel Title-uniform,Title,Title:p
-elm 239/?/Ø Uniform-titel/standardtitel-opstillingselement -
-elm 239/?/ø Identificerende-tilføjelser Title-uniform,Title
-
-elm 240 Uniform-titel-opstillingselement -
-elm 240/? Uniform-titel-opstillingselement Title-uniform,Title,Title:p
-elm 240/?/a Uniform-titel Title-uniform,Title,Title:p
-elm 240/?/j Andet-identificerende-element Title-uniform,Title,Title:p
-elm 240/?/r Sprog-i-oversættelse/version -
-elm 240/?/u Udgivelsesår -
-elm 240/?/ø Identificerende-tilføjelser Title-uniform,Title
-
-elm 241 Originaltitel -
-elm 241/? Originaltitel Title,Title:p
-elm 241/?/a Originaltitel Title,Title:p
-elm 241/?/r Sprog -
-
-elm 245 Originaltitel-og-ophavsangivelse -
-elm 245/? Originaltitel-og-ophavsangivelse Title,Title:p
-elm 245/?/A Originaltitel-og-ophavsangivelse -
-elm 245/?/G Originaltitel-og-ophavsangivelse -
-elm 245/?/a Titel Title,Title:p
-elm 245/?/b Rest-af-titel-eller-alternativ-titel Title,Title:p
-elm 245/?/c Undertitel-og-anden-titelinformation Title,Title:p
-elm 245/?/e Ophavsangivelser-opslag -
-elm 245/?/f Ophavsangivelser -
-elm 245/?/g Numerisk-eller-alfabetisk-betegnelse-for-bind Title,Title:p
-elm 245/?/i Anden-primær/sekundær-ophavsangivelse-kun-i-nationalbibliogafien -
-elm 245/?/j Anden-primær/sekundær-ophavsangivelse-ikke-i-nationalbibliogafien -
-elm 245/?/o Titel-på-supplement/sektion -
-elm 245/?/p Paralleltitel Title-parallel,Title,Title:p
-elm 245/?/s Parallel-undertitel Title-parallel,Title,Title:p
-elm 245/?/u Markant-undertitel Title,Title:p
-elm 245/?/x Hovedtitel-på-tilføjet-værk-af-andet-ophav Title,Title:p
-elm 245/?/y Titel-på-supplement Title,Title:p
-elm 245/?/Ø Originaltitel-og-ophavsangivelse -
-elm 245/?/æ Identificerende-ophavsangivelse-til-titel -
-elm 245/?/ø Identificerende-tilføjelser-til-titel -
-
-elm 248 Bindspecifikation -
-elm 248/? Bindspecifikation Title
-elm 248/?/a Bindtitel/supplementstitel Title,Title:p
-elm 248/?/c Undertitel-og-anden-titelinformation Title,Title:p
-elm 248/?/e Ophavsangivelse -
-elm 248/?/g Bindnummer/supplementsbetegnelse Title
-elm 248/?/j Udgivelsesår -
-elm 248/?/l Generel-note Note
-elm 248/?/w Udgavebetegnelse -
-
-elm 250 Udgavebetegnelse -
-elm 250/? Udgavebetegnelse -
-elm 250/?/a Udgavebetegnelse -
-elm 250/?/b Kort-udgavebetegnelse/sonderingselement -
-elm 250/?/c Ophavsangivelse-opslag -
-elm 250/?/d Ophavsangivelse -
-elm 250/?/x Oplagsbetegnelse -
-
-elm 255 Nummereringer-og-dateringer -
-elm 255/? Nummereringer-og-dateringer -
-elm 255/?/a Nummereringer-og-dateringer -
-
-elm 256 Matematiske-oplysninger-for-kartografiske-materialer -
-#elm 256/? Matematiske-oplysninger-for-kartografiske-materialer Code-map-scale
-#elm 256/?/a MÃ¥lestok Code-map-scale
-#elm 256/?/c Projektion Code-map-scale
-
-elm 260 Publicering/distribution -
-elm 260/? Publicering/distribution -
-elm 260/?/a Hjemsted-for-forlag Place-publication
-elm 260/?/b Navn-på-forlag Publisher
-elm 260/?/c Udgivelsesår Date-of-Publication
-elm 260/?/d Adresse-på-forlag -
-elm 260/?/e Funktionsangivelse-på-forlag -
-elm 260/?/f Hjemsted-for-distributør Place-publication
-elm 260/?/g Navn-på-distributør -
-elm 260/?/k Trykkerioplysninger -
-elm 260/?/p Navn-på-forlag/distributør-på-andet-sprog/alfabet publisher
-
-elm 300 Fysisk-beskrivelse -
-elm 300/? Fysisk-beskrivelse -
-elm 300/?/D Fysisk-beskrivelse -
-elm 300/?/a Omfang-uden-specifik-materialebetegnelse -
-elm 300/?/b Yderligere-fysisk-beskrivelse -
-elm 300/?/c Størrelse -
-elm 300/?/d Bilag -
-elm 300/?/e Tekniske-oplysninger -
-elm 300/?/l Spilletid -
-elm 300/?/n Specifik-materialebetegnelse -
-
-elm 440 Seriebetegnelse-i-materialets-form -
-elm 440/? Seriebetegnelse-i-materialets-form -
-elm 440/?/A Seriebetegnelse-i-materialets-form -
-elm 440/?/V Seriebetegnelse-i-materialets-form -
-elm 440/?/a Seriens-hovedtitel Title,Title-series,Title:p
-elm 440/?/c Undertitel-eller-anden-titelinformation Title,Title-series,Title:p
-elm 440/?/e Ophavsangivelse -
-elm 440/?/n Numerisk/alfabetisk-betegnelse-for-sektion Title,Title-series
-elm 440/?/o Titel-på-sektion Title,Title-series,Title:p
-elm 440/?/p Seriens-paralleltitel Title,Title-series,Title:p
-elm 440/?/v Nummerering-og-datering-i-serien Title,Title-series
-elm 440/?/y Seriebetegnelse-i-materialets-form -
-elm 440/?/z Seriens-ISSN ISSN
-elm 440/?/Ã¥ Seriebetegnelse-i-materialets-form -
-elm 440/?/æ Identificerende-ophavsangivelse-til-seriens-titel -
-elm 440/?/ø Identificerende-tilføjelse-til-seriens-titel Title,Title-series,Title:p
-
-elm 500 Periodicums-frekvens -
-elm 500/? Periodicums-frekvens -
-elm 500/?/a Periodicums-frekvens -
-
-elm 501 Systemkrav/adgangsmåde -
-elm 501/? Systemkrav Note
-elm 501/?/a Adgangsmåde Note
-
-elm 502 Originaltitel/oversættelse -
-elm 502/? Originaltitel/oversættelse Note
-elm 502/?/a Originaltitel/oversættelse Note
-
-elm 504 Indholdsbeskrivelse -
-elm 504/? Indholdsbeskrivelse Note
-elm 504/?/a Indholdsbeskrivelse Note
-
-elm 505 Art/form -
-elm 505/? Art/form Note
-elm 505/?/a Art/form Note
-
-elm 506 Disputats/afhandling -
-elm 506/? Disputats/afhandling Note
-elm 506/?/a Disputats/afhandling Note
-
-
-elm 507 Anledning-til-udgivelse -
-elm 507/? Anledning-til-udgivelse Note
-elm 507/?/a Anledning-til-udgivelse Note
-
-elm 508 Sprog-og-alfabet -
-elm 508/? Sprog-og-alfabet Note
-elm 508/?/a Sprog-og-alfabet Note
-
-elm 509 Besætning -
-elm 509/? Besætning Note
-elm 509/?/a Besætning Note
-
-elm 512 Beskrivelse -
-elm 512/? Beskrivelse -
-elm 512/?/a Generel-note-til-beskrivelse Note
-elm 512/?/b Supplerende-tekst -
-elm 512/?/e Ophavsangivelse -
-elm 512/?/i Indledende-tekst -
-elm 512/?/t Titel Title,Title:p
-
-elm 513 Fælles-ophavsangivelse -
-elm 513/? Fælles-ophavsangivelse -
-elm 513/?/e Primær-ophavsangivelse -
-
-elm 517 MÃ¥lgruppe-og-anvendelighed -
-elm 517/? MÃ¥lgruppe-og-anvendelighed Note
-elm 517/?/a MÃ¥lgruppe-og-anvendelighed Note
-
-elm 520 Værkets-bibliografiske-historie -
-elm 520/? Værkets-bibliografiske-historie -
-elm 520/?/a Værkets-bibliografiske-historie -
-elm 520/?/b Supplerende-tekst -
-elm 520/?/i Indledende-tekst -
-elm 520/?/t Titel Title,Title:p
-
-elm 521 Udgavens-oplag -
-elm 521/? Udgavens-oplag -
-elm 521/?/a Oplagsbetegnelse -
-elm 521/?/b Seneste-oplag -
-elm 521/?/c Oplagets-udgivelsesår Date-of-publication
-
-elm 526 Sammenhæng-med-andre-værker -
-elm 526/? Sammenhæng-med-andre-værker -
-elm 526/?/a Sammenhæng-med-andre-værker Note
-elm 526/?/b Supplerende-tekst -
-elm 526/?/d Ophavsangivelse-foran-titel -
-elm 526/?/e Ophavsangivelse -
-elm 526/?/i Indledende-tekst -
-elm 526/?/t Titel Title,Title:p
-
-elm 530 Indholdsnote -
-elm 530/? Indholdsnote -
-elm 530/?/a Indholdsnote Note
-elm 530/?/e Ophavsangivelse -
-elm 530/?/t Titel Title,Title:p
-
-elm 531 Indledende-tekst-til-maskingenereret-indholdsnote -
-elm 531/? Indledende-tekst-til-maskingenereret-indholdsnote -
-elm 531/?/a Indledende-tekst-til-maskingenereret-indholdsnote -
-
-elm 532 Litteraturhenvisninger-og-registre -
-elm 532/? Litteraturhenvisninger-og-registre -
-elm 532/?/a Litteraturhenvisninger-og-registre -
-
-elm 534 Partielt-indhold -
-elm 534/? Partielt-indhold Note
-elm 534/?/a Partielt-indhold Note
-
-elm 538 Numre-der-indgår-i-materialet -
-elm 538/? Numre-der-indgår-i-materialet Item-number
-elm 538/?/a Nummer Item-number
-elm 538/?/b Editionsnummer Item-number
-elm 538/?/c Pladenummer Item-number
-elm 538/?/d Editions-og-pladenummer Item-number
-elm 538/?/f Forlag Publisher
-elm 538/?/g Forlagsnummer Item-number
-
-elm 539 Grundlaget-for-katalogiseringen -
-elm 539/? Grundlaget-for-katalogiseringen -
-elm 539/?/a Grundlaget-for-katalogiseringen -
-
-elm 557 Periodicum-som-værtspublikation-for-I-analyse -
-elm 557/? Periodicum-som-værtspublikation-for-I-analyse -
-elm 557/?/V Periodicum-som-værtspublikation-for-I-analyse -
-elm 557/?/a Titel - # Title,Title-host-item,Title:p
-elm 557/?/j Udgivelsesår -
-elm 557/?/v Nummerering/datering - # Title,Title-host-item,Title:p
-
-elm 559 Generel-note -
-elm 559/? Generel-note -
-elm 559/?/a Generel-note Note
-
-elm 600 Personnavn-emneord -
-#elm 600/? Personnavn-emneord Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/a Efternavn/fornavn-alene Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/c Fødselsår Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/e Romertal Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/f Tilføjelse Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/h Fornavn Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/k Fuldt-udskrevet-fornavn Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/x Underdeling-emne/art Subject-controlled,Subject-name-personal,Subject:p
-#elm 600/?/Ã¥ Personnavn-emneord Subject-controlled,Subject-name-personal,Subject:p
-
-elm 610 Korporationsnavn-emneord -
-#elm 610/? Korporationsnavn-emneord Subject-controlled,Subject-name-corporate,Subject:p
-#elm 610/?/a Korporationsnavn Subject-controlled,Subject-name-corporate,Subject:p
-#elm 610/?/c Underkorporation Subject-controlled,Subject-name-corporate,Subject:p
-#elm 610/?/e Tilføjelse Subject-controlled,Subject-name-corporate,Subject:p
-#elm 610/?/t Titel Subject-controlled,Subject-name-corporate,Subject:p
-#elm 610/?/x Underdeling-emne/art Subject-controlled,Subject-name-corporate,Subject:p
-#elm 610/?/y Underdeling-periode Subject-controlled,Subject-name-corporate,Subject:p
-
-elm 621 Emnedata-for-kartografisk-materiale -
-#elm 621/? Emnedata-for-kartografisk-materiale Subject
-elm 621/? Emnedata-for-kartografisk-materiale -
-#elm 621/?/a Stednavn Subject
-#elm 621/?/b Land/stat Subject
-
-elm 630 Kontrolleret-emneord -
-#elm 630/? Kontrolleret-emneord Subject-controlled,Subject-controlled,Subject:p,Subject-controlled:p
-#elm 630/?/a Kontrolleret-emneord Subject-controlled,Subject-controlled,Subject:p,Subject-controlled:p
-#elm 630/?/b Andre-bibliotekers-kontrollerede-emneord Subject-controlled,Subject-controlled,Subject:p,Subject-controlled:p
-#
-#elm 631 Ukontrolleret-emneord -
-#elm 631/? Ukontrolleret-emneord Subject-controlled,Subject-uncontrolled,Subject:p,Subject-uncontrolled:p
-#elm 631/?/a Ukontrolleret-emneord Subject-controlled,Subject-uncontrolled,Subject:p,Subject-uncontrolled:p
-#elm 631/?/b Andre-bibliotekers-ukontrollerede-emneord Subject-controlled,Subject-uncontrolled,Subject:p,Subject-uncontrolled:p
-#elm 631/?/f Ukontrolleret-faglitterært-emneord Subject-controlled,Subject-uncontrolled,Subject:p,Subject-uncontrolled:p
-#
-elm 633 Stednavn -
-#elm 633/? Stednavn Subject-controlled,Subject-controlled,Subject:p,Subject-controlled:p
-#elm 633/?/a Stednavn Subject-controlled,Subject-controlled,Subject:p,Subject-controlled:p
-#
-elm 645 Titel -
-elm 645/? Titel Subject-controlled,Subject-controlled:p
-elm 645/?/c Titel Subject-controlled,Subject-controlled:p
-
-elm 650 LC-emneord subject-controlled
-#elm 650/? LC-emneord Subject-controlled
-#elm 650/?/a LC-emneord Subject-controlled
-#elm 650/?/v LC-emneord -
-#elm 650/?/x Underdeling-emne/art Subject-controlled
-#elm 650/?/y Underdeling-periode Subject
-#elm 650/?/z Underdeling-lokalitet Subject
-
-elm 651 LC-geografisk-emneord subject-controlled
-#elm 651/? LC-geografisk-emneord Subject
-#elm 651/?/a LC-geografisk-emneord Subject
-#elm 651/?/x Underdeling-emne/art Subject
-#elm 651/?/z Underdeling-lokalitet Subject
-
-elm 652 DK5-klassemærke -
-elm 652/? DK5-klassemærke -
-elm 652/?/a Efternavn/navn/korporationsnavn-som-alfabetisk-underdeling Classification-DK5-alfa-subdivision
-elm 652/?/b Andet-som-alfabetisk-underdeling Classification-DK5-alfa-subdivision,Subject-controlled
-elm 652/?/c Fødselsår Classification-DK5-alfa-subdivision
-elm 652/?/h Fornavn Classification-DK5-alfa-subdivision,Subject-controlled
-elm 652/?/i Analytisk-klassemærke Classification-DK5-number
-elm 652/?/m Opstillings-og-hovedplacering Classification-DK5-number,Classification-as-shelf-mark
-elm 652/?/n Nationalbibliografisk-hovedplacering Classification-DK5-number
-elm 652/?/o Opstillingsklassemærkeog-bibliotekshovedplacering Classification-DK5-number
-elm 652/?/p Biplacering Classification-DK5-number
-elm 652/?/q Nationalbibliografisk-biplacering Classification-DK5-number
-elm 652/?/r Biblioteksbiplacering Classification-DK5-number
-elm 652/?/v Tilføjede-cifre-efter-kolon -
-elm 652/?/z Tilføjede-cifre-efter-bindestreg -
-elm 652/?/Ã¥ Feltnumerator -
-
-elm 654 Forældet-DK5-klassemærke -
-#elm 654/? Forældet-DK5-klassemærke Classification
-#elm 654/?/p Biplacering Classification
-
-elm 660 MeSH-emneord -
-elm 660/? MeSH-emneord Subject-controlled,Subject-controlled,MESH-Subject
-elm 660/?/a MeSH-emneord Subject-controlled,Subject-controlled,MESH-Subject
-elm 660/?/x Generel-underdeling Subject-controlled,Subject-controlled,MESH-Subject
-
-elm 661 Europæisk-pædagogisk-tesaurus -
-elm 661/? Europæisk-pædagogisk-tesaurus Subject-controlled,Subject-controlled
-elm 661/?/a Kontrolleret-dansk-emneord Subject-controlled,Subject-controlled
-elm 661/?/b Kontrolleret-engelsk-emneord Subject-controlled,Subject-controlled
-elm 661/?/c Ukontrolleret-dansk-emneord Subject-controlled,Subject-controlled
-
-elm 666 Kontrolleret-DBC-emneord -
-elm 666/? Kontrolleret-DBC-emneord -
-elm 666/?/e Stednavn-som-emneord-faglitteratur Subject-DBC,Subject-controlled,Subject-DBC-non-fiction,Subject-controlled
-elm 666/?/f Kontrolleret-faglitterært-emneord Subject-DBC,Subject-controlled,Subject-DBC-non-fiction,Subject-controlled
-elm 666/?/i Tidsangivelse Subject-DBC,Subject-controlled,Subject-DBC-non-fiction,Subject-controlled
-elm 666/?/l Stednavn Subject-DBC,Subject-controlled
-elm 666/?/m Musikalsk-genre-som-emneord Subject-DBC,Subject-controlled,Subject-DBC-music
-elm 666/?/n Musikalsk-besætning-som-emneord Subject-DBC,Subject-controlled,Subject-DBC-music
-elm 666/?/o Formbetegnelse Subject-DBC,Subject-controlled,Form-as-subject
-elm 666/?/p Periodebetegnelse Subject-DBC,Subject-controlled,Subject-DBC-music
-elm 666/?/q Stednavn-som-emneord-skønlitteratur Subject-DBC,Subject-controlled,Subject-DBC-fiction,Subject-controlled
-elm 666/?/s Kontrolleret-skønlitterært-emneord Subject-DBC,Subject-controlled,Subject-DBC-fiction,Subject-controlled
-elm 666/?/u Niveau/brugerkategori Subject-DBC,Subject-controlled,Level-as-subject
-elm 666/?/Ã¥ Kontrolleret-DBC-emneord Subject-DBC,Subject-controlled
-
-elm 668 Genrebetegnelse -
-elm 668/? Genrebetegnelse Subject-controlled
-elm 668/?/a Genrebetegnelse Subject-controlled
-elm 668/?/b Underdeling Subject-controlled
-
-#elm 670 NAL-emneord -
-#elm 670/? NAL-emneord Subject-NAL
-#elm 670/?/a NAL-emneord Subject
-
-elm 690 COMPASS-emneord -
-elm 690/? COMPASS-emneord - # Subject-controlled,Subject-COMPASS
-elm 690/?/a Enkeltord - # Subject-controlled,Subject-COMPASS
-elm 690/?/b Flere-ord - # Subject-controlled,Subject-COMPASS
-elm 690/?/c Forbindende-tekst -
-elm 690/?/d Underdeling-periode - # Subject-controlled,Subject-COMPASS
-elm 690/?/h COMPASS-emneord - # Subject-controlled,Subject-COMPASS
-elm 690/?/i COMPASS-emneord -
-elm 690/?/m COMPASS-emneord -
-elm 690/?/v COMPASS-emneord -
-elm 690/?/w COMPASS-emneord -
-elm 690/?/x COMPASS-emneord -
-elm 690/?/y COMPASS-emneord -
-elm 690/?/z COMPASS-emneord -
-
-elm 700 Personnavn -
-elm 700/? Personnavn Personal-name
-elm 700/?/A Personnavn Personal-name
-elm 700/?/a Efternavn/fornavn-alene Personal-name
-elm 700/?/b Funktionsbetegnelse -
-elm 700/?/c Fødselsår Personal-name
-elm 700/?/f Tilføjelse Personal-name
-elm 700/?/h Fornavn Personal-name
-elm 700/?/k Fuldt-udskrevet-fornavn Personal-name
-elm 700/?/Ã¥ Personnavn -
-
-elm 710 Korporationsnavn -
-elm 710/? Korporationsnavn Personal-name
-elm 710/?/A Korporationsnavn Personal-name
-elm 710/?/a Korporationsnavn Personal-name
-elm 710/?/c Underkorporation Personal-name
-elm 710/?/e Tilføjelse Personal-name
-elm 710/?/i Nummer-på-konference Personal-name
-elm 710/?/j Sted-for-konference Personal-name
-elm 710/?/k Ã…r-for-konference Personal-name
-elm 710/?/Ã¥ Korporationsnavn -
-
-
-elm 739 Uniform-titel/standardtitel -
-elm 739/? Uniform-titel/standardtitel Title-uniform
-elm 739/?/t Uniform-titel/standardtitel Title-uniform
-
-elm 740 Uniform-titel -
-elm 740/? Uniform-titel Title,Title-uniform
-elm 740/?/a Uniform-titel Title,Title-uniform
-elm 740/?/s Titel-på-del-af-værket Title,Title-uniform
-
-elm 745 Varianttitel -
-elm 745/? Varianttitel -
-elm 745/?/A Varianttitel -
-elm 745/?/a Titel Title
-elm 745/?/o Titel-på-afhængig-publikation/supplement -
-
-elm 770 Personnavn-analyse -
-elm 770/? Personnavn-analyse Personal-name
-elm 770/?/A Personnavn-analyse -
-elm 770/?/a Efternavn/fornavn-alene Personal-name
-elm 770/?/c Fødselsår Personal-name
-elm 770/?/f Tilføjelse Personal-name
-elm 770/?/h Fornavn Personal-name
-elm 770/?/Ã¥ Feltnumerator -
-
-elm 780 Korporationsnavn-analyse -
-elm 780/? Korporationsnavn-analyse Personal-name,Corporate-name
-elm 780/?/a Korporationsnavn Personal-name,Corporate-name
-elm 780/?/Ã¥ Feltnumerator Personal-name,Corporate-name
-
-elm 795 Analytisk-titel -
-elm 795/? Analytisk-titel Title
-elm 795/?/A Analytisk-titel -
-elm 795/?/a Analytisk-titel Title
-elm 795/?/b Rest-af-analytisk-titel/alternativ-titel Title
-elm 795/?/c Undertitel/anden-titelinformation Title
-elm 795/?/e Ophavsangivelse-opslag -
-elm 795/?/i Anden-primær/sekundær-ophavsangivelse -
-elm 795/?/p Paralleltitel Title
-elm 795/?/u Almindeligt-kendt-tilnavn Title
-elm 795/?/v Uddragstitel Title
-elm 795/?/y Kode -
-elm 795/?/Ã¥ Feltnumerator -
-
-elm 840 Serietitel -
-elm 840/? Serietitel -
-elm 840/?/V Serietitel -
-elm 840/?/a Seriens-hovedtitel Title,Title-series
-elm 840/?/v Seriens-nummerering/datering Title,Title-series
-elm 840/?/z Seriens-ISSN Identifier-standard,ISSN,Item-number
-elm 840/?/ø Identificerende-tilføjelser-til-seriens-titel Title
-
-elm 860 Tidligere-titel -
-elm 860/? Tidligere-titel -
-elm 860/?/c Tilføjelse-til-titel Related-periodical,Title-former
-elm 860/?/t Hovedtitel Title-former
-elm 860/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 861 Senere-titel -
-elm 861/? Senere-titel -
-elm 861/?/c Tilføjelse-til-titel Related-periodical,Title-added-title-page
-elm 861/?/i Indledende-tekst -
-elm 861/?/t Hovedtitel Related-periodical,Title-added-title-page
-elm 861/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 863 Udgivet-sammen-med -
-elm 863/? Udgivet-sammen-med -
-elm 863/?/t Hovedtitel Title-other-variant
-elm 863/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 867 Hovedudgave-på-andet-sprog/andet-indhold -
-elm 867/? Hovedudgave-på-andet-sprog/andet-indhold -
-elm 867/?/t Hovedtitel Title-other-variant
-elm 867/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 868 Udgave-på-andet-sprog/andet-indhold -
-elm 868/? Udgave-på-andet-sprog/andet-indhold -
-elm 868/?/t Hovedtitel Title-other-variant
-elm 868/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 870 Hovedpublikation-til-supplement -
-elm 870/? Hovedpublikation-til-supplement -
-elm 870/?/t Hovedtitel Title-other-variant
-elm 870/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 871 Supplement-til-hovedpublikation -
-elm 871/? Supplement-til-hovedpublikation -
-elm 871/?/c Tilføjelse-til-titel -
-elm 871/?/t Hovedtitel Title-other-variant
-
-elm 874 Underserie -
-elm 874/? Underserie -
-elm 874/?/t Hovedtitel Title-other-variant
-elm 874/?/z ISSN Identifier-standard,ISSN,Item-number
-
-elm 900 Henvisning-fra-personnavn -
-elm 900/? Henvisning-fra-personnavn Personal-name
-elm 900/?/A Henvisning-fra-personnavn -
-elm 900/?/a Efternavnet/fornavnet-alene Personal-name
-elm 900/?/c Fødselsår Personal-name
-elm 900/?/f Tilføjelse Personal-name
-elm 900/?/h Fornavn Personal-name
-elm 900/?/k Fuldt-udskrevet-fornavn Personal-name
-elm 900/?/w Ord-hvortil-der-henvises -
-elm 900/?/x Forbindende-tekst -
-elm 900/?/z Felt/delfeltkode-hvortil-der-henvises -
-elm 900/?/Ã¥ Feltnumerator -
-
-elm 910 Henvisning-fra-korporationsnavn -
-elm 910/? Henvisning-fra-korporationsnavn Personal-name
-elm 910/?/A Henvisning-fra-korporationsnavn -
-elm 910/?/a Korporationsnavn Personal-name
-elm 910/?/c Underkorporation Personal-name
-elm 910/?/e Tilføjelse Personal-name
-elm 910/?/g Resten-af-korporationsnavn Personal-name
-elm 910/?/h Forbogstaver/fornavnsforkortelser Personal-name
-elm 910/?/w Ord-hvortil-der-henvises -
-elm 910/?/x Forbindende-tekst -
-elm 910/?/z Felt/delfeltkode-hvortil-der-henvises -
-elm 910/?/Ã¥ Feltnumerator -
-
-elm 945 Henvisning-fra-titel -
-elm 945/? Henvisning-fra-titel -
-elm 945/?/a Title Title
-elm 945/?/w Ord-hvortil-der-henvises -
-elm 945/?/x Forbindende-tekst -
-elm 945/?/z Felt/delfeltkode-hvortil-der-henvises -
-
-elm 980 Bibliotekets-beholdning-af-et-periodicum -
-elm 980/? Bibliotekets-beholdning-af-et-periodicum -
-elm 980/?/d Første-år -
-elm 980/?/g Kode-for-fuldstændighed -
-
-elm s01 felt-s01 -
-elm s01/? felt-s01 -
-elm s01/?/a felt-s01 -
-elm s01/?/b felt-s01 -
-
-
-elm s06 felt-s06 -
-elm s06/? felt-s06 -
-elm s06/?/a felt-s06 -
-elm s06/?/b felt-s06 -
-
-elm s10 felt-s10 -
-elm s10/? felt-s10 -
-elm s10/?/a felt-s10 -
-
-elm s45 felt-s45 -
-elm s45/? felt-s45 -
-elm s45/?/a felt-s45 -
-
+++ /dev/null
-# $Id: danmarc.mar,v 1.1 2000-05-18 11:55:47 adam Exp $
-name danmarc
-reference danmarc
+++ /dev/null
-# This Explain schema is used for our internal management and processing of
-# explain data. On request, records are mapped to the proper Explain ASN.1
-# before transmission.
-#
-# $Id: explain.abs,v 1.14 1998-10-13 20:52:18 adam Exp $
-
-name explain
-reference Explain-schema
-attset explain
-tagset explain.tag
-
-esetname B @
-esetname F @
-
-
-section rpnCapabilities
-elm (4,550) rpnOperators -
-elm (4,550)/(4,551) rpnOperator -
-elm (4,552) resultSetAsOperandSupported -
-elm (4,553) restrictionOperandSupported -
-elm (4,554) proximitySupport -
-elm (4,554)/(4,555) anySupport -
-elm (4,554)/(4,556) unitsSupported -
-elm (4,554)/(4,556)/(4,557) unitSupported -
-elm (4,554)/(4,556)/(4,557)/(4,558) known -
-elm (4,554)/(4,556)/(4,557)/(4,559) private -
-elm (4,554)/(4,556)/(4,557)/(4,559)/(4,558) privateUnit -
-elm (4,554)/(4,556)/(4,557)/(4,559)/(4,560) description -
-
-section accessInfo
-elm (4,501) queryTypesSupported -
-elm (4,501)/(4,518) queryTypeDetails -
-elm (4,501)/(4,518)/(4,519):rpnCapabilities rpnCapabilities -
-elm (4,501)/(4,518)/(4,520) iso8777Capabilities -
-elm (4,501)/(4,518)/(4,521) privateCapabilities -
-elm (4,503) diagnosticSets -
-elm (4,503)/(4,1000) diagnosticSet -
-elm (4,505) attributeSetIds -
-elm (4,505)/(4,1000) attributeSetId -
-elm (4,507) schemas -
-elm (4,507)/(4,1000) schema -
-elm (4,509) recordSyntaxes -
-elm (4,509)/(4,1000) recordSyntax -
-elm (4,511) resourceChallenges -
-elm (4,511)/(4,1000) resourceChallenge -
-elm (4,513) restrictedAccess -
-elm (4,514) costInfo -
-elm (4,515) variantSets -
-elm (4,515)/(4,1000) variantSets -
-elm (4,516) elementSetNames -
-elm (4,516)/(4,1001) elementSetName -
-elm (4,517) unitSystems -
-elm (4,517)/(4,1001) unitSystem -
-
-section commonInfo
-elm (4,601) dateAdded !
-elm (4,602) dateChanged !
-elm (4,603) expiry DateExpired
-elm (4,604) languageCode HumanStringLanguage
-
-section contactInfo
-elm (4,102) name -
-elm (4,113) description -
-elm (4,127) address -
-elm (4,128) email -
-elm (4,129) phone -
-
-section stringOrNumeric
-elm (4,1001) string -
-elm (4,1002) numeric -
-
-section attributeSetDetailsValue
-elm (4,709) attributeValue -
-elm (4,709)/(4,710):stringOrNumeric value -
-elm (4,709)/(4,113) description -
-elm (4,709)/(4,712) subAttributes -
-elm (4,709)/(4,712)/(4,713):stringOrNumeric subAttribute -
-elm (4,709)/(4,714) superAttributes -
-elm (4,709)/(4,714)/(4,715):stringOrNumeric superAttributes -
-elm (4,709)/(4,711) partialSupport -
-
-section attributeSetDetails
-elm (4,1000) attributeSet -
-elm (4,702) attributesByType -
-elm (4,702)/(4,703) attributeTypeDetails -
-elm (4,702)/(4,703)/(4,704) attributeType -
-elm (4,702)/(4,703)/(4,705) defaultIfOmitted -
-elm (4,702)/(4,703)/(4,705)/(4,706):stringOrNumeric defaultValue -
-elm (4,702)/(4,703)/(4,705)/(4,113) defaultDescription -
-elm (4,702)/(4,703)/(4,708):attributeSetDetailsValue attributeValues -
-
-section attributeCombinations
-elm (4,1000) attributeSet -
-elm (4,717) legalCombinations -
-elm (4,717)/(4,718) legalCombination -
-elm (4,717)/(4,718)/(4,719) attributeOccurrence -
-elm (4,717)/(4,718)/(4,719)/(4,1000) attributeSetId -
-elm (4,717)/(4,718)/(4,719)/(4,704) attributeType -
-elm (4,717)/(4,718)/(4,719)/(4,720) mustBeSupplied -
-elm (4,717)/(4,718)/(4,719)/(4,721) anyOrNone -
-elm (4,717)/(4,718)/(4,719)/(4,722) specific -
-elm (4,717)/(4,718)/(4,719)/(4,722)/(4,710):stringOrNumeric value -
-
-section attributeType
-elm (4,751) attributeType -
-elm (4,751)/(4,102) attributeName -
-elm (4,751)/(4,113) attributeDescription -
-elm (4,751)/(4,704) type -
-elm (4,751)/(4,708) attributeValues -
-elm (4,751)/(4,708)/(4,709) attributeValue -
-elm (4,751)/(4,708)/(4,709)/(4,102) name -
-elm (4,751)/(4,708)/(4,709)/(4,113) description -
-elm (4,751)/(4,708)/(4,709)/(4,710):stringOrNumeric attributeValue -
-elm (4,751)/(4,708)/(4,709)/(4,752):stringOrNumeric equivalentAttribute -
-
-section main
-#
-# CategoryList
-#
-elm (4,1) categoryList ExplainCategory
-elm (4,1)/(4,600):commonInfo categoryListCommonInfo -
-elm (4,1)/(4,300) categories -
-elm (4,1)/(4,300)/(4,301) category -
-elm (4,1)/(4,300)/(4,301)/(4,102) categoryName -
-elm (4,1)/(4,300)/(4,301)/(4,302) originalName -
-elm (4,1)/(4,300)/(4,301)/(4,113) description -
-elm (4,1)/(4,300)/(4,301)/(4,303) asn1Module -
-elm (4,1)/? other -
-
-#
-# TargetInfo
-#
-elm (4,2) targetInfo ExplainCategory
-elm (4,2)/(4,600):commonInfo targetCommonInfo -
-elm (4,2)/(4,102) targetName TargetName
-elm (4,2)/(4,103) recentNews -
-elm (4,2)/(4,104) icon -
-elm (4,2)/(4,105) namedResultSets -
-elm (4,2)/(4,106) multipleDbSearch -
-elm (4,2)/(4,107) maxResultSets -
-elm (4,2)/(4,108) maxResultSize -
-elm (4,2)/(4,109) maxTerms -
-elm (4,2)/(4,110) timeoutInterval -
-elm (4,2)/(4,111) welcomeMessage -
-elm (4,2)/(4,112):contactInfo contactInfo -
-elm (4,2)/(4,113) description -
-elm (4,2)/(4,114) nicknames -
-elm (4,2)/(4,114)/(4,102) nickname -
-elm (4,2)/(4,115) usageRestrictions -
-elm (4,2)/(4,116) paymentAddr -
-elm (4,2)/(4,117) hours -
-elm (4,2)/(4,118) dbCombinations -
-elm (4,2)/(4,118)/(4,605) databaseList -
-elm (4,2)/(4,118)/(4,605)/(4,102) databaseName -
-elm (4,2)/(4,119) addresses -
-elm (4,2)/(4,119)/(4,120) internetAddress -
-elm (4,2)/(4,119)/(4,120)/(4,121) host -
-elm (4,2)/(4,119)/(4,120)/(4,122) port -
-elm (4,2)/(4,119)/(4,123) otherAddress -
-elm (4,2)/(4,119)/(4,123)/(4,124) addressType -
-elm (4,2)/(4,119)/(4,123)/(4,121) address -
-elm (4,2)/(4,125) languages -
-elm (4,2)/(4,125)/(4,126) language -
-elm (4,2)/(4,500):accessInfo commonAccessInfo -
-elm (4,2)/? other -
-#
-# DatabaseInfo
-#
-elm (4,3) databaseInfo ExplainCategory
-elm (4,3)/(4,600):commonInfo databaseCommonInfo -
-elm (4,3)/(4,102) databaseName DatabaseName
-elm (4,3)/(4,226) explainDatabase -
-elm (4,3)/(4,114) nicknames -
-elm (4,3)/(4,114)/(4,102) nickname -
-elm (4,3)/(4,104) icon -
-elm (4,3)/(4,201) userFee -
-elm (4,3)/(4,202) available Availability
-elm (4,3)/(4,203) titleString -
-elm (4,3)/(4,227) keywords -
-elm (4,3)/(4,227)/(4,1000) keyword -
-elm (4,3)/(4,113) description -
-elm (4,3)/(4,205) associatedDbs -
-elm (4,3)/(4,205)/(4,605) databaseList -
-elm (4,3)/(4,205)/(4,605)/(4,102) databaseName -
-elm (4,3)/(4,206) subDbs -
-elm (4,3)/(4,206)/(4,605) databaseList -
-elm (4,3)/(4,206)/(4,605)/(4,102) databaseName -
-elm (4,3)/(4,207) disclaimers -
-elm (4,3)/(4,103) recentNews -
-elm (4,3)/(4,209) recordCount -
-elm (4,3)/(4,209)/(4,210) recordCountActual -
-elm (4,3)/(4,209)/(4,211) recordCountApprox -
-elm (4,3)/(4,212) defaultOrder -
-elm (4,3)/(4,213) avRecordSize -
-elm (4,3)/(4,214) maxRecordSize -
-elm (4,3)/(4,215) hours -
-elm (4,3)/(4,216) bestTime -
-elm (4,3)/(4,217) lastUpdate -
-elm (4,3)/(4,218) updateInterval -
-elm (4,3)/(4,219) coverage -
-elm (4,3)/(4,220) proprietary -
-elm (4,3)/(4,221) copyrightText -
-elm (4,3)/(4,222) copyrightNotice -
-elm (4,3)/(4,223):contactInfo producerContactInfo -
-elm (4,3)/(4,224):contactInfo supplierContactInfo -
-elm (4,3)/(4,225):contactInfo submissionContactInfo -
-elm (4,3)/(4,500):accessInfo databaseAccessInfo -
-elm (4,3)/? other -
-#
-# AttributeSetInfo
-#
-elm (4,7) attributeSetInfo ExplainCategory
-elm (4,7)/(4,600):commonInfo attributeSetInfoCommonInfo -
-elm (4,7)/(4,1000) attributeSet AttributeSetOID
-elm (4,7)/(4,113) description -
-elm (4,7)/(4,102) name -
-elm (4,7)/(4,750):attributeType attributes -
-elm (4,7)/? other -
-#
-# AttributeDetails
-#
-elm (4,10) attributeDetails ExplainCategory
-elm (4,10)/(4,600):commonInfo attributeDetailsCommonInfo -
-elm (4,10)/(4,102) databaseName DatabaseName
-elm (4,10)/(4,700) attributesBySet -
-elm (4,10)/(4,700)/(4,701):attributeSetDetails attributeSetDetails -
-elm (4,10)/(4,716):attributeCombinations attributeCombinations -
-elm (4,10)/? other -
-
+++ /dev/null
-# The Explain Attribute Set
-#
-# $Id: explain.att,v 1.3 1998-10-13 20:52:19 adam Exp $
-name explain
-reference Exp-1
-
-att 1 ExplainCategory
-att 2 HumanStringLanguage
-att 3 DatabaseName
-att 4 Targetname
-att 5 AttributeSetOID
-att 6 RecordSyntaxOID
-att 7 TagSetOID
-att 8 ExtendedServicesOID
-att 9 DateAdded
-att 10 DateChanged
-att 11 DateExpired
-att 12 ElementSetName
-att 13 ProcessingContext
-att 14 ProcessingName
-att 15 TermListName
-att 16 SchemaOID
-att 17 Producer
-att 18 Supplier
-att 19 Availability
-att 20 Proprietary
-att 21 UserFee
+++ /dev/null
-# Tag set for internal Explain-data management
-#
-# $Id: explain.tag,v 1.10 1998-10-13 20:52:20 adam Exp $
-
-name explain
-reference Explain-tagset
-type 4
-include tagsetm.tag
-
-#
-# Explain categories
-#
-tag 1 categoryList structured
-tag 2 targetInfo structured
-tag 3 databaseInfo structured
-tag 4 schemaInfo structured
-tag 5 tagSetInfo structured
-tag 6 recordSyntaxInfo structured
-tag 7 attributeSetInfo structured
-tag 8 termListInfo structured
-tag 9 extendedServicesInfo structured
-tag 10 attributeDetails structured
-tag 11 termListDetails structured
-tag 12 elementSetDetails structured
-tag 13 retrievalRecordDetails structured
-tag 14 sortDetails structured
-tag 15 processing structured
-tag 16 variants structured
-tag 17 units structured
-
-#
-# TargetInfo
-#
-tag 102 name string
-tag 103 recentNews string
-tag 104 icon structured
-tag 105 namedResultSets bool
-tag 106 multipleDbSearch bool
-tag 107 maxResultSets numeric
-tag 108 maxResultSize numeric
-tag 109 maxTerms numeric
-tag 110 timeoutInterval intunit
-tag 111 welcomeMessage string
-tag 112 contactInfo structured
-tag 113 description string
-tag 114 nicknames structured
-tag 115 usageRest string
-tag 116 paymentAddr string
-tag 117 hours string
-tag 118 dbCombinations structured
-tag 119 addresses structured
-tag 120 internetAddress structured
-tag 121 host string
-tag 122 port numeric
-tag 123 otherAddress structured
-tag 124 addressType string
-tag 125 languages structured
-tag 126 language string
-tag 127 address string
-tag 128 email string
-tag 129 phone string
-
-#
-# DatabaseInfo
-#
-tag 201 userFee bool
-tag 202 available bool
-tag 203 titleString string
-tag 205 associatedDbs structured
-tag 206 subDbs structured
-tag 207 disclaimers string
-tag 209 recordCount structured
-tag 210 recordCountActual numeric
-tag 211 recordCountApprox numeric
-tag 212 defaultOrder string
-tag 213 avRecordSize numeric
-tag 214 maxRecordSize numeric
-tag 215 hours string
-tag 216 bestTime string
-tag 217 lastUpdate generalizedtime
-tag 218 updateInterval intunit
-tag 219 coverage string
-tag 220 proprietary bool
-tag 221 copyrightText string
-tag 222 copyrightNotice string
-tag 223 producerContactInfo structured
-tag 224 supplierContactInfo structured
-tag 225 submissionContactInfo structured
-tag 226 explainDatabase null
-tag 227 keywords string
-
-# CategoryList
-tag 300 categories structured
-tag 301 category structured
-tag 302 originalName string
-tag 303 asn1Module string
-#
-# AccessInfo
-#
-tag 500 accessinfo structured
-tag 501 queryTypesSupported structured
-tag 503 diagnosticSets structured
-tag 505 attributeSetIds structured
-tag 507 schemas structured
-tag 509 recordSyntaxes structured
-tag 511 resourceChallenges structured
-tag 513 restrictedAccess structured
-tag 514 costInfo structured
-tag 515 variantSets structured
-tag 516 elementSetNames structured
-tag 517 unitSystems structured
-tag 518 queryTypeDetails structured
-tag 519 rpnCapabilities structured
-tag 520 Iso8777Capabilities structured
-tag 521 privateCapabilities structured
-
-tag 550 rpnOperators structured
-tag 551 rpnOperator numeric
-tag 552 resultSetAsOperandSupported bool
-tag 553 restrictionOperandSupported bool
-tag 554 proximitySupport structured
-tag 555 anySupport bool
-tag 556 proximityUnitsSupported structured
-tag 557 proximityUnitSupported structured
-tag 558 proximityUnitVal numeric
-tag 559 proximityUnitPrivate structured
-tag 560 proximityUnitDescription string
-
-# CommonInfo
-
-tag 600 commonInfo structured
-tag 601 dateAdded generalizedtime
-tag 602 dateChanged generalizedtime
-tag 603 expiry generalizedtime
-tag 604 languageCode string
-tag 605 databaseList structured
-
-# AttributeDetails, AttributeSetDetails
-
-tag 700 attributesBySet structured
-tag 701 attributeSetDetails structured
-tag 702 attributesByType structured
-tag 703 attributeTypeDetails structured
-tag 704 type numeric
-tag 705 defaultIfOmitted structured
-tag 706 defaultValue structured
-tag 708 attributeValues structured
-tag 709 attributeValue structured
-tag 710 value structured
-tag 711 partialSupport string
-tag 712 subAttributes structured
-tag 713 subAttribute structured
-tag 714 superAttributes structured
-tag 715 superAttribute structured
-tag 716 attributeCombinations structured
-tag 717 legalAttributeCombinations structured
-tag 718 attributeCombination structured
-tag 719 attributeOccurrence structured
-tag 720 mustBeSupplied bool
-tag 721 anyOrNone string
-tag 722 specific structured
-
-#
-# AttributeSetInfo
-#
-tag 750 attributes structured
-tag 751 attributeType structured
-tag 752 equivalentAttribute structured
-#
-# General tags for list members, etc.
-#
-tag 1000 oid oid
-tag 1001 string string
-tag 1002 numeric numeric
-
+++ /dev/null
-# Generic tags - including tagsetM and tagsetG.
-#
-# $Id: generic.tag,v 1.2 1998-10-13 20:52:21 adam Exp $
-name generic
-
-include tagsetm.tag
-include tagsetg.tag
+++ /dev/null
-simpleelement (1,10)
-simpleelement (1,12)
-simpleelement (2,1)
-simpleelement (1,14)
-simpleelement (4,1)
-simpleelement (4,52)
-simpleelement (2,6)
+++ /dev/null
-# $Id: gils-b.est,v 1.7 1996-07-26 13:38:23 quinn Exp $
-simpleelement (1,1)
-simpleelement (1,10)
-simpleelement (1,12)
-simpleelement (2,1)
-simpleelement (1,14)
-simpleelement (1,16)
-simpleelement (4,1)
-simpleelement (4,52)
-simpleelement (4,70)/(4,17)
+++ /dev/null
-# $Id: gils-f.est,v 1.1 1996-10-07 15:54:47 quinn Exp $
-simpleelement ?
+++ /dev/null
-# $Id: gils-g.est,v 1.7 1998-10-13 20:52:22 adam Exp $
-simpleelement (1,1)
-simpleelement (1,10)
-simpleelement (1,12)
-simpleelement (2,1)
-simpleelement (1,14)
-simpleelement (1,16)
-simpleelement (4,1)
-simpleelement (4,52)
-simpleelement (4,98)
-
-#
-# These are not formally required by GILS
-#
-simpleelement (4,59)
-simpleelement (4,70)
-simpleelement (4,97)
+++ /dev/null
-#
-# This table maps GILS-records to the Summary (abstract) syntax
-#
-
-targetname summary
-targetref Summary
-
-map title /(4,0)
-map originator /(4,1)
-map localControlNumber /(4,12)
-map rank /(4,14)
-map abstract /(4,16)
+++ /dev/null
-#
-# This table maps records in the GILS abstract syntax to the USMARC one
-# $Id: gils-usmarc.map,v 1.6 2002-05-28 21:11:08 adam Exp $
-
-targetname usmarc
-targetref USmarc
-
-map rank /(3,999)/(3,r)
-map localControlNumber /(3,001)
-map dateLastModified /(3,005)
-map ControlIdentifier /(3,035)/(3,a)
-
-map title /(3,245)/(3,a)
-map abstract /(3,520)/(3,a)
-map purpose /(3,500)/(3,a)
-map originator /(3,710)/(3,a)
-map accessConstraints /(3,506)/(3,a)
-map useConstraints /(3,540)/(3,a)
-
-map distributor /(3,270):new nodata
-map distributorName /(3,270)/(3,p)
-map distributorOrganization /(3,270)/(3,p)
-map distributorStreetAddress /(3,270)/(3,a)
-map distributorCity /(3,270)/(3,b)
-map distributorState /(3,270)/(3,c)
-map distributorZipCode /(3,270)/(3,e)
-map distributorCountry /(3,270)/(3,d)
-map distributorNetworkAddress /(3,270)/(3,m)
-map distributorHoursOfService /(3,301)/(3,a)
-map distributorTelephone /(3,270)/(3,k)
-map distributorFax /(3,270)/(3,l)
-
-map resourceDescription /(3,037)/(3,f)
-map orderProcess /(3,037)/(3,c)
-map technicalPrerequisite /(3,538)/(3,a)
-map availableTimePeriodStructured /(3,045)/(3,c)
-map availableTimePeriodTextual /(3,037)/(3,n) # Unhandled conditional
-
-map linkage /(3,856)/(3,u)
-map linkageType /(3,856)/(3,2)
-#map pointOfContact /(3,856)/(3,m) # Look into this
-
-map pointOfContact /(3,270):new nodata
-map contactName /(3,270)/(3,p)
-map contactOrganization /(3,270)/(3,p)
-map contactStreetAddress /(3,270)/(3,a)
-map contactCity /(3,270)/(3,b)
-map contactState /(3,270)/(3,c)
-map contactZipCode /(3,270)/(3,e)
-map contactCountry /(3,270)/(3,d)
-map contactNetworkAddress /(3,270)/(3,m)
-map contactHoursOfService /(3,301)/(3,a)
-map contactTelephone /(3,270)/(3,k)
-map contactFax /(3,270)/(3,l)
-
-map recordSource /(3,040)/(3,a)
-map agencyProgram /(3,500)/(3,a)
-map sourcesOfData /(3,537)/(3,a)
-map controlledTerm /(3,650)/(3,a)
-map thesaurus /(3,650)/(3,2)
-map localSubjectTerm /(3,653)/(3,a)
-map methodology /(3,567)/(3,a)
-
-map boundingrectangle /(3,034):new nodata
-map westernMost /(3,034)/(3,d)
-map easternMost /(3,034)/(3,e)
-map northernMost /(3,034)/(3,f)
-map southernMost /(3,034)/(3,g)
-
-map geographicKeywordName /(3,651)/(3,a)
-map geographicKeywordType /(3,655)/(3,z) # Probably incorrect
-map timeperiodStructured /(3,045)/(3,c)
-map timeperiodTextual /(3,513)/(3,b)
-map crossReference /(3,787):new nodata
-map crossReferenceTitle /(3,787)/(3,t)
-map crossReferenceLinkage /(3,787)/(3,w)
-
-map supplementalInformation /(3,500)/(3,a)
+++ /dev/null
-#
-# This is the WAIS VARIANT element set description.
-# The empty variant parameters to the simpleelement statements simply
-# override the default.
-#
-
-defaultvariantrequest (9,1,@) (6,5,@) # No data; variant list.
-
-simpleelement (1,10) variant
-simpleelement (1,12) variant
-simpleelement (2,1) variant
-simpleelement (2,6)
-simpleelement (1,14) variant
-simpleelement (4,1)
-simpleelement (4,52)
+++ /dev/null
-# This is the abstract syntax (and most of the top-level profile info)
-# for GILS version 2.
-#
-# $Id: gils.abs,v 1.18 1998-10-13 20:52:23 adam Exp $
-
-name gils
-reference GILS-schema
-attset gils.att
-tagset gils.tag
-varset var1.var
-
-maptab gils-usmarc.map
-maptab gils-summary.map
-
-# Element set names
-
-esetname VARIANT gils-variant.est # for WAIS-compliance
-esetname B gils-b.est
-esetname G gils-g.est
-esetname W gils-b.est # We don't really do bodyOfDisplay yet.
-esetname F @
-
-#all Any
-
-elm (1,1) schemaIdentifier -
-elm (1,10) rank -
-elm (1,12) url -
-elm (1,14) localControlNumber -
-elm (2,1) title !:w,!:p,!:s
-elm (4,52) originator author-name-corporate
-#
-# Additional structuring of originator non-standard.
-#
-elm (4,52)/(2,7) originatorName author-name-corporate
-elm (4,52)/(2,10) originatorOrganization author-name-corporate
-elm (4,52)/(4,2) originatorStreetAddress author-name-corporate
-elm (4,52)/(4,3) originatorCity author-name-corporate
-elm (4,52)/(4,4) originatorStateOrProvince author-name-corporate
-elm (4,52)/(4,5) originatorZipOrPostalCode author-name-corporate
-elm (4,52)/(2,16) originatorCountry author-name-corporate
-elm (4,52)/(2,12) originatorNetworkAddress author-name-corporate
-elm (4,52)/(4,6) originatorHoursofService author-name-corporate
-elm (4,52)/(2,14) originatorTelephone author-name-corporate
-elm (4,52)/(2,15) originatorFax author-name-corporate
-elm (2,2) author !
-#
-# Additional structuring of author non-standard.
-#
-elm (2,2)/(2,7) authorName author
-elm (2,2)/(2,10) authorOrganization author
-elm (2,2)/(4,2) authorStreetAddress author
-elm (2,2)/(4,3) authorCity author
-elm (2,2)/(4,4) authorStateOrProvince author
-elm (2,2)/(4,5) authorZipOrPostalCode author
-elm (2,2)/(2,16) authorCountry author
-elm (2,2)/(2,12) authorNetworkAddress author
-elm (2,2)/(4,6) authorHoursofService author
-elm (2,2)/(2,14) authorTelephone author
-elm (2,2)/(2,15) authorFax author
-elm (2,4) dateOfPublication !
-elm (2,3) placeOfPublication place-publication
-elm (4,32) languageOfResource code-language
-elm (2,6) abstract !
-elm (4,95) controlledSubjectIndex -
-elm (4,95)/(4,21) subjectThesaurus -
-elm (4,95)/(4,96) subjectTermsControlled controlled-subject-index
-elm (4,95)/(4,96)/(4,20) controlledTerm index-terms
-elm (4,97) subjectTermsUncontrolled uncontrolled-term
-elm (4,97)/(4,22) uncontrolledTerm uncontrolled-term
-elm (4,71) spatialDomain !
-elm (4,71)/(4,91) boundingCoordinates !
-elm (4,71)/(4,91)/(4,9) westBoundingCoordinate !:n
-elm (4,71)/(4,91)/(4,10) eastBoundingCoordinate !:n
-elm (4,71)/(4,91)/(4,11) northBoundingCoordinate !:n
-elm (4,71)/(4,91)/(4,12) southBoundingCoordinate !:n
-elm (4,71)/(4,92) place !
-elm (4,71)/(4,92)/(4,14) placeKeywordThesaurus -
-elm (4,71)/(4,92)/(4,13) placeKeyword place
-elm (4,93) timePeriod !
-elm (4,93)/(4,16) timePeriodTextual !
-elm (4,93)/(4,101) timePeriodStructured !
-elm (4,93)/(4,101)/(4,15) beginningDate !
-elm (4,93)/(4,101)/(4,36) endingDate !
-elm (4,70) availability !
-elm (4,70)/(4,33) medium material-type
-elm (4,70)/(4,90) distributor !
-elm (4,70)/(4,90)/(2,7) distributorName !
-elm (4,70)/(4,90)/(2,10) distributorOrganization !
-elm (4,70)/(4,90)/(4,2) distributorStreetAddress !
-elm (4,70)/(4,90)/(4,3) distributorCity !
-elm (4,70)/(4,90)/(4,4) distributorStateOrProvince !
-elm (4,70)/(4,90)/(4,5) distributorZipOrPostalCode !
-elm (4,70)/(4,90)/(2,16) distributorCountry !
-elm (4,70)/(4,90)/(2,12) distributorNetworkAddress !
-elm (4,70)/(4,90)/(4,6) distributorHoursofService !
-elm (4,70)/(4,90)/(2,14) distributorTelephone !
-elm (4,70)/(4,90)/(2,15) distributorFax !
-elm (4,70)/(4,7) resourceDescription !
-elm (4,70)/(4,55) orderProcess !
-elm (4,70)/(4,55)/(4,28) orderInformation !
-elm (4,70)/(4,55)/(4,29) cost !
-elm (4,70)/(4,55)/(4,30) costInformation !
-elm (4,70)/(4,8) technicalPrerequisites !
-elm (4,70)/(4,93) availableTimePeriod !
-elm (4,70)/(4,93)/(4,16) availableTimeTextual !
-elm (4,70)/(4,93)/(4,102) availableTimeStructured !
-elm (4,70)/(4,93)/(4,102)/(4,15) beginningDate available-time-structured
-elm (4,70)/(4,93)/(4,102)/(4,36) endingDate available-time-structured
-elm (4,70)/(4,99) availableLinkage !
-elm (4,70)/(4,99)/(4,18) linkageType !
-elm (4,70)/(4,99)/(4,17) linkage available-linkage:u,linkage:u
-elm (4,57) sourcesOfData !
-elm (4,58) methodology !
-elm (4,53) accessConstraints !
-elm (4,53)/(4,25) generalAccessConstraints !
-elm (4,53)/(4,26) originatorDisseminationControl !
-elm (4,53)/(4,27) securityClassificationControl !
-elm (4,54) useConstraints !
-elm (4,94) pointOfContact !
-elm (4,94)/(2,7) contactName !
-elm (4,94)/(2,10) contactOrganization !
-elm (4,94)/(4,2) contactStreetAddress !
-elm (4,94)/(4,3) contactCity !
-elm (4,94)/(4,4) contactStateOrProvince !
-elm (4,94)/(4,5) contactZipOrPostalCode !
-elm (4,94)/(2,16) contactCountry !
-elm (4,94)/(2,12) contactNetworkAddress !
-elm (4,94)/(4,6) contactHoursOfService !
-elm (4,94)/(2,14) contactTelephone !
-elm (4,94)/(2,15) contactFax !
-elm (4,59) supplementalInformation -
-elm (4,51) purpose !
-elm (4,56) agencyProgram !
-elm (4,98) crossReference !
-elm (4,98)/(2,1) crossReferenceTitle !
-elm (4,98)/(4,35) crossReferenceRelationship !
-elm (4,98)/(4,100) crossReferenceLinkage !
-elm (4,98)/(4,100)/(4,18) linkageType -
-elm (4,98)/(4,100)/(4,17) linkage cross-reference-linkage:u
-elm (4,31) scheduleNumber !
-elm (4,1) controlIdentifier identifier-standard
-elm (4,23) originalControlIdentifier !
-elm (4,19) recordSource !
-elm (4,34) languageOfRecord !
-elm (1,16) dateOfLastModification date/time-last-modified:w,date/time-last-modified:s
-elm (4,24) recordReviewDate !
+++ /dev/null
-# $Id: gils.att,v 1.5 1998-10-13 20:52:24 adam Exp $
-name gils
-reference GILS-attset
-include bib1.att
-
-att 2000 Distributor
-att 2001 Distributor-Name
-att 2002 Index-Terms # Subject-Terms-Contr.
-att 2003 Purpose
-att 2004 General-Access-Constraints
-att 2005 Use-Constraints
-att 2006 Distributor-Organization
-att 2007 Distributor-Street-Address
-att 2008 Distributor-City
-att 2009 Distributor-State-or-Province
-att 2010 Distributor-Zip-or-Postal-Code
-att 2011 Distributor-Country
-att 2012 Distributor-Network-Address
-att 2013 Distributor-Hours-of-Service
-att 2014 Distributor-Telephone
-att 2015 Distributor-Fax
-att 2016 Resource-Description
-att 2017 Order-Information
-att 2018 Technical-Prerequisites
-att 2019 Available-Time-Structured
-att 2020 Available-Time-Textual
-att 2021 Linkage
-att 2022 Linkage-Type
-att 2023 Contact-Name
-att 2024 Contact-Organization
-att 2025 Contact-Street-Address
-att 2026 Contact-City
-att 2027 Contact-State-or-Province
-att 2028 Contact-Zip-or-Postal-Code
-att 2029 Contact-Country
-att 2030 Contact-Network-Address
-att 2031 Contact-Hours-of-Service
-att 2032 Contact-Telephone
-att 2033 Contact-Fax
-att 2034 Agency-Program
-att 2035 Sources-of-Data
-att 2036 Subject-Thesaurus
-att 2037 Methodology
-att 2038 West-Bounding-Coordinate
-att 2039 East-Bounding-Coordinate
-att 2040 North-Bounding-Coordinate
-att 2041 South-Bounding-Coordinate
-att 2042 Place-Keyword
-att 2043 Place-Keyword-Thesaurus
-att 2044 Time-Period-Structured
-att 2045 Time-Period-Textual
-att 2046 Cross-Reference-Title
-att 2047 Cross-Reference-Linkage
-att 2049 Original-Control-Identifier
-att 2050 Supplemental-Information
-att 2051 Record-Review-Date
-att 2052 Originator-Dissemination-Control
-att 2053 Security-Classification-Control
-att 2054 Cost
-att 2055 Cost-Information
-att 2056 Schedule-Number
-att 2057 Controlled-Subject-Index
-att 2058 Uncontrolled-Term
-att 2059 Spatial-Domain
-att 2060 Bounding-Coordinates
-att 2061 Place
-att 2062 Time-Period
-att 2063 Availability
-att 2064 Order-Process
-att 2065 Available-Time-Period
-att 2066 Access-Constraints
-att 2067 Point-of-Contact
-att 2068 Cross-Reference
-att 2069 Available-Linkage
-att 2070 Cross-Reference-Relationship
-att 2071 Language-of-Record
-att 2072 Beginning-Date
-att 2073 Ending-Date
-att 2074 Controlled-Term
+++ /dev/null
-# Tag set for GILS version 2.
-#
-# $Id: gils.tag,v 1.7 1998-10-13 20:52:25 adam Exp $
-name gils
-type 4
-include tagsetm.tag
-include tagsetg.tag
-
-tag 1 controlIdentifier string
-tag 2 streetAddress string
-tag 3 city string
-tag 4 stateOrProvince string
-tag 5 zipOrPostalCode string
-tag 6 hoursOfService string
-tag 7 resourceDescription string
-tag 8 technicalPrerequisites string
-tag 9 westBoundingCoordinate intUnit
-tag 10 eastBoundingCoordinate intUnit
-tag 11 northBoundingCoordinate intUnit
-tag 12 southBoundingCoordinate intUnit
-tag 13 placeKeyword string
-tag 14 placeKeywordThesaurus string
-tag 15 beginningDate GeneralizedTime
-tag 16 timePeriodTextual string
-tag 17 linkage string
-tag 18 linkageType string
-tag 19 recordSource string
-tag 20 controlledTerm string
-tag 21 subjectThesaurus string
-tag 22 uncontrolledTerm string
-tag 23 originalControlIdentifier string
-tag 24 recordReviewDate GeneralizedTime
-tag 25 generalAccessConstraints string
-tag 26 originatorDisseminationControl string
-tag 27 securityClassificationControl string
-tag 28 orderInformation string
-tag 29 cost bool
-tag 30 costInformation string
-tag 31 scheduleNumber string
-tag 32 languageOfResource string
-tag 33 medium string
-tag 34 languageOfRecord string
-tag 35 relationship string
-tag 36 endingDate GeneralizedTime
-tag 51 purpose structured
-tag 52 originator structured
-tag 53 accessConstraints structured
-tag 54 useConstraints structured
-tag 55 orderProcess structured
-tag 56 agencyProgram structured
-tag 57 sourcesOfData structured
-tag 58 methodology structured
-tag 59 supplementalInformation structured
-tag 70 availability structured
-tag 71 spatialDomain structured
-tag 90 distributor structured
-tag 91 boundingCoordinates structured
-tag 92 place structured
-tag 93 timePeriod structured
-tag 94 pointOfContact structured
-tag 95 controlledSubjectIndex structured
-tag 96 subjectTermsControlled structured
-tag 97 subjectTermsUncontrolled structured
-tag 98 crossReference structured
-tag 99 availableLinkage structured
-tag 100 crossReferenceLinkage structured
-tag 101 timePeriodStructured structured
-tag 102 availableTimeStructured structured
+++ /dev/null
-simpleelement (1,10)
-simpleelement (1,12)
-simpleelement (2,1)
-simpleelement (1,14)
-simpleelement (4,5)
-simpleelement (2,3)
-simpleelement (2,2):all
+++ /dev/null
-# Meta to USMARC conversion
-# $Id: meta-usmarc.map,v 1.2 2002-05-28 21:11:08 adam Exp $
-targetname usmarc
-targetref USmarc
-
-map localControlNumber /(3,001)
-map dateLastModified /(3,005)
-
-map subject /(3,653)/(3,a)
-map title /(3,245)/(3,a)
-map author /(3,700)/(3,a)
-map publisher /(3,260)/(3,b)
-map otheragent /(3,710)/(3,a)
-map date /(3,260)/(3,c)
-map identifier /(3,024)/(3,a)
-# objectType skipped for now
-map form /(3,538)/(3,a)
-map relation /(3,787)/(3,a) # complexity here
-map language /(3,041)/(3,a)
-map source /(3,786)/(3,a)
-# coverage skipped for now
-
-map abstract /(3,520)/(3,a)
+++ /dev/null
-# This is a simple profile based on the Dublin Core of metadata elements.
-#
-# $Id: meta.abs,v 1.6 1998-10-14 14:24:08 perhans Exp $
-
-name meta
-attset bib1.att
-tagset meta.tag
-varset var1.var
-
-esetname F @
-esetname B meta-b.est
-
-maptab meta-usmarc.map
-
-elm (2,1) title Title:w,Title:p
-elm (2,2) creator Author:w,Author:p
-elm (2,21) subject Subject-heading
-elm (2,17) description -
-elm (2,31) publisher Publisher
-elm (2,32) contributor -
-elm (2,4) date Date
-elm (2,22) type Content-type
-elm (2,27) format Material-type
-elm (2,28) identifier -
-elm (2,33) source -
-elm (2,20) language Code-language
-elm (2,30) relation -
-elm (2,34) coverage -
-elm (2,29) rights -
-
-# These tags are required by Zebra for GRS-1 generation
-elm (1,10) rank -
-elm (1,14) localControlNumber Local-number
+++ /dev/null
-name meta
-type 4
-include tagsetg.tag
-include tagsetm.tag
+++ /dev/null
-# Summary record abstract syntax
-#
-# $Id: summary.abs,v 1.2 1998-10-13 20:52:27 adam Exp $
-
-name summary
-tagset summary.tag
-attset bib1.att
-reference Summary
-
-elm (4,0) title !
-elm (4,1) author !
-elm (4,2) callNumber -
-elm (4,3) recordType -
-elm (4,4) bibliographicLevel -
-elm (4,5) formats -
-elm (4,5)/(4,6) format -
-elm (4,5)/(4,6)/(4,7) format-type -
-elm (4,5)/(4,6)/(4,8) format-size -
-elm (4,5)/(4,6)/(4,9) format-bestPosn -
-elm (4,10) publicationPlace -
-elm (4,11) publicationDate -
-elm (4,12) targetSystemKey -
-elm (4,13) satisfyingElement -
-elm (4,14) rank -
-elm (4,15) documentId -
-elm (4,16) otherInformation -
+++ /dev/null
-# Tagset for Summary profile
-#
-# $Id: summary.tag,v 1.2 1998-10-13 20:52:28 adam Exp $
-
-name summary
-type 4
-
-tag 0 title string
-tag 1 author string
-tag 2 callNumber string
-tag 3 recordType string
-tag 4 bibliographicLevel string
-
-tag 5 formats structured
-tag 6 format structured
-tag 7 type string
-tag 8 size numeric
-tag 9 bestPosn numeric
-
-tag 10 publicationPlace string
-tag 11 publicationDate string
-tag 12 targetSystemKey string
-tag 13 satisfyingElement string
-tag 14 rank numeric
-tag 15 documentId string
-tag 16 abstract string
-tag 17 otherInformation structured
+++ /dev/null
-# TagSet-G Tags
-# $Id: tagsetg.tag,v 1.4 1998-11-05 10:24:53 quinn Exp $
-name tagsetg
-reference TagsetG
-type 2
-
-tag 1 title string
-tag 2 author string
-tag 3 publicationPlace string
-tag 4 publicationDate/date-of-publication string
-tag 5 documentId string
-tag 6 abstract string
-tag 7 name string
-tag 8 dateTime generalizedtime
-tag 9 displayObject octetstring
-tag 10 organization/organisation string
-tag 11 postalAddress string
-tag 12 networkAddress string
-tag 13 eMailAddress string
-tag 14 phoneNumber/telephone string
-tag 15 faxNumber/fax string
-tag 16 country string
-tag 17 description string
-tag 18 time intunit
-tag 19 documentcontent octetstring
-tag 20 language string
-tag 21 subject string
-tag 22 resourceType string
-tag 23 city string
-tag 24 stateOrProvince string
-tag 25 zipOrPostalCode string
-tag 26 cost string
-tag 27 format string
-tag 28 identifier string
-tag 29 rights string
-tag 30 relation string
-tag 31 publisher string
-tag 32 contributor string
-tag 33 source string
-tag 34 coverage string
-tag 35 private string
+++ /dev/null
-# TagSet-M Tags
-#
-# $Id: tagsetm.tag,v 1.5 1998-10-13 20:52:29 adam Exp $
-name tagsetm
-reference TagsetM
-type 1
-
-tag 1 schemaIdentifier oid
-tag 2 elementsOrdered bool
-tag 3 elementOrdering int
-tag 4 defaultTagType int
-tag 5 defaultVariantSetId oid
-tag 6 defaultVariantSpec structured
-tag 7 processingInstructions string
-tag 8 recordUsage int
-tag 9 restriction string
-tag 10 rank int
-tag 11 userMessage string
-tag 12 url string
-tag 13 record structured
-tag 14 local-control-number string
-tag 15 creation-date generalizedtime
-tag 16 dateOfLastModification/lastModified generalizedtime
-tag 17 dateOfLastReview generalizedtime
-tag 18 score int
-tag 19 wellKnown string
-tag 20 recordWrapper structured
-tag 21 defaultTagSetId oid
-tag 22 languageOfRecord string
-tag 23 type string
-tag 24 scheme string
-tag 25 costInfo string
-tag 26 costFlag bool
+++ /dev/null
-simpleelement (3,'001)
-simpleelement (3,'035)
-simpleelement (3,'245)
-simpleelement (3,'100)
-simpleelement (3,'710)
-simpleelement (3,'700)
+++ /dev/null
-# $Id: usmarc.abs,v 1.6 1998-10-13 20:52:30 adam Exp $
-name usmarc
-reference USmarc
-attset bib1.att
-tagset usmarc.tag
-
-marc usmarc.mar
-
-esetname B usmarc-b.est
-esetname F @
-
-# All 245 subfields mapped to title (word) and
-# 245 subfield a mapped to tile (phrase).
-elm 245 title -
-elm 245/? title !:w
-elm 245/?/a title !:w,!:p
-
-# 100 mapped to Author-name-personal and Author.
-elm 100 Author-name-personal -
-elm 100/? Author-name-personal !:w,!:p,Author:w,Author:p
-
-# 110 mapped to Author-name-corporate and Author
-elm 110 Author-name-corporate -
-elm 110/? Author-name-corporate !:w,!:p,Author:w,Author:p
-
-# 111 mapped to Author-name-conference and Author
-elm 111 Author-name-conference -
-elm 111/? Author-name-conference !:w,!:p,Author:w,Author:p
-
-# Tag 260 subfield a mapped to Place-publication
-elm 260 Place-publication -
-elm 260/? Place-publication -
-elm 260/?/a Place-publication !:w
-elm 260/?/b Publisher !:w
-elm 260/?/c Date !:w
-
+++ /dev/null
-# $Id: usmarc.mar,v 1.2 1998-10-13 20:52:31 adam Exp $
-name usmarc
-reference USmarc
+++ /dev/null
-# Pseudo-tagset for USMARC
-#
-# $Id: usmarc.tag,v 1.2 1998-10-13 20:52:32 adam Exp $
-
-name usmarc
-type 4
-include tagsetm.tag
-
-#tag 1 a string
-#tag 2 b string
-tag 245 245 string
-tag 100 100 string
+++ /dev/null
-# Definition of the variant set Variant-1.
-# Variant triple syntax is '<VAR class type value>'. Eg.
-# <var body iana "application/postscript"> or <var lang lang "eng">.
-#
-# $Id: var1.var,v 1.3 1998-10-13 20:52:33 adam Exp $
-
-name variant-1
-reference Variant-1
-
-class 1 variantId
-
- type 1 variantId octetstring
-
-class 2 body
-
- type 1 iana string
- type 2 z39.50 string
- type 3 other string
-
-class 3 format
-
- type 1 characters-per-line int
- type 2 line-length int
-
- # More types here......
-
-class 4 lang
-
- type 1 lang string
- type 2 charset int
- type 3 charset-id oid
- type 4 encoding-id oid
- type 5 private-string string
-
-class 5 piece
-
- type 1 fragment-wanted int
- type 2 fragment-returned int
- type 3 start intunit
- type 4 end intunit
- type 5 howmuch intunit
- type 6 step intunit
- type 7 targettoken octetstring
-
-class 6 metadata-requested
-
- type 1 cost intunit
- type 2 size intunit
- type 3 hitsvar null
- type 4 hitsnonvar null
- type 5 variantlist null
- type 6 isvariantsupported null
- type 7 documentdescriptor null
- type 8 surrogateinformation null
- type 998 allmetadata null
- type 999 othermetadata oid
-
-class 7 metadata-returned
-
- type 1 cost intunit
-
- # More...
-
-# More classes, too...
+++ /dev/null
-#
-# WAIS eset.
-#
-
-simpleelement (2,1)
-simpleelement (2,7)
-simpleelement (1,16)
-simpleelement (1,18)
-simpleelement (1,14)
+++ /dev/null
-#
-# WAIS variant eset.
-#
-
-#
-# Default is no data, variant-list, please.
-#
-
-simpleelement ?:all variant (9,1,@) (6,5,@)
-
-#
-# Empty variant-requests for the well-known elements to override default.
-#
-
-simpleelement (2,1) variant
-simpleelement (2,7) variant
-simpleelement (1,16) variant
-simpleelement (1,18) variant
-simpleelement (1,14) variant
+++ /dev/null
-# WAIS profile
-#
-# $Id: wais.abs,v 1.5 1998-10-13 20:52:34 adam Exp $
-
-name wais
-reference WAIS-schema
-attset bib1.att
-tagset generic.tag
-
-varset var1.var
-
-esetname B wais-b.est
-esetname F @
-esetname VARIANT wais-variant.est
-
-elm (2,1) Title !:p,!:w
-elm (2,7) Name !:p,!:w
-elm (2,8) Date !
-elm (1,18) Score -
-elm (1,14) RecordId Local-number
-
-# Tags below this point are unofficial.
-
-elm Body BodyOfText !