├── .gitignore ├── .markdownlint.json ├── .nojekyll ├── README.md ├── _sidebar.md ├── acknowledgement.md ├── css ├── prism.min.css └── vue.css ├── extract.md ├── files ├── MARC21slim.xsd ├── MARC21slim2HTML.xsl ├── MARC21slim2MODS3-7.xsl ├── MARC21slim2OAIDC.xsl ├── MARC21slim2RDFDC.xsl ├── MARC21slimUtils.xsl ├── bad_data_value.mrc ├── bad_encoding.mrc ├── bad_hathi_records.mrc ├── bad_leaders_10_11.mrc ├── bad_oversize_field_bad_directory.mrc ├── bibframe-xsl │ ├── ConvSpec-001-007.xsl │ ├── ConvSpec-006,008.xsl │ ├── ConvSpec-010-048.xsl │ ├── ConvSpec-050-088.xsl │ ├── ConvSpec-1XX,7XX,8XX-names.xsl │ ├── ConvSpec-200-247not240-Titles.xsl │ ├── ConvSpec-240andX30-UnifTitle.xsl │ ├── ConvSpec-250-270.xsl │ ├── ConvSpec-3XX.xsl │ ├── ConvSpec-490-510-Links.xsl │ ├── ConvSpec-5XX.xsl │ ├── ConvSpec-600-662.xsl │ ├── ConvSpec-720+740to755.xsl │ ├── ConvSpec-760-788-Links.xsl │ ├── ConvSpec-841-887.xsl │ ├── ConvSpec-880.xsl │ ├── ConvSpec-ControlSubfields.xsl │ ├── ConvSpec-LDR.xsl │ ├── ConvSpec-Process6-Series.xsl │ ├── conf │ │ ├── codeMaps.xml │ │ ├── languageCrosswalk.xml │ │ ├── map880.xml │ │ ├── scriptCrosswalk.xml │ │ └── subjectThesaurus.xml │ ├── marc2bibframe2.xsl │ ├── naco-normalize.xsl │ ├── utils.xsl │ └── variables.xsl ├── chabon-bad-subfields-element.xml ├── chabon-missing-controlfield-tag.xml ├── chabon-missing-datafield-tag.xml ├── chabon-missing-subfield-code.xml ├── chabon-record-type-bad.xml ├── chinese_mangled_multibyte.mrc ├── code4lib.cat.json ├── code4lib.lif ├── code4lib.line ├── code4lib.mrc ├── code4lib.mrk ├── code4lib.seq ├── code4lib.turbo.xml ├── code4lib.xml ├── code4lib.yaz.json ├── cruel-cruel-indicatorless-summerland.xml ├── dict_bibliographic_level.csv ├── dict_languages.csv ├── dict_medium.csv ├── dict_type.csv ├── example.cat.json ├── example.json ├── example.lif ├── example.line ├── example.mrc ├── example.mrk ├── example.seq ├── example.turbo.xml ├── example.xml ├── install-software.sh ├── loc.breaker ├── loc.mrc ├── loc.mrc.xml ├── marc2dc.fix ├── not-well-formed.xml └── pride-and-prejudice-with-many-errors.mrc ├── get_records.md ├── img ├── data-modeling-simplified.png ├── datenmodell.svg ├── gbv-vzg-logo.png ├── opac-hidden-link.png ├── pica1979.png ├── screenshot-picadata.png ├── screenshot-sublime.png └── screenshot-vim.png ├── index.html ├── js ├── docsify-copy-code.js ├── docsify-edit-on-github.js ├── docsify-pagination.min.js ├── docsify-search.js ├── docsify.min.js ├── prism-bash.min.js ├── prism-diff.min.js ├── prism-ini.min.js ├── prism-json.min.js ├── prism-pica.js └── prism-yaml.min.js ├── marc21.md ├── package.json ├── serializations.md ├── statistics.md ├── tools.md ├── transformation.md ├── unicode.md └── validation.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": true, 3 | "line-length": false, 4 | "MD024": false, 5 | "MD033": false, 6 | "MD036": false, 7 | "MD041": false 8 | } 9 | -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/.nojekyll -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Processing MARC 21 2 | 3 | ## ... with open source tools 4 | 5 | "When MARC was created, the Beatles were a hot new group ..." 6 | 7 | In 2002 Roy Tennant declared "[MARC Must Die](https://www.libraryjournal.com/?detailStory=marc-must-die)". Today the [MARC 21](https://www.loc.gov/marc/) format is still the workhorse of library metadata. Even our "Next Generation Library Systems" heavily rely on this standard from the ‘60s. Since we will continue to work with MARC 21 in the coming years, this tutorial will give an introduction to MARC 21 with the following topics: 8 | 9 | - [MARC 21](marc21.md) 10 | - Introduction 11 | - Record elements 12 | - [Serializations](serializations.md) (MARCXML, MARCMaker, MARC-in-JSON, ALEPHSEQ) 13 | - [Tools](tools.md) 14 | - [Get MARC records](get_records.md) 15 | - [Validation](validation.md) of MARC 21 records and common errors 16 | - [Statistical analysis](statistics.md) of MARC 21 data sets 17 | - [Conversion](transformation.md) of MARC 21 records 18 | - [Metadata extraction](extract.md) from MARC 21 records 19 | 20 | This tutorial is intended for systems librarians, metadata librarians and data manager. For most of the tasks we will use command line tools like `yaz-marcdump`, `marcstats`, `marcvalidate` and `catmandu`. A [VirtualBox](https://www.virtualbox.org/) image containing most of the required tools can be downloaded at the [Catmandu](https://librecatproject.wordpress.com/get-catmandu/) project. 21 | 22 | ## Literature 23 | 24 | - Avram (1975): *MARC; its History and implications.* 25 | - Eversberg (1999): *Was sind und was sollen Bibliothekarische Datenformate* [urn:nbn:de:gbv:084-1103231323](https://nbn-resolving.org/urn%3Anbn%3Ade%3Agbv%3A084-11032313237) 26 | - Tennant (2002): *MARC Must Die.* 27 | - Karen Smith-Yoshimura, Catherine Argus, Timothy J. Dickey, Chew Chiat Naun, Lisa Rowlinson de Oritz & Hugh Taylor (2010): *Implications of MARC Tag Usage on Library Metadata Practices* 28 | - Tennant (2013-2018): *MARC Usage in WorldCat* 29 | - Király (2019): *Validating 126 million MARC records* [10.1145/3322905.3322929](https://doi.org/10.1145/3322905.3322929) 30 | - Király (2019): *Measuring Metadata Quality* [10.13140/RG.2.2.33177.77920](https://doi.org/10.13140/RG.2.2.33177.77920) 31 | -------------------------------------------------------------------------------- /_sidebar.md: -------------------------------------------------------------------------------- 1 | * [Home](README.md) 2 | * [MARC 21](marc21.md) 3 | * [Serializations](serializations.md) 4 | * [Tools](tools.md) 5 | * [Get records](get_records.md) 6 | * [Validation](validation.md) 7 | * [Statistics](statistics.md) 8 | * [Unicode](unicode.md) 9 | * [Transformation](transformation.md) 10 | * [Extract](extract.md) 11 | * [Acknowledgement](acknowledgement.md) -------------------------------------------------------------------------------- /acknowledgement.md: -------------------------------------------------------------------------------- 1 | # About this manual 2 | 3 | The source code of this manual is written in Markdown syntax and maintained in a git repository. Comments, corrections and changes can be submitted [directly to GitHub](https://github.com/jorol/processing). For local development, [docsify](https://docsify.js.org/) is required: 4 | 5 | ```bash 6 | $ git clone git@github.com:jorol/processing-marc.git && cd processing-marc 7 | $ npm i 8 | $ npm run serve 9 | ``` 10 | 11 | ## Acknowledgement 12 | 13 | The manual "[Einführung in die Verarbeitung von PICA-Daten](https://pro4bib.github.io/pica/#/)" by [Jakob Voß](https://github.com/nichtich) was used as a template for this tutorial. 14 | 15 | The technical infrastructure for providing this manual was copied from [Felix Lohmeier](https://felixlohmeier.de/), who, by the way, also provides other interesting introductions to data processing topics for library and cultural institutions. 16 | 17 | Thanks to [Roy Tennant](http://roytennant.com/speaker.html) and [Péter Király](https://pkiraly.github.io/) for their research on MARC. 18 | 19 | Special thanks to all open source developers and the [Catmandu](https://librecat.org/) community for providing the tools. 20 | 21 | ## License 22 | 23 | *Johann Rolschewski, 2020- ([see commit history](https://github.com/jorol/processing-marc/commits/master))* 24 | 25 | This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/). 26 | 27 | [![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)](http://creativecommons.org/licenses/by/4.0/) 28 | -------------------------------------------------------------------------------- /css/prism.min.css: -------------------------------------------------------------------------------- 1 | code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} 2 | /*# sourceMappingURL=prism.min.css.map */ -------------------------------------------------------------------------------- /extract.md: -------------------------------------------------------------------------------- 1 | # Extract data from MARC records 2 | 3 | ## ... with xmllint 4 | 5 | First check if a [XML namespace](https://www.w3.org/TR/xml-names/) is declared in the document: 6 | 7 | ```terminal 8 | $ head loc.mrc.xml 9 | 10 | 11 | 01227cam a22002894a 4500 12 | 12360325 13 | 20070126075126.0 14 | 010327s2001 nyua 001 0 eng 15 | 16 | 7 17 | cbc 18 | orignew 19 | ``` 20 | 21 | If a namespace is set use the "local" XML element name in the [XPATH](https://www.w3.org/TR/2017/REC-xpath-31-20170321/) expression: 22 | 23 | ``` 24 | $ xmllint --xpath '//*[local-name()="controlfield"]/@tag' loc.mrc.xml 25 | ``` 26 | 27 | Extract all tags and count them: 28 | 29 | ```terminal 30 | $ xmllint --xpath '//@tag' loc.mrc.xml | sort | uniq -c 31 | ``` 32 | 33 | Extract all IDs from MARC 001: 34 | 35 | ```terminal 36 | $ xmllint --xpath '//*[local-name()="controlfield"][@tag="001"]/text()' loc.mrc.xml 37 | ``` 38 | 39 | Extract all subfields from MARC 245 fields: 40 | 41 | ```terminal 42 | $ xmllint --xpath '//*[local-name()="datafield"][@tag="245"]' loc.mrc.xml 43 | ``` 44 | 45 | Extract subfield "a" from MARC 245 fields: 46 | 47 | ```terminal 48 | $ xmllint --xpath '//*[local-name()="datafield"][@tag="245"]/*[local-name()="subfield"][@code="a"]/' loc.mrc.xml 49 | ``` 50 | 51 | Extract content from subfield "a" from MARC 245 fields: 52 | 53 | ```terminal 54 | $ xmllint --xpath '//*[local-name()="datafield"][@tag="245"]/*[local-name()="subfield"][@code="a"]/text()' loc.mrc.xml 55 | ``` 56 | 57 | Extraxt all ISBNs: 58 | 59 | ```terminal 60 | $ xmllint --xpath '//*[local-name()="datafield"][@tag="020"]/*[local-name()="subfield"][@code="a"]/text()' loc.mrc.xml 61 | ``` 62 | 63 | Extract all DDC numbers: 64 | 65 | ```terminal 66 | $ xmllint --xpath '//*[local-name()="datafield"][@tag="082"]/*[local-name()="subfield"][@code="a"]/text()' loc.mrc.xml 67 | ``` 68 | 69 | ## ... with Catmandu 70 | 71 | Catmandu uses a [domain specific language](https://en.wikipedia.org/wiki/Domain-specific_language) (DSL) called "fix" to extract, map and tranform data. Several "fixes" for library specifc data formats like [MARC](https://metacpan.org/pod/Catmandu::MARC) and [PICA](https://metacpan.org/pod/Catmandu::PICA) are available. Most common "fixes" are documented on a [cheat sheet](https://librecat.org/assets/catmandu_cheat_sheet.pdf). "Fixes" can be used as command-line options or stored in a "fix" file: 72 | 73 | ```terminal 74 | $ catmandu convert MARC to CSV --fix 'marc_map(001,id); retain_field(id)' < loc.mrc 75 | $ catmandu convert MARC to YAML --fix marc2dc.fix < loc.mrc 76 | ``` 77 | 78 | ### marc_map 79 | 80 | With [`marc_map`](https://metacpan.org/pod/Catmandu::Fix::marc_map) you can extract (sub)fields from MARC records and map them to your own data model: 81 | 82 | ``` 83 | marc_map(001,dc_identifier) 84 | # {"dc_identifier":"12360325"} 85 | ``` 86 | 87 | ### Extract part of field 88 | 89 | MARC uses several "fixed-length" fields, where data elements are positionally defined. E.g. if you want to extract the language code from MARC 008 specify the positions with `/35-37`: 90 | 91 | ``` 92 | marc_map(008/35-37,dc_language) 93 | # {"dc_language":"eng"} 94 | ``` 95 | 96 | ### Extract fields with specific indicators 97 | 98 | If you want to extract fields with certain indicators specify them within sqare brackes `[1,4]` 99 | 100 | ``` 101 | marc_map('246[1,4]',marc_varyingFormOfTitle) 102 | # {"marc_varyingFormOfTitle":"Games, diversions & Perl culture"} 103 | ``` 104 | 105 | 106 | ### Extract subfields 107 | 108 | To extract certain subfields from a MARC data field use the subfield codes. By default several subfields will be joined to one string. Use option `join` to join them with another string. With option `split` you can split the subfields to a list. Use option `pluck` if you want to extract the subfields in a certain order. 109 | 110 | ``` 111 | marc_map(245ab,dc_title,join:' ') 112 | # {"dc_title":"Perl : the complete reference /"} 113 | marc_map(245ab,dc_title,split:1) 114 | # {"dc_title":["Perl :","the complete reference /"]} 115 | marc_map(245ba,dc_title,split:1,pluck:1) 116 | # {"dc_title":["the complete reference /","Perl :"]} 117 | ``` 118 | 119 | ### Extract repeatable fields 120 | 121 | MARC data fields could be repeatable. Use option `split` to create a list from all fields. 122 | 123 | ``` 124 | marc_map(650a,dc_subject,split:1) 125 | # {"dc_subject":["Data mining.","Text processing (Computer science)","Perl (Computer program language)"]} 126 | ``` 127 | 128 | ### Extract repeatable subfields 129 | 130 | MARC subfields could be repeatable within a MARC data field. Use option `split:1` to create a list from all fields. To create a list for all subfields within one data field use option `nested_arrays:1` which will return a "list of lists" of subfields, one list for each data field. 131 | 132 | ``` 133 | marc_map(655ay,marc_indexTermGenre,split:1) 134 | # {"marc_indexTermGenre":["Portrait photographs","1910-1920.","Photographic prints","1910-1920."]} 135 | marc_map(655ay,marc_indexTermGenre,split:1,nested_arrays:1) 136 | # {"marc_indexTermGenre":[["Portrait photographs","1910-1920."],["Photographic prints","1910-1920."]]} 137 | ``` 138 | 139 | ### Extract subfields by value 140 | 141 | To extract a subfield only if another subfield in the same data field has a certain value use a [loop](https://metacpan.org/pod/Catmandu::Fix::Bind::marc_each) with a [condition](https://metacpan.org/pod/Catmandu::Fix::Condition). 142 | 143 | ``` 144 | =856 4\$uhttp://journal.code4lib.org/$xVerlag$zkostenfrei 145 | =856 4\$uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107$xEZB 146 | ``` 147 | 148 | ``` 149 | do marc_each() 150 | if marc_match(856x,EZB) 151 | marc_map(856u,ezb_uri) 152 | end 153 | end 154 | # {"ezb_uri":"http://www.bibliothek.uni-regensburg.de/ezeit/?2415107"} 155 | ``` 156 | 157 | ### Conditions 158 | 159 | Use conditions [`marc_has`](https://metacpan.org/pod/Catmandu::Fix::Condition::marc_has), [`marc_has_many`](https://metacpan.org/pod/Catmandu::Fix::Condition::marc_has_many) or [`marc_match`](https://metacpan.org/pod/Catmandu::Fix::Condition::marc_match) to check if an record has certain fields or match certain conditions. 160 | 161 | ``` 162 | set_array(errors) 163 | 164 | # Check if a 245 field is present 165 | unless marc_has('245') 166 | set_field(errors.$append,"no 245 field") 167 | end 168 | 169 | # Check if there is more than one 245 field 170 | if marc_has_many('245') 171 | set_field(errors.$append,"more than one 245 field?") 172 | end 173 | 174 | # Check if in 008 position 7 to 10 contains a 175 | # 4 digit number ('\d' means digit) 176 | unless marc_match('008/07-10','\d{4}') 177 | set_field(errors.$append,"no 4-digit year in 008 position 7->10") 178 | end 179 | ``` 180 | 181 | ### Add fields to a record 182 | 183 | You can add fields to MARC records with [`marc_add`](https://metacpan.org/pod/Catmandu::Fix::marc_add). 184 | 185 | ``` 186 | marc_add(999,a,my,b,local,c,field) 187 | marc_add(900,a,$.my.field) 188 | ``` 189 | 190 | ### Append values to (sub)fields 191 | 192 | Use [`marc_append`](https://metacpan.org/pod/Catmandu::Fix::marc_append) to append values to a (sub)field 193 | 194 | ``` 195 | marc_append(001,'-X') 196 | marc_append(100a,' [author]') 197 | ``` 198 | 199 | ### Assign a value to (sub)fields 200 | 201 | Assign a new value to a MARC field with [`marc_set`](https://metacpan.org/pod/Catmandu::Fix::marc_set). 202 | 203 | ``` 204 | marc_set(001,123456789) 205 | marc_set(245a,'Perl - battle tested.') 206 | ``` 207 | 208 | ### Remove (sub)fields 209 | 210 | Use [`marc_remove`](https://metacpan.org/pod/Catmandu::Fix::marc_remove) to remove (sub)fields from MARC records. 211 | 212 | ``` 213 | marc_remove(991) 214 | marc_remove(9..) 215 | marc_remove(0359) 216 | ``` 217 | 218 | ### Replace strings in (sub)fields 219 | 220 | Use [`marc_replace_all`](https://metacpan.org/pod/Catmandu::Fix::marc_replace_all) to replace a string in MARC (sub)fields. 221 | 222 | ``` 223 | marc_replace_all(001,1,X) 224 | marc_replace_all(245a,Perl,"Perl [programming language]") 225 | ``` 226 | 227 | ### Filter MARC records 228 | 229 | You can filter MARC records from a dataset with [`reject`](https://metacpan.org/pod/Catmandu::Fix::reject) or `select`. 230 | 231 | ``` 232 | reject marc_has_many(245) 233 | select marc_match(245a,Perl) 234 | ``` 235 | 236 | ### Validate MARC records 237 | 238 | You can [`validate`](https://metacpan.org/pod/Catmandu::Fix::validate) MARC records and collect the error messages or filter [`valid`](https://metacpan.org/pod/Catmandu::Fix::Condition::valid) records. 239 | 240 | ``` 241 | validate(.,MARC,error_field:errors) 242 | select valid(.,MARC) 243 | ``` 244 | 245 | ### Dictionaries 246 | 247 | MARC uses codes for [languages](https://www.loc.gov/marc/languages/language_code.html) and [countries](https://www.loc.gov/marc/countries/countries_code.html). You can build dictionaries based on these list and [lookup](https://metacpan.org/pod/Catmandu::Fix::lookup) names for these codes. 248 | 249 | ``` 250 | $ less languages.csv 251 | eng,English 252 | enm,English, Middle (1100-1500) 253 | epo,Esperanto 254 | esk,Eskimo languages 255 | est,Estonian 256 | ... 257 | ``` 258 | ``` 259 | # { "dc_language": "eng" } 260 | lookup(dc_language,languages.csv) 261 | lookup(dc_language,languages.csv,default:English) 262 | lookup(dc_language,languages.csv,delete:1) 263 | # { "dc_language": "English" } 264 | ``` 265 | 266 | ### Normalize ISBNs and ISSNs 267 | 268 | Use [`issn`](https://metacpan.org/pod/Catmandu::Fix::issn), [`isbn10`](https://metacpan.org/pod/Catmandu::Fix::isbn10) or [`isbn13`](https://metacpan.org/pod/Catmandu::Fix::isbn13) to normalize international identifier. 269 | 270 | ``` 271 | # { "issn" : "1553667x" } 272 | issn(issn) 273 | # { "issn" : "1553-667X" } 274 | 275 | # { "isbn" : "1565922573" } 276 | isbn10(isbn) 277 | # {"isbn" : "1-56592-257-3" } 278 | isbn13(isbn) 279 | # { "isbn" : "978-1-56592-257-0" } 280 | ``` 281 | 282 | ## Links 283 | 284 | Cheat sheet: http://librecat.org/assets/catmandu_cheat_sheet.pdf 285 | 286 | MARC mapping rules: https://github.com/LibreCat/Catmandu-MARC/wiki/Mapping-rules 287 | 288 | MARC tutorial: https://metacpan.org/pod/distribution/Catmandu-MARC/lib/Catmandu/MARC/Tutorial.pod 289 | 290 | Example "fix" http://librecat.org/Catmandu/#example-fix-script 291 | -------------------------------------------------------------------------------- /files/MARC21slim.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | MARCXML: The MARC 21 XML Schema 6 | Prepared by Corey Keith 7 | 8 | May 21, 2002 - Version 1.0 - Initial Release 9 | 10 | ********************************************** 11 | Changes. 12 | 13 | August 4, 2003 - Version 1.1 - 14 | Removed import of xml namespace and the use of xml:space="preserve" attributes on the leader and controlfields. 15 | Whitespace preservation in these subfields is accomplished by the use of xsd:whiteSpace value="preserve" 16 | 17 | May 21, 2009 - Version 1.2 - 18 | in subfieldcodeDataType the pattern 19 | "[\da-z!"#$%&'()*+,-./:;<=>?{}_^`~\[\]\\]{1}" 20 | changed to: 21 | "[\dA-Za-z!"#$%&'()*+,-./:;<=>?{}_^`~\[\]\\]{1}" 22 | i.e "A-Z" added after "[\d" before "a-z" to allow upper case. This change is for consistency with the documentation. 23 | 24 | ************************************************************ 25 | This schema supports XML markup of MARC21 records as specified in the MARC documentation (see www.loc.gov). It allows tags with 26 | alphabetics and subfield codes that are symbols, neither of which are as yet used in the MARC 21 communications formats, but are 27 | allowed by MARC 21 for local data. The schema accommodates all types of MARC 21 records: bibliographic, holdings, bibliographic 28 | with embedded holdings, authority, classification, and community information. 29 | 30 | 31 | 32 | 33 | record is a top level container element for all of the field elements which compose the record 34 | 35 | 36 | 37 | 38 | collection is a top level container element for 0 or many records 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 | MARC21 Leader, 24 bytes 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | MARC21 Fields 001-009 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | MARC21 Variable Data Fields 010-999 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 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /files/MARC21slim2HTML.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 20 | 21 | 22 |
15 | 000 16 | 18 | 19 |
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 | -------------------------------------------------------------------------------- /files/MARC21slim2OAIDC.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 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 | abfghk 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | collection 50 | 51 | 52 | 53 | 54 | manuscript 55 | 56 | 57 | text 58 | cartographic 59 | notated music 60 | sound recording 61 | still image 62 | moving image 63 | three dimensional object 64 | software, multimedia 65 | mixed material 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | ab 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 | abcdq 112 | 113 | 114 | 115 | 116 | 117 | 118 | abcdq 119 | 120 | 121 | 122 | 123 | 124 | 125 | abcdq 126 | 127 | 128 | 129 | 130 | 131 | 132 | abcdq 133 | 134 | 135 | 136 | 137 | 138 | 139 | abcdq 140 | 141 | 142 | 143 | 144 | 145 | 146 | abcdq 147 | 148 | 149 | 150 | 151 | 152 | 153 | abcd 154 | 155 | 156 | 157 | 158 | 159 | 160 | abcdu 161 | 162 | 163 | 164 | 165 | 166 | 167 | ot 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | URN:ISBN: 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 201 | -------------------------------------------------------------------------------- /files/MARC21slim2RDFDC.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | abfghk 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | collection 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | manuscript 49 | 50 | 51 | 52 | text 53 | cartographic 54 | notated music 55 | sound recording 56 | still image 57 | moving image 58 | three dimensional object 59 | software, multimedia 60 | mixed material 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | ab 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 93 | 94 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | abcdq 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | abcdq 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | abcdq 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | abcdq 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | abcdq 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | abcdq 156 | 157 | 158 | 159 | 160 | 161 | 162 | abcdefgh 163 | 164 | 165 | 166 | 167 | 168 | 169 | adcdfgh 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | abcdu 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | ot 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | URN:ISBN: 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | -------------------------------------------------------------------------------- /files/MARC21slimUtils.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 11 | 12 | 13 | 14 | ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 15 | 16 | 17 | 18 | !'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ 19 | 20 | 21 | 0123456789ABCDEF 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 | abcdefghijklmnopqrstuvwxyz 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 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | Warning: string contains a character 159 | that is out of range! Substituting "?". 160 | 63 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | -------------------------------------------------------------------------------- /files/bad_data_value.mrc: -------------------------------------------------------------------------------- 1 | 01031nas a2200337 c 4500001001000000003000700010005001700017007001500034008004100049016002200090016002200112022001400134035002500148035002100173040002800194041000800222082002400230084002000254245002700274246000900301264001800310300002100328336002600349337003200375338003700407362001300444363001900457655010000476856005300576856006400629987874829DE-10120200306093601.0cr||||||||||||080311c20079999|||u||p|o ||| 0||||1eng c7 2DE-101a9878748297 2DE-600a2415107-5 a1940-5758 a(DE-599)ZDB2415107-5 a(OCoLC)502377032 a8999bgercDE-101d0023 aeng74a020qDE-600222sdnb aBBIqDE-232fid00aCode4Lib journalbC4LJ3 aC4LJ31a[S.l.]c2007- aOnline-Ressource aTextbtxt2rdacontent aComputermedienbc2rdamedia aOnlineRessourcebcr2rdacarrier0 a1.2007 -0181.1\xa1i2007 70(DE-588)4067488-50https://d-nb.info/gnd/4067488-50(DE-101)040674886aZeitschrift2gnd-content4 uhttp://journal.code4lib.org/xVerlagzkostenfrei4 uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107xEZB -------------------------------------------------------------------------------- /files/bad_encoding.mrc: -------------------------------------------------------------------------------- 1 | 01031nas 2200337 c 4500001001000000003000700010005001700017007001500034008004100049016002200090016002200112022001400134035002500148035002100173040002800194041000800222082002400230084002000254245002700274246000900301264001800310300002100328336002600349337003200375338003700407362001300444363001900457655010000476856005300576856006400629987874829DE-10120200306093601.0cr||||||||||||080311c20079999|||u||p|o ||| 0||||1eng c7 2DE-101a9878748297 2DE-600a2415107-5 a1940-5758 a(DE-599)ZDB2415107-5 a(OCoLC)502377032 a8999bgercDE-101d0023 aeng74a020qDE-600222sdnb aBBIqDE-232fid00aCode4Lib journalbC4LJ3 aC4LJ31a[S.l.]c2007- aOnline-Ressource aTextbtxt2rdacontent aComputermedienbc2rdamedia aOnline-Ressourcebcr2rdacarrier0 a1.2007 -0181.1\xa1i2007 70(DE-588)4067488-50https://d-nb.info/gnd/4067488-50(DE-101)040674886aZeitschrift2gnd-content4 uhttp://journal.code4lib.org/xVerlagzkoßtenfrei4 uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107xEZB -------------------------------------------------------------------------------- /files/bad_leaders_10_11.mrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/files/bad_leaders_10_11.mrc -------------------------------------------------------------------------------- /files/bibframe-xsl/ConvSpec-490-510-Links.xsl: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 0 22 | 23 | 24 | 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 | bflc:indexedIn 54 | bf:references 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 | Coverage 82 | Location 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 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | = 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | = 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | =:,;/ 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | =:,;/ 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /files/bibframe-xsl/ConvSpec-720+740to755.xsl: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 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 | madsrdf:Country 53 | madsrdf:State 54 | madsrdf:County 55 | madsrdf:City 56 | madsrdf:CitySection 57 | madsrdf:Region 58 | madsrdf:ExtraterrestrialArea 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 | relationship 92 | #Work 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | #Work 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 | bflc:MachineModel 142 | bflc:ProgrammingLanguage 143 | bflc:OperatingSystem 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | -------------------------------------------------------------------------------- /files/bibframe-xsl/ConvSpec-880.xsl: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 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 | -------------------------------------------------------------------------------- /files/bibframe-xsl/conf/map880.xml: -------------------------------------------------------------------------------- 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 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /files/bibframe-xsl/conf/subjectThesaurus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | lcsh 10 | http://id.loc.gov/authorities/subjects 11 | http://id.loc.gov/authorities/subjects 12 | 13 | 14 | lcshac 15 | http://id.loc.gov/authorities/subjects 16 | http://id.loc.gov/authorities/childrensSubjects 17 | http://id.loc.gov/authorities/childrensSubjects 18 | 19 | 20 | mesh 21 | http://id.loc.gov/vocabulary/subjectSchemes/mesh 22 | 23 | 24 | nal 25 | http://id.loc.gov/vocabulary/subjectSchemes/nal 26 | 27 | 28 | cash 29 | http://id.loc.gov/vocabulary/subjectSchemes/cash 30 | 31 | 32 | rvm 33 | http://id.loc.gov/vocabulary/subjectSchemes/rvm 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /files/bibframe-xsl/variables.xsl: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | v1.7.0-SNAPSHOT 11 | 12 | 13 | http://id.loc.gov/ontologies/bibframe/ 14 | http://id.loc.gov/ontologies/bflc/ 15 | http://id.loc.gov/datatypes/ 16 | http://www.loc.gov/mads/rdf/v1# 17 | http://www.w3.org/2001/XMLSchema# 18 | 19 | 20 | http://id.loc.gov/vocabulary/carriers/ 21 | http://id.loc.gov/vocabulary/classSchemes/ 22 | http://id.loc.gov/vocabulary/contentTypes/ 23 | http://id.loc.gov/vocabulary/countries/ 24 | http://id.loc.gov/authorities/demographicTerms/ 25 | http://id.loc.gov/vocabulary/descriptionConventions/ 26 | http://id.loc.gov/authorities/genreForms/ 27 | http://id.loc.gov/vocabulary/geographicAreas/ 28 | http://id.loc.gov/vocabulary/graphicMaterials/ 29 | http://id.loc.gov/vocabulary/issuance/ 30 | http://id.loc.gov/vocabulary/languages/ 31 | http://id.loc.gov/vocabulary/marcgt/ 32 | http://id.loc.gov/vocabulary/mcolor/ 33 | http://id.loc.gov/vocabulary/mediaTypes/ 34 | http://id.loc.gov/vocabulary/mmaterial/ 35 | http://id.loc.gov/vocabulary/mplayback/ 36 | http://id.loc.gov/vocabulary/mpolarity/ 37 | http://id.loc.gov/vocabulary/marcauthen/ 38 | http://id.loc.gov/vocabulary/marcmuscomp/ 39 | http://id.loc.gov/vocabulary/organizations/ 40 | http://id.loc.gov/vocabulary/relators/ 41 | http://id.loc.gov/vocabulary/mproduction/ 42 | http://id.loc.gov/vocabulary/msoundcontent/ 43 | http://id.loc.gov/vocabulary/mrecmedium/ 44 | http://id.loc.gov/vocabulary/mgeneration/ 45 | http://id.loc.gov/vocabulary/mpresformat/ 46 | http://id.loc.gov/vocabulary/maspect/ 47 | http://id.loc.gov/vocabulary/mrectype/ 48 | http://id.loc.gov/vocabulary/mspecplayback/ 49 | http://id.loc.gov/vocabulary/mgroove/ 50 | http://id.loc.gov/vocabulary/mvidformat/ 51 | http://id.loc.gov/vocabulary/mbroadstd/ 52 | http://id.loc.gov/vocabulary/mfiletype/ 53 | http://id.loc.gov/vocabulary/mregencoding/ 54 | http://id.loc.gov/vocabulary/mmusicformat/ 55 | http://id.loc.gov/vocabulary/genreFormSchemes/ 56 | http://id.loc.gov/vocabulary/subjectSchemes/ 57 | http://id.loc.gov/vocabulary/nationalbibschemes/ 58 | http://id.loc.gov/vocabulary/fingerprintschemes/ 59 | http://id.loc.gov/vocabulary/languageschemes/ 60 | http://id.loc.gov/vocabulary/musiccompschemes/ 61 | http://id.loc.gov/vocabulary/mgovtpubtype/ 62 | http://id.loc.gov/vocabulary/mencformat/ 63 | http://id.loc.gov/vocabulary/nameTitleSchemes/ 64 | http://id.loc.gov/vocabulary/musiccodeschemes/ 65 | 66 | 67 | abcdefghijklmnopqrstuvwxyz 68 | ABCDEFGHIJKLMNOPQRSTUVWXYZ 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /files/chabon-bad-subfields-element.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00759cam a2200229 a 4500 4 | 11939876 5 | 20041229190604.0 6 | 000313s2000 nyu 000 1 eng 7 | 8 | 0679450041 (acid-free paper) 9 | 10 | 11 | DLC 12 | DLC 13 | DLC 14 | 15 | 16 | Chabon, Michael. 17 | 18 | 19 | The amazing adventures of Kavalier and Clay : 20 | a novel / 21 | Michael Chabon. 22 | 23 | 24 | New York : 25 | Random House, 26 | c2000. 27 | 28 | 29 | 639 p. ; 30 | 25 cm. 31 | 32 | 33 | Comic books, strips, etc. 34 | Authorship 35 | Fiction. 36 | 37 | 38 | Heroes in mass media 39 | Fiction. 40 | 41 | 42 | Czech Americans 43 | Fiction. 44 | 45 | 46 | New York (N.Y.) 47 | Fiction. 48 | 49 | 50 | Young men 51 | Fiction. 52 | 53 | 54 | Cartoonists 55 | Fiction. 56 | 57 | 58 | Humorous stories. 59 | gsafd 60 | 61 | 62 | Bildungsromane. 63 | gsafd 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /files/chabon-missing-controlfield-tag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00759cam a2200229 a 4500 4 | 11939876 5 | 20041229190604.0 6 | 000313s2000 nyu 000 1 eng 7 | 8 | 0679450041 (acid-free paper) 9 | 10 | 11 | DLC 12 | DLC 13 | DLC 14 | 15 | 16 | Chabon, Michael. 17 | 18 | 19 | The amazing adventures of Kavalier and Clay : 20 | a novel / 21 | Michael Chabon. 22 | 23 | 24 | New York : 25 | Random House, 26 | c2000. 27 | 28 | 29 | 639 p. ; 30 | 25 cm. 31 | 32 | 33 | Comic books, strips, etc. 34 | Authorship 35 | Fiction. 36 | 37 | 38 | Heroes in mass media 39 | Fiction. 40 | 41 | 42 | Czech Americans 43 | Fiction. 44 | 45 | 46 | New York (N.Y.) 47 | Fiction. 48 | 49 | 50 | Young men 51 | Fiction. 52 | 53 | 54 | Cartoonists 55 | Fiction. 56 | 57 | 58 | Humorous stories. 59 | gsafd 60 | 61 | 62 | Bildungsromane. 63 | gsafd 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /files/chabon-missing-datafield-tag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00759cam a2200229 a 4500 4 | 11939876 5 | 20041229190604.0 6 | 000313s2000 nyu 000 1 eng 7 | 8 | 0679450041 (acid-free paper) 9 | 10 | 11 | DLC 12 | DLC 13 | DLC 14 | 15 | 16 | Chabon, Michael. 17 | 18 | 19 | The amazing adventures of Kavalier and Clay : 20 | a novel / 21 | Michael Chabon. 22 | 23 | 24 | New York : 25 | Random House, 26 | c2000. 27 | 28 | 29 | 639 p. ; 30 | 25 cm. 31 | 32 | 33 | Comic books, strips, etc. 34 | Authorship 35 | Fiction. 36 | 37 | 38 | Heroes in mass media 39 | Fiction. 40 | 41 | 42 | Czech Americans 43 | Fiction. 44 | 45 | 46 | New York (N.Y.) 47 | Fiction. 48 | 49 | 50 | Young men 51 | Fiction. 52 | 53 | 54 | Cartoonists 55 | Fiction. 56 | 57 | 58 | Humorous stories. 59 | gsafd 60 | 61 | 62 | Bildungsromane. 63 | gsafd 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /files/chabon-missing-subfield-code.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00759cam a2200229 a 4500 4 | 11939876 5 | 20041229190604.0 6 | 000313s2000 nyu 000 1 eng 7 | 8 | 0679450041 (acid-free paper) 9 | 10 | 11 | DLC 12 | DLC 13 | DLC 14 | 15 | 16 | Chabon, Michael. 17 | 18 | 19 | The amazing adventures of Kavalier and Clay : 20 | a novel / 21 | Michael Chabon. 22 | 23 | 24 | New York : 25 | Random House, 26 | c2000. 27 | 28 | 29 | 639 p. ; 30 | 25 cm. 31 | 32 | 33 | Comic books, strips, etc. 34 | Authorship 35 | Fiction. 36 | 37 | 38 | Heroes in mass media 39 | Fiction. 40 | 41 | 42 | Czech Americans 43 | Fiction. 44 | 45 | 46 | New York (N.Y.) 47 | Fiction. 48 | 49 | 50 | Young men 51 | Fiction. 52 | 53 | 54 | Cartoonists 55 | Fiction. 56 | 57 | 58 | Humorous stories. 59 | gsafd 60 | 61 | 62 | Bildungsromane. 63 | gsafd 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /files/chabon-record-type-bad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00759cam a2200229 a 4500 4 | 11939876 5 | 20041229190604.0 6 | 000313s2000 nyu 000 1 eng 7 | 8 | 0679450041 (acid-free paper) 9 | 10 | 11 | DLC 12 | DLC 13 | DLC 14 | 15 | 16 | Chabon, Michael. 17 | 18 | 19 | The amazing adventures of Kavalier and Clay : 20 | a novel / 21 | Michael Chabon. 22 | 23 | 24 | New York : 25 | Random House, 26 | c2000. 27 | 28 | 29 | 639 p. ; 30 | 25 cm. 31 | 32 | 33 | Comic books, strips, etc. 34 | Authorship 35 | Fiction. 36 | 37 | 38 | Heroes in mass media 39 | Fiction. 40 | 41 | 42 | Czech Americans 43 | Fiction. 44 | 45 | 46 | New York (N.Y.) 47 | Fiction. 48 | 49 | 50 | Young men 51 | Fiction. 52 | 53 | 54 | Cartoonists 55 | Fiction. 56 | 57 | 58 | Humorous stories. 59 | gsafd 60 | 61 | 62 | Bildungsromane. 63 | gsafd 64 | 65 | 66 | 67 | 00714cam a2200205 a 4500 68 | 12883376 69 | 20030616111422.0 70 | 020805s2002 nyu j 000 1 eng 71 | 72 | 0786808772 73 | 74 | 75 | 0786816155 (pbk.) 76 | 77 | 78 | DLC 79 | DLC 80 | DLC 81 | 82 | 83 | Chabon, Michael. 84 | 85 | 86 | Summerland / 87 | Michael Chabon. 88 | 89 | 90 | 1st ed. 91 | 92 | 93 | New York : 94 | Miramax Books/Hyperion Books for Children, 95 | c2002. 96 | 97 | 98 | 500 p. ; 99 | 22 cm. 100 | 101 | 102 | Ethan Feld, the worst baseball player in the history of the game, finds himself recruited by a 100-year-old scout to help a band of fairies triumph over an ancient enemy. 103 | 104 | 105 | Fantasy. 106 | 107 | 108 | Baseball 109 | Fiction. 110 | 111 | 112 | Magic 113 | Fiction. 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /files/code4lib.cat.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "987874829", 3 | "record": [ 4 | [ 5 | "LDR", 6 | " ", 7 | " ", 8 | "_", 9 | "01031nas a2200337 c 4500" 10 | ], 11 | [ 12 | "001", 13 | " ", 14 | " ", 15 | "_", 16 | "987874829" 17 | ], 18 | [ 19 | "003", 20 | " ", 21 | " ", 22 | "_", 23 | "DE-101" 24 | ], 25 | [ 26 | "005", 27 | " ", 28 | " ", 29 | "_", 30 | "20200306093601.0" 31 | ], 32 | [ 33 | "007", 34 | " ", 35 | " ", 36 | "_", 37 | "cr||||||||||||" 38 | ], 39 | [ 40 | "008", 41 | " ", 42 | " ", 43 | "_", 44 | "080311c20079999|||u||p|o ||| 0||||1eng c" 45 | ], 46 | [ 47 | "016", 48 | "7", 49 | " ", 50 | "2", 51 | "DE-101", 52 | "a", 53 | "987874829" 54 | ], 55 | [ 56 | "016", 57 | "7", 58 | " ", 59 | "2", 60 | "DE-600", 61 | "a", 62 | "2415107-5" 63 | ], 64 | [ 65 | "022", 66 | " ", 67 | " ", 68 | "a", 69 | "1940-5758" 70 | ], 71 | [ 72 | "035", 73 | " ", 74 | " ", 75 | "a", 76 | "(DE-599)ZDB2415107-5" 77 | ], 78 | [ 79 | "035", 80 | " ", 81 | " ", 82 | "a", 83 | "(OCoLC)502377032" 84 | ], 85 | [ 86 | "040", 87 | " ", 88 | " ", 89 | "a", 90 | "8999", 91 | "b", 92 | "ger", 93 | "c", 94 | "DE-101", 95 | "d", 96 | "0023" 97 | ], 98 | [ 99 | "041", 100 | " ", 101 | " ", 102 | "a", 103 | "eng" 104 | ], 105 | [ 106 | "082", 107 | "7", 108 | "4", 109 | "a", 110 | "020", 111 | "q", 112 | "DE-600", 113 | "2", 114 | "22sdnb" 115 | ], 116 | [ 117 | "084", 118 | " ", 119 | " ", 120 | "a", 121 | "BBI", 122 | "q", 123 | "DE-23", 124 | "2", 125 | "fid" 126 | ], 127 | [ 128 | "245", 129 | "0", 130 | "0", 131 | "a", 132 | "Code4Lib journal", 133 | "b", 134 | "C4LJ" 135 | ], 136 | [ 137 | "246", 138 | "3", 139 | " ", 140 | "a", 141 | "C4LJ" 142 | ], 143 | [ 144 | "264", 145 | "3", 146 | "1", 147 | "a", 148 | "[S.l.]", 149 | "c", 150 | "2007-" 151 | ], 152 | [ 153 | "300", 154 | " ", 155 | " ", 156 | "a", 157 | "Online-Ressource" 158 | ], 159 | [ 160 | "336", 161 | " ", 162 | " ", 163 | "a", 164 | "Text", 165 | "b", 166 | "txt", 167 | "2", 168 | "rdacontent" 169 | ], 170 | [ 171 | "337", 172 | " ", 173 | " ", 174 | "a", 175 | "Computermedien", 176 | "b", 177 | "c", 178 | "2", 179 | "rdamedia" 180 | ], 181 | [ 182 | "338", 183 | " ", 184 | " ", 185 | "a", 186 | "Online-Ressource", 187 | "b", 188 | "cr", 189 | "2", 190 | "rdacarrier" 191 | ], 192 | [ 193 | "362", 194 | "0", 195 | " ", 196 | "a", 197 | "1.2007 -" 198 | ], 199 | [ 200 | "363", 201 | "0", 202 | "1", 203 | "8", 204 | "1.1\\x", 205 | "a", 206 | "1", 207 | "i", 208 | "2007" 209 | ], 210 | [ 211 | "655", 212 | " ", 213 | "7", 214 | "0", 215 | "(DE-588)4067488-5", 216 | "0", 217 | "https://d-nb.info/gnd/4067488-5", 218 | "0", 219 | "(DE-101)040674886", 220 | "a", 221 | "Zeitschrift", 222 | "2", 223 | "gnd-content" 224 | ], 225 | [ 226 | "856", 227 | "4", 228 | " ", 229 | "u", 230 | "http://journal.code4lib.org/", 231 | "x", 232 | "Verlag", 233 | "z", 234 | "kostenfrei" 235 | ], 236 | [ 237 | "856", 238 | "4", 239 | " ", 240 | "u", 241 | "http://www.bibliothek.uni-regensburg.de/ezeit/?2415107", 242 | "x", 243 | "EZB" 244 | ] 245 | ] 246 | } -------------------------------------------------------------------------------- /files/code4lib.lif: -------------------------------------------------------------------------------- 1 | LDR01031nas a2200337 c 4500^ 2 | 001987874829^ 3 | 003DE-101^ 4 | 00520200306093601.0^ 5 | 007cr||||||||||||^ 6 | 008080311c20079999|||u||p|o ||| 0||||1eng c^ 7 | 0167 _2DE-101_a987874829^ 8 | 0167 _2DE-600_a2415107-5^ 9 | 022 _a1940-5758^ 10 | 035 _a(DE-599)ZDB2415107-5^ 11 | 035 _a(OCoLC)502377032^ 12 | 040 _a8999_bger_cDE-101_d0023^ 13 | 041 _aeng^ 14 | 08274_a020_qDE-600_222sdnb^ 15 | 084 _aBBI_qDE-23_2fid^ 16 | 24500_aCode4Lib journal_bC4LJ^ 17 | 2463 _aC4LJ^ 18 | 26431_a[S.l.]_c2007-^ 19 | 300 _aOnline-Ressource^ 20 | 336 _aText_btxt_2rdacontent^ 21 | 337 _aComputermedien_bc_2rdamedia^ 22 | 338 _aOnline-Ressource_bcr_2rdacarrier^ 23 | 3620 _a1.2007 -^ 24 | 36301_81.1\x_a1_i2007^ 25 | 655 7_0(DE-588)4067488-5_0https://d-nb.info/gnd/4067488-5_0(DE-101)040674886_aZeitschrift_2gnd-content^ 26 | 8564 _uhttp://journal.code4lib.org/_xVerlag_zkostenfrei^ 27 | 8564 _uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107_xEZB^ -------------------------------------------------------------------------------- /files/code4lib.line: -------------------------------------------------------------------------------- 1 | 01031nas a2200337 c 4500 2 | 001 987874829 3 | 003 DE-101 4 | 005 20200306093601.0 5 | 007 cr|||||||||||| 6 | 008 080311c20079999|||u||p|o ||| 0||||1eng c 7 | 016 7 $2 DE-101 $a 987874829 8 | 016 7 $2 DE-600 $a 2415107-5 9 | 022 $a 1940-5758 10 | 035 $a (DE-599)ZDB2415107-5 11 | 035 $a (OCoLC)502377032 12 | 040 $a 8999 $b ger $c DE-101 $d 0023 13 | 041 $a eng 14 | 082 74 $a 020 $q DE-600 $2 22sdnb 15 | 084 $a BBI $q DE-23 $2 fid 16 | 245 00 $a Code4Lib journal $b C4LJ 17 | 246 3 $a C4LJ 18 | 264 31 $a [S.l.] $c 2007- 19 | 300 $a Online-Ressource 20 | 336 $a Text $b txt $2 rdacontent 21 | 337 $a Computermedien $b c $2 rdamedia 22 | 338 $a Online-Ressource $b cr $2 rdacarrier 23 | 362 0 $a 1.2007 - 24 | 363 01 $8 1.1\x $a 1 $i 2007 25 | 655 7 $0 (DE-588)4067488-5 $0 https://d-nb.info/gnd/4067488-5 $0 (DE-101)040674886 $a Zeitschrift $2 gnd-content 26 | 856 4 $u http://journal.code4lib.org/ $x Verlag $z kostenfrei 27 | 856 4 $u http://www.bibliothek.uni-regensburg.de/ezeit/?2415107 $x EZB 28 | 29 | -------------------------------------------------------------------------------- /files/code4lib.mrc: -------------------------------------------------------------------------------- 1 | 01031nas a2200337 c 4500001001000000003000700010005001700017007001500034008004100049016002200090016002200112022001400134035002500148035002100173040002800194041000800222082002400230084002000254245002700274246000900301264001800310300002100328336002600349337003200375338003700407362001300444363001900457655010000476856005300576856006400629987874829DE-10120200306093601.0cr||||||||||||080311c20079999|||u||p|o ||| 0||||1eng c7 2DE-101a9878748297 2DE-600a2415107-5 a1940-5758 a(DE-599)ZDB2415107-5 a(OCoLC)502377032 a8999bgercDE-101d0023 aeng74a020qDE-600222sdnb aBBIqDE-232fid00aCode4Lib journalbC4LJ3 aC4LJ31a[S.l.]c2007- aOnline-Ressource aTextbtxt2rdacontent aComputermedienbc2rdamedia aOnline-Ressourcebcr2rdacarrier0 a1.2007 -0181.1\xa1i2007 70(DE-588)4067488-50https://d-nb.info/gnd/4067488-50(DE-101)040674886aZeitschrift2gnd-content4 uhttp://journal.code4lib.org/xVerlagzkostenfrei4 uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107xEZB -------------------------------------------------------------------------------- /files/code4lib.mrk: -------------------------------------------------------------------------------- 1 | =LDR 01031nas a2200337 c 4500 2 | =001 987874829 3 | =003 DE-101 4 | =005 20200306093601.0 5 | =007 cr|||||||||||| 6 | =008 080311c20079999|||u||p|o\|||\0||||1eng\c 7 | =016 7\$2DE-101$a987874829 8 | =016 7\$2DE-600$a2415107-5 9 | =022 \\$a1940-5758 10 | =035 \\$a(DE-599)ZDB2415107-5 11 | =035 \\$a(OCoLC)502377032 12 | =040 \\$a8999$bger$cDE-101$d0023 13 | =041 \\$aeng 14 | =082 74$a020$qDE-600$222sdnb 15 | =084 \\$aBBI$qDE-23$2fid 16 | =245 00$aCode4Lib journal$bC4LJ 17 | =246 3\$aC4LJ 18 | =264 31$a[S.l.]$c2007- 19 | =300 \\$aOnline-Ressource 20 | =336 \\$aText$btxt$2rdacontent 21 | =337 \\$aComputermedien$bc$2rdamedia 22 | =338 \\$aOnline-Ressource$bcr$2rdacarrier 23 | =362 0\$a1.2007 - 24 | =363 01$81.1{bsol}x$a1$i2007 25 | =655 \7$0(DE-588)4067488-5$0https://d-nb.info/gnd/4067488-5$0(DE-101)040674886$aZeitschrift$2gnd-content 26 | =856 4\$uhttp://journal.code4lib.org/$xVerlag$zkostenfrei 27 | =856 4\$uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107$xEZB 28 | 29 | -------------------------------------------------------------------------------- /files/code4lib.seq: -------------------------------------------------------------------------------- 1 | 987874829 FMT L BK 2 | 987874829 LDR L 01031nas^a2200337^c^4500 3 | 987874829 001 L 987874829 4 | 987874829 003 L DE-101 5 | 987874829 005 L 20200306093601.0 6 | 987874829 007 L cr|||||||||||| 7 | 987874829 008 L 080311c20079999|||u||p|o^|||^0||||1eng^c 8 | 987874829 0167 L $$2DE-101$$a987874829 9 | 987874829 0167 L $$2DE-600$$a2415107-5 10 | 987874829 022 L $$a1940-5758 11 | 987874829 035 L $$a(DE-599)ZDB2415107-5 12 | 987874829 035 L $$a(OCoLC)502377032 13 | 987874829 040 L $$a8999$$bger$$cDE-101$$d0023 14 | 987874829 041 L $$aeng 15 | 987874829 08274 L $$a020$$qDE-600$$222sdnb 16 | 987874829 084 L $$aBBI$$qDE-23$$2fid 17 | 987874829 24500 L $$aCode4Lib journal$$bC4LJ 18 | 987874829 2463 L $$aC4LJ 19 | 987874829 26431 L $$a[S.l.]$$c2007- 20 | 987874829 300 L $$aOnline-Ressource 21 | 987874829 336 L $$aText$$btxt$$2rdacontent 22 | 987874829 337 L $$aComputermedien$$bc$$2rdamedia 23 | 987874829 338 L $$aOnline-Ressource$$bcr$$2rdacarrier 24 | 987874829 3620 L $$a1.2007 - 25 | 987874829 36301 L $$81.1\x$$a1$$i2007 26 | 987874829 655 7 L $$0(DE-588)4067488-5$$0https://d-nb.info/gnd/4067488-5$$0(DE-101)040674886$$aZeitschrift$$2gnd-content 27 | 987874829 8564 L $$uhttp://journal.code4lib.org/$$xVerlag$$zkostenfrei 28 | 987874829 8564 L $$uhttp://www.bibliothek.uni-regensburg.de/ezeit/?2415107$$xEZB 29 | -------------------------------------------------------------------------------- /files/code4lib.turbo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00000nas a2200000 c 4500 4 | 987874829 5 | DE-101 6 | 20200306093601.0 7 | cr|||||||||||| 8 | 080311c20079999|||u||p|o ||| 0||||1eng c 9 | 10 | DE-101 11 | 987874829 12 | 13 | 14 | DE-600 15 | 2415107-5 16 | 17 | 18 | 1940-5758 19 | 20 | 21 | (DE-599)ZDB2415107-5 22 | 23 | 24 | (OCoLC)502377032 25 | 26 | 27 | 8999 28 | ger 29 | DE-101 30 | 0023 31 | 32 | 33 | eng 34 | 35 | 36 | 020 37 | DE-600 38 | 22sdnb 39 | 40 | 41 | BBI 42 | DE-23 43 | fid 44 | 45 | 46 | Code4Lib journal 47 | C4LJ 48 | 49 | 50 | C4LJ 51 | 52 | 53 | [S.l.] 54 | 2007- 55 | 56 | 57 | Online-Ressource 58 | 59 | 60 | Text 61 | txt 62 | rdacontent 63 | 64 | 65 | Computermedien 66 | c 67 | rdamedia 68 | 69 | 70 | Online-Ressource 71 | cr 72 | rdacarrier 73 | 74 | 75 | 1.2007 - 76 | 77 | 78 | 1.1\x 79 | 1 80 | 2007 81 | 82 | 83 | (DE-588)4067488-5 84 | https://d-nb.info/gnd/4067488-5 85 | (DE-101)040674886 86 | Zeitschrift 87 | gnd-content 88 | 89 | 90 | http://journal.code4lib.org/ 91 | Verlag 92 | kostenfrei 93 | 94 | 95 | http://www.bibliothek.uni-regensburg.de/ezeit/?2415107 96 | EZB 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /files/code4lib.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 00000nas a2200000 c 4500 5 | 987874829 6 | DE-101 7 | 20200306093601.0 8 | cr|||||||||||| 9 | 080311c20079999|||u||p|o ||| 0||||1eng c 10 | 11 | DE-101 12 | 987874829 13 | 14 | 15 | DE-600 16 | 2415107-5 17 | 18 | 19 | 1940-5758 20 | 21 | 22 | (DE-599)ZDB2415107-5 23 | 24 | 25 | (OCoLC)502377032 26 | 27 | 28 | 8999 29 | ger 30 | DE-101 31 | 0023 32 | 33 | 34 | eng 35 | 36 | 37 | 020 38 | DE-600 39 | 22sdnb 40 | 41 | 42 | BBI 43 | DE-23 44 | fid 45 | 46 | 47 | Code4Lib journal 48 | C4LJ 49 | 50 | 51 | C4LJ 52 | 53 | 54 | [S.l.] 55 | 2007- 56 | 57 | 58 | Online-Ressource 59 | 60 | 61 | Text 62 | txt 63 | rdacontent 64 | 65 | 66 | Computermedien 67 | c 68 | rdamedia 69 | 70 | 71 | Online-Ressource 72 | cr 73 | rdacarrier 74 | 75 | 76 | 1.2007 - 77 | 78 | 79 | 1.1\x 80 | 1 81 | 2007 82 | 83 | 84 | (DE-588)4067488-5 85 | https://d-nb.info/gnd/4067488-5 86 | (DE-101)040674886 87 | Zeitschrift 88 | gnd-content 89 | 90 | 91 | http://journal.code4lib.org/ 92 | Verlag 93 | kostenfrei 94 | 95 | 96 | http://www.bibliothek.uni-regensburg.de/ezeit/?2415107 97 | EZB 98 | 99 | 100 | -------------------------------------------------------------------------------- /files/code4lib.yaz.json: -------------------------------------------------------------------------------- 1 | { 2 | "leader":"01031nas a2200337 c 4500", 3 | "fields": 4 | [ 5 | { 6 | "001":"987874829" 7 | }, 8 | { 9 | "003":"DE-101" 10 | }, 11 | { 12 | "005":"20200306093601.0" 13 | }, 14 | { 15 | "007":"cr||||||||||||" 16 | }, 17 | { 18 | "008":"080311c20079999|||u||p|o ||| 0||||1eng c" 19 | }, 20 | { 21 | "016": 22 | { 23 | "subfields": 24 | [ 25 | { 26 | "2":"DE-101" 27 | }, 28 | { 29 | "a":"987874829" 30 | } 31 | ], 32 | "ind1":"7", 33 | "ind2":" " 34 | } 35 | 36 | }, 37 | { 38 | "016": 39 | { 40 | "subfields": 41 | [ 42 | { 43 | "2":"DE-600" 44 | }, 45 | { 46 | "a":"2415107-5" 47 | } 48 | ], 49 | "ind1":"7", 50 | "ind2":" " 51 | } 52 | 53 | }, 54 | { 55 | "022": 56 | { 57 | "subfields": 58 | [ 59 | { 60 | "a":"1940-5758" 61 | } 62 | ], 63 | "ind1":" ", 64 | "ind2":" " 65 | } 66 | 67 | }, 68 | { 69 | "035": 70 | { 71 | "subfields": 72 | [ 73 | { 74 | "a":"(DE-599)ZDB2415107-5" 75 | } 76 | ], 77 | "ind1":" ", 78 | "ind2":" " 79 | } 80 | 81 | }, 82 | { 83 | "035": 84 | { 85 | "subfields": 86 | [ 87 | { 88 | "a":"(OCoLC)502377032" 89 | } 90 | ], 91 | "ind1":" ", 92 | "ind2":" " 93 | } 94 | 95 | }, 96 | { 97 | "040": 98 | { 99 | "subfields": 100 | [ 101 | { 102 | "a":"8999" 103 | }, 104 | { 105 | "b":"ger" 106 | }, 107 | { 108 | "c":"DE-101" 109 | }, 110 | { 111 | "d":"0023" 112 | } 113 | ], 114 | "ind1":" ", 115 | "ind2":" " 116 | } 117 | 118 | }, 119 | { 120 | "041": 121 | { 122 | "subfields": 123 | [ 124 | { 125 | "a":"eng" 126 | } 127 | ], 128 | "ind1":" ", 129 | "ind2":" " 130 | } 131 | 132 | }, 133 | { 134 | "082": 135 | { 136 | "subfields": 137 | [ 138 | { 139 | "a":"020" 140 | }, 141 | { 142 | "q":"DE-600" 143 | }, 144 | { 145 | "2":"22sdnb" 146 | } 147 | ], 148 | "ind1":"7", 149 | "ind2":"4" 150 | } 151 | 152 | }, 153 | { 154 | "084": 155 | { 156 | "subfields": 157 | [ 158 | { 159 | "a":"BBI" 160 | }, 161 | { 162 | "q":"DE-23" 163 | }, 164 | { 165 | "2":"fid" 166 | } 167 | ], 168 | "ind1":" ", 169 | "ind2":" " 170 | } 171 | 172 | }, 173 | { 174 | "245": 175 | { 176 | "subfields": 177 | [ 178 | { 179 | "a":"Code4Lib journal" 180 | }, 181 | { 182 | "b":"C4LJ" 183 | } 184 | ], 185 | "ind1":"0", 186 | "ind2":"0" 187 | } 188 | 189 | }, 190 | { 191 | "246": 192 | { 193 | "subfields": 194 | [ 195 | { 196 | "a":"C4LJ" 197 | } 198 | ], 199 | "ind1":"3", 200 | "ind2":" " 201 | } 202 | 203 | }, 204 | { 205 | "264": 206 | { 207 | "subfields": 208 | [ 209 | { 210 | "a":"[S.l.]" 211 | }, 212 | { 213 | "c":"2007-" 214 | } 215 | ], 216 | "ind1":"3", 217 | "ind2":"1" 218 | } 219 | 220 | }, 221 | { 222 | "300": 223 | { 224 | "subfields": 225 | [ 226 | { 227 | "a":"Online-Ressource" 228 | } 229 | ], 230 | "ind1":" ", 231 | "ind2":" " 232 | } 233 | 234 | }, 235 | { 236 | "336": 237 | { 238 | "subfields": 239 | [ 240 | { 241 | "a":"Text" 242 | }, 243 | { 244 | "b":"txt" 245 | }, 246 | { 247 | "2":"rdacontent" 248 | } 249 | ], 250 | "ind1":" ", 251 | "ind2":" " 252 | } 253 | 254 | }, 255 | { 256 | "337": 257 | { 258 | "subfields": 259 | [ 260 | { 261 | "a":"Computermedien" 262 | }, 263 | { 264 | "b":"c" 265 | }, 266 | { 267 | "2":"rdamedia" 268 | } 269 | ], 270 | "ind1":" ", 271 | "ind2":" " 272 | } 273 | 274 | }, 275 | { 276 | "338": 277 | { 278 | "subfields": 279 | [ 280 | { 281 | "a":"Online-Ressource" 282 | }, 283 | { 284 | "b":"cr" 285 | }, 286 | { 287 | "2":"rdacarrier" 288 | } 289 | ], 290 | "ind1":" ", 291 | "ind2":" " 292 | } 293 | 294 | }, 295 | { 296 | "362": 297 | { 298 | "subfields": 299 | [ 300 | { 301 | "a":"1.2007 -" 302 | } 303 | ], 304 | "ind1":"0", 305 | "ind2":" " 306 | } 307 | 308 | }, 309 | { 310 | "363": 311 | { 312 | "subfields": 313 | [ 314 | { 315 | "8":"1.1\\x" 316 | }, 317 | { 318 | "a":"1" 319 | }, 320 | { 321 | "i":"2007" 322 | } 323 | ], 324 | "ind1":"0", 325 | "ind2":"1" 326 | } 327 | 328 | }, 329 | { 330 | "655": 331 | { 332 | "subfields": 333 | [ 334 | { 335 | "0":"(DE-588)4067488-5" 336 | }, 337 | { 338 | "0":"https://d-nb.info/gnd/4067488-5" 339 | }, 340 | { 341 | "0":"(DE-101)040674886" 342 | }, 343 | { 344 | "a":"Zeitschrift" 345 | }, 346 | { 347 | "2":"gnd-content" 348 | } 349 | ], 350 | "ind1":" ", 351 | "ind2":"7" 352 | } 353 | 354 | }, 355 | { 356 | "856": 357 | { 358 | "subfields": 359 | [ 360 | { 361 | "u":"http://journal.code4lib.org/" 362 | }, 363 | { 364 | "x":"Verlag" 365 | }, 366 | { 367 | "z":"kostenfrei" 368 | } 369 | ], 370 | "ind1":"4", 371 | "ind2":" " 372 | } 373 | 374 | }, 375 | { 376 | "856": 377 | { 378 | "subfields": 379 | [ 380 | { 381 | "u":"http://www.bibliothek.uni-regensburg.de/ezeit/?2415107" 382 | }, 383 | { 384 | "x":"EZB" 385 | } 386 | ], 387 | "ind1":"4", 388 | "ind2":" " 389 | } 390 | 391 | } 392 | ] 393 | } 394 | -------------------------------------------------------------------------------- /files/cruel-cruel-indicatorless-summerland.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00714cam a2200205 a 4500 4 | 12883376 5 | 20030616111422.0 6 | 020805s2002 nyu j 000 1 eng 7 | 8 | 0786808772 9 | 10 | 11 | 0786816155 (pbk.) 12 | 13 | 14 | DLC 15 | DLC 16 | DLC 17 | 18 | 19 | Chabon, Michael. 20 | 21 | 22 | Summerland / 23 | Michael Chabon. 24 | 25 | 26 | 1st ed. 27 | 28 | 29 | New York : 30 | Miramax Books/Hyperion Books for Children, 31 | c2002. 32 | 33 | 34 | 500 p. ; 35 | 22 cm. 36 | 37 | 38 | Ethan Feld, the worst baseball player in the history of the game, finds himself recruited by a 100-year-old scout to help a band of fairies triumph over an ancient enemy. 39 | 40 | 41 | Fantasy. 42 | 43 | 44 | Baseball 45 | Fiction. 46 | 47 | 48 | Magic 49 | Fiction. 50 | 51 | 52 | HAZMARC - INDICATORLESS FIELD DETECTED - MOPP LEVEL 4 53 | 54 | 55 | -------------------------------------------------------------------------------- /files/dict_bibliographic_level.csv: -------------------------------------------------------------------------------- 1 | Code,Description 2 | a,Monographic component part 3 | b,Serial component part 4 | c,Collection 5 | d,Subunit 6 | i,Integrating resource 7 | m,Monograph/Item 8 | s,Serial -------------------------------------------------------------------------------- /files/dict_languages.csv: -------------------------------------------------------------------------------- 1 | LanguageCode,Language 2 | aar,Afar 3 | abk,Abkhaz 4 | ace,Achinese 5 | ach,Acoli 6 | ada,Adangme 7 | ady,Adygei 8 | afa,Afroasiatic (Other) 9 | afh,Afrihili (Artificial language) 10 | afr,Afrikaans 11 | ain,Ainu 12 | -ajm,Aljamía 13 | aka,Akan 14 | akk,Akkadian 15 | alb,Albanian 16 | ale,Aleut 17 | alg,Algonquian (Other) 18 | alt,Altai 19 | amh,Amharic 20 | ang,English, Old (ca. 450-1100) 21 | anp,Angika 22 | apa,Apache languages 23 | ara,Arabic 24 | arc,Aramaic 25 | arg,Aragonese 26 | arm,Armenian 27 | arn,Mapuche 28 | arp,Arapaho 29 | art,Artificial (Other) 30 | arw,Arawak 31 | asm,Assamese 32 | ast,Bable 33 | ath,Athapascan (Other) 34 | aus,Australian languages 35 | ava,Avaric 36 | ave,Avestan 37 | awa,Awadhi 38 | aym,Aymara 39 | aze,Azerbaijani 40 | bad,Banda languages 41 | bai,Bamileke languages 42 | bak,Bashkir 43 | bal,Baluchi 44 | bam,Bambara 45 | ban,Balinese 46 | baq,Basque 47 | bas,Basa 48 | bat,Baltic (Other) 49 | bej,Beja 50 | bel,Belarusian 51 | bem,Bemba 52 | ben,Bengali 53 | ber,Berber (Other) 54 | bho,Bhojpuri 55 | bih,Bihari (Other) 56 | bik,Bikol 57 | bin,Edo 58 | bis,Bislama 59 | bla,Siksika 60 | bnt,Bantu (Other) 61 | bos,Bosnian 62 | bra,Braj 63 | bre,Breton 64 | btk,Batak 65 | bua,Buriat 66 | bug,Bugis 67 | bul,Bulgarian 68 | bur,Burmese 69 | byn,Bilin 70 | cad,Caddo 71 | cai,Central American Indian (Other) 72 | -cam,Khmer 73 | car,Carib 74 | cat,Catalan 75 | cau,Caucasian (Other) 76 | ceb,Cebuano 77 | cel,Celtic (Other) 78 | cha,Chamorro 79 | chb,Chibcha 80 | che,Chechen 81 | chg,Chagatai 82 | chi,Chinese 83 | chk,Chuukese 84 | chm,Mari 85 | chn,Chinook jargon 86 | cho,Choctaw 87 | chp,Chipewyan 88 | chr,Cherokee 89 | chu,Church Slavic 90 | chv,Chuvash 91 | chy,Cheyenne 92 | cmc,Chamic languages 93 | cop,Coptic 94 | cor,Cornish 95 | cos,Corsican 96 | cpe,Creoles and Pidgins, English-based (Other) 97 | cpf,Creoles and Pidgins, French-based (Other) 98 | cpp,Creoles and Pidgins, Portuguese-based (Other) 99 | cre,Cree 100 | crh,Crimean Tatar 101 | crp,Creoles and Pidgins (Other) 102 | csb,Kashubian 103 | cus,Cushitic (Other) 104 | cze,Czech 105 | dak,Dakota 106 | dan,Danish 107 | dar,Dargwa 108 | day,Dayak 109 | del,Delaware 110 | den,Slavey 111 | dgr,Dogrib 112 | din,Dinka 113 | div,Divehi 114 | doi,Dogri 115 | dra,Dravidian (Other) 116 | dsb,Lower Sorbian 117 | dua,Duala 118 | dum,Dutch, Middle (ca. 1050-1350) 119 | dut,Dutch 120 | dyu,Dyula 121 | dzo,Dzongkha 122 | efi,Efik 123 | egy,Egyptian 124 | eka,Ekajuk 125 | elx,Elamite 126 | eng,English 127 | enm,English, Middle (1100-1500) 128 | epo,Esperanto 129 | -esk,Eskimo languages 130 | -esp,Esperanto 131 | est,Estonian 132 | -eth,Ethiopic 133 | ewe,Ewe 134 | ewo,Ewondo 135 | fan,Fang 136 | fao,Faroese 137 | -far,Faroese 138 | fat,Fanti 139 | fij,Fijian 140 | fil,Filipino 141 | fin,Finnish 142 | fiu,Finno-Ugrian (Other) 143 | fon,Fon 144 | fre,French 145 | -fri,Frisian 146 | frm,French, Middle (ca. 1300-1600) 147 | fro,French, Old (ca. 842-1300) 148 | frr,North Frisian 149 | frs,East Frisian 150 | fry,Frisian 151 | ful,Fula 152 | fur,Friulian 153 | gaa,Gã 154 | -gae,Scottish Gaelix 155 | -gag,Galician 156 | -gal,Oromo 157 | gay,Gayo 158 | gba,Gbaya 159 | gem,Germanic (Other) 160 | geo,Georgian 161 | ger,German 162 | gez,Ethiopic 163 | gil,Gilbertese 164 | gla,Scottish Gaelic 165 | gle,Irish 166 | glg,Galician 167 | glv,Manx 168 | gmh,German, Middle High (ca. 1050-1500) 169 | goh,German, Old High (ca. 750-1050) 170 | gon,Gondi 171 | gor,Gorontalo 172 | got,Gothic 173 | grb,Grebo 174 | grc,Greek, Ancient (to 1453) 175 | gre,Greek, Modern (1453-) 176 | grn,Guarani 177 | gsw,Swiss German 178 | -gua,Guarani 179 | guj,Gujarati 180 | gwi,Gwich'in 181 | hai,Haida 182 | hat,Haitian French Creole 183 | hau,Hausa 184 | haw,Hawaiian 185 | heb,Hebrew 186 | her,Herero 187 | hil,Hiligaynon 188 | him,Western Pahari languages 189 | hin,Hindi 190 | hit,Hittite 191 | hmn,Hmong 192 | hmo,Hiri Motu 193 | hrv,Croatian 194 | hsb,Upper Sorbian 195 | hun,Hungarian 196 | hup,Hupa 197 | iba,Iban 198 | ibo,Igbo 199 | ice,Icelandic 200 | ido,Ido 201 | iii,Sichuan Yi 202 | ijo,Ijo 203 | iku,Inuktitut 204 | ile,Interlingue 205 | ilo,Iloko 206 | ina,Interlingua (International Auxiliary Language Association) 207 | inc,Indic (Other) 208 | ind,Indonesian 209 | ine,Indo-European (Other) 210 | inh,Ingush 211 | -int,Interlingua (International Auxiliary Language Association) 212 | ipk,Inupiaq 213 | ira,Iranian (Other) 214 | -iri,Irish 215 | iro,Iroquoian (Other) 216 | ita,Italian 217 | jav,Javanese 218 | jbo,Lojban (Artificial language) 219 | jpn,Japanese 220 | jpr,Judeo-Persian 221 | jrb,Judeo-Arabic 222 | kaa,Kara-Kalpak 223 | kab,Kabyle 224 | kac,Kachin 225 | kal,Kalâtdlisut 226 | kam,Kamba 227 | kan,Kannada 228 | kar,Karen languages 229 | kas,Kashmiri 230 | kau,Kanuri 231 | kaw,Kawi 232 | kaz,Kazakh 233 | kbd,Kabardian 234 | kha,Khasi 235 | khi,Khoisan (Other) 236 | khm,Khmer 237 | kho,Khotanese 238 | kik,Kikuyu 239 | kin,Kinyarwanda 240 | kir,Kyrgyz 241 | kmb,Kimbundu 242 | kok,Konkani 243 | kom,Komi 244 | kon,Kongo 245 | kor,Korean 246 | kos,Kosraean 247 | kpe,Kpelle 248 | krc,Karachay-Balkar 249 | krl,Karelian 250 | kro,Kru (Other) 251 | kru,Kurukh 252 | kua,Kuanyama 253 | kum,Kumyk 254 | kur,Kurdish 255 | -kus,Kusaie 256 | kut,Kootenai 257 | lad,Ladino 258 | lah,Lahndā 259 | lam,Lamba (Zambia and Congo) 260 | -lan,Occitan (post 1500) 261 | lao,Lao 262 | -lap,Sami 263 | lat,Latin 264 | lav,Latvian 265 | lez,Lezgian 266 | lim,Limburgish 267 | lin,Lingala 268 | lit,Lithuanian 269 | lol,Mongo-Nkundu 270 | loz,Lozi 271 | ltz,Luxembourgish 272 | lua,Luba-Lulua 273 | lub,Luba-Katanga 274 | lug,Ganda 275 | lui,Luiseño 276 | lun,Lunda 277 | luo,Luo (Kenya and Tanzania) 278 | lus,Lushai 279 | mac,Macedonian 280 | mad,Madurese 281 | mag,Magahi 282 | mah,Marshallese 283 | mai,Maithili 284 | mak,Makasar 285 | mal,Malayalam 286 | man,Mandingo 287 | mao,Maori 288 | map,Austronesian (Other) 289 | mar,Marathi 290 | mas,Maasai 291 | -max,Manx 292 | may,Malay 293 | mdf,Moksha 294 | mdr,Mandar 295 | men,Mende 296 | mga,Irish, Middle (ca. 1100-1550) 297 | mic,Micmac 298 | min,Minangkabau 299 | mis,Miscellaneous languages 300 | mkh,Mon-Khmer (Other) 301 | -mla,Malagasy 302 | mlg,Malagasy 303 | mlt,Maltese 304 | mnc,Manchu 305 | mni,Manipuri 306 | mno,Manobo languages 307 | moh,Mohawk 308 | -mol,Moldavian 309 | mon,Mongolian 310 | mos,Mooré 311 | mul,Multiple languages 312 | mun,Munda (Other) 313 | mus,Creek 314 | mwl,Mirandese 315 | mwr,Marwari 316 | myn,Mayan languages 317 | myv,Erzya 318 | nah,Nahuatl 319 | nai,North American Indian (Other) 320 | nap,Neapolitan Italian 321 | nau,Nauru 322 | nav,Navajo 323 | nbl,Ndebele (South Africa) 324 | nde,Ndebele (Zimbabwe) 325 | ndo,Ndonga 326 | nds,Low German 327 | nep,Nepali 328 | new,Newari 329 | nia,Nias 330 | nic,Niger-Kordofanian (Other) 331 | niu,Niuean 332 | nno,Norwegian (Nynorsk) 333 | nob,Norwegian (Bokmål) 334 | nog,Nogai 335 | non,Old Norse 336 | nor,Norwegian 337 | nqo,N'Ko 338 | nso,Northern Sotho 339 | nub,Nubian languages 340 | nwc,Newari, Old 341 | nya,Nyanja 342 | nym,Nyamwezi 343 | nyn,Nyankole 344 | nyo,Nyoro 345 | nzi,Nzima 346 | oci,Occitan (post-1500) 347 | oji,Ojibwa 348 | ori,Oriya 349 | orm,Oromo 350 | osa,Osage 351 | oss,Ossetic 352 | ota,Turkish, Ottoman 353 | oto,Otomian languages 354 | paa,Papuan (Other) 355 | pag,Pangasinan 356 | pal,Pahlavi 357 | pam,Pampanga 358 | pan,Panjabi 359 | pap,Papiamento 360 | pau,Palauan 361 | peo,Old Persian (ca. 600-400 B.C.) 362 | per,Persian 363 | phi,Philippine (Other) 364 | phn,Phoenician 365 | pli,Pali 366 | pol,Polish 367 | pon,Pohnpeian 368 | por,Portuguese 369 | pra,Prakrit languages 370 | pro,Provençal (to 1500) 371 | pus,Pushto 372 | que,Quechua 373 | raj,Rajasthani 374 | rap,Rapanui 375 | rar,Rarotongan 376 | roa,Romance (Other) 377 | roh,Raeto-Romance 378 | rom,Romani 379 | rum,Romanian 380 | run,Rundi 381 | rup,Aromanian 382 | rus,Russian 383 | sad,Sandawe 384 | sag,Sango (Ubangi Creole) 385 | sah,Yakut 386 | sai,South American Indian (Other) 387 | sal,Salishan languages 388 | sam,Samaritan Aramaic 389 | san,Sanskrit 390 | -sao,Samoan 391 | sas,Sasak 392 | sat,Santali 393 | -scc,Serbian 394 | scn,Sicilian Italian 395 | sco,Scots 396 | -scr,Croatian 397 | sel,Selkup 398 | sem,Semitic (Other) 399 | sga,Irish, Old (to 1100) 400 | sgn,Sign languages 401 | shn,Shan 402 | -sho,Shona 403 | sid,Sidamo 404 | sin,Sinhalese 405 | sio,Siouan (Other) 406 | sit,Sino-Tibetan (Other) 407 | sla,Slavic (Other) 408 | slo,Slovak 409 | slv,Slovenian 410 | sma,Southern Sami 411 | sme,Northern Sami 412 | smi,Sami 413 | smj,Lule Sami 414 | smn,Inari Sami 415 | smo,Samoan 416 | sms,Skolt Sami 417 | sna,Shona 418 | snd,Sindhi 419 | -snh,Sinhalese 420 | snk,Soninke 421 | sog,Sogdian 422 | som,Somali 423 | son,Songhai 424 | sot,Sotho 425 | spa,Spanish 426 | srd,Sardinian 427 | srn,Sranan 428 | srp,Serbian 429 | srr,Serer 430 | ssa,Nilo-Saharan (Other) 431 | -sso,Sotho 432 | ssw,Swazi 433 | suk,Sukuma 434 | sun,Sundanese 435 | sus,Susu 436 | sux,Sumerian 437 | swa,Swahili 438 | swe,Swedish 439 | -swz,Swazi 440 | syc,Syriac 441 | syr,Syriac, Modern 442 | -tag,Tagalog 443 | tah,Tahitian 444 | tai,Tai (Other) 445 | -taj,Tajik 446 | tam,Tamil 447 | -tar,Tatar 448 | tat,Tatar 449 | tel,Telugu 450 | tem,Temne 451 | ter,Terena 452 | tet,Tetum 453 | tgk,Tajik 454 | tgl,Tagalog 455 | tha,Thai 456 | tib,Tibetan 457 | tig,Tigré 458 | tir,Tigrinya 459 | tiv,Tiv 460 | tkl,Tokelauan 461 | tlh,Klingon (Artificial language) 462 | tli,Tlingit 463 | tmh,Tamashek 464 | tog,Tonga (Nyasa) 465 | ton,Tongan 466 | tpi,Tok Pisin 467 | -tru,Truk 468 | tsi,Tsimshian 469 | tsn,Tswana 470 | tso,Tsonga 471 | -tsw,Tswana 472 | tuk,Turkmen 473 | tum,Tumbuka 474 | tup,Tupi languages 475 | tur,Turkish 476 | tut,Altaic (Other) 477 | tvl,Tuvaluan 478 | twi,Twi 479 | tyv,Tuvinian 480 | udm,Udmurt 481 | uga,Ugaritic 482 | uig,Uighur 483 | ukr,Ukrainian 484 | umb,Umbundu 485 | und,Undetermined 486 | urd,Urdu 487 | uzb,Uzbek 488 | vai,Vai 489 | ven,Venda 490 | vie,Vietnamese 491 | vol,Volapük 492 | vot,Votic 493 | wak,Wakashan languages 494 | wal,Wolayta 495 | war,Waray 496 | was,Washoe 497 | wel,Welsh 498 | wen,Sorbian (Other) 499 | wln,Walloon 500 | wol,Wolof 501 | xal,Oirat 502 | xho,Xhosa 503 | yao,Yao (Africa) 504 | yap,Yapese 505 | yid,Yiddish 506 | yor,Yoruba 507 | ypk,Yupik languages 508 | zap,Zapotec 509 | zbl,Blissymbolics 510 | zen,Zenaga 511 | zha,Zhuang 512 | znd,Zande languages 513 | zul,Zulu 514 | zun,Zuni 515 | zxx,No linguistic content 516 | zza,Zaza -------------------------------------------------------------------------------- /files/dict_medium.csv: -------------------------------------------------------------------------------- 1 | a,Language material 2 | c,Notated music 3 | d,Manuscript notated music 4 | e,Cartographic material 5 | f,Manuscript cartographic material 6 | g,Projected medium 7 | i,Nonmusical sound recording 8 | j,Musical sound recording 9 | k,Two-dimensional nonprojectable graphic 10 | m,Computer file 11 | o,Kit 12 | p,Mixed materials 13 | r,Three-dimensional artifact or naturally occurring object 14 | t,Manuscript language material -------------------------------------------------------------------------------- /files/dict_type.csv: -------------------------------------------------------------------------------- 1 | Code,Description 2 | a,Map 3 | c,Computer file 4 | d,Globe 5 | f,Tactile material 6 | g,Projected graphic 7 | h,Microform 8 | k,Nonprojected graphic 9 | m,Motion picture 10 | o,Kit 11 | q,Notated music 12 | s,Sound recording 13 | t,Text 14 | v,Videorecording 15 | z,Unspecified -------------------------------------------------------------------------------- /files/example.cat.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "987874829", 3 | "record": [ 4 | [ 5 | "LDR", 6 | " ", 7 | " ", 8 | "_", 9 | "00251nas a2200121 c 4500" 10 | ], 11 | [ 12 | "001", 13 | " ", 14 | " ", 15 | "_", 16 | "987874829" 17 | ], 18 | [ 19 | "007", 20 | " ", 21 | " ", 22 | "_", 23 | "cr||||||||||||" 24 | ], 25 | [ 26 | "022", 27 | " ", 28 | " ", 29 | "a", 30 | "1940-5758" 31 | ], 32 | [ 33 | "041", 34 | " ", 35 | " ", 36 | "a", 37 | "eng" 38 | ], 39 | [ 40 | "245", 41 | "0", 42 | "0", 43 | "a", 44 | "Code4Lib journal", 45 | "b", 46 | "C4LJ" 47 | ], 48 | [ 49 | "246", 50 | "3", 51 | " ", 52 | "a", 53 | "C4LJ" 54 | ], 55 | [ 56 | "362", 57 | "0", 58 | " ", 59 | "a", 60 | "1.2007 -" 61 | ], 62 | [ 63 | "856", 64 | "4", 65 | " ", 66 | "u", 67 | "http://journal.code4lib.org/" 68 | ] 69 | ] 70 | } -------------------------------------------------------------------------------- /files/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "leader":"00251nas a2200121 c 4500", 3 | "fields": 4 | [ 5 | { 6 | "001":"987874829" 7 | }, 8 | { 9 | "007":"cr||||||||||||" 10 | }, 11 | { 12 | "022": 13 | { 14 | "subfields": 15 | [ 16 | { 17 | "a":"1940-5758" 18 | } 19 | ], 20 | "ind1":" ", 21 | "ind2":" " 22 | } 23 | 24 | }, 25 | { 26 | "041": 27 | { 28 | "subfields": 29 | [ 30 | { 31 | "a":"eng" 32 | } 33 | ], 34 | "ind1":" ", 35 | "ind2":" " 36 | } 37 | 38 | }, 39 | { 40 | "245": 41 | { 42 | "subfields": 43 | [ 44 | { 45 | "a":"Code4Lib journal" 46 | }, 47 | { 48 | "b":"C4LJ" 49 | } 50 | ], 51 | "ind1":"0", 52 | "ind2":"0" 53 | } 54 | 55 | }, 56 | { 57 | "246": 58 | { 59 | "subfields": 60 | [ 61 | { 62 | "a":"C4LJ" 63 | } 64 | ], 65 | "ind1":"3", 66 | "ind2":" " 67 | } 68 | 69 | }, 70 | { 71 | "362": 72 | { 73 | "subfields": 74 | [ 75 | { 76 | "a":"1.2007 -" 77 | } 78 | ], 79 | "ind1":"0", 80 | "ind2":" " 81 | } 82 | 83 | }, 84 | { 85 | "856": 86 | { 87 | "subfields": 88 | [ 89 | { 90 | "u":"http://journal.code4lib.org/" 91 | } 92 | ], 93 | "ind1":"4", 94 | "ind2":" " 95 | } 96 | 97 | } 98 | ] 99 | } 100 | -------------------------------------------------------------------------------- /files/example.lif: -------------------------------------------------------------------------------- 1 | LDR00251nas a2200121 c 4500^ 2 | 001987874829^ 3 | 007cr||||||||||||^ 4 | 022 _a1940-5758^ 5 | 041 _aeng^ 6 | 24500_aCode4Lib journal_bC4LJ^ 7 | 2463 _aC4LJ^ 8 | 3620 _a1.2007 -^ 9 | 8564 _uhttp://journal.code4lib.org/^ -------------------------------------------------------------------------------- /files/example.line: -------------------------------------------------------------------------------- 1 | 00251nas a2200121 c 4500 2 | 001 987874829 3 | 007 cr|||||||||||| 4 | 022 $a 1940-5758 5 | 041 $a eng 6 | 245 00 $a Code4Lib journal $b C4LJ 7 | 246 3 $a C4LJ 8 | 362 0 $a 1.2007 - 9 | 856 4 $u http://journal.code4lib.org/ 10 | 11 | -------------------------------------------------------------------------------- /files/example.mrc: -------------------------------------------------------------------------------- 1 | 00251nas a2200121 c 4500001001000000007001500010022001400025041000800039245002700047246000900074362001300083856003300096987874829cr|||||||||||| a1940-5758 aeng00aCode4Lib journalbC4LJ3 aC4LJ0 a1.2007 -4 uhttp://journal.code4lib.org/ -------------------------------------------------------------------------------- /files/example.mrk: -------------------------------------------------------------------------------- 1 | =LDR 00251nas a2200121 c 4500 2 | =001 987874829 3 | =007 cr|||||||||||| 4 | =022 \\$a1940-5758 5 | =041 \\$aeng 6 | =245 00$aCode4Lib journal$bC4LJ 7 | =246 3\$aC4LJ 8 | =362 0\$a1.2007 - 9 | =856 4\$uhttp://journal.code4lib.org/ 10 | 11 | -------------------------------------------------------------------------------- /files/example.seq: -------------------------------------------------------------------------------- 1 | 987874829 FMT L BK 2 | 987874829 LDR L 00251nas^a2200121^c^4500 3 | 987874829 001 L 987874829 4 | 987874829 007 L cr|||||||||||| 5 | 987874829 022 L $$a1940-5758 6 | 987874829 041 L $$aeng 7 | 987874829 24500 L $$aCode4Lib journal$$bC4LJ 8 | 987874829 2463 L $$aC4LJ 9 | 987874829 3620 L $$a1.2007 - 10 | 987874829 8564 L $$uhttp://journal.code4lib.org/ 11 | -------------------------------------------------------------------------------- /files/example.turbo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00251nas a2200121 c 4500 4 | 987874829 5 | cr|||||||||||| 6 | 7 | 1940-5758 8 | 9 | 10 | eng 11 | 12 | 13 | Code4Lib journal 14 | C4LJ 15 | 16 | 17 | C4LJ 18 | 19 | 20 | 1.2007 - 21 | 22 | 23 | http://journal.code4lib.org/ 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /files/example.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00251nas a2200121 c 4500 4 | 987874829 5 | cr|||||||||||| 6 | 7 | 1940-5758 8 | 9 | 10 | eng 11 | 12 | 13 | Code4Lib journal 14 | C4LJ 15 | 16 | 17 | C4LJ 18 | 19 | 20 | 1.2007 - 21 | 22 | 23 | http://journal.code4lib.org/ 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /files/install-software.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo '### install software' 4 | sudo apt install -y build-essential 5 | sudo apt install -y curl 6 | sudo apt install -y dkms 7 | sudo apt install -y geany 8 | sudo apt install -y gedit 9 | sudo apt install -y git 10 | sudo apt install -y gnome-icon-theme 11 | sudo apt install -y language-pack-gnome-en 12 | sudo apt install -y language-selector-gnome 13 | sudo apt install -y libexpat1-dev 14 | sudo apt install -y libgdbm-dev 15 | sudo apt install -y libicu-dev 16 | sudo apt install -y libssl-dev 17 | sudo apt install -y libwrap0-dev 18 | sudo apt install -y libxml2-dev 19 | sudo apt install -y libxml2-utils 20 | sudo apt install -y libxslt1-dev 21 | sudo apt install -y libyaz-dev 22 | sudo apt install -y nano 23 | sudo apt install -y perl-doc 24 | sudo apt install -y cpanminus 25 | sudo apt install -y sqlite3 26 | sudo apt install -y tilix 27 | sudo apt install -y virtualbox-guest-utils 28 | sudo apt install -y virtualbox-guest-x11 29 | sudo apt install -y xsltproc 30 | sudo apt install -y yaz 31 | sudo apt install -y zlib1g 32 | sudo apt install -y zlib1g-dev 33 | 34 | echo '### install local Perl environment ###' 35 | # install perlbrew 36 | curl -L https://install.perlbrew.pl | bash 37 | # edit .bashrc 38 | echo -e '\nsource ~/perl5/perlbrew/etc/bashrc\n' >> ~/.bashrc 39 | source ~/perl5/perlbrew/etc/bashrc 40 | # initialize 41 | perlbrew init 42 | # install a Perl version 43 | perlbrew install -j 2 -n perl-5.30.3 44 | # switch to an installation and set it as default 45 | perlbrew switch perl-5.30.3 46 | # install cpanm 47 | perlbrew install-cpanm 48 | 49 | echo '### install Perl modules ###' 50 | # fix version dependencies 51 | cpanm XML::LibXML@2.0201 52 | cpanm -f LaTeX::ToUnicode@0.11 53 | 54 | # install modules 55 | cpanm Catmandu Catmandu::AlephX Catmandu::BibTeX Catmandu::Breaker Catmandu::Cmd::repl Catmandu::Exporter::Table Catmandu::Exporter::Template Catmandu::Fix::cmd Catmandu::Fix::Date Catmandu::Fix::XML Catmandu::Identifier Catmandu::Importer::getJSON Catmandu::Importer::MODS Catmandu::LIDO Catmandu::MAB2 Catmandu::MARC Catmandu::MODS Catmandu::OAI Catmandu::OCLC Catmandu::PICA Catmandu::PNX Catmandu::RDF Catmandu::SRU Catmandu::Stat Catmandu::Template Catmandu::Validator::JSONSchema Catmandu::Wikidata Catmandu::XLS Catmandu::XML Catmandu::XSD Catmandu::Z3950 MARC::Record::Stats MARC::Schema 56 | -------------------------------------------------------------------------------- /files/marc2dc.fix: -------------------------------------------------------------------------------- 1 | # DC - http://www.loc.gov/marc/marc2dc.html 2 | 3 | # Create URI for ID 4 | prepend(_id,'https://example.org/id/') 5 | 6 | # Type of record 7 | marc_map(LDR/6,dcterms_medium) 8 | lookup(dcterms_medium,dict_medium.csv) 9 | 10 | # Category of material 11 | marc_map(007/0,dc_type) 12 | lookup(dc_type,dict_type.csv) 13 | 14 | # Language 15 | marc_map(008/35-37,dc_language,split:1) 16 | marc_map(041abdefghj,dc_language,split:1) 17 | flatten(dc_language) 18 | sort_field(dc_language,uniq:1) 19 | lookup(dc_language.*,dict_languages.csv,delete:1) 20 | 21 | # ISBN 22 | marc_map(020a,dc_identifier,split:1) 23 | # Transform identifier to URIs 24 | if exists(dc_identifier) 25 | replace_all(dc_identifier.*,' .*','') 26 | do maybe() 27 | isbn13(dc_identifier.*) 28 | end 29 | prepend(dc_identifier.*,'urn:isbn:') 30 | sort_field(dc_identifier,uniq:1) 31 | end 32 | 33 | # DDC subjects 34 | marc_map(082a,dc_subject,split:1) 35 | 36 | # Contributor 37 | marc_map(100a,dc_contributor,split:1) 38 | marc_map(700a,dc_contributor,split:1) 39 | marc_map(720a,dc_contributor,split:1) 40 | flatten(dc_contributor) 41 | 42 | # Title 43 | marc_map(245ab,dc_title,join:' ') 44 | 45 | # Publisher 46 | marc_map(260ab,dc_publisher.$append,join:' : ') 47 | 48 | # Dates 49 | marc_map(260c,dc_date,split:1) 50 | # Clean dates and get unique dates 51 | replace_all(dc_date.*,'[^0-9]+','') 52 | sort_field(dc_date,uniq:1) 53 | 54 | remove_field(record) 55 | -------------------------------------------------------------------------------- /files/not-well-formed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 00000nas a2200000 c 4500 4 | 987874829 5 | DE-101 6 | 20200306093601.0 7 | cr|||||||||||| 8 | 080311c20079999|||u||p|o ||| 0||||1eng c 9 | 10 | DE-101 11 | 987874829 12 | 13 | 14 | DE-600 15 | 2415107-5 16 | 17 | 18 | 1940-5758 19 | 20 | 21 | (DE-599)ZDB2415107-5 22 | 23 | 24 | (OCoLC)502377032 25 | 26 | 27 | 8999 28 | ger 29 | DE-101 30 | 0023 31 | 32 | 33 | eng 34 | 35 | 36 | 020 37 | DE-600 38 | 22sdnb 39 | 40 | 41 | BBI 42 | DE-23 43 | fid 44 | 45 | 46 | Code4Lib journal 47 | C4LJ 48 | 49 | 50 | C4LJ 51 | 52 | 53 | [S.l.] 54 | 2007- 55 | 56 | 57 | Online-Ressource 58 | 59 | 60 | Text 61 | txt 62 | rdacontent 63 | 64 | 65 | Computermedien 66 | c 67 | rdamedia 68 | 69 | 70 | Online-Ressource 71 | cr 72 | rdacarrier 73 | 74 | 75 | 1.2007 - 76 | 77 | 78 | 1.1\x 79 | 1 80 | 2007 81 | 82 | 83 | (DE-588)4067488-5 84 | https://d-nb.info/gnd/4067488-5 85 | (DE-101)040674886 86 | Zeitschrift 87 | gnd-content 88 | 89 | 90 | http://journal.code4lib.org/ 91 | Verlag 92 | kostenfrei 93 | 94 | 95 | http://www.bibliothek.uni-regensburg.de/ezeit/?2415107 96 | EZB 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /files/pride-and-prejudice-with-many-errors.mrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/files/pride-and-prejudice-with-many-errors.mrc -------------------------------------------------------------------------------- /get_records.md: -------------------------------------------------------------------------------- 1 | # Get MARC 21 data 2 | 3 | ## Open Data 4 | 5 | Several libraries and library networks publish their data as "[open data](https://en.wikipedia.org/wiki/Open_data)". 6 | 7 | [Péter Király](https://github.com/pkiraly) created a list of international open MARC 21 data sets at <https://github.com/pkiraly/metadata-qa-marc#datasources>. 8 | 9 | The Internet Archive's [Open Library](http://openlibrary.org/) project is making thousands of library records freely available for anyone's use, see <https://archive.org/details/ol_data>. 10 | 11 | You can download the data sets via the command line, e.g.: 12 | 13 | ```bash 14 | $ wget http://ered.library.upenn.edu/data/opendata/pau.zip 15 | $ unzip pau.zip 16 | ``` 17 | 18 | ## API 19 | 20 | Many libraries offer MARC 21 data via public [APIs](https://en.wikipedia.org/wiki/API) like Z39.50, SRU, OAI. 21 | 22 | ### Z39.50 23 | 24 | Z39.50 is a standard ([ANSI/NISO Z39.50-2003](https://www.loc.gov/z3950/agency/Z39-50-2003.pdf)) that defines a client/server based service and protocol for information retrieval. Like MARC 21 Z39.50 has a quite long history ([Lynch, 1997](http://www.dlib.org/dlib/april97/04lynch.html)) and is maintained by Library of Congress. 25 | 26 | Many libraries offer access to their Online Public Access Catalogues (OAPC) via Z39.50 servers, e.g. [Library of Congress](https://www.loc.gov/z3950/lcserver.html) or [KOBV](https://www.kobv.de/services/recherche/z39-50/). 27 | 28 | To retrieve data from Z39.50 servers you need a client software like `yaz-client` from [Index Data](https://www.indexdata.com/), which is part of the free open source toolkit "[YAZ](https://www.indexdata.com/resources/software/yaz/)": 29 | 30 | ```terminal 31 | # open client 32 | $ yaz-client 33 | # connect to database 34 | Z> open lx2.loc.gov/LCDB 35 | # set format to MARC 36 | Z> format 1.2.840.10003.5.10 37 | # set element set 38 | Z> element F 39 | # append retrieved records to file 40 | Z> set_marcdump loc.mrc 41 | # find record for subject 42 | Z> find @attr 5=100 @attr 1=21 "Perl" 43 | # get first 50 records 44 | Z> show 1+50 45 | # close client 46 | Z> exit 47 | ``` 48 | 49 | 50 | The Catmandu toolkit provides a Z39.50 client "[Catmandu::Importer::Z3950](https://metacpan.org/pod/Catmandu::Importer::Z3950)": 51 | 52 | ```terminal 53 | $ catmandu convert -v Z3950 \ 54 | --host z3950.kobv.de \ 55 | --port 210 \ 56 | --databaseName k2 \ 57 | --preferredRecordSyntax usmarc \ 58 | --queryType PQF \ 59 | --query '@attr 1=1016 code4lib' \ 60 | --handler USMARC \ 61 | to MARC > code4lib.mrc 62 | ``` 63 | 64 | ### SRU 65 | 66 | [SRU](https://www.loc.gov/standards/sru/) (Search/Retrieve via URL) is another standard protocol for information retrival. It uses HTTP as application layer protocol and XML for data serialization. Search queries are expressed with [CQL](https://www.loc.gov/standards/sru/cql/index.html) (Contextual Query Language), a formal language for representing queries. 67 | 68 | You can use the `yaz-client` to search and retrive data from a SRU server: 69 | 70 | ```terminal 71 | # open client 72 | $ yaz-client 73 | # connect to database 74 | Z> open http://sru.k10plus.de/gvk 75 | # append retrieved records to file 76 | Z> set_marcdump gvk.mrc.xml 77 | # find record for subject 78 | Z> find pica.sw=Perl 79 | # get first 50 records 80 | Z> show 1+50 81 | # close client 82 | Z> exit 83 | ``` 84 | 85 | 86 | The Catmandu toolkit also provides a SRU client "[Catmandu::Importer::SRU](https://metacpan.org/pod/Catmandu::Importer::SRU)": 87 | 88 | ```terminal 89 | $ catmandu convert -v SRU \ 90 | --base https://services.dnb.de/sru/zdb \ 91 | --recordSchema MARC21-xml \ 92 | --query 'dnb.iss = 1940-5758' \ 93 | --parser marcxml \ 94 | to MARC --type XML > code4lib.xml 95 | ``` 96 | 97 | ### OAI-PMH 98 | 99 | [OAI-PMH](https://www.openarchives.org/OAI/openarchivesprotocol.html) (Open Archives Initiative Protocol for Metadata Harvesting) is a protocol for metadata replication and distribution. _Data providers_ host metadata records and their changes over time, so _service providers_ can harvest them. As SRU it uses HTTP as application layer protocol and XML for data serialization. 100 | 101 | The Catmandu toolkit provides an OAI-PMH _harvester_ client "[Catmandu::Importer::OAI](https://metacpan.org/pod/Catmandu::Importer::SRU)": 102 | 103 | 104 | ```terminal 105 | $ catmandu convert -v OAI \ 106 | --url https://lib.ugent.be/oai \ 107 | --metadataPrefix marcxml \ 108 | --from 2021-02-01 \ 109 | --until 2021-02-01 \ 110 | --handler marcxml \ 111 | to MARC > gent.mrc 112 | ``` 113 | -------------------------------------------------------------------------------- /img/data-modeling-simplified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/data-modeling-simplified.png -------------------------------------------------------------------------------- /img/gbv-vzg-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/gbv-vzg-logo.png -------------------------------------------------------------------------------- /img/opac-hidden-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/opac-hidden-link.png -------------------------------------------------------------------------------- /img/pica1979.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/pica1979.png -------------------------------------------------------------------------------- /img/screenshot-picadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/screenshot-picadata.png -------------------------------------------------------------------------------- /img/screenshot-sublime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/screenshot-sublime.png -------------------------------------------------------------------------------- /img/screenshot-vim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jorol/processing-marc/adf6085f11901b3092a5905488d20015b3fee4e8/img/screenshot-vim.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Processing MARC 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /js/docsify-copy-code.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * docsify-copy-code 3 | * v2.1.0 4 | * https://github.com/jperasmus/docsify-copy-code 5 | * (c) 2017-2019 JP Erasmus 6 | * MIT license 7 | */ 8 | !function(){"use strict";function r(o){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o})(o)}!function(o,e){void 0===e&&(e={});var t=e.insertAt;if(o&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css","top"===t&&n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c),c.styleSheet?c.styleSheet.cssText=o:c.appendChild(document.createTextNode(o))}}(".docsify-copy-code-button,.docsify-copy-code-button span{cursor:pointer;transition:all .25s ease}.docsify-copy-code-button{position:absolute;z-index:1;top:0;right:0;overflow:visible;padding:.65em .8em;border:0;border-radius:0;outline:0;font-size:1em;background:grey;background:var(--theme-color,grey);color:#fff;opacity:0}.docsify-copy-code-button span{border-radius:3px;background:inherit;pointer-events:none}.docsify-copy-code-button .error,.docsify-copy-code-button .success{position:absolute;z-index:-100;top:50%;left:0;padding:.5em .65em;font-size:.825em;opacity:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.docsify-copy-code-button.error .error,.docsify-copy-code-button.success .success{opacity:1;-webkit-transform:translate(-115%,-50%);transform:translate(-115%,-50%)}.docsify-copy-code-button:focus,pre:hover .docsify-copy-code-button{opacity:1}"),document.querySelector('link[href*="docsify-copy-code"]')&&console.warn("[Deprecation] Link to external docsify-copy-code stylesheet is no longer necessary."),window.DocsifyCopyCodePlugin={init:function(){return function(o,e){o.ready(function(){console.warn("[Deprecation] Manually initializing docsify-copy-code using window.DocsifyCopyCodePlugin.init() is no longer necessary.")})}}},window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(o,s){o.doneEach(function(){var o=Array.apply(null,document.querySelectorAll("pre[data-lang]")),c={buttonText:"Copy to clipboard",errorText:"Error",successText:"Copied"};s.config.copyCode&&Object.keys(c).forEach(function(t){var n=s.config.copyCode[t];"string"==typeof n?c[t]=n:"object"===r(n)&&Object.keys(n).some(function(o){var e=-1',''.concat(c.buttonText,""),''.concat(c.errorText,""),''.concat(c.successText,""),""].join("");o.forEach(function(o){o.insertAdjacentHTML("beforeend",e)})}),o.mounted(function(){document.querySelector(".content").addEventListener("click",function(o){if(o.target.classList.contains("docsify-copy-code-button")){var e="BUTTON"===o.target.tagName?o.target:o.target.parentNode,t=document.createRange(),n=e.parentNode.querySelector("code"),c=window.getSelection();t.selectNode(n),c.removeAllRanges(),c.addRange(t);try{document.execCommand("copy")&&(e.classList.add("success"),setTimeout(function(){e.classList.remove("success")},1e3))}catch(o){console.error("docsify-copy-code: ".concat(o)),e.classList.add("error"),setTimeout(function(){e.classList.remove("error")},1e3)}"function"==typeof(c=window.getSelection()).removeRange?c.removeRange(t):"function"==typeof c.removeAllRanges&&c.removeAllRanges()}})})}].concat(window.$docsify.plugins||[])}(); 9 | //# sourceMappingURL=docsify-copy-code.min.js.map 10 | -------------------------------------------------------------------------------- /js/docsify-edit-on-github.js: -------------------------------------------------------------------------------- 1 | ;(function(win) { 2 | win.EditOnGithubPlugin = {} 3 | 4 | function create(docEditBase, title) { 5 | title = title || 'Edit on github' 6 | 7 | function editDoc(event, vm) { 8 | var docName = vm.route.file 9 | 10 | if (docName) { 11 | var editLink = docEditBase + docName 12 | window.open(editLink) 13 | event.preventDefault() 14 | return false 15 | } else { 16 | return true 17 | } 18 | } 19 | 20 | win.EditOnGithubPlugin.editDoc = editDoc 21 | 22 | function generateHeader(title) { 23 | return header = [ 24 | '
', 25 | '

', 27 | title, 28 | '

', 29 | '
' 30 | ].join('') 31 | } 32 | 33 | return function(hook, vm) { 34 | win.EditOnGithubPlugin.onClick = function(event) { 35 | EditOnGithubPlugin.editDoc(event, vm) 36 | } 37 | 38 | var header = generateHeader(title) 39 | hook.afterEach(function (html) { 40 | return header + html 41 | }) 42 | } 43 | } 44 | 45 | win.EditOnGithubPlugin.create = create 46 | }) (window) 47 | -------------------------------------------------------------------------------- /js/docsify-pagination.min.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e():"function"==typeof define&&define.amd?define(e):e()}(0,function(){"use strict";var t,p=(function(t,e){function n(t,e){return e.querySelector(t)}(e=t.exports=function(t,e){return n(t,e=e||document)}).all=function(t,e){return(e=e||document).querySelectorAll(t)},e.engine=function(t){if(!t.one)throw new Error(".one callback required");if(!t.all)throw new Error(".all callback required");return n=t.one,e.all=t.all,e}}(t={exports:{}},t.exports),t.exports);p.all,p.engine;try{var a=p}catch(t){a=p}var e=Element.prototype,r=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector,u=function(t,e){if(!t||1!==t.nodeType)return!1;if(r)return r.call(t,e);for(var n=a.all(e,t.parentNode),i=0;i*{line-height:1;vertical-align:middle}.pagination-item-label svg{height:.8em;width:auto;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.pagination-item--next{margin-left:auto;text-align:right}.pagination-item--next svg{margin-left:.5em}.pagination-item--previous svg{margin-right:.5em}.pagination-item-title{font-size:1.6em}.pagination-item-subtitle{text-transform:uppercase;opacity:.3}");var o=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},l=function(){function i(t,e){for(var n=0;n ul > li"),p("p",e)),this.hyperlink=m(t))}return l(n,[{key:"toJSON",value:function(){if(this.hyperlink)return{name:this.hyperlink.innerText,href:this.hyperlink.getAttribute("href"),chapterName:this.chapter&&this.chapter.innerText||""}}}]),n}();var x={container:function(){return'
'},inner:function(t,e){return[t.prev&&'\n \n ",t.next&&'\n \n "].filter(Boolean).join("")}};window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(t,e){var n=c({},s(e.config),e.config.pagination||{});function i(){var t=p("."+h);t&&(t.innerHTML=x.inner(function(t,e){var n=e.crossChapter,i=e.routerMode;try{var a=i===d.HISTORY?t.route.path:"#"+t.route.path,r=g(p.all(".sidebar li a")).filter(function(t){return!u(t,".section-link")}),o=r.find(v(a)),l=g((f(o,"ul")||{}).children).filter(function(t){return"LI"===t.tagName.toUpperCase()}),c=n?r.findIndex(v(a)):l.findIndex(function(t){var e=m(t);return e&&v(a,e)}),s=n?r:l;return{prev:new y(s[c-1]).toJSON(),next:new y(s[c+1]).toJSON()}}catch(t){return{}}}(e,n),n))}t.afterEach(function(t){return t+x.container()}),t.doneEach(function(){return i()})}].concat(window.$docsify.plugins||[])}); -------------------------------------------------------------------------------- /js/prism-bash.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\2)[^\\])*\2/,lookbehind:!0,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,s=0;s",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(e){var n=r[e],a=[];/^\w+$/.test(e)||a.push(/\w+/.exec(e)[0]),"diff"===e&&a.push("bold"),d.languages.diff[e]={pattern:RegExp("^(?:["+n+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a}}),Object.defineProperty(d.languages.diff,"PREFIXES",{value:r})}(Prism); -------------------------------------------------------------------------------- /js/prism-ini.min.js: -------------------------------------------------------------------------------- 1 | Prism.languages.ini={comment:/^[ \t]*[;#].*$/m,selector:/^[ \t]*\[.*?\]/m,constant:/^[ \t]*[^\s=]+?(?=[ \t]*=)/m,"attr-value":{pattern:/=.*/,inside:{punctuation:/^[=]/}}}; -------------------------------------------------------------------------------- /js/prism-json.min.js: -------------------------------------------------------------------------------- 1 | Prism.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,number:/-?\d+\.?\d*(?:e[+-]?\d+)?/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}}; -------------------------------------------------------------------------------- /js/prism-pica.js: -------------------------------------------------------------------------------- 1 | // syntax highlighting of PICA Plain format 2 | (function (Prism) { 3 | Prism.languages.pica = { 4 | 5 | // title-revision format 6 | inserted: /^\+.*$/m, 7 | deleted: /^-.*$/m, 8 | 9 | // tag and optional occurrence 10 | field: { 11 | pattern: /^\s*([012][0-9]{2}[A-Z@](\/[0-9]{2,3})?)/m, 12 | inside: { 13 | punctation: /\//, 14 | keyword: /[^\/]+/ 15 | } 16 | }, 17 | 18 | // PICA Path Expression 19 | path: { 20 | pattern: /^\s*([012.][0-9.]{2}[A-Z@.](\/[0-9]{2,3})?).+/m, 21 | inside: { 22 | punctation: /[\/\[\]]/, 23 | subfields: { 24 | pattern: /(\$)[^$]+/, 25 | lookbehind: 1, 26 | inside: { 27 | punctation: /^$/, 28 | property: /.+/, 29 | } 30 | }, 31 | keyword: /.+/, 32 | } 33 | }, 34 | 35 | subfield: { 36 | pattern: /\$[^$]([^$\n]+|\$\$)*/, 37 | inside: { 38 | property: { 39 | pattern: /(\$)[^$]/, 40 | lookbehind: 1 41 | }, 42 | string: /([^$]+|\$\$)+/, 43 | punctation: /^\$/, 44 | } 45 | }, 46 | } 47 | }(Prism)) 48 | -------------------------------------------------------------------------------- /js/prism-yaml.min.js: -------------------------------------------------------------------------------- 1 | !function(n){var t=/[*&][^\s[\]{},]+/,e=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+e.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+e.source+")?)";function a(n,t){t=(t||"").replace(/m/g,"")+"m";var e="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|]|}|\\s*#))".replace(/<>/g,function(){return r}).replace(/<>/g,function(){return n});return RegExp(e,t)}n.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\\2[^\r\n]+)*)".replace(/<>/g,function(){return r})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)[^\r\n{[\\]},#\\s]+?(?=\\s*:\\s)".replace(/<>/g,function(){return r})),lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?)?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:a("true|false","i"),lookbehind:!0,alias:"important"},null:{pattern:a("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:a("(\"|')(?:(?!\\2)[^\\\\\r\n]|\\\\.)*\\2"),lookbehind:!0,greedy:!0},number:{pattern:a("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+\\.?\\d*|\\.?\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:e,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},n.languages.yml=n.languages.yaml}(Prism); -------------------------------------------------------------------------------- /marc21.md: -------------------------------------------------------------------------------- 1 | # MARC 21 Format for Bibliographic Data 2 | 3 | [MARC 21 format for Bibliographic Data](https://www.loc.gov/marc/bibliographic/) is a standard designed to be a carrier for bibliographic information about printed and manuscript textual materials, computer files, maps, music, continuing resources, visual materials and mixed materials. Bibliographic data commonly includes titles, names, subjects, notes, publication data and information about the physical description of an 4 | item. The standard defines [formats](https://www.loc.gov/marc/marcdocz.html) for the representation and exchange of [bibliographic](https://www.loc.gov/marc/bibliographic/), [authority](https://www.loc.gov/marc/authority/ecadhome.html), [holdings](https://www.loc.gov/marc/holdings/echdhome.html), [classification](https://www.loc.gov/marc/classification/eccdhome.html) and [community information](https://www.loc.gov/marc/community/eccihome.html) data in machine-readable form. 5 | 6 | A MARC record is composed of three elements: 7 | 8 | * Record structure: an implementation of the international standard Format for Information Exchange (ISO 2709) and its American counterpart, Bibliographic Information Interchange (ANSI/NISO Z39.2). 9 | 10 | * Content designation: the codes and conventions established explicitly to identify and further characterize the data elements within a record. 11 | 12 | * Data content of the record: the content of the data elements that comprise a MARC record is usually defined by standards outside the format (e.g. [ISBD](https://www.ifla.org/publications/international-standard-bibliographic-description), [AACR2](http://www.aacr2.org/), [RDA](http://www.rda-jsc.org/archivedsite/rdaprospectus.html)). 13 | 14 | The MARC 21 standard also provides [lists of source codes](https://www.loc.gov/standards/sourcelist/index.html) for vocabularies, rules and schemes. 15 | 16 | The MARC 21 standard is maintained by the [The Network Development and MARC Standards Office](https://www.loc.gov/marc/ndmso.html) and documented in detail: https://www.loc.gov/marc/marcdocz.html. 17 | 18 | For a short introduction to MARC 21 see the OCLCs ["Introduction"](https://www.oclc.org/bibformats/en/introduction.html) or ["Understanding MARC Bibliographic: Machine-Readable Cataloging"](https://www.loc.gov/marc/umb/) for a more detailed one. The history of MARC is documented in ["MARC, its history and implications"](https://babel.hathitrust.org/cgi/pt?id=mdp.39015034388556). 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "node": ">=10", 3 | "scripts": { 4 | "serve": "docsify serve", 5 | "lint": "markdownlint *.md" 6 | }, 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/pro4bib/pica.git" 10 | }, 11 | "dependencies": { 12 | "docsify-cli": "^4.4.1", 13 | "markdownlint-cli": "^0.23.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /statistics.md: -------------------------------------------------------------------------------- 1 | # MARC statistics 2 | 3 | ## ... with marcstats.pl 4 | 5 | To generate statistics for tags and subfield codes of "MARC (ISO 2709)" records use `marcstats.pl`. 6 | 7 | ```terminal 8 | $ marcstats.pl loc.mrc 9 | Statistics for 50 records 10 | Tag Rep. Occ.,% 11 | 001 100.00 12 | 005 100.00 13 | 006 2.00 14 | 007 18.00 15 | 008 100.00 16 | 010 98.00 17 | a 98.00 18 | z 4.00 19 | 015 2.00 20 | 2 2.00 21 | a 2.00 22 | 016 2.00 23 | 2 2.00 24 | a 2.00 25 | 020 76.00 26 | a 76.00 27 | q 2.00 28 | 035 [Y] 48.00 29 | 9 [Y] 18.00 30 | a [Y] 30.00 31 | ... 32 | ``` 33 | 34 | ## ... Catmandu 35 | 36 | If you want generate statistics for other MARC serialization use [Catmandu::Breaker](https://metacpan.org/pod/Catmandu::Breaker). First you need to _break_ the MARC records into pieces. Afterwards you can calculate statistics for MARC tags and subfield codes. 37 | 38 | ```terminal 39 | $ catmandu convert MARC --type XML to Breaker --handler marc < loc.mrc.xml > loc.breaker 40 | $ catmandu breaker loc.breaker 41 | ``` 42 | 43 | With option `--fields` you can calculate statistics for specific tags and subfield codes: 44 | 45 | ```terminal 46 | $ catmandu breaker --fields 245a,020a loc.breaker 47 | | name | count | zeros | zeros% | min | max | mean | variance | stdev | uniq~ | uniq% | entropy | 48 | |------|-------|-------|--------|-----|-----|------|----------|-------|-------|-------|---------| 49 | | # | 50 | | | | | | | | | | | 50 | | 245a | 50 | 0 | 0.0 | 1 | 1 | 1 | 0.0 | 0.0 | 45 | 90.1 | 5.4/5.6 | 51 | | 020a | 52 | 12 | 24.0 | 0 | 4 | 1.04 | 0.8 | 0.9 | 51 | 98.2 | 5.3/6.0 | 52 | ``` 53 | 54 | Use option `-as` to specify a tabular output format (CSV, TSV, XLS(X)): 55 | 56 | ```terminal 57 | $ catmandu breaker --as XLSX loc.breaker > loc.xlsx 58 | ``` -------------------------------------------------------------------------------- /tools.md: -------------------------------------------------------------------------------- 1 | # Software 2 | 3 | ## Install 4 | 5 | For this tutorial we need some command-line tools to process MARC data. You can download a [VirtualBox](https://www.virtualbox.org/) image containing most of the required tools at the [Catmandu](https://librecatproject.wordpress.com/get-catmandu/) project. Please follow the installation instructions. Or install all tools on your own system. All necessary steps are described using a [Debian](https://www.debian.org/) based system. 6 | 7 | ### Perl 8 | 9 | Some of these tools require a [Perl](https://www.perl.org/) interpreter. It is recommended to install a local Perl environment on your system using [`perlbrew`](https://perlbrew.pl/): 10 | 11 | ```terminal 12 | # install perlbrew 13 | $ \curl -L https://install.perlbrew.pl | bash 14 | # edit .bashrc 15 | $ echo -e '\nsource ~/perl5/perlbrew/etc/bashrc\n' >> ~/.bashrc 16 | $ source ~/.bashrc 17 | # initialize 18 | $ perlbrew init 19 | # see what versions are available 20 | $ perlbrew available 21 | # install a Perl version 22 | $ perlbrew install -j 2 -n perl-5.28.2 23 | # see installed versions 24 | $ perlbrew list 25 | # switch to an installation and set it as default 26 | $ perlbrew switch perl-5.28.2 27 | # install cpanm 28 | $ perlbrew install-cpanm 29 | ``` 30 | 31 | ### catmandu 32 | 33 | [Catmandu](https://librecat.org/Catmandu) is data toolkit which can be used for [ETL](https://en.wikipedia.org/wiki/Extract,_transform,_load) processes. The project website provides some detailed [instructions](https://librecat.org/Catmandu/#installation) on how to install `catmandu` on different systems. 34 | 35 | ```terminal 36 | # install dependencies 37 | $ sudo apt install autoconf build-essential dconf-cli libexpat1-dev \ 38 | libgdbm-dev libssl-dev libxml2-dev libxslt1-dev libyaz-dev parallel perl-doc \ 39 | yaz zlib1g zlib1g-dev 40 | # install Catmandu modules 41 | $ cpanm Catmandu Catmandu::Breaker Catmandu::Exporter::Table \ 42 | Catmandu::Identifier Catmandu::Importer::getJSON Catmandu::MARC Catmandu::OAI \ 43 | Catmandu::PICA Catmandu::PNX Catmandu::RDF Catmandu::SRU Catmandu::Stat \ 44 | Catmandu::Template Catmandu::VIAF Catmandu::Validator::JSONSchema \ 45 | Catmandu::Wikidata Catmandu::XLS Catmandu::XSD Catmandu::Z3950 46 | ``` 47 | 48 | ### marcvalidate 49 | 50 | [MARC::Schema](https://metacpan.org/pod/MARC::Schema) provides the command-line utility `marcvalidate` to validate MARC records. 51 | 52 | ```terminal 53 | $ cpanm MARC::Schema 54 | ``` 55 | 56 | ### marcstats.pl 57 | 58 | [MARC::Record::Stats](https://metacpan.org/pod/MARC::Record::Stats) provides the command-line utility `marcstats.pl` to generate statistics for your MARC records. 59 | 60 | ```terminal 61 | $ cpanm MARC::Record::Stats 62 | ``` 63 | 64 | ### uconv 65 | 66 | For [Unicode](https://home.unicode.org/) [normalizations](https://en.wikipedia.org/wiki/Unicode_equivalence) we need the command-line utility `uconv`. 67 | 68 | ```terminal 69 | $ sudo apt install libicu-dev 70 | ``` 71 | 72 | ### YAZ 73 | 74 | [YAZ](https://www.indexdata.com/resources/software/yaz/) is a free open source toolkit from [Index Data](https://www.indexdata.com/), that includes command-line utility programs like `yaz-client` and `yaz-marcdump`. 75 | 76 | ```terminal 77 | $ sudo apt install yaz 78 | ``` 79 | 80 | ### xmllint 81 | 82 | `xmllint` is a command-line tool to process XML data. 83 | 84 | ```terminal 85 | $ sudo apt install libxml2-utils 86 | ``` 87 | 88 | ### xsltproc 89 | 90 | For transformation of XML data with XSL stylesheets we need a [XSLT](https://en.wikipedia.org/wiki/XSLT) processor. 91 | 92 | ```terminal 93 | $ sudo apt install xsltproc 94 | ``` 95 | 96 | ## Documentation 97 | 98 | For more information of these tools you can read their `man` or `help` pages, e.g.: 99 | 100 | ```terminal 101 | $ man yaz-marcdump 102 | $ xmllint --help 103 | ``` 104 | 105 | ## More tools 106 | 107 | Several other software tools and libraries to process MARC data are available, see: 108 | 109 | + MARC Specialized Tools 110 | + Working with MARC 111 | + Catmandu - Related projects 112 | -------------------------------------------------------------------------------- /transformation.md: -------------------------------------------------------------------------------- 1 | # Transformation of MARC data 2 | 3 | ## ... with yaz-marcdump 4 | 5 | `yaz-marcdump` can be used to tranform MARC data between different serializations. Use options `-i` and `-o` to specfiy the input and output formats. 6 | 7 | "MARC (ISO 2709)" to "MARC XML": 8 | 9 | ```terminal 10 | $ yaz-marcdump -i marc -o marcxml code4lib.mrc > code4lib.xml 11 | ``` 12 | 13 | "MARC (ISO 2709)" to "Turbomarc": 14 | 15 | ```terminal 16 | $ yaz-marcdump -i marc -o turbomarc code4lib.mrc > code4lib.turbo.xml 17 | ``` 18 | 19 | "MARC (ISO 2709)" to "MARC Line": 20 | 21 | ```terminal 22 | $ yaz-marcdump -i marc -o line code4lib.mrc > code4lib.line 23 | ``` 24 | 25 | "MARC XML" to "MARC-in-JSON": 26 | 27 | ```terminal 28 | $ yaz-marcdump -i marcxml -o json code4lib.mrc.xml > code4lib.json 29 | ``` 30 | 31 | ## ... with Catmandu 32 | 33 | The command-line interface of the Catmandu toolkit also offers several tranformations of MARC data. The default MARC serialization is "MARC (ISO 2709)". 34 | 35 | "MARC (ISO 2709)" to "MARC XML": 36 | 37 | ```terminal 38 | $ catmandu convert MARC to MARC --type XML < code4lib.mrc > code4lib.xml 39 | ``` 40 | 41 | "MARC XML" to "MARC (ISO 2709)": 42 | 43 | ```terminal 44 | $ catmandu convert MARC --type XML to MARC < code4lib.xml > code4lib.mrc 45 | ``` 46 | 47 | "MARC (ISO 2709)" to "MARC Line": 48 | 49 | ```terminal 50 | $ catmandu convert MARC to MARC --type Line < code4lib.mrc > code4lib.line 51 | ``` 52 | 53 | "MARC (ISO 2709)" to "MARCMaker": 54 | 55 | ```terminal 56 | $ catmandu convert MARC to MARC --type MARCMaker < code4lib.mrc > code4lib.mrk 57 | ``` 58 | 59 | "MARC XML" to "MARC-in-JSON": 60 | 61 | ```terminal 62 | $ catmandu convert MARC --type XML to MARC --type MiJ < code4lib.xml > code4lib.json 63 | ``` 64 | 65 | "MARC XML" to YAML: 66 | 67 | ```terminal 68 | $ catmandu convert MARC to YAML < code4lib.mrc > code4lib.yml 69 | ``` 70 | 71 | The [Catmandu::Breaker](https://metacpan.org/pod/Catmandu::Breaker) module "breaks" data into smaller components and exports them line by line: 72 | 73 | ```terminal 74 | $ catmandu convert MARC to Breaker --handler marc < code4lib.mrc 75 | 987874829 LDR 01031nas a2200337 c 4500 76 | 987874829 001 987874829 77 | 987874829 003 DE-101 78 | 987874829 005 20200306093601.0 79 | 987874829 007 cr|||||||||||| 80 | 987874829 008 080311c20079999|||u||p|o ||| 0||||1eng c 81 | 987874829 0162 DE-101 82 | 987874829 016a 987874829 83 | 987874829 0162 DE-600 84 | 987874829 016a 2415107-5 85 | 987874829 022a 1940-5758 86 | 987874829 035a (DE-599)ZDB2415107-5 87 | ... 88 | ``` 89 | 90 | You can process this output with other command-line utilities like `grep`, `sort` and `uniq`. For example, to extract all ISBN from a MARC data sets, we can build a command-line [pipeline](https://en.wikipedia.org/wiki/Pipeline_(Unix)) like this: 91 | 92 | ```terminal 93 | $ catmandu convert MARC to Breaker --handler marc < loc.mrc \ 94 | | grep -P '\t020a' | cut -f 3 | grep -oP '^[\dX]+' | sort | uniq -c 95 | 1 0072123397 96 | 1 0130284181 97 | 1 0201422190 98 | 1 0470176431 99 | 2 0596002270 100 | ... 101 | ``` 102 | 103 | 104 | With Catmandu you can export data to generic data formats like CSV, JSON, TSV, XLSX and YAML. MARC serializations are "complex/nested data structures" which cannot be stored in flat data structures like tables. 105 | 106 | You can export MARC records to nested formats like JSON and YAML: 107 | 108 | ``` 109 | $ catmandu convert MARC to YAML < code4lib.mrc 110 | $ catmandu convert MARC to JSON < code4lib.mrc 111 | ``` 112 | 113 | 114 | This will **not** work: 115 | 116 | ``` 117 | $ catmandu convert MARC to CSV < code4lib.mrc 118 | $ catmandu convert MARC to TSV < code4lib.mrc 119 | $ catmandu convert MARC to XLSX < code4lib.mrc 120 | ``` 121 | 122 | You need to use "[Catmandu::Fix](https://metacpan.org/pod/Catmandu::Fix)" to extract and map your data to a tabular data structure: 123 | 124 | 125 | ``` 126 | $ catmandu convert MARC to CSV \ 127 | --fix 'marc_map(245abc,dc_title,join:" ");retain_field(dc_title)' \ 128 | < code4lib.mrc 129 | ``` 130 | 131 | ## ... with XLST 132 | 133 | If you want transform MARC records to other formats, you have to map MARC (sub)fields to corresponding fields of the other format. The Libary of Congress provides several crosswalks: 134 | 135 | * [MARC to MODS](https://www.loc.gov/standards/mods/mods-mapping.html) 136 | * [MODS to MARC](https://www.loc.gov/standards/mods/v3/mods2marc-mapping.html) 137 | * [MARC to Dublin Core](https://www.loc.gov/marc/marc2dc.html) 138 | * [Dublin Core to MARC](https://www.loc.gov/marc/dccross.html) 139 | * [ONIX to MARC](https://www.loc.gov/marc/onix2marc.html) 140 | 141 | 142 | Based on these crosswalks the Library of Congress published several [XLS stylesheets](https://www.loc.gov/standards/marcxml/#stylesheets), which can be used with a XSLT processor to transform "MARC XML" records to other formats like BIBFRAME, HTML, MODS, OAI-DC and RDF. 143 | 144 | "MARC XML" to MODS: 145 | 146 | ```terminal 147 | $ xsltproc MARC21slim2MODS3-7.xsl loc.mrc.xml > loc.mods.xml 148 | ``` 149 | 150 | "MARC XML" to HTML: 151 | 152 | ```terminal 153 | $ xsltproc MARC21slim2HTML.xsl loc.mrc.xml > loc.html 154 | ``` 155 | 156 | "MARC XML" to "OAI-DC": 157 | 158 | ```terminal 159 | $ xsltproc MARC21slim2OAIDC.xsl loc.mrc.xml > loc.oaidc.xml 160 | ``` 161 | 162 | "MARC XML" to "RDF-DC": 163 | 164 | ```terminal 165 | $ xsltproc MARC21slim2RDFDC.xsl loc.mrc.xml > loc.rdfdc.xml 166 | ``` 167 | 168 | "MARC XML" to "[BIBFRAME](https://github.com/lcnetdev/marc2bibframe2)": 169 | 170 | ```terminal 171 | $ xsltproc bibframe-xsl/marc2bibframe2.xsl loc.mrc.xml > loc.bibframe.xml 172 | ``` 173 | 174 | 175 | -------------------------------------------------------------------------------- /unicode.md: -------------------------------------------------------------------------------- 1 | # Unicode 2 | 3 | ## MARC-8 and Unicode 4 | 5 | "MARC (ISO 2709)" records could be encoded in two different character coding schemes: [MARC-8](https://www.loc.gov/marc/specifications/specchartables.html) or [UCS/Unicode](https://www.iso.org/standard/69119.html). 6 | 7 | Use `yaz-marcdump` to convert the encoding of MARC records. Specify the encoding with options `-f` and `-t`. With option `-l` you can set the character coding scheme in the MARC leader position 09. 8 | 9 | ``` 10 | $ yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw > marc21.utf8.raw 11 | ``` 12 | 13 | A conversion from UTF-8 to MARC-8 is not recommended, because it could be lossy. 14 | 15 | ## Unicode normalization 16 | 17 | Unicode provides single code points for many characters that could be viewed as combinations of two or more characters, e.g. German umlauts: 18 | 19 | | Composed/NFC | Decomposed/NFD | 20 | |----------|------------| 21 | | ä ([Latin Small Letter A with Diaeresis](https://www.compart.com/en/unicode/U+00E4) U+00E4) | a ([Latin Small Letter A](https://www.compart.com/en/unicode/U+0061) U+0061) + ◌̈ ([Combining Diaeresis](https://www.compart.com/en/unicode/U+0308) U+0308) | 22 | 23 | With the command-line utility `uconv` you can transliterate data between different Unicode [normalization forms](https://unicode.org/reports/tr15/#Norm_Forms): 24 | 25 | ``` 26 | $ uconv -x NFC marc21.nfd.xml > marc21.nfc.xml 27 | $ uconv -x NFD marc21.nfc.xml > marc21.nfd.xml 28 | ``` 29 | 30 | You should only normalize "MARC XML" data, as the normalization of "MARC (ISO 2709)" would result in corrupted records, due to changed field lengths. 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /validation.md: -------------------------------------------------------------------------------- 1 | # MARC 21 validation 2 | 3 | ## ... with yaz-marcdump 4 | 5 | The command-line tool `yaz-marcdump` can be used for several MARC related tasks. 6 | 7 | To validate the structure of "MARC (ISO 2709)" records use the option `-n`, which will omit any other output: 8 | 9 | ```terminal 10 | $ yaz-marcdump -n loc.mrc 11 | ``` 12 | 13 | If you want to validate records in other MARC formats you have to specify the format with option `-i`: 14 | 15 | ```terminal 16 | $ yaz-marcdump -n -i marcxml loc.mrc.xml 17 | ``` 18 | 19 | If `yaz-marcdump` finds any errors it will output an error message: 20 | 21 | ```terminal 22 | $ yaz-marcdump -n bad_hathi_records.mrc 23 | 24 | ``` 25 | 26 | To narrow down the error use option `-p`, which will print the record numbers and offsets: 27 | 28 | ```terminal 29 | $ yaz-marcdump -np bad_hathi_records.mrc 30 | 31 | 32 | 33 | 34 | 35 | ``` 36 | 37 | 38 | [Common structural problems](https://bibwild.wordpress.com/2010/02/02/structural-marc-problems-you-may-encounter/) in MARC records are: 39 | 40 | * Invalid leader bytes 41 | 42 | ```terminal 43 | $ yaz-marcdump -np bad_leaders_10_11.mrc 44 | 45 | Indicator length at offset 10 should hold a number 1-9. Assuming 2 46 | Identifier length at offset 11 should hold a number 1-9. Assuming 2 47 | Length data entry at offset 20 should hold a number 3-9. Assuming 4 48 | Length starting at offset 21 should hold a number 4-9. Assuming 5 49 | Length implementation at offset 22 should hold a number. Assuming 0 50 | ``` 51 | 52 | * Record exceeds the maximum length 53 | 54 | ```terminal 55 | $ yaz-marcdump -np bad_hathi_records.mrc 56 | 57 | 58 | 59 | 60 | 61 | ``` 62 | 63 | * Field exceeds the maximum length 64 | 65 | ```terminal 66 | $ yaz-marcdump -np bad_oversize_field_bad_directory.mrc 67 | 68 | 69 | Directory offset 240: Bad value for data length and/or length starting (0\x1Edrd-348919) 70 | Base address not at end of directory, base 242, end 241 71 | Directory offset 216: Data out of bounds 21398 >= 11833 72 | 73 | 74 | 75 | ``` 76 | 77 | * Invalid subfield element 78 | 79 | ```terminal 80 | $ yaz-marcdump -np -i marcxml chabon-bad-subfields-element.xml 81 | yaz_marc_read_xml failed 82 | ``` 83 | 84 | * MARC control character in internal data value 85 | 86 | ```terminal 87 | $ yaz-marcdump -np bad_data_value.mrc 88 | 89 | Separator but not at end of field length=37 90 | ``` 91 | 92 | * Wrong encoded character 93 | 94 | ```terminal 95 | $ yaz-marcdump -np bad_encoding.mrc 96 | 97 | No separator at end of field length=53 98 | No separator at end of field length=64 99 | ``` 100 | 101 | ## ... with xmllint 102 | 103 | 104 | Use `xmllint` to validate "MARC XML" data against the MARC [XSD schema](https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd). 105 | 106 | If you just want validate the structure of "MARC XML" records, use the options `--noout` (which will omit any other output) and `--schema` (path to XSD file): 107 | 108 | ```terminal 109 | $ xmllint --noout --schema MARC21slim.xsd loc.mrc.xml 110 | loc.mrc.xml validates 111 | $ xmllint --noout --schema MARC21slim.xsd chabon-bad-subfields-element.xml 112 | chabon-bad-subfields-element.xml:8: element subfields: Schemas validity error : Element '{http://www.loc.gov/MARC21/slim}subfields': This element is not expected. Expected is ( {http://www.loc.gov/MARC21/slim}subfield ). 113 | chabon-bad-subfields-element.xml fails to validate 114 | ``` 115 | 116 | ## ... with marcvalidate 117 | 118 | While `yaz-marcdump` and `xmllint` are useful to identify structural problems within MARC records, `marcvalidate` can be used to validate MARC tags and subfields against an [Avram](https://format.gbv.de/schema/avram/specification) specification. The default specification was build by [Péter Király](https://pkiraly.github.io/2018/01/28/marc21-in-json/) based on the MARC documentation of the Library of Congress. The specification can be enhanced with local defined fields. 119 | 120 | By default `marcvalidate` expects "MARC (ISO 2709)" records: 121 | 122 | ```terminal 123 | $ marcvalidate loc.mrc 124 | 12360325 906 unknown field 125 | 1180649 035 unknown subfield 9 126 | ... 127 | ``` 128 | 129 | To validate "MARC XML" data use option `--type`: 130 | 131 | ```terminal 132 | $ marcvalidate --type XML loc.mrc.xml 133 | 12360325 906 unknown field 134 | 1180649 035 unknown subfield 9 135 | ... 136 | ``` 137 | 138 | To validate against a local Avram schema use option `--schema`: 139 | 140 | ```terminal 141 | $ marcvalidate --schema my_schema.json loc.mrc 142 | ``` 143 | 144 | If you want to run more detailed analyses check "[QA catalogues - a metadata quality assessment tool for MARC records](https://github.com/pkiraly/metadata-qa-marc)". 145 | --------------------------------------------------------------------------------