This file is indexed.

/usr/share/doc/yaz-doc/marc.html is in yaz-doc 4.2.18-1build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>5. MARC</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="YAZ User's Guide and Reference"><link rel="up" href="tools.html" title="Chapter 7. Supporting Tools"><link rel="prev" href="tools.log.html" title="4. Log"><link rel="next" href="tools.retrieval.html" title="6. Retrieval Facility"></head><body><link rel="stylesheet" type="text/css" href="common/style1.css"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">5. MARC</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tools.log.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Supporting Tools</th><td width="20%" align="right"> <a accesskey="n" href="tools.retrieval.html">Next</a></td></tr></table><hr></div><div class="sect1" title="5. MARC"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="marc"></a>5. MARC</h2></div></div></div><p>
    YAZ provides a fast utility for working with MARC records.
    Early versions of the MARC utility only allowed decoding of ISO2709.
    Today the utility may both encode - and decode to a varity of formats.
   </p><pre class="synopsis">
    #include &lt;yaz/marcdisp.h&gt;

    /* create handler */
    yaz_marc_t yaz_marc_create(void);
    /* destroy */
    void yaz_marc_destroy(yaz_marc_t mt);

    /* set XML mode YAZ_MARC_LINE, YAZ_MARC_SIMPLEXML, ... */
    void yaz_marc_xml(yaz_marc_t mt, int xmlmode);
    #define YAZ_MARC_LINE      0
    #define YAZ_MARC_SIMPLEXML 1
    #define YAZ_MARC_OAIMARC   2
    #define YAZ_MARC_MARCXML   3
    #define YAZ_MARC_ISO2709   4
    #define YAZ_MARC_XCHANGE   5
    #define YAZ_MARC_CHECK     6
    #define YAZ_MARC_TURBOMARC 7

    /* supply iconv handle for character set conversion .. */
    void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd);

    /* set debug level, 0=none, 1=more, 2=even more, .. */
    void yaz_marc_debug(yaz_marc_t mt, int level);

    /* decode MARC in buf of size bsize. Returns &gt;0 on success; &lt;=0 on failure.
    On success, result in *result with size *rsize. */
    int yaz_marc_decode_buf(yaz_marc_t mt, const char *buf, int bsize,
                            const char **result, size_t *rsize);

    /* decode MARC in buf of size bsize. Returns &gt;0 on success; &lt;=0 on failure.
       On success, result in WRBUF */
    int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf,
                              int bsize, WRBUF wrbuf);

   </pre><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
     The synopsis is just a basic subset of all functionality. Refer
     to the actual header file <code class="filename">marcdisp.h</code> for
     details.
    </p></div><p>
    A MARC conversion handle must be created by using
    <code class="function">yaz_marc_create</code> and destroyed
    by calling <code class="function">yaz_marc_destroy</code>.
  </p><p>
    All other function operate on a <code class="literal">yaz_marc_t</code> handle.
    The output is specified by a call to <code class="function">yaz_marc_xml</code>.
    The <code class="literal">xmlmode</code> must be one of
    </p><div class="variablelist"><dl><dt><span class="term">YAZ_MARC_LINE</span></dt><dd><p>
	A simple line-by-line format suitable for display but not
	recommend for further (machine) processing.
       </p></dd><dt><span class="term">YAZ_MARC_MARCXML</span></dt><dd><p>
	<a class="ulink" href="http://www.loc.gov/standards/marcxml/" target="_top">MARCXML</a>.
       </p></dd><dt><span class="term">YAZ_MARC_ISO2709</span></dt><dd><p>
	ISO2709 (sometimes just referred to as "MARC").
       </p></dd><dt><span class="term">YAZ_MARC_XCHANGE</span></dt><dd><p>
	<a class="ulink" href="http://www.loc.gov/standards/iso25577/" target="_top">MarcXchange</a>.
       </p></dd><dt><span class="term">YAZ_MARC_CHECK</span></dt><dd><p>
	Pseudo format for validation only. Does not generate
	any real output except diagnostics.
       </p></dd><dt><span class="term">YAZ_MARC_TURBOMARC</span></dt><dd><p>
	XML format with same semantics as MARCXML but more compact
	and geared towards fast processing with XSLT. Refer to
	<a class="xref" href="marc.html#tools.turbomarc" title="5.1. TurboMARC">Section 5.1, &#8220;TurboMARC&#8221;</a> for more information.
       </p></dd></dl></div><p>
   </p><p>
    The actual conversion functions are 
    <code class="function">yaz_marc_decode_buf</code> and
    <code class="function">yaz_marc_decode_wrbuf</code> which decodes and encodes
    a MARC record. The former function operates on simple buffers, the
    stores the resulting record in a WRBUF handle (WRBUF is a simple string
    type).
   </p><div class="example"><a name="example.marc.display"></a><p class="title"><b>Example 7.18. Display of MARC record</b></p><div class="example-contents"><p>
     The following program snippet illustrates how the MARC API may
     be used to convert a MARC record to the line-by-line format:
     </p><pre class="programlisting">
      void print_marc(const char *marc_buf, int marc_buf_size)
      {
         char *result;      /* for result buf */
         size_t result_len;    /* for size of result */
         yaz_marc_t mt = yaz_marc_create();
         yaz_marc_xml(mt, YAZ_MARC_LINE);
         yaz_marc_decode_buf(mt, marc_buf, marc_buf_size,
                             &amp;result, &amp;result_len);
         fwrite(result, result_len, 1, stdout);
         yaz_marc_destroy(mt);  /* note that result is now freed... */
      }

      </pre><p>
    </p></div></div><br class="example-break"><div class="sect2" title="5.1. TurboMARC"><div class="titlepage"><div><div><h3 class="title"><a name="tools.turbomarc"></a>5.1. TurboMARC</h3></div></div></div><p>
     TurboMARC is yet another XML encoding of a MARC record. The format
     was designed for fast processing with XSLT.
    </p><p>
     Applications like
     Pazpar2 uses XSLT to convert an XML encoded MARC record to an internal
     representation. This conversion mostly check the tag of a MARC field
     to determine the basic rules in the conversion. This check is
     costly when that is tag is encoded as an attribute in MARCXML.
     By having the tag value as the element instead, makes processing
     many times faster (at least for Libxslt).
    </p><p>
     TurboMARC is encoded as follows:
     </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
	Record elements is part of namespace
	"<code class="literal">http://www.indexdata.com/turbomarc</code>".
       </p></li><li class="listitem"><p>
	A record is enclosed in element <code class="literal">r</code>.
       </p></li><li class="listitem"><p>
	A collection of records is enclosed in element
	<code class="literal">collection</code>.
       </p></li><li class="listitem"><p>
	The leader is encoded as element <code class="literal">l</code> with the 
	leader content as its (text) value.
       </p></li><li class="listitem"><p>
	A control field is encoded as element <code class="literal">c</code> concatenated
	with the tag value of the control field if the tag value
	matches the regular expression <code class="literal">[a-zA-Z0-9]*</code>.
	If the tag value do not match the regular expression
	<code class="literal">[a-zA-Z0-9]*</code> the control field is encoded
	as element <code class="literal">c</code> and attribute <code class="literal">code</code>
	will hold the tag value.
	This rule ensure that in the rare cases where a tag value might
	result in a non-wellformed XML YAZ encode it as a coded	attribute
	(as in MARCXML).
       </p><p>
	The control field content is the the text value of this element.
	Indicators are encoded as attribute names
	<code class="literal">i1</code>, <code class="literal">i2</code>, etc.. and
	corresponding values for each indicator.
       </p></li><li class="listitem"><p>
	A data field is encoded as element <code class="literal">d</code> concatenated
	with the tag value of the data field or using the attribute
	<code class="literal">code</code> as described in the rules for control fields.
	The children of the data field element is subfield elements.
	Each subfield element is encoded as <code class="literal">s</code>
	concatenated with the sub field code.
	The text of the subfield element is the contents of the subfield.
	Indicators are encoded as attributes for the data field element similar
	to the encoding for control fields.
       </p></li></ul></div><p>
    </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tools.log.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tools.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tools.retrieval.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4. Log </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 6. Retrieval Facility</td></tr></table></div></body></html>