2 * Copyright (C) 1995-2007, Index Data ApS
3 * See the file LICENSE for details.
5 * $Id: oid_db.c,v 1.1 2007-04-12 13:52:57 adam Exp $
19 #include <yaz/yaz-util.h>
21 #include <yaz/oid_util.h>
22 #include <yaz/oid_db.h>
24 struct yaz_oid_entry {
30 #define Z3950_PREFIX 1, 2, 840, 10003
32 static struct yaz_oid_entry standard_oids[] =
34 /* General definitions */
35 {CLASS_TRANSYN, {2, 1, 1,-1}, "BER" },
36 {CLASS_TRANSYN, {1, 0, 2709, 1, 1,-1}, "ISO2709"},
37 {CLASS_GENERAL, {1, 0, 10161, 2, 1,-1}, OID_STR_ILL_1 },
38 {CLASS_ABSYN, {2, 1,-1}, "Z-APDU"},
39 {CLASS_APPCTX, {1, 1,-1}, "Z-BASIC"},
40 {CLASS_ATTSET, {Z3950_PREFIX, 3, 1,-1}, "Bib-1"},
41 {CLASS_ATTSET, {Z3950_PREFIX, 3, 2,-1}, "Exp-1"},
42 {CLASS_ATTSET, {Z3950_PREFIX, 3, 3,-1}, "Ext-1"},
43 {CLASS_ATTSET, {Z3950_PREFIX, 3, 4,-1}, "CCL-1"},
44 {CLASS_ATTSET, {Z3950_PREFIX, 3, 5,-1}, "GILS"},
45 {CLASS_ATTSET, {Z3950_PREFIX, 3, 5,-1}, "GILS-attset"},
46 {CLASS_ATTSET, {Z3950_PREFIX, 3, 6,-1}, "STAS-attset"},
47 {CLASS_ATTSET, {Z3950_PREFIX, 3, 7,-1}, "Collections-attset"},
48 {CLASS_ATTSET, {Z3950_PREFIX, 3, 8,-1}, "CIMI-attset"},
49 {CLASS_ATTSET, {Z3950_PREFIX, 3, 9,-1}, "Geo-attset"},
50 {CLASS_ATTSET, {Z3950_PREFIX, 3, 10,-1}, "ZBIG"},
51 {CLASS_ATTSET, {Z3950_PREFIX, 3, 11,-1}, "Util"},
52 {CLASS_ATTSET, {Z3950_PREFIX, 3, 12,-1}, "XD-1"},
53 {CLASS_ATTSET, {Z3950_PREFIX, 3, 13,-1}, "Zthes"},
54 {CLASS_ATTSET, {Z3950_PREFIX, 3, 14,-1}, "Fin-1"},
55 {CLASS_ATTSET, {Z3950_PREFIX, 3, 15,-1}, "Dan-1"},
56 {CLASS_ATTSET, {Z3950_PREFIX, 3, 16,-1}, "Holdings"},
57 {CLASS_ATTSET, {Z3950_PREFIX, 3, 17,-1}, "MARC"},
58 {CLASS_ATTSET, {Z3950_PREFIX, 3, 18,-1}, "Bib-2"},
59 {CLASS_ATTSET, {Z3950_PREFIX, 3, 19,-1}, "ZeeRex"},
60 /* New applications should use Zthes-1 instead of this Satan-spawn */
61 {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,1,-1},
63 {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,2,-1},
65 {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,3,-1},
67 {CLASS_DIAGSET, {Z3950_PREFIX, 4, 1,-1},
69 {CLASS_DIAGSET, {Z3950_PREFIX, 4, 2,-1},
71 {CLASS_DIAGSET, {Z3950_PREFIX, 4, 3,-1},
73 {CLASS_DIAGSET, {Z3950_PREFIX, 4, 3,-1},
75 {CLASS_RECSYN, {Z3950_PREFIX, 5, 1,-1},
77 {CLASS_RECSYN, {Z3950_PREFIX, 5, 2,-1},
79 {CLASS_RECSYN, {Z3950_PREFIX, 5, 3,-1},
81 {CLASS_RECSYN, {Z3950_PREFIX, 5, 10,-1},
83 /* MARC21 is just an alias for the original USmarc */
84 {CLASS_RECSYN, {Z3950_PREFIX, 5, 10,-1},
86 {CLASS_RECSYN, {Z3950_PREFIX, 5, 11,-1},
88 {CLASS_RECSYN, {Z3950_PREFIX, 5, 12,-1},
90 {CLASS_RECSYN, {Z3950_PREFIX, 5, 13,-1},
92 {CLASS_RECSYN, {Z3950_PREFIX, 5, 14,-1},
94 {CLASS_RECSYN, {Z3950_PREFIX, 5, 15,-1},
96 {CLASS_RECSYN, {Z3950_PREFIX, 5, 16,-1},
98 {CLASS_RECSYN, {Z3950_PREFIX, 5, 17,-1},
100 {CLASS_RECSYN, {Z3950_PREFIX, 5, 18,-1},
102 {CLASS_RECSYN, {Z3950_PREFIX, 5, 19,-1},
104 {CLASS_RECSYN, {Z3950_PREFIX, 5, 20,-1},
106 {CLASS_RECSYN, {Z3950_PREFIX, 5, 21,-1},
108 {CLASS_RECSYN, {Z3950_PREFIX, 5, 22,-1},
110 {CLASS_RECSYN, {Z3950_PREFIX, 5, 23,-1},
112 {CLASS_RECSYN, {Z3950_PREFIX, 5, 24,-1},
114 {CLASS_RECSYN, {Z3950_PREFIX, 5, 25,-1},
116 {CLASS_RECSYN, {Z3950_PREFIX, 5, 26,-1},
118 {CLASS_RECSYN, {Z3950_PREFIX, 5, 27,-1},
120 {CLASS_RECSYN, {Z3950_PREFIX, 5, 28,-1},
122 {CLASS_RECSYN, {Z3950_PREFIX, 5, 29,-1},
124 {CLASS_RECSYN, {Z3950_PREFIX, 5, 30,-1},
126 {CLASS_RECSYN, {Z3950_PREFIX, 5, 31,-1},
128 {CLASS_RECSYN, {Z3950_PREFIX, 5, 32,-1},
130 {CLASS_RECSYN, {Z3950_PREFIX, 5, 100,-1},
132 {CLASS_RECSYN, {Z3950_PREFIX, 5, 101,-1},
134 {CLASS_RECSYN, {Z3950_PREFIX, 5, 102,-1},
136 {CLASS_RECSYN, {Z3950_PREFIX, 5, 103,-1},
138 {CLASS_RECSYN, {Z3950_PREFIX, 5, 104,-1},
140 {CLASS_RECSYN, {Z3950_PREFIX, 5, 105,-1},
142 {CLASS_RECSYN, {Z3950_PREFIX, 5, 106,-1},
144 {CLASS_RECSYN, {Z3950_PREFIX, 5, 107,-1},
146 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,1,-1},
148 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,2,-1},
150 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,3,-1},
152 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,4,-1},
154 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,5,-1},
156 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,6,-1},
158 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,7,-1},
160 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,8,-1},
162 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,9,-1},
165 {CLASS_RECSYN, {Z3950_PREFIX, 5, 110,1,-1},
167 {CLASS_RECSYN, {Z3950_PREFIX, 5, 110,2,-1},
170 {CLASS_RECSYN, {Z3950_PREFIX, 5, 111,-1},
172 {CLASS_RECSYN, {Z3950_PREFIX, 5, 1000, 81, 2,-1},
174 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 10,-1},
176 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 10,-1},
178 {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 11,-1},
179 OID_STR_APPLICATION_XML },
180 {CLASS_RESFORM, {Z3950_PREFIX, 7, 1,-1},
182 {CLASS_RESFORM, {Z3950_PREFIX, 7, 2,-1},
184 {CLASS_RESFORM, {Z3950_PREFIX, 7, 1000, 81, 1,-1},
185 "UNIverse-Resource-Report"},
187 {CLASS_ACCFORM, {Z3950_PREFIX, 8, 1,-1},
189 {CLASS_ACCFORM, {Z3950_PREFIX, 8, 2,-1},
191 {CLASS_ACCFORM, {Z3950_PREFIX, 8, 3,-1},
193 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1,-1},
195 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 2,-1},
197 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 3,-1},
199 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 4,-1},
201 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5,-1},
202 "DB. Update (first version)"},
203 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5,1,-1},
204 "DB. Update (second version)"},
205 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5, 1, 1,-1},
207 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 6,-1},
209 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 7,-1},
211 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1000, 81, 1,-1},
213 {CLASS_USERINFO, {Z3950_PREFIX, 10, 1,-1},
215 {CLASS_USERINFO, {Z3950_PREFIX, 10, 2,-1},
216 "CharSetandLanguageNegotiation"},
217 {CLASS_USERINFO, {Z3950_PREFIX, 10, 3,-1},
219 {CLASS_USERINFO, {Z3950_PREFIX, 10, 4,-1},
220 "MultipleSearchTerms-1"},
221 {CLASS_USERINFO, {Z3950_PREFIX, 10, 5,-1},
222 "MultipleSearchTerms-2"},
223 {CLASS_USERINFO, {Z3950_PREFIX, 10, 6,-1},
225 {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 1,-1},
227 {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 2,-1},
229 {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 3,-1},
231 {CLASS_ELEMSPEC, {1, 2, 840, 1003, 11, 1,-1},
233 {CLASS_VARSET, {Z3950_PREFIX, 12, 1,-1},
235 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1,-1},
237 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 2,-1},
239 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 3,-1},
240 "Collections-schema"},
241 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 4,-1},
243 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 5,-1},
245 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 6,-1},
247 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 7,-1},
249 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 8,-1},
251 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1000, 81, 1,-1},
253 {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1000, 81, 2,-1},
255 {CLASS_TAGSET, {Z3950_PREFIX, 14, 1,-1},
257 {CLASS_TAGSET, {Z3950_PREFIX, 14, 2,-1},
259 {CLASS_TAGSET, {Z3950_PREFIX, 14, 3,-1},
261 {CLASS_TAGSET, {Z3950_PREFIX, 14, 4,-1},
263 {CLASS_TAGSET, {Z3950_PREFIX, 14, 5,-1},
264 "Collections-tagset"},
265 {CLASS_TAGSET, {Z3950_PREFIX, 14, 6,-1},
267 {CLASS_TAGSET, {Z3950_PREFIX, 14, 1000, 81, 1,-1},
269 {CLASS_TAGSET, {Z3950_PREFIX, 14, 1000, 81, 2,-1},
271 {CLASS_TAGSET, {Z3950_PREFIX, 14, 8,-1},
273 {CLASS_NEGOT, {Z3950_PREFIX, 15, 3,-1},
275 {CLASS_NEGOT, {Z3950_PREFIX, 15, 4,-1},
277 {CLASS_NEGOT, {Z3950_PREFIX, 15, 1000, 81,1,-1},
278 OID_STR_ID_CHARSET },
279 {CLASS_USERINFO, {1, 2, 840, 1003, 16, 2, -1},
281 {CLASS_GENERAL, {1,0,10646,1,0,2,-1},
283 {CLASS_GENERAL, {1,0,10646,1,0,4,-1},
285 {CLASS_GENERAL, {1,0,10646,1,0,5,-1},
287 {CLASS_GENERAL, {1,0,10646,1,0,8,-1},
289 {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 17, 1, -1},
291 {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1000,105,4,-1},
296 yaz_oid_db_t yaz_oid_std(void)
298 return standard_oids;
301 const int *yaz_string_to_oid(yaz_oid_db_t oid_list,
302 int oclass, const char *name)
304 for (; oid_list->name; oid_list++)
306 if (!yaz_matchstr(oid_list->name, name)
307 && (oclass == CLASS_GENERAL || oclass == oid_list->oclass))
308 return oid_list->oid;
313 int *yaz_string_to_oid_nmem(yaz_oid_db_t oid_list,
314 int oclass, const char *name, NMEM nmem)
316 const int *oid = yaz_string_to_oid(oid_list, oclass, name);
318 return odr_oiddup_nmem(nmem, oid);
319 return odr_getoidbystr_nmem(nmem, name);
322 int *yaz_string_to_oid_odr(yaz_oid_db_t oid_list,
323 int oclass, const char *name, ODR o)
325 return yaz_string_to_oid_nmem(oid_list, oclass, name, odr_getmem(o));
328 const char *yaz_oid_to_string(yaz_oid_db_t oid_list,
329 const int *oid, int *oclass)
333 for (; oid_list->name; oid_list++)
335 if (!oid_oidcmp(oid_list->oid, oid))
338 *oclass = oid_list->oclass;
339 return oid_list->name;
345 const char *yaz_oid_to_string_buf(const int *oid, int *oclass, char *buf)
347 const char *p = yaz_oid_to_string(standard_oids, oid, oclass);
351 *oclass = CLASS_GENERAL;
352 return oid_to_dotstring(oid, buf);
355 int yaz_oid_is_iso2709(const int *oid)
357 if (oid_oidlen(oid) == 6 && oid[0] == 1 && oid[1] == 2
358 && oid[2] == 840 && oid[3] == 10003 && oid[4] == 5
359 && oid[5] <= 29 && oid[5] != 16)
364 void yaz_oid_trav(yaz_oid_db_t oid_list,
365 void (*func)(const int *oid,
366 int oclass, const char *name,
370 for (; oid_list->name; oid_list++)
371 func(oid_list->oid, oid_list->oclass, oid_list->name, client_data);