7983a63faaf503f97b86e3f4126f181ffb764f2b
[yaz-moved-to-github.git] / include / prt-grs.h
1 /*
2  * Copyright (c) 1995, Index Data.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and
5  * its documentation, in whole or in part, for any purpose, is hereby granted,
6  * provided that:
7  *
8  * 1. This copyright and permission notice appear in all copies of the
9  * software and its documentation. Notices of copyright or attribution
10  * which appear at the beginning of any file must remain unchanged.
11  *
12  * 2. The names of Index Data or the individual authors may not be used to
13  * endorse or promote products derived from this software without specific
14  * prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
18  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19  * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
20  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
21  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
22  * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24  * OF THIS SOFTWARE.
25  *
26  */
27
28 #ifndef PRT_GRS_H
29 #define PRT_GRS_H
30
31 #include <yconfig.h>
32
33 struct Z_GenericRecord;
34 typedef struct Z_GenericRecord Z_GenericRecord;
35
36 typedef struct Z_ElementData
37 {
38     int which;
39 #define Z_ElementData_octets 0
40 #define Z_ElementData_numeric 1
41 #define Z_ElementData_date 2
42 #define Z_ElementData_ext 3
43 #define Z_ElementData_string 4
44 #define Z_ElementData_trueOrFalse 5
45 #define Z_ElementData_oid 6
46 #define Z_ElementData_intUnit 7
47 #define Z_ElementData_elementNotThere 8
48 #define Z_ElementData_elementEmpty 9
49 #define Z_ElementData_noDataRequested 10
50 #define Z_ElementData_diagnostic 11
51 #define Z_ElementData_subtree 12
52     union
53     {
54         Odr_oct *octets;                      
55         int *numeric;                         
56         char *date;             
57         Z_External *ext;                     
58         char *string;                         
59         bool_t *trueOrFalse;                  
60         Odr_oid *oid;                         
61         Z_IntUnit *intUnit;                  
62         Odr_null *elementNotThere;            
63         Odr_null *elementEmpty;               
64         Odr_null *noDataRequested;            
65         Z_External *diagnostic;              
66         Z_GenericRecord *subtree;            
67     } u;
68 } Z_ElementData;
69
70 typedef struct Z_Order
71 {
72     bool_t *ascending;                    
73     int *order;                           
74 } Z_Order;
75
76 typedef struct Z_Usage
77 {
78     int *type;                            
79 #define Z_Usage_redistributable     1
80 #define Z_Usage_restricted          2
81 #define Z_Usage_licensePointer      3
82     char *restriction;                      /* OPTIONAL */
83 } Z_Usage;
84
85 typedef struct Z_HitVector
86 {
87     Z_Term *satisfier;                      /* OPTIONAL */
88     Z_IntUnit *offsetIntoElement;           /* OPTIONAL */
89     Z_IntUnit *length;                      /* OPTIONAL */
90     int *hitRank;                           /* OPTIONAL */
91     Odr_oct *targetToken;                   /* OPTIONAL */
92 } Z_HitVector;
93
94 typedef struct Z_Triple
95 {
96     Odr_oid *variantSetId;                  /* OPTIONAL */
97     int *class;
98     int *type;
99     int which;
100 #define Z_Triple_integer 0
101 #define Z_Triple_internationalString 1
102 #define Z_Triple_octetString 2
103 #define Z_Triple_oid 3
104 #define Z_Triple_boolean 4
105 #define Z_Triple_null 5
106 #define Z_Triple_unit 6
107 #define Z_Triple_valueAndUnit 7
108     union
109     {
110         int *integer;
111         char *internationalString;
112         Odr_oct *octetString;
113         Odr_oid *oid;
114         bool_t *boolean;
115         Odr_null *null;
116         Z_Unit *unit;
117         Z_IntUnit *valueAndUnit;
118     } value;
119 } Z_Triple;
120
121 typedef struct Z_Variant
122 {
123     Odr_oid *globalVariantSetId;            /* OPTIONAL */
124     int num_triples;
125     Z_Triple **triples;
126 } Z_Variant;
127
128 typedef struct Z_TagUnit
129 {
130     int *tagType;                           /* OPTIONAL */
131     Z_StringOrNumeric *tagValue;         
132     int *tagOccurrence;                     /* OPTIONAL */
133 } Z_TagUnit;
134
135 typedef struct Z_TagPath
136 {
137     int num_tags;
138     Z_TagUnit **tags;
139 } Z_TagPath;
140
141 typedef struct Z_ElementMetaData
142 {
143     Z_Order *seriesOrder;                   /* OPTIONAL */
144     Z_Usage *usageRight;                    /* OPTIONAL */
145     int num_hits;
146     Z_HitVector **hits;                     /* OPTIONAL */
147     char *displayName;                      /* OPTIONAL */
148     int num_supportedVariants;
149     Z_Variant **supportedVariants;          /* OPTIONAL */
150     char *message;                          /* OPTIONAL */
151     Odr_oct *elementDescriptor;             /* OPTIONAL */
152     Z_TagPath *surrogateFor;                /* OPTIONAL */
153     Z_TagPath *surrogateElement;            /* OPTIONAL */
154     Z_External *other;                      /* OPTIONAL */
155 } Z_ElementMetaData;
156
157 typedef struct Z_TaggedElement
158 {
159     int *tagType;                           /* OPTIONAL */
160     Z_StringOrNumeric *tagValue;         
161     int *tagOccurrence;                     /* OPTIONAL */
162     Z_ElementData *content;              
163     Z_ElementMetaData *metaData;            /* OPTIONAL */
164     Z_Variant *appliedVariant;              /* OPTIONAL */
165 } Z_TaggedElement;
166
167 struct Z_GenericRecord
168 {
169     int num_elements;
170     Z_TaggedElement **elements;
171 };
172
173 int z_GenericRecord(ODR o, Z_GenericRecord **p, int opt);
174 int z_Variant(ODR o, Z_Variant **p, int opt);
175
176 #endif