Added support of the complex indexing for MARC records (whithout documentation yet).
[idzebra-moved-to-github.git] / include / data1.h
index 571e37a..24cf9af 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: data1.h,v 1.2 2002-10-22 13:19:50 adam Exp $
+/* $Id: data1.h,v 1.6 2003-02-28 12:33:38 oleg Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
    Index Data Aps
 
@@ -23,6 +23,8 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #ifndef DATA1_H
 #define DATA1_H
 
+#define ENHANCED_XELM 1
+
 #include <stdio.h>
 
 #include <yaz/nmem.h>
@@ -33,6 +35,8 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include <d1_map.h>
 #include <yaz/yaz-util.h>
 #include <yaz/wrbuf.h>
+#include <dfa.h>         /* pop */
+#include <zebra_xpath.h> /* pop */
 
 #define d1_isspace(c) strchr(" \r\n\t\f", c)
 #define d1_isdigit(c) ((c) <= '9' && (c) >= '0')
@@ -85,6 +89,7 @@ typedef struct data1_marctab
 
     int  force_indicator_length;
     int  force_identifier_length;
+    char leader[24]; /* Fixme! Need linear access to LEADER of MARC record */  
     struct data1_marctab *next;
 } data1_marctab;
 
@@ -187,6 +192,19 @@ typedef struct data1_sub_elements {
     data1_element *elements;
 } data1_sub_elements;
 
+/* pop */
+typedef struct data1_xpelement
+{
+    char *xpath_expr;
+#ifdef ENHANCED_XELM 
+    struct xpath_location_step xpath[XPATH_STEP_COUNT];
+    int xpath_len;
+#endif
+    struct DFA *dfa;  
+    data1_termlist *termlists;
+    struct data1_xpelement *next;
+} data1_xpelement;
+
 typedef struct data1_xattr {
     char *name;
     char *value;
@@ -194,6 +212,9 @@ typedef struct data1_xattr {
     unsigned short what;  /* DATA1I_text, .. see data1_node.u.data */
 } data1_xattr;
 
+#if 0
+typedef struct data1_absyn data1_absyn;
+#else
 typedef struct data1_absyn
 {
     char *name;
@@ -206,10 +227,12 @@ typedef struct data1_absyn
     data1_marctab *marc;
     data1_sub_elements *sub_elements;
     data1_element *main_elements;
+    data1_xpelement *xp_elements; /* pop */
+    struct data1_systag *systags;
     char *encoding;
     int  enable_xpath_indexing;
 } data1_absyn;
-
+#endif
 /*
  * record data node (tag/data/variant)
  */
@@ -486,6 +509,9 @@ YAZ_EXPORT const char *data1_get_encoding (data1_handle dh, data1_node *n);
 
 YAZ_EXPORT int data1_is_xmlmode(data1_handle dh);
 
+YAZ_EXPORT const char *data1_systag_lookup(data1_absyn *absyn, const char *tag,
+                                           const char *default_value);
+
 YAZ_END_CDECL
 
 #endif