e8ea68a72bcee34b7b9d12b3727dbda64e521652
[yaz-moved-to-github.git] / include / prt-exp.h
1 /*
2  * Copyright (c) 1995-1998, 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_EXP_H
29 #define PRT_EXP_H
30
31 #include <yconfig.h>
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 typedef struct Z_CommonInfo
38 {
39     char *dateAdded;           /* OPTIONAL */
40     char *dateChanged;         /* OPTIONAL */
41     char *expiry;              /* OPTIONAL */
42     char *humanStringLanguage;    /* OPTIONAL */
43     Z_OtherInformation *otherInfo;          /* OPTIONAL */
44 } Z_CommonInfo;
45
46 typedef struct Z_HumanStringUnit
47 {
48     char *language;               /* OPTIONAL */
49     char *text;
50 } Z_HumanStringUnit;
51
52 typedef struct Z_HumanString
53 {
54     int num_strings;
55     Z_HumanStringUnit **strings;
56 } Z_HumanString;
57
58 typedef struct Z_IconObjectUnit
59 {
60     int which;
61 #define Z_IconObjectUnit_ianaType 0
62 #define Z_IconObjectUnit_z3950type 1
63 #define Z_IconObjectUnit_otherType 2
64     char *bodyType;
65     Odr_oct *content;
66 } Z_IconObjectUnit;
67
68 typedef struct Z_IconObject
69 {
70     int num;
71     Z_IconObjectUnit **elements;
72 } Z_IconObject;
73
74 typedef struct Z_ContactInfo
75 {
76     char *name;                             /* OPTIONAL */
77     Z_HumanString *description;             /* OPTIONAL */
78     Z_HumanString *address;                 /* OPTIONAL */
79     char *email;                            /* OPTIONAL */
80     char *phone;                            /* OPTIONAL */
81 } Z_ContactInfo;
82
83 typedef struct Z_NetworkAddressIA
84 {
85     char *hostAddress;
86     int *port;
87 } Z_NetworkAddressIA;
88
89 typedef struct Z_NetworkAddressOPA
90 {
91     char *pSel;
92     char *sSel;                  /* OPTIONAL */
93     char *tSel;                  /* OPTIONAL */
94     char *nSap;
95 } Z_NetworkAddressOPA;
96
97 typedef struct Z_NetworkAddressOther
98 {
99     char *type;
100     char *address;
101 } Z_NetworkAddressOther;
102
103 typedef struct Z_NetworkAddress
104 {
105     int which;
106 #define Z_NetworkAddress_iA 0
107 #define Z_NetworkAddress_oPA 1
108 #define Z_NetworkAddress_other 2
109     union
110     {
111         Z_NetworkAddressIA *internetAddress;
112         Z_NetworkAddressOPA *osiPresentationAddress;
113         Z_NetworkAddressOther *other;
114     } u;
115 } Z_NetworkAddress;
116
117 typedef struct Z_PrivateCapOperator
118 {
119     char *roperator;
120     Z_HumanString *description;             /* OPTIONAL */
121 } Z_PrivateCapOperator;
122     
123 typedef struct Z_SearchKey
124 {
125     char *searchKey;
126     Z_HumanString *description;             /* OPTIONAL */
127 } Z_SearchKey;
128
129 typedef struct Z_PrivateCapabilities
130 {
131     int num_operators;
132     Z_PrivateCapOperator **operators;      /* OPTIONAL */
133     int num_searchKeys;
134     Z_SearchKey **searchKeys;               /* OPTIONAL */
135     int num_description;
136     Z_HumanString **description;            /* OPTIONAL */
137 } Z_PrivateCapabilities;
138
139 typedef struct Z_ProxSupportPrivate
140 {
141     int *unit;
142     Z_HumanString *description;             /* OPTIONAL */
143 } Z_ProxSupportPrivate;
144
145 typedef struct Z_ProxSupportUnit
146 {
147     int which;
148 #define Z_ProxSupportUnit_known 0
149 #define Z_ProxSupportUnit_private 1
150     union
151     {
152         int *known;
153         Z_ProxSupportPrivate *zprivate;
154     } u;
155 } Z_ProxSupportUnit;
156
157 typedef struct Z_ProximitySupport
158 {
159     bool_t *anySupport;
160     int num_unitsSupported;
161     Z_ProxSupportUnit **unitsSupported;     /* OPTIONAL */
162 } Z_ProximitySupport;
163
164 typedef struct Z_RpnCapabilities
165 {
166     int num_operators;
167     int **operators;                        /* OPTIONAL */
168     bool_t *resultSetAsOperandSupported;
169     bool_t *restrictionOperandSupported;
170     Z_ProximitySupport *proximity;          /* OPTIONAL */
171 } Z_RpnCapabilities;
172
173 typedef struct Z_Iso8777Capabilities
174 {
175     int num_searchKeys;
176     Z_SearchKey **searchKeys;
177     Z_HumanString *restrictions;            /* OPTIONAL */
178 } Z_Iso8777Capabilities;
179
180 typedef struct Z_QueryTypeDetails
181 {
182     int which;
183 #define Z_QueryTypeDetails_private 0
184 #define Z_QueryTypeDetails_rpn 1
185 #define Z_QueryTypeDetails_iso8777 2
186 #define Z_QueryTypeDetails_z39_58 3
187 #define Z_QueryTypeDetails_erpn 4
188 #define Z_QueryTypeDetails_rankedList 5
189     union
190     {
191         Z_PrivateCapabilities *zprivate;
192         Z_RpnCapabilities *rpn;
193         Z_Iso8777Capabilities *iso8777;
194         Z_HumanString *z3958;
195         Z_RpnCapabilities *erpn;
196         Z_HumanString *rankedList;
197     } u;
198 } Z_QueryTypeDetails;
199
200 typedef struct Z_AccessRestrictionsUnit
201 {
202     int *accessType;
203 #define Z_AccessRestrictionsUnit_any                 0
204 #define Z_AccessRestrictionsUnit_search              1
205 #define Z_AccessRestrictionsUnit_present             2
206 #define Z_AccessRestrictionsUnit_specific_elements   3
207 #define Z_AccessRestrictionsUnit_extended_services   4
208 #define Z_AccessRestrictionsUnit_by_database         5
209     Z_HumanString *accessText;              /* OPTIONAL */
210     int num_accessChallenges;
211     Odr_oid **accessChallenges;             /* OPTIONAL */
212 } Z_AccessRestrictionsUnit;
213
214 typedef struct Z_AccessRestrictions
215 {
216     int num;
217     Z_AccessRestrictionsUnit **elements;
218 } Z_AccessRestrictions;
219
220 typedef struct Z_Charge
221 {
222     Z_IntUnit *cost;
223     Z_Unit *perWhat;                        /* OPTIONAL */
224     Z_HumanString *text;                    /* OPTIONAL */
225 } Z_Charge;
226
227 typedef struct Z_CostsOtherCharge
228 {
229     Z_HumanString *forWhat;
230     Z_Charge *charge;
231 } Z_CostsOtherCharge;
232
233 typedef struct Z_Costs
234 {
235     Z_Charge *connectCharge;                /* OPTIONAL */
236     Z_Charge *connectTime;                  /* OPTIONAL */
237     Z_Charge *displayCharge;                /* OPTIONAL */
238     Z_Charge *searchCharge;                 /* OPTIONAL */
239     Z_Charge *subscriptCharge;              /* OPTIONAL */
240     int num_otherCharges;
241     Z_CostsOtherCharge **otherCharges;      /* OPTIONAL */
242 } Z_Costs;
243
244 typedef struct Z_AccessInfo
245 {
246     int num_queryTypesSupported;
247     Z_QueryTypeDetails **queryTypesSupported;  /* OPTIONAL */
248     int num_diagnosticsSets;
249     Odr_oid **diagnosticsSets;              /* OPTIONAL */
250     int num_attributeSetIds;
251     Odr_oid **attributeSetIds;     /* OPTIONAL */
252     int num_schemas;
253     Odr_oid **schemas;                      /* OPTIONAL */
254     int num_recordSyntaxes;
255     Odr_oid **recordSyntaxes;               /* OPTIONAL */
256     int num_resourceChallenges;
257     Odr_oid **resourceChallenges;           /* OPTIONAL */
258     Z_AccessRestrictions *restrictedAccess;  /* OPTIONAL */
259     Z_Costs *costInfo;                      /* OPTIONAL */
260     int num_variantSets;
261     Odr_oid **variantSets;                  /* OPTIONAL */
262     int num_elementSetNames;
263     char **elementSetNames;     /* OPTIONAL */
264     int num_unitSystems;
265     char **unitSystems;                     /* OPTIONAL */
266 } Z_AccessInfo;
267
268 typedef struct Z_DatabaseList
269 {
270     int num_databases;
271     Z_DatabaseName **databases;
272 } Z_DatabaseList;
273
274 typedef struct Z_AttributeValueList
275 {
276     int num_attributes;
277     Z_StringOrNumeric **attributes;
278 } Z_AttributeValueList;
279
280 typedef struct Z_AttributeOccurrence
281 {
282     Odr_oid *attributeSet;         /* OPTIONAL */
283     int *attributeType;
284     Odr_null *mustBeSupplied;               /* OPTIONAL */
285     int which;
286 #define Z_AttributeOcc_any_or_none 0
287 #define Z_AttributeOcc_specific 1
288     union
289     {
290         Odr_null *any_or_none;
291         Z_AttributeValueList *specific;
292     } attributeValues;
293 } Z_AttributeOccurrence;
294
295 typedef struct Z_AttributeCombination
296 {
297     int num_occurrences;
298     Z_AttributeOccurrence **occurrences;
299 } Z_AttributeCombination;
300
301 typedef struct Z_AttributeCombinations
302 {
303     Odr_oid *defaultAttributeSet;
304     int num_legalCombinations;
305     Z_AttributeCombination **legalCombinations;
306 } Z_AttributeCombinations;
307
308 typedef struct Z_AttributeValue
309 {
310     Z_StringOrNumeric *value;
311     Z_HumanString *description;             /* OPTIONAL */
312     int num_subAttributes;
313     Z_StringOrNumeric **subAttributes;      /* OPTIONAL */
314     int num_superAttributes;
315     Z_StringOrNumeric **superAttributes;    /* OPTIONAL */
316     Odr_null *partialSupport;               /* OPTIONAL */
317 } Z_AttributeValue;
318
319 typedef struct Z_TargetInfo
320 {
321     Z_CommonInfo *commonInfo;               /* OPTIONAL */
322     /*
323      * key elements
324      */
325     char *name;
326     /*
327      * non-key brief elements
328      */
329     Z_HumanString *recentNews;             /* OPTIONAL */
330     Z_IconObject *icon;                     /* OPTIONAL */
331     bool_t *namedResultSets;
332     bool_t *multipleDBsearch;
333     int *maxResultSets;                     /* OPTIONAL */
334     int *maxResultSize;                     /* OPTIONAL */
335     int *maxTerms;                          /* OPTIONAL */
336     Z_IntUnit *timeoutInterval;             /* OPTIONAL */
337     Z_HumanString *welcomeMessage;          /* OPTIONAL */
338     /*
339      * non-brief elements
340      */
341     Z_ContactInfo *contactInfo;             /* OPTIONAL */
342     Z_HumanString *description;             /* OPTIONAL */
343     int num_nicknames;
344     char **nicknames;
345     Z_HumanString *usageRest;              /* OPTIONAL */
346     Z_HumanString *paymentAddr;             /* OPTIONAL */
347     Z_HumanString *hours;                   /* OPTIONAL */
348     int num_dbCombinations;
349     Z_DatabaseList **dbCombinations;        /* OPTIONAL */
350     int num_addresses;
351     Z_NetworkAddress **addresses;           /* OPTIONAL */
352     int num_languages;
353     char **languages;                       /* OPTIONAL */
354
355     Z_AccessInfo *commonAccessInfo;         /* OPTIONAL */
356 } Z_TargetInfo;
357
358 typedef struct Z_DatabaseInfo
359 {
360     Z_CommonInfo *commonInfo;               /* OPTIONAL */
361     /*
362      * Key elements
363      */
364     Z_DatabaseName *name;
365     /* 
366      * Non-key elements.
367      */
368     Odr_null *explainDatabase;              /* OPTIONAL */
369     int num_nicknames;
370     Z_DatabaseName **nicknames;             /* OPTIONAL */
371     Z_IconObject *icon;                     /* OPTIONAL */
372     bool_t *userFee;
373     bool_t *available;
374     Z_HumanString *titleString;             /* OPTIONAL */
375     /*
376      * Non-brief elements.
377      */
378     int num_keywords;
379     Z_HumanString **keywords;               /* OPTIONAL */
380     Z_HumanString *description;             /* OPTIONAL */
381     Z_DatabaseList *associatedDbs;          /* OPTIONAL */
382     Z_DatabaseList *subDbs;                 /* OPTIONAL */
383     Z_HumanString *disclaimers;             /* OPTIONAL */
384     Z_HumanString *news;                    /* OPTIONAL */
385
386 #if 1
387     int which;
388     union {
389         int *actualNumber;
390         int *approxNumber;
391 #define Z_DatabaseInfo_actualNumber 1
392 #define Z_DatabaseInfo_approxNumber 2
393     } u; /* OPT */
394
395 #else
396     int recordCount_which;
397 #define Z_DatabaseInfo_actualNumber 0
398 #define Z_DatabaseInfo_approxNumber 1
399     int *recordCount;                       /* OPTIONAL */
400 #endif
401     Z_HumanString *defaultOrder;            /* OPTIONAL */
402     int *avRecordSize;                      /* OPTIONAL */
403     int *maxRecordSize;                     /* OPTIONAL */
404     Z_HumanString *hours;                   /* OPTIONAL */
405     Z_HumanString *bestTime;                /* OPTIONAL */
406     char *lastUpdate;          /* OPTIONAL */
407     Z_IntUnit *updateInterval;              /* OPTIONAL */
408     Z_HumanString *coverage;                /* OPTIONAL */
409     bool_t *proprietary;                    /* OPTIONAL */
410     Z_HumanString *copyrightText;           /* OPTIONAL */
411     Z_HumanString *copyrightNotice;         /* OPTIONAL */
412     Z_ContactInfo *producerContactInfo;     /* OPTIONAL */
413     Z_ContactInfo *supplierContactInfo;     /* OPTIONAL */
414     Z_ContactInfo *submissionContactInfo;   /* OPTIONAL */
415     Z_AccessInfo *accessInfo;               /* OPTIONAL */
416 } Z_DatabaseInfo;
417
418 typedef struct Z_TagTypeMapping
419 {
420     int *tagType;
421     Odr_oid *tagSet;                        /* OPTIONAL */
422     Odr_null *defaultTagType;               /* OPTIONAL */
423 } Z_TagTypeMapping;
424
425 typedef struct Z_PathUnit
426 {
427     int *tagType;
428     Z_StringOrNumeric *tagValue;
429 } Z_PathUnit;
430
431 typedef struct Z_Path
432 {
433     int num;
434     Z_PathUnit **list;
435 } Z_Path;
436
437 struct Z_ElementDataType;
438 typedef struct Z_ElementDataType Z_ElementDataType;
439
440 typedef struct Z_ElementInfo
441 {
442     char *elementName;
443     Z_Path *elementTagPath;
444     Z_ElementDataType *dataType;            /* OPTIONAL */
445     bool_t *required;
446     bool_t *repeatable;
447     Z_HumanString *description;             /* OPTIONAL */
448 } Z_ElementInfo;
449
450 typedef struct Z_ElementInfoList
451 {
452     int num;
453     Z_ElementInfo **list;
454 } Z_ElementInfoList;
455
456 struct Z_ElementDataType
457 {
458     int which;
459 #define Z_ElementDataType_primitive 0
460 #define Z_ElementDataType_structured 1
461     union
462     {
463         int *primitive;
464 #define Z_PrimitiveDataType_octetString         0
465 #define Z_PrimitiveDataType_numeric             1
466 #define Z_PrimitiveDataType_date                2
467 #define Z_PrimitiveDataType_external            3
468 #define Z_PrimitiveDataType_string              4
469 #define Z_PrimitiveDataType_trueOrFalse         5
470 #define Z_PrimitiveDataType_oid                 6
471 #define Z_PrimitiveDataType_intUnit             7
472 #define Z_PrimitiveDataType_empty               8
473 #define Z_PrimitiveDataType_noneOfTheAbove      100
474         Z_ElementInfoList *structured;
475     } u;
476 };
477
478 typedef struct Z_TagSetInfoElements
479 {
480     char *elementname;
481     int num_nicknames;
482     char **nicknames;                       /* OPTIONAL */
483     Z_StringOrNumeric *elementTag;
484     Z_HumanString *description;             /* OPTIONAL */
485     int *dataType;                          /* OPTIONAL */
486     /* (value as in Z_PrimitiveElement) */
487     Z_OtherInformation *otherTagInfo;       /* OPTIONAL */
488 } Z_TagSetInfoElements;
489
490 typedef struct Z_SchemaInfo
491 {
492     Z_CommonInfo *commonInfo;               /* OPTIONAL */
493     /*
494      * Key elements
495      */
496     Odr_oid *schema;
497     /*
498      * Non-key elements
499      */
500     char *name;
501     /*
502      * Non-brief elements
503      */
504     Z_HumanString *description;             /* OPTIONAL */
505     int num_tagTypeMapping;
506     Z_TagTypeMapping **tagTypeMapping;      /* OPTIONAL */
507     int num_recordStructure;
508     Z_ElementInfo **recordStructure;        /* OPTIONAL */
509 } Z_SchemaInfo;
510
511
512 typedef struct Z_TagSetInfo
513 {
514     Z_CommonInfo *commonInfo;               /* OPTIONAL */
515     /*
516      * Key elements
517      */
518     Odr_oid *tagSet;
519     /*
520      * Non-key elements
521      */
522     char *name;
523     /*
524      * Non-brief elements
525      */
526     Z_HumanString *description;             /* OPTIONAL */
527     int num_elements;
528     Z_TagSetInfoElements **elements;        /* OPTIONAL */
529 } Z_TagSetInfo;
530
531 typedef struct Z_RecordSyntaxInfo
532 {
533     Z_CommonInfo *commonInfo;               /* OPTIONAL */
534     /*
535      * Key elements
536      */
537     Odr_oid *recordSyntax;
538     /*
539      * Non-key elements
540      */
541     char *name;
542     /*
543      * Non-brief elements
544      */
545     int num_transferSyntaxes;
546     Odr_oid **transferSyntaxes;             /* OPTIONAL */
547     Z_HumanString *description;             /* OPTIONAL */
548     char *asn1Module;                       /* OPTIONAL */
549     int num_abstractStructure;
550     Z_ElementInfo **abstractStructure;      /* OPTIONAL */
551 } Z_RecordSyntaxInfo;
552
553 typedef struct Z_AttributeDescription
554 {
555     char *name;                             /* OPTIONAL */
556     Z_HumanString *description;             /* OPTIONAL */
557     Z_StringOrNumeric *attributeValue;
558     int num_equivalentAttributes;
559     Z_StringOrNumeric **equivalentAttributes; /* OPTIONAL */
560 } Z_AttributeDescription;
561
562 typedef struct Z_AttributeType
563 {
564     char *name;                             /* OPTIONAL */
565     Z_HumanString *description;             /* OPTIONAL */
566     int *attributeType;
567     int num_attributeValues;
568     Z_AttributeDescription **attributeValues;
569 } Z_AttributeType;
570
571 typedef struct Z_AttributeSetInfo
572 {
573     Z_CommonInfo *commonInfo;               /* OPTIONAL */
574     /*
575      * Key elements
576      */
577     Odr_oid *attributeSet;
578     /*
579      * Non-key elements
580      */
581     char *name;
582     /*
583      * Non-brief elements
584      */
585     int num_attributes;
586     Z_AttributeType **attributes;           /* OPTIONAL */
587     Z_HumanString *description;             /* OPTIONAL */
588 } Z_AttributeSetInfo;
589
590 typedef struct Z_TermListElement
591 {
592     char *name;
593     Z_HumanString *title;                   /* OPTIONAL */
594     int *searchCost;                        /* OPTIONAL */
595 #define Z_TermListElement_optimized           0
596 #define Z_TermListElement_normal              1
597 #define Z_TermListElement_expensive           2
598 #define Z_TermListElement_filter              3
599     bool_t *scanable;
600     int num_broader;
601     char **broader;                         /* OPTIONAL */
602     int num_narrower;
603     char **narrower;                        /* OPTIONAL */
604 } Z_TermListElement;
605
606 typedef struct Z_TermListInfo
607 {
608     Z_CommonInfo *commonInfo;               /* OPTIONAL */
609     /*
610      * Key elements
611      */
612     Z_DatabaseName *databaseName;
613     /*
614      * Non-key elements
615      */
616     int num_termLists;
617     Z_TermListElement **termLists;
618 } Z_TermListInfo;
619
620 typedef struct Z_ExtendedServicesInfo
621 {
622     Z_CommonInfo *commonInfo;               /* OPTIONAL */
623     /*
624      * Key elements
625      */
626     Odr_oid *type;
627     /*
628      * Non-key elements
629      */
630     char *name;                             /* OPTIONAL */
631     bool_t *privateType;
632     bool_t *restrictionsApply;
633     bool_t *feeApply;
634     bool_t *available;
635     bool_t *retentionSupported;
636     int *waitAction;
637 #define Z_ExtendedServicesInfo_waitSupported       1
638 #define Z_ExtendedServicesInfo_waitAlways          2
639 #define Z_ExtendedServicesInfo_waitNotSupported    3
640 #define Z_ExtendedServicesInfo_depends             4
641 #define Z_ExtendedServicesInfo_notSaying           5
642     /*
643      * Non-brief elements
644      */
645     Z_HumanString *description;             /* OPTIONAL */
646     Z_External *specificExplain;          /* OPTIONAL */
647     char *esASN;                            /* OPTIONAL */
648 } Z_ExtendedServicesInfo;
649
650 typedef struct Z_OmittedAttributeInterpretation
651 {
652     Z_StringOrNumeric *defaultValue;        /* OPTIONAL */
653     Z_HumanString *defaultDescription;      /* OPTIONAL */
654 } Z_OmittedAttributeInterpretation;
655
656 typedef struct Z_AttributeTypeDetails
657 {
658     int *attributeType;
659     Z_OmittedAttributeInterpretation *defaultIfOmitted;  /* OPTIONAL */
660     int num_attributeValues;
661     Z_AttributeValue **attributeValues;     /* OPTIONAL */
662 } Z_AttributeTypeDetails;
663
664 typedef struct Z_AttributeSetDetails
665 {
666     Odr_oid *attributeSet;
667     int num_attributesByType;
668     Z_AttributeTypeDetails **attributesByType;
669 } Z_AttributeSetDetails;
670
671 typedef struct Z_AttributeDetails
672 {
673     Z_CommonInfo *commonInfo;               /* OPTIONAL */
674     /*
675      * Key details
676      */
677     Z_DatabaseName *databaseName;
678     /*
679      * Non-brief elements
680      */
681     int num_attributesBySet;
682     Z_AttributeSetDetails **attributesBySet;  /* OPTIONAL */
683     Z_AttributeCombinations *attributeCombinations;  /* OPTIONAL */
684 } Z_AttributeDetails;
685
686 typedef struct Z_EScanInfo
687 {
688     int *maxStepSize;                       /* OPTIONAL */
689     Z_HumanString *collatingSequence;       /* OPTIONAL */
690     bool_t *increasing;                     /* OPTIONAL */
691 } Z_EScanInfo;
692
693 typedef struct Z_TermListDetails
694 {
695     Z_CommonInfo *commonInfo;               /* OPTIONAL */
696     /*
697      * Key elements
698      */
699     char *termListName;
700     /*
701      * Non-brief elements
702      */
703     Z_HumanString *description;             /* OPTIONAL */
704     Z_AttributeCombinations *attributes;    /* OPTIONAL */
705     Z_EScanInfo *scanInfo;                  /* OPTIONAL */
706     int *estNumberTerms;                    /* OPTIONAL */
707     int num_sampleTerms;
708     Z_Term **sampleTerms;                   /* OPTIONAL */
709 } Z_TermListDetails;
710
711 typedef struct Z_RecordTag
712 {
713     Z_StringOrNumeric *qualifier;           /* OPTIONAL */
714     Z_StringOrNumeric *tagValue;
715 } Z_RecordTag;
716
717 typedef struct Z_PerElementDetails
718 {
719     char *name;                             /* OPTIONAL */
720     Z_RecordTag *recordTag;                 /* OPTIONAL */
721     int num_schemaTags;
722     Z_Path **schemaTags;                    /* OPTIONAL */
723     int *maxSize;                           /* OPTIONAL */
724     int *minSize;                           /* OPTIONAL */
725     int *avgSize;                           /* OPTIONAL */
726     int *fixedSize;                         /* OPTIONAL */
727     bool_t *repeatable;
728     bool_t *required;
729     Z_HumanString *description;             /* OPTIONAL */
730     Z_HumanString *contents;                /* OPTIONAL */
731     Z_HumanString *billingInfo;             /* OPTIONAL */
732     Z_HumanString *restrictions;            /* OPTIONAL */
733     int num_alternateNames;
734     char **alternateNames;                  /* OPTIONAL */
735     int num_genericNames;
736     char **genericNames;                    /* OPTIONAL */
737     Z_AttributeCombinations *searchAccess;  /* OPTIONAL */
738 } Z_PerElementDetails;
739
740 typedef struct Z_ElementSetDetails
741 {
742     Z_CommonInfo *commonInfo;               /* OPTIONAL */
743     /*
744      * Key elements
745      */
746     Z_DatabaseName *databaseName;
747     char *elementSetName;
748     Odr_oid *recordSyntax;
749     /*
750      * Brief elements
751      */
752     Odr_oid *schema;
753     /*
754      * Non-brief elements
755      */
756     Z_HumanString *description;             /* OPTIONAL */
757     int num_detailsPerElement;
758     Z_PerElementDetails **detailsPerElement;  /* OPTIONAL */
759 } Z_ElementSetDetails;
760
761 typedef struct Z_RetrievalRecordDetails
762 {
763     Z_CommonInfo *commonInfo;               /* OPTIONAL */
764     /*
765      * Key elements
766      */
767     Z_DatabaseName *databaseName;
768     Odr_oid *schema;
769     Odr_oid *recordSyntax;
770     /*
771      * Non-brief elements
772      */
773     Z_HumanString *description;             /* OPTIONAL */
774     int num_detailsPerElement;
775     Z_PerElementDetails **detailsPerElement;  /* OPTIONAL */
776 } Z_RetrievalRecordDetails;
777
778 typedef struct Z_SortKeyDetails
779 {
780     Z_HumanString *description;                        /* OPTIONAL */
781     int num_elementSpecifications;
782     Z_Specification **elementSpecifications;           /* OPTIONAL */
783     Z_AttributeCombinations *attributeSpecifications;  /* OPTIONAL */
784     int which;
785 #define Z_SortKeyDetails_character 0
786 #define Z_SortKeyDetails_numeric 1
787 #define Z_SortKeyDetails_structured 2
788     union
789     {
790         Odr_null *character;
791         Odr_null *numeric;
792         Z_HumanString *structured;
793     } u;
794     int *caseSensitivity;                              /* OPTIONAL */
795 #define Z_SortKeyDetails_always              0
796 #define Z_SortKeyDetails_never               1
797 #define Z_SortKeyDetails_default_yes         2
798 #define Z_SortKeyDetails_default_no          3
799 } Z_SortKeyDetails;
800
801 typedef struct Z_SortDetails
802 {
803     Z_CommonInfo *commonInfo;               /* OPTIONAL */
804     /*
805      * Key elements
806      */
807     Z_DatabaseName *databaseName;
808     /* 
809      * Non-brief elements
810      */
811     int num_sortKeys;
812     Z_SortKeyDetails **sortKeys;            /* OPTIONAL */
813 } Z_SortDetails;
814
815 typedef struct Z_ProcessingInformation
816 {
817     Z_CommonInfo *commonInfo;               /* OPTIONAL */
818     /*
819      * Key elements
820      */
821     Z_DatabaseName *databaseName;
822     int *processingContext;
823 #define Z_ProcessingInformation_access               0
824 #define Z_ProcessingInformation_search               1
825 #define Z_ProcessingInformation_retrieval            2
826 #define Z_ProcessingInformation_record_presentation  3
827 #define Z_ProcessingInformation_record_handling      4
828     char *name;
829     Odr_oid *oid;
830     /*
831      * Non-brief elements
832      */
833     Z_HumanString *description;             /* OPTIONAL */
834     Z_External *instructions;             /* OPTIONAL */
835 } Z_ProcessingInformation;
836
837 typedef struct Z_ValueDescription
838 {
839     int which;
840 #define Z_ValueDescription_integer 0
841 #define Z_ValueDescription_string 1
842 #define Z_ValueDescription_octets 2
843 #define Z_ValueDescription_oid 3
844 #define Z_ValueDescription_unit 4
845 #define Z_ValueDescription_valueAndUnit 5
846     union
847     {
848         int *integer;
849         char *string;
850         Odr_oct *octets;
851         Odr_oid *oid;
852         Z_Unit *unit;
853         Z_IntUnit *valueAndUnit;
854     } u;
855 } Z_ValueDescription;
856
857 typedef struct Z_ValueRange
858 {
859     Z_ValueDescription *lower;              /* OPTIONAL */
860     Z_ValueDescription *upper;              /* OPTIONAL */
861 } Z_ValueRange;
862
863 typedef struct Z_ValueSetEnumerated
864 {
865     int num;
866     Z_ValueDescription **elements;
867 } Z_ValueSetEnumerated;
868
869 typedef struct Z_ValueSet
870 {
871     int which;
872 #define Z_ValueSet_range 0
873 #define Z_ValueSet_enumerated 1
874     union
875     {
876         Z_ValueRange *range;
877         Z_ValueSetEnumerated *enumerated;
878     } u;
879 } Z_ValueSet;
880
881 typedef struct Z_VariantValue
882 {
883     int *dataType;
884     Z_ValueSet *values;                     /* OPTIONAL */
885 } Z_VariantValue;
886
887 typedef struct Z_VariantType
888 {
889     char *name;                             /* OPTIONAL */
890     Z_HumanString *description;             /* OPTIONAL */
891     int *variantType;
892     Z_VariantValue *variantValue;           /* OPTIONAL */
893 } Z_VariantType;
894
895 typedef struct Z_VariantClass
896 {
897     char *name;                             /* OPTIONAL */
898     Z_HumanString *description;             /* OPTIONAL */
899     int *variantClass;
900     int num_variantTypes;
901     Z_VariantType **variantTypes;
902 } Z_VariantClass;
903
904 typedef struct Z_VariantSetInfo
905 {
906     Z_CommonInfo *commonInfo;               /* OPTIONAL */
907     /*
908      * Key elements
909      */
910     Odr_oid *variantSet;
911     /*
912      * Brief elements
913      */
914     char *name;
915     /*
916      * Non-brief elements
917      */
918     int num_variants;
919     Z_VariantClass **variants;              /* OPTIONAL */
920 } Z_VariantSetInfo;
921
922 typedef struct Z_Units
923 {
924     char *name;                             /* OPTIONAL */
925     Z_HumanString *description;             /* OPTIONAL */
926     Z_StringOrNumeric *unit;
927 } Z_Units;
928
929 typedef struct Z_UnitType
930 {
931     char *name;                             /* OPTIONAL */
932     Z_HumanString *description;             /* OPTIONAL */
933     Z_StringOrNumeric *unitType;
934     int num_units;
935     Z_Units **units;
936 } Z_UnitType;
937
938 typedef struct Z_UnitInfo
939 {
940     Z_CommonInfo *commonInfo;               /* OPTIONAL */
941     /*
942      * Key elements
943      */
944     char *unitSystem;
945     /*
946      * Non-brief elements
947      */
948     Z_HumanString *description;             /* OPTIONAL */
949     int num_units;
950     Z_UnitType **units;                     /* OPTIONAL */
951 } Z_UnitInfo;
952
953 typedef struct Z_CategoryInfo
954 {
955     char *category;
956     char *originalCategory;                 /* OPTIONAL */
957     Z_HumanString *description;             /* OPTIONAL */
958     char *asn1Module;                       /* OPTIONAL */
959 } Z_CategoryInfo;
960
961 typedef struct Z_CategoryList
962 {
963     Z_CommonInfo *commonInfo;               /* OPTIONAL */
964     int num_categories;
965     Z_CategoryInfo **categories;
966 } Z_CategoryList;
967
968 typedef struct Z_ExplainRecord
969 {
970     int which;
971 #define Z_Explain_targetInfo 0
972 #define Z_Explain_databaseInfo 1
973 #define Z_Explain_schemaInfo 2
974 #define Z_Explain_tagSetInfo 3
975 #define Z_Explain_recordSyntaxInfo 4
976 #define Z_Explain_attributeSetInfo 5
977 #define Z_Explain_termListInfo 6
978 #define Z_Explain_extendedServicesInfo 7
979 #define Z_Explain_attributeDetails 8
980 #define Z_Explain_termListDetails 9
981 #define Z_Explain_elementSetDetails 10
982 #define Z_Explain_retrievalRecordDetails 11
983 #define Z_Explain_sortDetails 12
984 #define Z_Explain_processing 13
985 #define Z_Explain_variants 14
986 #define Z_Explain_units 15
987 #define Z_Explain_categoryList 16
988     union
989     {
990         Z_TargetInfo *targetInfo;
991         Z_DatabaseInfo *databaseInfo;
992         Z_SchemaInfo *schemaInfo;
993         Z_TagSetInfo *tagSetInfo;
994         Z_RecordSyntaxInfo *recordSyntaxInfo;
995         Z_AttributeSetInfo *attributeSetInfo;
996         Z_TermListInfo *termListInfo;
997         Z_ExtendedServicesInfo *extendedServicesInfo;
998         Z_AttributeDetails *attributeDetails;
999         Z_TermListDetails *termListDetails;
1000         Z_ElementSetDetails *elementSetDetails;
1001         Z_RetrievalRecordDetails *retrievalRecordDetails;
1002         Z_SortDetails *sortDetails;
1003         Z_ProcessingInformation *processing;
1004         Z_VariantSetInfo *variants;
1005         Z_UnitInfo *units;
1006         Z_CategoryList *categoryList;
1007     } u;
1008 } Z_ExplainRecord;
1009
1010 YAZ_EXPORT int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt,
1011                                const char *name);
1012
1013 #ifdef __cplusplus
1014 }
1015 #endif
1016
1017 #endif