1 <!-- $Id: asn.xml,v 1.8 2001-08-23 09:12:09 adam Exp $ -->
2 <chapter><title>The ASN Module</title>
3 <sect1><title>Introduction</title>
5 The &asn; module provides you with a set of C struct definitions for the
6 various PDUs of the protocol, as well as for the complex types
7 appearing within the PDUs. For the primitive data types, the C
8 representation often takes the form of an ordinary C language type,
9 such as <literal>int</literal>. For ASN.1 constructs that have no direct
10 representation in C, such as general octet strings and bit strings,
11 the &odr; module (see section <link linkend="odr">The ODR Module</link>)
12 provides auxiliary definitions.
15 <sect1><title>Preparing PDUs</title>
18 A structure representing a complex ASN.1 type doesn't in itself contain the
19 members of that type. Instead, the structure contains
20 <emphasis>pointers</emphasis> to the members of the type.
21 This is necessary, in part, to allow a mechanism for specifying which
22 of the optional structure (SEQUENCE) members are present, and which
23 are not. It follows that you will need to somehow provide space for
24 the individual members of the structure, and set the pointers to
28 The conversion routines don't care how you allocate and maintain your
29 C structures - they just follow the pointers that you provide.
30 Depending on the complexity of your application, and your personal
31 taste, there are at least three different approaches that you may take
32 when you allocate the structures.
36 You can use static or automatic local variables in the function that
37 prepares the PDU. This is a simple approach, and it provides the most
38 efficient form of memory management. While it works well for flat
39 PDUs like the InitReqest, it will generally not be sufficient for say,
40 the generation of an arbitrarily complex RPN query structure.
43 You can individually create the structure and its members using the
44 <function>malloc(2)</function> function. If you want to ensure that
45 the data is freed when it is no longer needed, you will have to
46 define a function that individually releases each member of a
47 structure before freeing the structure itself.
50 You can use the <function>odr_malloc()</function> function (see section
51 <link linkend="odr-use">Using ODR</link> for details). When you use
52 <function>odr_malloc()</function>, you can release all of the
53 allocated data in a single operation, independent of any pointers and
54 relations between the data. <function>odr_malloc()</function> is based on a
55 "nibble-memory"
56 scheme, in which large portions of memory are allocated, and then
57 gradually handed out with each call to <function>odr_malloc()</function>.
58 The next time you call <function>odr_reset()</function>, all of the
59 memory allocated since the last call is recycled for future use (actually,
60 it is placed on a free-list).
63 You can combine all of the methods described here. This will often be
64 the most practical approach. For instance, you might use
65 <function>odr_malloc()</function> to allocate an entire structure and
66 some of its elements, while you leave other elements pointing to global
67 or per-session default variables.
71 The &asn; module provides an important aid in creating new PDUs. For
72 each of the PDU types (say, <function>Z_InitRequest</function>), a
73 function is provided that allocates and initializes an instance of
74 that PDU type for you. In the case of the InitRequest, the function is
75 simply named <function>zget_InitRequest()</function>, and it sets up
76 reasonable default value for all of the mandatory members. The optional
77 members are generally initialized to null pointers. This last aspect
78 is very important: it ensures that if the PDU definitions are
79 extended after you finish your implementation (to accommodate
80 new versions of the protocol, say), you won't get into trouble with
81 uninitialized pointers in your structures. The functions use
82 <function>odr_malloc()</function> to
83 allocate the PDUs and its members, so you can free everything again with a
84 single call to <function>odr_reset()</function>. We strongly recommend
85 that you use the <literal>zget_*</literal>
86 functions whenever you are preparing a PDU (in a C++ API, the
87 <literal>zget_</literal>
88 functions would probably be promoted to constructors for the
92 The prototype for the individual PDU types generally look like this:
95 Z_<type> *zget_<type>(ODR o);
103 Z_InitRequest *zget_InitRequest(ODR o);
107 The &odr; handle should generally be your encoding stream, but it
111 As well as the individual PDU functions, a function
112 <function>zget_APDU()</function> is provided, which allocates
113 a top-level Z-APDU of the type requested:
117 Z_APDU *zget_APDU(ODR o, int which);
121 The <varname>which</varname> parameter is (of course) the discriminator
122 belonging to the <varname>Z_APDU</varname> <literal>CHOICE</literal> type.
123 All of the interface described here is provided by the &asn; module, and
124 you access it through the <filename>proto.h</filename> header file.
128 <sect1><title id="oid">Object Identifiers</title>
130 When you refer to object identifiers in your application, you need to
131 be aware that SR and Z39.50 use two different set of OIDs to refer to
132 the same objects. To handle this easily, &yaz; provides a utility module
133 to &asn; which provides an internal representation of the OIDs used in
134 both protocols. Each oid is described by a structure:
138 typedef struct oident
140 enum oid_proto proto;
141 enum oid_class class;
142 enum oid_value value;
143 int oidsuffix[OID_SIZE];
149 The <literal>proto</literal> field can be set to either
150 <literal>PROTO_SR</literal> or <literal>PROTO_Z3950</literal>.
151 The <literal>class</literal> might be, say,
152 <literal>CLASS_RECSYN</literal>, and the <literal>value</literal> might be
153 <literal>VAL_USMARC</literal> for the USMARC record format. Functions
157 int *oid_ent_to_oid(struct oident *ent, int *dst);
158 struct oident *oid_getentbyoid(int *o);
162 are provided to map between object identifiers and database entries.
163 If you store a member of the <literal>oid_proto</literal> type in
164 your association state information, it's a simple matter, at runtime,
165 to generate the correct OID when you need it. For decoding, you can
166 simply ignore the proto field, or if you're strict, you can verify
167 that your peer is using the OID family from the correct protocol.
168 The <literal>desc</literal> field is a short, human-readable name
169 for the PDU, useful mainly for diagnostic output.
174 The old function <function>oid_getoidbyent</function> still exists but
175 is not thread safe. Use <function>oid_ent_to_oid</function> instead
176 and pass an array of size <literal>OID_SIZE</literal>.
182 Plans are underway to merge the two protocols into a single
183 definition, with one set of object identifiers. When this happens, the
184 oid module will no longer be required to support protocol
185 independence, but it should still be useful as a simple OID database.
190 <sect1><title>EXTERNAL Data</title>
193 In order to achieve extensibility and adaptability to different
194 application domains, the new version of the protocol defines many
195 structures outside of the main ASN.1 specification, referencing them
196 through ASN.1 EXTERNAL constructs. To simplify the construction and
197 access to the externally referenced data, the &asn; module defines a
198 specialized version of the EXTERNAL construct, called
199 <literal>Z_External</literal>.It is defined thus:
203 typedef struct Z_External
205 Odr_oid *direct_reference;
206 int *indirect_reference;
211 Z_External_single = 0,
213 Z_External_arbitrary,
217 Z_External_explainRecord,
218 Z_External_resourceReport1,
219 Z_External_resourceReport2
227 Odr_any *single_ASN1_type;
228 Odr_oct *octet_aligned;
229 Odr_bitmask *arbitrary;
233 Z_ExplainRecord *explainRecord;
234 Z_ResourceReport1 *resourceReport1;
235 Z_ResourceReport2 *resourceReport2;
244 When decoding, the &asn; module will attempt to determine which
245 syntax describes the data by looking at the reference fields
246 (currently only the direct-reference). For ASN.1 structured data, you
247 need only consult the <literal>which</literal> field to determine the
248 type of data. You can the access the data directly through the union.
249 When constructing data for encoding, you set the union pointer to point
250 to the data, and set the <literal>which</literal> field accordingly.
251 Remember also to set the direct (or indirect) reference to the correct
252 OID for the data type.
253 For non-ASN.1 data such as MARC records, use the
254 <literal>octet_aligned</literal> arm of the union.
258 Some servers return ASN.1 structured data values (eg. database
259 records) as BER-encoded records placed in the
260 <literal>octet-aligned</literal> branch of the EXTERNAL CHOICE.
261 The ASN-module will <emphasis>not</emphasis> automatically decode
262 these records. To help you decode the records in the application, the
267 Z_ext_typeent *z_ext_gettypebyref(oid_value ref);
271 Can be used to retrieve information about the known, external data
272 types. The function return a pointer to a static area, or NULL, if no
273 match for the given direct reference is found. The
274 <literal>Z_ext_typeent</literal>
279 typedef struct Z_ext_typeent
281 oid_value dref; /* the direct-reference OID value. */
282 int what; /* discriminator value for the external CHOICE */
283 Odr_fun fun; /* decoder function */
288 The <literal>what</literal> member contains the
289 <literal>Z_External</literal> union discriminator value for the
290 given type: For the SUTRS record syntax, the value would be
291 <literal>Z_External_sutrs</literal>.
292 The <literal>fun</literal> member contains a pointer to the
293 function which encodes/decodes the given type. Again, for the SUTRS
294 record syntax, the value of <literal>fun</literal> would be
295 <literal>z_SUTRS</literal> (a function pointer).
299 If you receive an EXTERNAL which contains an octet-string value that
300 you suspect of being an ASN.1-structured data value, you can use
301 <literal>z_ext_gettypebyref</literal> to look for the provided
303 If the return value is different from NULL, you can use the provided
304 function to decode the BER string (see section <link linkend="odr-use">
309 If you want to <emphasis>send</emphasis> EXTERNALs containing
310 ASN.1-structured values in the occtet-aligned branch of the CHOICE, this
311 is possible too. However, on the encoding phase, it requires a somewhat
312 involved juggling around of the various buffers involved.
315 If you need to add new, externally defined data types, you must update
316 the struct above, in the source file <filename>prt-ext.h</filename>, as
317 well as the encoder/decoder in the file <filename>prt-ext.c</filename>.
318 When changing the latter, remember to update both the
319 <literal>arm</literal> arrary and the list
320 <literal>type_table</literal>, which drives the CHOICE biasing that
321 is necessary to tell the different, structured types apart
327 Eventually, the EXTERNAL processing will most likely
328 automatically insert the correct OIDs or indirect-refs. First,
329 however, we need to determine how application-context management
330 (specifically the presentation-context-list) should fit into the
336 <sect1><title>PDU Contents Table</title>
339 We include, for reference, a listing of the fields of each top-level
340 PDU, as well as their default settings.
343 <table frame="top"><title>Default settings for PDU Initialize Request</title>
345 <colspec colwidth="7*" colname="field"></colspec>
346 <colspec colwidth="5*" colname="type"></colspec>
347 <colspec colwidth="7*" colname="value"></colspec>
352 <entry>Default Value</entry>
357 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
360 protocolVersion</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
363 options</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
366 preferredMessageSize</entry><entry>int</entry><entry>30*1024
369 maximumRecordSize</entry><entry>int</entry><entry>30*1024
372 idAuthentication</entry><entry>Z_IdAuthentication</entry><entry>NULL
375 implementationId</entry><entry>char*</entry><entry>"YAZ (id=81)"
378 implementationName</entry><entry>char*</entry><entry>"Index Data/YAZ"
381 implementationVersion</entry><entry>char*</entry><entry>YAZ_VERSION
384 userInformationField</entry><entry>Z_UserInformation</entry><entry>NULL
387 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
393 <table frame="top"><title>Default settings for PDU Initialize
396 <colspec colwidth="7*" colname="field"></colspec>
397 <colspec colwidth="5*" colname="type"></colspec>
398 <colspec colwidth="7*" colname="value"></colspec>
403 <entry>Default Value</entry>
408 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
411 protocolVersion</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
414 options</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
417 preferredMessageSize</entry><entry>int</entry><entry>30*1024
420 maximumRecordSize</entry><entry>int</entry><entry>30*1024
423 result</entry><entry>bool_t</entry><entry>TRUE
426 implementationId</entry><entry>char*</entry><entry>"YAZ (id=81)"
429 implementationName</entry><entry>char*</entry><entry>"Index Data/YAZ"
432 implementationVersion</entry><entry>char*</entry><entry>YAZ_VERSION
435 userInformationField</entry><entry>Z_UserInformation</entry><entry>NULL
438 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
444 <table frame="top"><title>Default settings for PDU Search Request</title>
446 <colspec colwidth="7*" colname="field"></colspec>
447 <colspec colwidth="5*" colname="type"></colspec>
448 <colspec colwidth="7*" colname="value"></colspec>
453 <entry>Default Value</entry>
458 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
461 smallSetUpperBound</entry><entry>int</entry><entry>0
464 largeSetLowerBound</entry><entry>int</entry><entry>1
467 mediumSetPresentNumber</entry><entry>int</entry><entry>0
470 replaceIndicator</entry><entry>bool_t</entry><entry>TRUE
473 resultSetName</entry><entry>char *</entry><entry>"default"
476 num_databaseNames</entry><entry>int</entry><entry>0
479 databaseNames</entry><entry>char **</entry><entry>NULL
482 smallSetElementSetNames</entry><entry>Z_ElementSetNames
486 mediumSetElementSetNames</entry><entry>Z_ElementSetNames
490 preferredRecordSyntax</entry><entry>Odr_oid</entry><entry>NULL
493 query</entry><entry>Z_Query</entry><entry>NULL
496 additionalSearchInfo</entry><entry>Z_OtherInformation
500 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
506 <table frame="top"><title>Default settings for PDU Search Response</title>
508 <colspec colwidth="7*" colname="field"></colspec>
509 <colspec colwidth="5*" colname="type"></colspec>
510 <colspec colwidth="7*" colname="value"></colspec>
515 <entry>Default Value</entry>
521 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
524 resultCount</entry><entry>int</entry><entry>0
527 numberOfRecordsReturned</entry><entry>int</entry><entry>0
530 nextResultSetPosition</entry><entry>int</entry><entry>0
533 searchStatus</entry><entry>bool_t</entry><entry>TRUE
536 resultSetStatus</entry><entry>int</entry><entry>NULL
539 presentStatus</entry><entry>int</entry><entry>NULL
542 records</entry><entry>Z_Records</entry><entry>NULL
545 additionalSearchInfo</entry>
546 <entry>Z_OtherInformation</entry><entry>NULL
549 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
555 <table frame="top"><title>Default settings for PDU Present Request</title>
557 <colspec colwidth="7*" colname="field"></colspec>
558 <colspec colwidth="5*" colname="type"></colspec>
559 <colspec colwidth="7*" colname="value"></colspec>
564 <entry>Default Value</entry>
569 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
572 resultSetId</entry><entry>char*</entry><entry>"default"
575 resultSetStartPoint</entry><entry>int</entry><entry>1
578 numberOfRecordsRequested</entry><entry>int</entry><entry>10
581 num_ranges</entry><entry>int</entry><entry>0
584 additionalRanges</entry><entry>Z_Range</entry><entry>NULL
587 recordComposition</entry><entry>Z_RecordComposition</entry><entry>NULL
590 preferredRecordSyntax</entry><entry>Odr_oid</entry><entry>NULL
593 maxSegmentCount</entry><entry>int</entry><entry>NULL
596 maxRecordSize</entry><entry>int</entry><entry>NULL
599 maxSegmentSize</entry><entry>int</entry><entry>NULL
602 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
608 <table frame="top"><title>Default settings for PDU Present Response</title>
610 <colspec colwidth="7*" colname="field"></colspec>
611 <colspec colwidth="5*" colname="type"></colspec>
612 <colspec colwidth="7*" colname="value"></colspec>
617 <entry>Default Value</entry>
622 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
625 numberOfRecordsReturned</entry><entry>int</entry><entry>0
628 nextResultSetPosition</entry><entry>int</entry><entry>0
631 presentStatus</entry><entry>int</entry><entry>Z_PRES_SUCCESS
634 records</entry><entry>Z_Records</entry><entry>NULL
637 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
643 <table frame="top"><title>Default settings for Delete Result Set Request
646 <colspec colwidth="7*" colname="field"></colspec>
647 <colspec colwidth="5*" colname="type"></colspec>
648 <colspec colwidth="7*" colname="value"></colspec>
653 <entry>Default Value</entry>
657 <row><entry>referenceId
658 </entry><entry>Z_ReferenceId</entry><entry>NULL
661 deleteFunction</entry><entry>int</entry><entry>Z_DeleteRequest_list
664 num_ids</entry><entry>int</entry><entry>0
667 resultSetList</entry><entry>char**</entry><entry>NULL
670 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
676 <table frame="top"><title>Default settings for Delete Result Set Response
679 <colspec colwidth="7*" colname="field"></colspec>
680 <colspec colwidth="5*" colname="type"></colspec>
681 <colspec colwidth="7*" colname="value"></colspec>
686 <entry>Default Value</entry>
691 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
694 deleteOperationStatus</entry><entry>int</entry>
695 <entry>Z_DeleteStatus_success</entry></row>
697 num_statuses</entry><entry>int</entry><entry>0
700 deleteListStatuses</entry><entry>Z_ListStatus**</entry><entry>NULL
703 numberNotDeleted</entry><entry>int</entry><entry>NULL
706 num_bulkStatuses</entry><entry>int</entry><entry>0
709 bulkStatuses</entry><entry>Z_ListStatus</entry><entry>NUL
712 deleteMessage</entry><entry>char*</entry><entry>NULL
715 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
721 <table frame="top"><title>Default settings for Scan Request
724 <colspec colwidth="7*" colname="field"></colspec>
725 <colspec colwidth="5*" colname="type"></colspec>
726 <colspec colwidth="7*" colname="value"></colspec>
731 <entry>Default Value</entry>
736 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
739 num_databaseNames</entry><entry>int</entry><entry>0
742 databaseNames</entry><entry>char**</entry><entry>NULL
745 attributeSet</entry><entry>Odr_oid</entry><entry>NULL
748 termListAndStartPoint</entry><entry>Z_AttributesPlus...
749 </entry><entry>NULL</entry></row>
751 stepSize</entry><entry>int</entry><entry>NULL
754 numberOfTermsRequested</entry><entry>int</entry><entry>20
757 preferredPositionInResponse</entry><entry>int</entry><entry>NULL
760 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
766 <table frame="top"><title>Default settings for Scan Response
769 <colspec colwidth="7*" colname="field"></colspec>
770 <colspec colwidth="5*" colname="type"></colspec>
771 <colspec colwidth="7*" colname="value"></colspec>
776 <entry>Default Value</entry>
782 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
785 stepSize</entry><entry>int</entry><entry>NULL
788 scanStatus</entry><entry>int</entry><entry>Z_Scan_success
791 numberOfEntriesReturned</entry><entry>int</entry><entry>0
794 positionOfTerm</entry><entry>int</entry><entry>NULL
797 entries</entry><entry>Z_ListEntris</entry><entry>NULL
800 attributeSet</entry><entry>Odr_oid</entry><entry>NULL
803 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
809 <table frame="top"><title>Default settings for Trigger Resource
810 Control Request </title>
812 <colspec colwidth="7*" colname="field"></colspec>
813 <colspec colwidth="5*" colname="type"></colspec>
814 <colspec colwidth="7*" colname="value"></colspec>
819 <entry>Default Value</entry>
825 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
828 requestedAction</entry><entry>int</entry><entry>
829 Z_TriggerResourceCtrl_resou..
832 prefResourceReportFormat</entry><entry>Odr_oid</entry><entry>NULL
835 resultSetWanted</entry><entry>bool_t</entry><entry>NULL
838 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
845 <table frame="top"><title>Default settings for Resource
846 Control Request</title>
848 <colspec colwidth="7*" colname="field"></colspec>
849 <colspec colwidth="5*" colname="type"></colspec>
850 <colspec colwidth="7*" colname="value"></colspec>
855 <entry>Default Value</entry>
861 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
864 suspendedFlag</entry><entry>bool_t</entry><entry>NULL
867 resourceReport</entry><entry>Z_External</entry><entry>NULL
870 partialResultsAvailable</entry><entry>int</entry><entry>NULL
873 responseRequired</entry><entry>bool_t</entry><entry>FALSE
876 triggeredRequestFlag</entry><entry>bool_t</entry><entry>NULL
879 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
885 <table frame="top"><title>Default settings for Resource
886 Control Response</title>
888 <colspec colwidth="7*" colname="field"></colspec>
889 <colspec colwidth="5*" colname="type"></colspec>
890 <colspec colwidth="7*" colname="value"></colspec>
895 <entry>Default Value</entry>
901 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
904 continueFlag</entry><entry>bool_t</entry><entry>TRUE
907 resultSetWanted</entry><entry>bool_t</entry><entry>NULL
910 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
916 <table frame="top"><title>Default settings for Access
917 Control Request</title>
919 <colspec colwidth="7*" colname="field"></colspec>
920 <colspec colwidth="5*" colname="type"></colspec>
921 <colspec colwidth="7*" colname="value"></colspec>
926 <entry>Default Value</entry>
932 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
935 which</entry><entry>enum</entry><entry>Z_AccessRequest_simpleForm;
938 u</entry><entry>union</entry><entry>NULL
941 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
947 <table frame="top"><title>Default settings for Access
948 Control Response</title>
950 <colspec colwidth="7*" colname="field"></colspec>
951 <colspec colwidth="5*" colname="type"></colspec>
952 <colspec colwidth="7*" colname="value"></colspec>
957 <entry>Default Value</entry>
963 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
966 which</entry><entry>enum</entry><entry>Z_AccessResponse_simpleForm
969 u</entry><entry>union</entry><entry>NULL
972 diagnostic</entry><entry>Z_DiagRec</entry><entry>NULL
975 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
981 <table frame="top"><title>Default settings for Segment</title>
983 <colspec colwidth="7*" colname="field"></colspec>
984 <colspec colwidth="5*" colname="type"></colspec>
985 <colspec colwidth="7*" colname="value"></colspec>
990 <entry>Default Value</entry>
996 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
999 numberOfRecordsReturned</entry><entry>int</entry><entry>value=0
1002 num_segmentRecords</entry><entry>int</entry><entry>0
1005 segmentRecords</entry><entry>Z_NamePlusRecord</entry><entry>NULL
1007 <row><entry>otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
1013 <table frame="top"><title>Default settings for Close</title>
1015 <colspec colwidth="7*" colname="field"></colspec>
1016 <colspec colwidth="5*" colname="type"></colspec>
1017 <colspec colwidth="7*" colname="value"></colspec>
1020 <entry>Field</entry>
1022 <entry>Default Value</entry>
1028 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
1031 closeReason</entry><entry>int</entry><entry>Z_Close_finished
1034 diagnosticInformation</entry><entry>char*</entry><entry>NULL
1037 resourceReportFormat</entry><entry>Odr_oid</entry><entry>NULL
1040 resourceFormat</entry><entry>Z_External</entry><entry>NULL
1043 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
1053 <!-- Keep this comment at the end of the file
1058 sgml-minimize-attributes:nil
1059 sgml-always-quote-attributes:t
1062 sgml-parent-document: "yaz.xml"
1063 sgml-local-catalogs: "../../docbook/docbook.cat"
1064 sgml-namecase-general:t