Rename to Loc test. Now using LoC data
[marc4j.git] / src / org / marc4j / test / WriterTest.java
1 package org.marc4j.test;\r
2 \r
3 import java.io.ByteArrayInputStream;\r
4 import java.io.ByteArrayOutputStream;\r
5 import java.io.File;\r
6 import java.io.FileOutputStream;\r
7 import java.io.InputStream;\r
8 import java.io.InputStreamReader;\r
9 import java.io.OutputStream;\r
10 import java.io.PrintStream;\r
11 import java.io.StringReader;\r
12 \r
13 import javax.xml.transform.stream.StreamResult;\r
14 import javax.xml.transform.stream.StreamSource;\r
15 \r
16 import junit.framework.Test;\r
17 import junit.framework.TestCase;\r
18 import junit.framework.TestSuite;\r
19 import junit.textui.TestRunner;\r
20 \r
21 import org.marc4j.MarcStreamReader;\r
22 import org.marc4j.MarcStreamWriter;\r
23 import org.marc4j.MarcWriter;\r
24 import org.marc4j.MarcXmlReader;\r
25 import org.marc4j.MarcXmlWriter;\r
26 import org.marc4j.TurboMarcXmlWriter;\r
27 import org.marc4j.marc.Record;\r
28 \r
29 public class WriterTest extends TestCase {\r
30 \r
31   \r
32   \r
33     public void testMarcStreamWriter() throws Exception {\r
34         InputStream input = getClass().getResourceAsStream(\r
35                 "resources/summerland.xml");\r
36         MarcStreamWriter writer = new MarcStreamWriter(System.out);\r
37         MarcXmlReader reader = new MarcXmlReader(input);\r
38         while (reader.hasNext()) {\r
39             Record record = reader.next();\r
40             writer.write(record);\r
41         }\r
42         input.close();\r
43         writer.close();\r
44         System.out.println("");\r
45     }\r
46 \r
47     public void testMarcXmlWriter() throws Exception {\r
48         InputStream input = getClass().getResourceAsStream(\r
49                 "resources/summerland.mrc");\r
50         MarcWriter writer = new MarcXmlWriter(System.out, true);\r
51         MarcStreamReader reader = new MarcStreamReader(input);\r
52         while (reader.hasNext()) {\r
53             Record record = reader.next();\r
54             writer.write(record);\r
55         }\r
56         input.close();\r
57         writer.close();\r
58         System.out.println("");\r
59     }\r
60 \r
61     public void testTurboMarcXmlWriter() throws Exception {\r
62       InputStream input = getClass().getResourceAsStream(\r
63               "resources/summerland.mrc");\r
64       MarcWriter writer = new TurboMarcXmlWriter(System.out, true);\r
65       MarcStreamReader reader = new MarcStreamReader(input);\r
66       while (reader.hasNext()) {\r
67           Record record = reader.next();\r
68           writer.write(record);\r
69       }\r
70       input.close();\r
71       writer.close();\r
72       System.out.println("");\r
73     }\r
74 \r
75     public void testDummyLoadLoC10K() throws Exception {\r
76       @SuppressWarnings("unused")\r
77       InputStream input = getClass().getResourceAsStream("resources/loc-10k-0000001.mrc");\r
78     }\r
79     \r
80     public void testMarcXmlWriterLoC10K() throws Exception {\r
81       InputStream input = getClass().getResourceAsStream("resources/loc-10k-0000001.mrc");\r
82       MarcWriter writer = new MarcXmlWriter(new FileOutputStream( new File("auto-graphics.txml")), true);\r
83       MarcStreamReader reader = new MarcStreamReader(input);\r
84       doReadWrite(writer, reader);\r
85       input.close();\r
86     }\r
87     public void testTurboMarcXmlWriterLoC10K() throws Exception {\r
88       InputStream input = getClass().getResourceAsStream("resources/loc-10k-0000001.mrc");\r
89       MarcWriter writer = new TurboMarcXmlWriter(new FileOutputStream( new File("auto-graphics.txml")), true);\r
90       MarcStreamReader reader = new MarcStreamReader(input);\r
91       doReadWrite(writer, reader);\r
92       input.close();\r
93     }\r
94 \r
95     private void doReadWrite(MarcWriter writer, MarcStreamReader reader) {\r
96       int index = 0;\r
97       long start = System.currentTimeMillis();\r
98       while (reader.hasNext()) {\r
99           Record record = reader.next();\r
100           writer.write(record);\r
101           index++;\r
102       }\r
103       long time = System.currentTimeMillis() - start;\r
104       writer.close();\r
105       if (time > 0)\r
106         System.out.println("\nNumber of records: " + index + ". Records per second: " + (1000L * index / time));\r
107       else \r
108         System.out.println("\nNumber of records: " + index + ". Records per second: (zero millisecs)" );\r
109     }\r
110 \r
111     \r
112     public void testMarcXmlWriter2pz() throws Exception {\r
113       InputStream input = getClass().getResourceAsStream("resources/summerland.mrc");\r
114       StreamResult result = new StreamResult(System.out);\r
115       MarcWriter writer = new MarcXmlWriter(result, new StreamSource(new StringReader(marc2pz)));\r
116       MarcStreamReader reader = new MarcStreamReader(input);\r
117       doReadWrite(writer, reader);\r
118       input.close();\r
119     }\r
120 \r
121     \r
122     public void testMarcXmlWriterLoC10K2pz() throws Exception {\r
123       InputStream input = getClass().getResourceAsStream("resources/loc-10k-0000001.mrc");\r
124       PrintStream devNull = new java.io.PrintStream ( new java.io.OutputStream ( ) { public void write ( int b ) { } });\r
125       OutputStream file = new FileOutputStream("loc10k.xml");\r
126       StreamResult result = new StreamResult(file);\r
127       MarcWriter writer = new MarcXmlWriter(result, new StreamSource(new InputStreamReader(getClass().getResourceAsStream("resources/marc21.xsl"))));\r
128       \r
129       MarcStreamReader reader = new MarcStreamReader(input);\r
130       doReadWrite(writer, reader);\r
131       input.close();\r
132     }\r
133 \r
134     public void testTurboMarcXmlWriterLoC10K2pz() throws Exception {\r
135       InputStream input = getClass().getResourceAsStream("resources/loc-10k-0000001.mrc");\r
136       PrintStream devNull = new java.io.PrintStream ( new java.io.OutputStream ( ) { public void write ( int b ) { } });\r
137       OutputStream file = new FileOutputStream("loc10k.txml");\r
138       StreamResult result = new StreamResult(file);\r
139       MarcWriter writer = new TurboMarcXmlWriter(result, new StreamSource(new InputStreamReader(getClass().getResourceAsStream("resources/tmarc.xsl"))));      \r
140       MarcStreamReader reader = new MarcStreamReader(input);\r
141       doReadWrite(writer, reader);\r
142       input.close();\r
143     }\r
144 \r
145     public void testWriteAndRead() throws Exception {\r
146         InputStream input = getClass().getResourceAsStream("resources/summerland.xml");\r
147         ByteArrayOutputStream out = new ByteArrayOutputStream();\r
148         MarcStreamWriter writer = new MarcStreamWriter(out);\r
149         MarcXmlReader reader = new MarcXmlReader(input);\r
150         while (reader.hasNext()) {\r
151             Record record = reader.next();\r
152             writer.write(record);\r
153         }\r
154         input.close();\r
155         writer.close();\r
156 \r
157         ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());\r
158         MarcStreamReader marcReader = new MarcStreamReader(in);\r
159         MarcStreamWriter marcWriter = new MarcStreamWriter(System.out);\r
160         while (marcReader.hasNext()) {\r
161             Record record = marcReader.next();\r
162             marcWriter.write(record);\r
163         }\r
164         in.close();\r
165         marcWriter.close();\r
166 \r
167         out.close();\r
168     }\r
169 \r
170     public static Test suite() {\r
171         return new TestSuite(WriterTest.class);\r
172     }\r
173 \r
174     public static void main(String args[]) {\r
175         TestRunner.run(suite());\r
176     }\r
177 \r
178 \r
179     String marc2pz \r
180               = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + \r
181                 "<xsl:stylesheet\r\n" + \r
182                 "    version=\"1.0\"\r\n" + \r
183                 "    xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\r\n" + \r
184                 "    xmlns:pz=\"http://www.indexdata.com/pazpar2/1.0\"\r\n" + \r
185                 "    xmlns:marc=\"http://www.loc.gov/MARC21/slim\">\r\n" + \r
186                 "  <xsl:output indent=\"yes\" method=\"xml\" version=\"1.0\" encoding=\"UTF-8\"/>\r\n" + \r
187                 "<!-- Extract metadata from MARC21/USMARC \r\n" + \r
188                 "      http://www.loc.gov/marc/bibliographic/ecbdhome.html\r\n" + \r
189                 "-->  \r\n" + \r
190                 "  <xsl:include href=\"pz2-ourl-marc21.xsl\" />\r\n" + \r
191                 "\r\n" + \r
192                 "  <xsl:template match=\"/\">\r\n" + \r
193                 "    <pz:collection> \r\n" + \r
194                 "      <xsl:apply-templates />\r\n" + \r
195                 "    </pz:collection>\r\n" + \r
196                 "  </xsl:template>        \r\n" + \r
197                 "  \r\n" + \r
198                 "  <xsl:template match=\"//delete\">\r\n" + \r
199                 "       <xsl:copy-of select=\".\"/>                                                                                                                                                                               \r\n" + \r
200                 "  </xsl:template> \r\n" + \r
201                 "  \r\n" + \r
202                 "  <xsl:template match=\"//marc:record\">\r\n" + \r
203                 "    <xsl:variable name=\"title_medium\" select=\"marc:datafield[@tag='245']/marc:subfield[@code='h']\"/>\r\n" + \r
204                 "    <xsl:variable name=\"journal_title\" select=\"marc:datafield[@tag='773']/marc:subfield[@code='t']\"/>\r\n" + \r
205                 "    <xsl:variable name=\"electronic_location_url\" select=\"marc:datafield[@tag='856']/marc:subfield[@code='u']\"/>\r\n" + \r
206                 "    <xsl:variable name=\"fulltext_a\" select=\"marc:datafield[@tag='900']/marc:subfield[@code='a']\"/>\r\n" + \r
207                 "    <xsl:variable name=\"fulltext_b\" select=\"marc:datafield[@tag='900']/marc:subfield[@code='b']\"/>\r\n" + \r
208                 "    <xsl:variable name=\"medium\">\r\n" + \r
209                 "      <xsl:choose>\r\n" + \r
210                 "       <xsl:when test=\"$title_medium\">\r\n" + \r
211                 "         <xsl:value-of select=\"substring-after(substring-before($title_medium,']'),'[')\"/>\r\n" + \r
212                 "       </xsl:when>\r\n" + \r
213                 "       <xsl:when test=\"$fulltext_a\">\r\n" + \r
214                 "         <xsl:text>electronic resource</xsl:text>\r\n" + \r
215                 "       </xsl:when>\r\n" + \r
216                 "       <xsl:when test=\"$fulltext_b\">\r\n" + \r
217                 "         <xsl:text>electronic resource</xsl:text>\r\n" + \r
218                 "       </xsl:when>\r\n" + \r
219                 "       <xsl:when test=\"$journal_title\">\r\n" + \r
220                 "         <xsl:text>article</xsl:text>\r\n" + \r
221                 "       </xsl:when>\r\n" + \r
222                 "       <xsl:otherwise>\r\n" + \r
223                 "         <xsl:text>book</xsl:text>\r\n" + \r
224                 "       </xsl:otherwise>\r\n" + \r
225                 "      </xsl:choose>\r\n" + \r
226                 "    </xsl:variable>\r\n" + \r
227                 "\r\n" + \r
228                 "    <pz:record>      \r\n" + \r
229                 "      <xsl:for-each select=\"marc:controlfield[@tag='001']\">\r\n" + \r
230                 "        <pz:metadata type=\"id\">\r\n" + \r
231                 "          <xsl:value-of select=\".\"/>\r\n" + \r
232                 "        </pz:metadata>\r\n" + \r
233                 "      </xsl:for-each>\r\n" + \r
234                 "\r\n" + \r
235                 "      <xsl:for-each select=\"marc:datafield[@tag='010']\">\r\n" + \r
236                 "        <pz:metadata type=\"lccn\">\r\n" + \r
237                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
238                 "       </pz:metadata>\r\n" + \r
239                 "      </xsl:for-each>\r\n" + \r
240                 "\r\n" + \r
241                 "      <xsl:for-each select=\"marc:datafield[@tag='020']\">\r\n" + \r
242                 "        <pz:metadata type=\"isbn\">\r\n" + \r
243                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
244                 "       </pz:metadata>\r\n" + \r
245                 "      </xsl:for-each>\r\n" + \r
246                 "\r\n" + \r
247                 "      <xsl:for-each select=\"marc:datafield[@tag='022']\">\r\n" + \r
248                 "        <pz:metadata type=\"issn\">\r\n" + \r
249                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
250                 "       </pz:metadata>\r\n" + \r
251                 "      </xsl:for-each>\r\n" + \r
252                 "\r\n" + \r
253                 "      <xsl:for-each select=\"marc:datafield[@tag='027']\">\r\n" + \r
254                 "        <pz:metadata type=\"tech-rep-nr\">\r\n" + \r
255                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
256                 "       </pz:metadata>\r\n" + \r
257                 "      </xsl:for-each>\r\n" + \r
258                 "\r\n" + \r
259                 "      <xsl:for-each select=\"marc:datafield[@tag='035']\">\r\n" + \r
260                 "        <pz:metadata type=\"system-control-nr\">\r\n" + \r
261                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
262                 "       </pz:metadata>\r\n" + \r
263                 "      </xsl:for-each>\r\n" + \r
264                 "\r\n" + \r
265                 "      <xsl:for-each select=\"marc:datafield[@tag='100']\">\r\n" + \r
266                 "       <pz:metadata type=\"author\">\r\n" + \r
267                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
268                 "       </pz:metadata>\r\n" + \r
269                 "       <pz:metadata type=\"author-title\">\r\n" + \r
270                 "         <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
271                 "       </pz:metadata>\r\n" + \r
272                 "       <pz:metadata type=\"author-date\">\r\n" + \r
273                 "         <xsl:value-of select=\"marc:subfield[@code='d']\"/>\r\n" + \r
274                 "       </pz:metadata>\r\n" + \r
275                 "      </xsl:for-each>\r\n" + \r
276                 "\r\n" + \r
277                 "      <xsl:for-each select=\"marc:datafield[@tag='110']\">\r\n" + \r
278                 "       <pz:metadata type=\"corporate-name\">\r\n" + \r
279                 "           <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
280                 "       </pz:metadata>\r\n" + \r
281                 "       <pz:metadata type=\"corporate-location\">\r\n" + \r
282                 "           <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
283                 "       </pz:metadata>\r\n" + \r
284                 "       <pz:metadata type=\"corporate-date\">\r\n" + \r
285                 "           <xsl:value-of select=\"marc:subfield[@code='d']\"/>\r\n" + \r
286                 "       </pz:metadata>\r\n" + \r
287                 "      </xsl:for-each>\r\n" + \r
288                 "\r\n" + \r
289                 "      <xsl:for-each select=\"marc:datafield[@tag='111']\">\r\n" + \r
290                 "       <pz:metadata type=\"meeting-name\">\r\n" + \r
291                 "           <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
292                 "       </pz:metadata>\r\n" + \r
293                 "       <pz:metadata type=\"meeting-location\">\r\n" + \r
294                 "           <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
295                 "       </pz:metadata>\r\n" + \r
296                 "       <pz:metadata type=\"meeting-date\">\r\n" + \r
297                 "           <xsl:value-of select=\"marc:subfield[@code='d']\"/>\r\n" + \r
298                 "       </pz:metadata>\r\n" + \r
299                 "      </xsl:for-each>\r\n" + \r
300                 "\r\n" + \r
301                 "      <xsl:for-each select=\"marc:datafield[@tag='260']\">\r\n" + \r
302                 "       <pz:metadata type=\"date\">\r\n" + \r
303                 "           <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
304                 "       </pz:metadata>\r\n" + \r
305                 "      </xsl:for-each>\r\n" + \r
306                 "\r\n" + \r
307                 "      <xsl:for-each select=\"marc:datafield[@tag='245']\">\r\n" + \r
308                 "        <pz:metadata type=\"title\">\r\n" + \r
309                 "          <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
310                 "        </pz:metadata>\r\n" + \r
311                 "        <pz:metadata type=\"title-remainder\">\r\n" + \r
312                 "          <xsl:value-of select=\"marc:subfield[@code='b']\"/>\r\n" + \r
313                 "        </pz:metadata>\r\n" + \r
314                 "        <pz:metadata type=\"title-responsibility\">\r\n" + \r
315                 "          <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
316                 "        </pz:metadata>\r\n" + \r
317                 "        <pz:metadata type=\"title-dates\">\r\n" + \r
318                 "          <xsl:value-of select=\"marc:subfield[@code='f']\"/>\r\n" + \r
319                 "        </pz:metadata>\r\n" + \r
320                 "        <pz:metadata type=\"title-medium\">\r\n" + \r
321                 "          <xsl:value-of select=\"marc:subfield[@code='h']\"/>\r\n" + \r
322                 "        </pz:metadata>\r\n" + \r
323                 "        <pz:metadata type=\"title-number-section\">\r\n" + \r
324                 "          <xsl:value-of select=\"marc:subfield[@code='n']\"/>\r\n" + \r
325                 "        </pz:metadata>\r\n" + \r
326                 "      </xsl:for-each>\r\n" + \r
327                 "\r\n" + \r
328                 "      <xsl:for-each select=\"marc:datafield[@tag='250']\">\r\n" + \r
329                 "       <pz:metadata type=\"edition\">\r\n" + \r
330                 "           <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
331                 "       </pz:metadata>\r\n" + \r
332                 "      </xsl:for-each>\r\n" + \r
333                 "\r\n" + \r
334                 "      <xsl:for-each select=\"marc:datafield[@tag='260']\">\r\n" + \r
335                 "        <pz:metadata type=\"publication-place\">\r\n" + \r
336                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
337                 "       </pz:metadata>\r\n" + \r
338                 "        <pz:metadata type=\"publication-name\">\r\n" + \r
339                 "         <xsl:value-of select=\"marc:subfield[@code='b']\"/>\r\n" + \r
340                 "       </pz:metadata>\r\n" + \r
341                 "        <pz:metadata type=\"publication-date\">\r\n" + \r
342                 "         <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
343                 "       </pz:metadata>\r\n" + \r
344                 "      </xsl:for-each>\r\n" + \r
345                 "\r\n" + \r
346                 "      <xsl:for-each select=\"marc:datafield[@tag='300']\">\r\n" + \r
347                 "       <pz:metadata type=\"physical-extent\">\r\n" + \r
348                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
349                 "       </pz:metadata>\r\n" + \r
350                 "       <pz:metadata type=\"physical-format\">\r\n" + \r
351                 "         <xsl:value-of select=\"marc:subfield[@code='b']\"/>\r\n" + \r
352                 "       </pz:metadata>\r\n" + \r
353                 "       <pz:metadata type=\"physical-dimensions\">\r\n" + \r
354                 "         <xsl:value-of select=\"marc:subfield[@code='c']\"/>\r\n" + \r
355                 "       </pz:metadata>\r\n" + \r
356                 "       <pz:metadata type=\"physical-accomp\">\r\n" + \r
357                 "         <xsl:value-of select=\"marc:subfield[@code='e']\"/>\r\n" + \r
358                 "       </pz:metadata>\r\n" + \r
359                 "       <pz:metadata type=\"physical-unittype\">\r\n" + \r
360                 "         <xsl:value-of select=\"marc:subfield[@code='f']\"/>\r\n" + \r
361                 "       </pz:metadata>\r\n" + \r
362                 "       <pz:metadata type=\"physical-unitsize\">\r\n" + \r
363                 "         <xsl:value-of select=\"marc:subfield[@code='g']\"/>\r\n" + \r
364                 "       </pz:metadata>\r\n" + \r
365                 "       <pz:metadata type=\"physical-specified\">\r\n" + \r
366                 "         <xsl:value-of select=\"marc:subfield[@code='3']\"/>\r\n" + \r
367                 "       </pz:metadata>\r\n" + \r
368                 "      </xsl:for-each>\r\n" + \r
369                 "\r\n" + \r
370                 "      <xsl:for-each select=\"marc:datafield[@tag='440']\">\r\n" + \r
371                 "       <pz:metadata type=\"series-title\">\r\n" + \r
372                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
373                 "       </pz:metadata>\r\n" + \r
374                 "      </xsl:for-each>\r\n" + \r
375                 "\r\n" + \r
376                 "      <xsl:for-each select=\"marc:datafield[@tag = '500' or @tag = '505' or @tag = '518' or @tag = '520' or @tag = '522']\">\r\n" + \r
377                 "       <pz:metadata type=\"description\">\r\n" + \r
378                 "            <xsl:value-of select=\"*/text()\"/>\r\n" + \r
379                 "        </pz:metadata>\r\n" + \r
380                 "      </xsl:for-each>\r\n" + \r
381                 "      \r\n" + \r
382                 "      <xsl:for-each select=\"marc:datafield[@tag='600' or @tag='610' or @tag='611' or @tag='630' or @tag='648' or @tag='650' or @tag='651' or @tag='653' or @tag='654' or @tag='655' or @tag='656' or @tag='657' or @tag='658' or @tag='662' or @tag='69X']\">\r\n" + \r
383                 "        <pz:metadata type=\"subject\">\r\n" + \r
384                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
385                 "       </pz:metadata>\r\n" + \r
386                 "       <pz:metadata type=\"subject-long\">\r\n" + \r
387                 "         <xsl:for-each select=\"marc:subfield\">\r\n" + \r
388                 "           <xsl:if test=\"position() > 1\">\r\n" + \r
389                 "             <xsl:text>, </xsl:text>\r\n" + \r
390                 "           </xsl:if>\r\n" + \r
391                 "           <xsl:value-of select=\".\"/>\r\n" + \r
392                 "         </xsl:for-each>\r\n" + \r
393                 "       </pz:metadata>\r\n" + \r
394                 "      </xsl:for-each>\r\n" + \r
395                 "\r\n" + \r
396                 "      <xsl:for-each select=\"marc:datafield[@tag='856']\">\r\n" + \r
397                 "       <pz:metadata type=\"electronic-url\">\r\n" + \r
398                 "         <xsl:value-of select=\"marc:subfield[@code='u']\"/>\r\n" + \r
399                 "       </pz:metadata>\r\n" + \r
400                 "       <pz:metadata type=\"electronic-text\">\r\n" + \r
401                 "         <xsl:value-of select=\"marc:subfield[@code='y']\"/>\r\n" + \r
402                 "       </pz:metadata>\r\n" + \r
403                 "       <pz:metadata type=\"electronic-note\">\r\n" + \r
404                 "         <xsl:value-of select=\"marc:subfield[@code='z']\"/>\r\n" + \r
405                 "       </pz:metadata>\r\n" + \r
406                 "      </xsl:for-each>\r\n" + \r
407                 "\r\n" + \r
408                 "      <xsl:for-each select=\"marc:datafield[@tag='773']\">\r\n" + \r
409                 "        <pz:metadata type=\"citation\">\r\n" + \r
410                 "          <xsl:for-each select=\"*\">\r\n" + \r
411                 "            <xsl:value-of select=\"normalize-space(.)\"/>\r\n" + \r
412                 "            <xsl:text> </xsl:text>\r\n" + \r
413                 "          </xsl:for-each>\r\n" + \r
414                 "        </pz:metadata>\r\n" + \r
415                 "        <xsl:if test=\"marc:subfield[@code='t']\">\r\n" + \r
416                 "          <pz:metadata type=\"journal-title\">\r\n" + \r
417                 "            <xsl:value-of select=\"marc:subfield[@code='t']\"/>\r\n" + \r
418                 "          </pz:metadata>\r\n" + \r
419                 "        </xsl:if>\r\n" + \r
420                 "        <xsl:if test=\"marc:subfield[@code='g']\">\r\n" + \r
421                 "          <pz:metadata type=\"journal-subpart\">\r\n" + \r
422                 "            <xsl:value-of select=\"marc:subfield[@code='g']\"/>\r\n" + \r
423                 "          </pz:metadata>\r\n" + \r
424                 "        </xsl:if>\r\n" + \r
425                 "      </xsl:for-each>\r\n" + \r
426                 "\r\n" + \r
427                 "      <pz:metadata type=\"medium\">\r\n" + \r
428                 "       <xsl:value-of select=\"$medium\"/>\r\n" + \r
429                 "      </pz:metadata>\r\n" + \r
430                 "      \r\n" + \r
431                 "      <xsl:for-each select=\"marc:datafield[@tag='900']/marc:subfield[@code='a']\">\r\n" + \r
432                 "        <pz:metadata type=\"fulltext\">\r\n" + \r
433                 "          <xsl:value-of select=\".\"/>\r\n" + \r
434                 "        </pz:metadata>\r\n" + \r
435                 "      </xsl:for-each>\r\n" + \r
436                 "\r\n" + \r
437                 "      <!-- <xsl:if test=\"$fulltext_a\">\r\n" + \r
438                 "       <pz:metadata type=\"fulltext\">\r\n" + \r
439                 "         <xsl:value-of select=\"$fulltext_a\"/>\r\n" + \r
440                 "       </pz:metadata>\r\n" + \r
441                 "      </xsl:if> -->\r\n" + \r
442                 "\r\n" + \r
443                 "      <xsl:for-each select=\"marc:datafield[@tag='900']/marc:subfield[@code='b']\">\r\n" + \r
444                 "        <pz:metadata type=\"fulltext\">\r\n" + \r
445                 "          <xsl:value-of select=\".\"/>\r\n" + \r
446                 "        </pz:metadata>\r\n" + \r
447                 "      </xsl:for-each>\r\n" + \r
448                 "\r\n" + \r
449                 "      <!-- <xsl:if test=\"$fulltext_b\">\r\n" + \r
450                 "       <pz:metadata type=\"fulltext\">\r\n" + \r
451                 "         <xsl:value-of select=\"$fulltext_b\"/>\r\n" + \r
452                 "       </pz:metadata>\r\n" + \r
453                 "      </xsl:if> -->\r\n" + \r
454                 "\r\n" + \r
455                 "      <xsl:for-each select=\"marc:datafield[@tag='907' or @tag='901']\">\r\n" + \r
456                 "        <pz:metadata type=\"iii-id\">\r\n" + \r
457                 "         <xsl:value-of select=\"marc:subfield[@code='a']\"/>\r\n" + \r
458                 "       </pz:metadata>\r\n" + \r
459                 "      </xsl:for-each>\r\n" + \r
460                 "\r\n" + \r
461                 "      <xsl:for-each select=\"marc:datafield[@tag='926']\">\r\n" + \r
462                 "        <pz:metadata type=\"holding\">\r\n" + \r
463                 "         <xsl:for-each select=\"marc:subfield\">\r\n" + \r
464                 "           <xsl:if test=\"position() > 1\">\r\n" + \r
465                 "             <xsl:text> </xsl:text>\r\n" + \r
466                 "           </xsl:if>\r\n" + \r
467                 "           <xsl:value-of select=\".\"/>\r\n" + \r
468                 "         </xsl:for-each>\r\n" + \r
469                 "        </pz:metadata>\r\n" + \r
470                 "      </xsl:for-each>\r\n" + \r
471                 "\r\n" + \r
472                 "      <xsl:for-each select=\"marc:datafield[@tag='948']\">\r\n" + \r
473                 "        <pz:metadata type=\"holding\">\r\n" + \r
474                 "         <xsl:for-each select=\"marc:subfield\">\r\n" + \r
475                 "           <xsl:if test=\"position() > 1\">\r\n" + \r
476                 "             <xsl:text> </xsl:text>\r\n" + \r
477                 "           </xsl:if>\r\n" + \r
478                 "           <xsl:value-of select=\".\"/>\r\n" + \r
479                 "         </xsl:for-each>\r\n" + \r
480                 "        </pz:metadata>\r\n" + \r
481                 "      </xsl:for-each>\r\n" + \r
482                 "\r\n" + \r
483                 "      <xsl:for-each select=\"marc:datafield[@tag='991']\">\r\n" + \r
484                 "        <pz:metadata type=\"holding\">\r\n" + \r
485                 "         <xsl:for-each select=\"marc:subfield\">\r\n" + \r
486                 "           <xsl:if test=\"position() > 1\">\r\n" + \r
487                 "             <xsl:text> </xsl:text>\r\n" + \r
488                 "           </xsl:if>\r\n" + \r
489                 "           <xsl:value-of select=\".\"/>\r\n" + \r
490                 "         </xsl:for-each>\r\n" + \r
491                 "        </pz:metadata>\r\n" + \r
492                 "      </xsl:for-each>\r\n" + \r
493                 "\r\n" + \r
494                 "      <xsl:if test=\"$open_url_resolver\">\r\n" + \r
495                 "        <pz:metadata type=\"open-url\">\r\n" + \r
496                 "            <xsl:call-template name=\"insert-md-openurl\" />\r\n" + \r
497                 "        </pz:metadata>\r\n" + \r
498                 "      </xsl:if>\r\n" + \r
499                 "\r\n" + \r
500                 "      <!--passthrough id data-->\r\n" + \r
501                 "      <xsl:for-each select=\"pz:metadata\">\r\n" + \r
502                 "          <xsl:copy-of select=\".\"/>\r\n" + \r
503                 "      </xsl:for-each>\r\n" + \r
504                 "\r\n" + \r
505                 "    </pz:record>    \r\n" + \r
506                 "  </xsl:template>\r\n" + \r
507                 "\r\n" + \r
508                 "  \r\n" + \r
509                 "  <xsl:template match=\"text()\"/>\r\n" + \r
510                 "\r\n" + \r
511                 "</xsl:stylesheet>";\r
512 \r
513 \r
514 }\r