neu-mods 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b89b85501bd24a3e03e6cb9c0d8945c32b5b053ce21ce12d06c92ff1d411f99
4
- data.tar.gz: f7ba90fecf34428546872120f116b0de258bb56b4fb42e2c2d90a4d76eea338d
3
+ metadata.gz: d7e678073c1e18b2626473e1e8fcec32052a2a33075d34cea6fe96dca40e8315
4
+ data.tar.gz: 5d3d44f6bf9ee5600dfdaded3a9d2119472e86c1aa6621fbcd92ea8358619738
5
5
  SHA512:
6
- metadata.gz: 126a6f6a2fc04be9ee91a14c9469b05c9ebd5535a65f254116ac402d681e5d68d113c060003b365269a496d18a3917976b5ff9cd60ad1cbc4dfc746b63f4c77a
7
- data.tar.gz: db7440392fde517da3bd14f2ed90fe8623e8da15940989d49c85bb1e1c3a338f8b0c8f9e3df7bfbaafc608fe1379b3cd84cec627e3d78dab24a59e26f57d98a8
6
+ metadata.gz: ce304892f19636ecc57c487810a2ef2932f253d9702dcce6974a16c8e047b56ceeffb3ae25750bf2e5937345523567dd9d598ef59c32e671dcc80d62541748c8
7
+ data.tar.gz: a31247bacadff8b81b4789c2dc69647b2036b98e246af02492d1ecdfb14e1a625e1deb2f7c7ad7afff5298d531a6b6bcacfa803ab3ea7629ecea623e45e06667
data/.version CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.1
data/README.md CHANGED
@@ -31,6 +31,7 @@ doc.plain_title # => "What's New - How We Respond to Disaster, Episode 1"
31
31
  doc.title_parts # => { non_sort:, subtitle:, title:, part_name:, part_number: }
32
32
  # byte-faithful -- the edit forms pre-fill from these
33
33
  doc.abstract # => normalized, paragraph-joined String
34
+ doc.languages # => ["English"] a code-only <languageTerm>eng</> included
34
35
  doc.topical_subjects # => ["Civil society", ...] (every <topic>, for the access copy)
35
36
  doc.keywords # => [...] (only the editable attribute-free keyword subjects)
36
37
  doc.date_created_with_precision
@@ -112,11 +113,16 @@ intentional notes:
112
113
  its quirks* (e.g. multiple `given` nameParts concatenate with no separator),
113
114
  to preserve existing Solr/display output. Cleanups are a deliberate future
114
115
  contract change, not a silent one.
115
- - **Roles & languages** read the `type="text"` term and fall back to the **raw
116
- code** they are *not* MARC-relator / ISO-639 translated. Records carrying
117
- text forms (the norm) are unaffected; code-only records would differ. Vendoring
118
- those lookup tables (or depending on `iso-639`) is deferred to keep the gem
119
- Nokogiri-only and small.
116
+ - **Languages are translated; roles are not.** Both read the `type="text"` term
117
+ first. A code-only `languageTerm` is then translated through the vendored ISO
118
+ 639 registry (`lib/neu/mods/data/iso639-2.txt`, from the Library of Congress),
119
+ so `eng` projects `English`. That happens here rather than in a consumer's
120
+ display layer because otherwise Solr indexes `eng` while the page shows
121
+ `English`, and the language facet reads in codes.
122
+ A code-only `roleTerm` stays raw. A MARC relator is a display *label*, and the
123
+ label vocabulary belongs to the consumer — Cerberus's edit form and Atlas's
124
+ display word the same role differently. An unrecognised language code also
125
+ stays raw, since the record still said something.
120
126
  - **`description` is not projected.** MODS has no element of that name, and the
121
127
  two candidates — an `abstract` variant and `physicalDescription/note` —
122
128
  describe different things. Projecting a guess would put wrong data in the
@@ -0,0 +1,487 @@
1
+ aar||aa|Afar|afar
2
+ abk||ab|Abkhazian|abkhaze
3
+ ace|||Achinese|aceh
4
+ ach|||Acoli|acoli
5
+ ada|||Adangme|adangme
6
+ ady|||Adyghe; Adygei|adyghé
7
+ afa|||Afro-Asiatic languages|afro-asiatiques, langues
8
+ afh|||Afrihili|afrihili
9
+ afr||af|Afrikaans|afrikaans
10
+ ain|||Ainu|aïnou
11
+ aka||ak|Akan|akan
12
+ akk|||Akkadian|akkadien
13
+ alb|sqi|sq|Albanian|albanais
14
+ ale|||Aleut|aléoute
15
+ alg|||Algonquian languages|algonquines, langues
16
+ alt|||Southern Altai|altai du Sud
17
+ amh||am|Amharic|amharique
18
+ ang|||English, Old (ca.450-1100)|anglo-saxon (ca.450-1100)
19
+ anp|||Angika|angika
20
+ apa|||Apache languages|apaches, langues
21
+ ara||ar|Arabic|arabe
22
+ arc|||Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)|araméen d'empire (700-300 BCE)
23
+ arg||an|Aragonese|aragonais
24
+ arm|hye|hy|Armenian|arménien
25
+ arn|||Mapudungun; Mapuche|mapudungun; mapuche; mapuce
26
+ arp|||Arapaho|arapaho
27
+ art|||Artificial languages|artificielles, langues
28
+ arw|||Arawak|arawak
29
+ asm||as|Assamese|assamais
30
+ ast|||Asturian; Bable; Leonese; Asturleonese|asturien; bable; léonais; asturoléonais
31
+ ath|||Athapascan languages|athapascanes, langues
32
+ aus|||Australian languages|australiennes, langues
33
+ ava||av|Avaric|avar
34
+ ave||ae|Avestan|avestique
35
+ awa|||Awadhi|awadhi
36
+ aym||ay|Aymara|aymara
37
+ aze||az|Azerbaijani|azéri
38
+ bad|||Banda languages|banda, langues
39
+ bai|||Bamileke languages|bamiléké, langues
40
+ bak||ba|Bashkir|bachkir
41
+ bal|||Baluchi|baloutchi
42
+ bam||bm|Bambara|bambara
43
+ ban|||Balinese|balinais
44
+ baq|eus|eu|Basque|basque
45
+ bas|||Basa|basa
46
+ bat|||Baltic languages|baltes, langues
47
+ bej|||Beja; Bedawiyet|bedja
48
+ bel||be|Belarusian|biélorusse
49
+ bem|||Bemba|bemba
50
+ ben||bn|Bengali|bengali
51
+ ber|||Berber languages|berbères, langues
52
+ bho|||Bhojpuri|bhojpuri
53
+ bih|||Bihari languages|langues biharis
54
+ bik|||Bikol|bikol
55
+ bin|||Bini; Edo|bini; edo
56
+ bis||bi|Bislama|bichlamar
57
+ bla|||Siksika|blackfoot
58
+ bnt|||Bantu languages|bantou, langues
59
+ bos||bs|Bosnian|bosniaque
60
+ bra|||Braj|braj
61
+ bre||br|Breton|breton
62
+ btk|||Batak languages|batak, langues
63
+ bua|||Buriat|bouriate
64
+ bug|||Buginese|bugi
65
+ bul||bg|Bulgarian|bulgare
66
+ bur|mya|my|Burmese|birman
67
+ byn|||Blin; Bilin|blin; bilen
68
+ cad|||Caddo|caddo
69
+ cai|||Central American Indian languages|amérindiennes de L'Amérique centrale, langues
70
+ car|||Galibi Carib|karib; galibi; carib
71
+ cat||ca|Catalan; Valencian|catalan; valencien
72
+ cau|||Caucasian languages|caucasiennes, langues
73
+ ceb|||Cebuano|cebuano
74
+ cel|||Celtic languages|celtiques, langues; celtes, langues
75
+ cha||ch|Chamorro|chamorro
76
+ chb|||Chibcha|chibcha
77
+ che||ce|Chechen|tchétchène
78
+ chg|||Chagatai|djaghataï
79
+ chi|zho|zh|Chinese|chinois
80
+ chk|||Chuukese|chuuk
81
+ chm|||Mari|mari
82
+ chn|||Chinook jargon|chinook, jargon
83
+ cho|||Choctaw|choctaw
84
+ chp|||Chipewyan; Dene Suline|chipewyan
85
+ chr|||Cherokee|cherokee
86
+ chu||cu|Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic|slavon d'église; vieux slave; slavon liturgique; vieux bulgare
87
+ chv||cv|Chuvash|tchouvache
88
+ chy|||Cheyenne|cheyenne
89
+ cmc|||Chamic languages|chames, langues
90
+ cnr|||Montenegrin|monténégrin
91
+ cop|||Coptic|copte
92
+ cor||kw|Cornish|cornique
93
+ cos||co|Corsican|corse
94
+ cpe|||Creoles and pidgins, English based|créoles et pidgins basés sur l'anglais
95
+ cpf|||Creoles and pidgins, French-based|créoles et pidgins basés sur le français
96
+ cpp|||Creoles and pidgins, Portuguese-based|créoles et pidgins basés sur le portugais
97
+ cre||cr|Cree|cree
98
+ crh|||Crimean Tatar; Crimean Turkish|tatar de Crimé
99
+ crp|||Creoles and pidgins|créoles et pidgins
100
+ csb|||Kashubian|kachoube
101
+ cus|||Cushitic languages|couchitiques, langues
102
+ cze|ces|cs|Czech|tchèque
103
+ dak|||Dakota|dakota
104
+ dan||da|Danish|danois
105
+ dar|||Dargwa|dargwa
106
+ day|||Land Dayak languages|dayak, langues
107
+ del|||Delaware|delaware
108
+ den|||Slave (Athapascan)|esclave (athapascan)
109
+ dgr|||Tlicho; Dogrib|tlicho; dogrib
110
+ din|||Dinka|dinka
111
+ div||dv|Divehi; Dhivehi; Maldivian|maldivien
112
+ doi|||Dogri|dogri
113
+ dra|||Dravidian languages|dravidiennes, langues
114
+ dsb|||Lower Sorbian|bas-sorabe
115
+ dua|||Duala|douala
116
+ dum|||Dutch, Middle (ca.1050-1350)|néerlandais moyen (ca. 1050-1350)
117
+ dut|nld|nl|Dutch; Flemish|néerlandais; flamand
118
+ dyu|||Dyula|dioula
119
+ dzo||dz|Dzongkha|dzongkha
120
+ efi|||Efik|efik
121
+ egy|||Egyptian (Ancient)|égyptien
122
+ eka|||Ekajuk|ekajuk
123
+ elx|||Elamite|élamite
124
+ eng||en|English|anglais
125
+ enm|||English, Middle (1100-1500)|anglais moyen (1100-1500)
126
+ epo||eo|Esperanto|espéranto
127
+ est||et|Estonian|estonien
128
+ ewe||ee|Ewe|éwé
129
+ ewo|||Ewondo|éwondo
130
+ fan|||Fang|fang
131
+ fao||fo|Faroese|féroïen
132
+ fat|||Fanti|fanti
133
+ fij||fj|Fijian|fidjien
134
+ fil|||Filipino; Pilipino|filipino; pilipino
135
+ fin||fi|Finnish|finnois
136
+ fiu|||Finno-Ugrian languages|finno-ougriennes, langues
137
+ fon|||Fon|fon
138
+ fre|fra|fr|French|français
139
+ frm|||French, Middle (ca.1400-1600)|français moyen (1400-1600)
140
+ fro|||French, Old (842-ca.1400)|français ancien (842-ca.1400)
141
+ frr|||Northern Frisian|frison septentrional
142
+ frs|||Eastern Frisian|frison oriental
143
+ fry||fy|Western Frisian|frison occidental
144
+ ful||ff|Fulah|peul
145
+ fur|||Friulian|frioulan
146
+ gaa|||Ga|ga
147
+ gay|||Gayo|gayo
148
+ gba|||Gbaya|gbaya
149
+ gem|||Germanic languages|germaniques, langues
150
+ geo|kat|ka|Georgian|géorgien
151
+ ger|deu|de|German|allemand
152
+ gez|||Geez|guèze
153
+ gil|||Gilbertese|kiribati
154
+ gla||gd|Gaelic; Scottish Gaelic|gaélique; gaélique écossais
155
+ gle||ga|Irish|irlandais
156
+ glg||gl|Galician|galicien
157
+ glv||gv|Manx|manx; mannois
158
+ gmh|||German, Middle High (ca.1050-1500)|allemand, moyen haut (ca. 1050-1500)
159
+ goh|||German, Old High (ca.750-1050)|allemand, vieux haut (ca. 750-1050)
160
+ gon|||Gondi|gond
161
+ gor|||Gorontalo|gorontalo
162
+ got|||Gothic|gothique
163
+ grb|||Grebo|grebo
164
+ grc|||Greek, Ancient (to 1453)|grec ancien (jusqu'à 1453)
165
+ gre|ell|el|Modern Greek (1453-)|grec moderne (1453-)
166
+ grn||gn|Guarani|guarani
167
+ gsw|||Swiss German; Alemannic; Alsatian|suisse alémanique; alémanique; alsacien
168
+ guj||gu|Gujarati|goudjrati
169
+ gwi|||Gwich'in|gwich'in
170
+ hai|||Haida|haida
171
+ hat||ht|Haitian; Haitian Creole|haïtien; créole haïtien
172
+ hau||ha|Hausa|haoussa
173
+ haw|||Hawaiian|hawaïen
174
+ heb||he|Hebrew|hébreu
175
+ her||hz|Herero|herero
176
+ hil|||Hiligaynon|hiligaynon
177
+ him|||Himachali languages; Western Pahari languages|langues himachalis; langues paharis occidentales
178
+ hin||hi|Hindi|hindi
179
+ hit|||Hittite|hittite
180
+ hmn|||Hmong; Mong|hmong
181
+ hmo||ho|Hiri Motu|hiri motu
182
+ hrv||hr|Croatian|croate
183
+ hsb|||Upper Sorbian|haut-sorabe
184
+ hun||hu|Hungarian|hongrois
185
+ hup|||Hupa|hupa
186
+ iba|||Iban|iban
187
+ ibo||ig|Igbo|igbo
188
+ ice|isl|is|Icelandic|islandais
189
+ ido||io|Ido|ido
190
+ iii||ii|Sichuan Yi; Nuosu|yi de Sichuan
191
+ ijo|||Ijo languages|ijo, langues
192
+ iku||iu|Inuktitut|inuktitut
193
+ ile||ie|Interlingue; Occidental|interlingue
194
+ ilo|||Iloko|ilocano
195
+ ina||ia|Interlingua (International Auxiliary Language Association)|interlingua (langue auxiliaire internationale)
196
+ inc|||Indic languages|indo-aryennes, langues
197
+ ind||id|Indonesian|indonésien
198
+ ine|||Indo-European languages|indo-européennes, langues
199
+ inh|||Ingush|ingouche
200
+ ipk||ik|Inupiaq|inupiaq
201
+ ira|||Iranian languages|iraniennes, langues
202
+ iro|||Iroquoian languages|iroquoises, langues
203
+ ita||it|Italian|italien
204
+ jav||jv|Javanese|javanais
205
+ jbo|||Lojban|lojban
206
+ jpn||ja|Japanese|japonais
207
+ jpr|||Judeo-Persian|judéo-persan
208
+ jrb|||Judeo-Arabic|judéo-arabe
209
+ kaa|||Kara-Kalpak|karakalpak
210
+ kab|||Kabyle|kabyle
211
+ kac|||Kachin; Jingpho|kachin; jingpho
212
+ kal||kl|Kalaallisut; Greenlandic|groenlandais
213
+ kam|||Kamba|kamba
214
+ kan||kn|Kannada|kannada
215
+ kar|||Karen languages|karen, langues
216
+ kas||ks|Kashmiri|kashmiri
217
+ kau||kr|Kanuri|kanouri
218
+ kaw|||Kawi|kawi
219
+ kaz||kk|Kazakh|kazakh
220
+ kbd|||Kabardian|kabardien
221
+ kha|||Khasi|khasi
222
+ khi|||Khoisan languages|khoïsan, langues
223
+ khm||km|Central Khmer|khmer central
224
+ kho|||Khotanese; Sakan|khotanais; sakan
225
+ kik||ki|Kikuyu; Gikuyu|kikuyu
226
+ kin||rw|Kinyarwanda|rwanda
227
+ kir||ky|Kirghiz; Kyrgyz|kirghiz
228
+ kmb|||Kimbundu|kimbundu
229
+ kok|||Konkani|konkani
230
+ kom||kv|Komi|kom
231
+ kon||kg|Kongo|kongo
232
+ kor||ko|Korean|coréen
233
+ kos|||Kosraean|kosrae
234
+ kpe|||Kpelle|kpellé
235
+ krc|||Karachay-Balkar|karatchai balkar
236
+ krl|||Karelian|carélien
237
+ kro|||Kru languages|krou, langues
238
+ kru|||Kurukh|kurukh
239
+ kua||kj|Kuanyama; Kwanyama|kuanyama; kwanyama
240
+ kum|||Kumyk|koumyk
241
+ kur||ku|Kurdish|kurde
242
+ kut|||Kutenai|kutenai
243
+ lad|||Ladino|judéo-espagnol
244
+ lah|||Lahnda|lahnda
245
+ lam|||Lamba|lamba
246
+ lao||lo|Lao|lao
247
+ lat||la|Latin|latin
248
+ lav||lv|Latvian|letton
249
+ lez|||Lezghian|lezghien
250
+ lim||li|Limburgan; Limburger; Limburgish|limbourgeois
251
+ lin||ln|Lingala|lingala
252
+ lit||lt|Lithuanian|lituanien
253
+ lol|||Mongo|mongo
254
+ loz|||Lozi|lozi
255
+ ltz||lb|Luxembourgish; Letzeburgesch|luxembourgeois
256
+ lua|||Luba-Lulua|luba-lulua
257
+ lub||lu|Luba-Katanga|luba-katanga
258
+ lug||lg|Ganda|ganda
259
+ lui|||Luiseno|luiseno
260
+ lun|||Lunda|lunda
261
+ luo|||Luo (Kenya and Tanzania)|luo (Kenya et Tanzanie)
262
+ lus|||Lushai|lushai
263
+ mac|mkd|mk|Macedonian|macédonien
264
+ mad|||Madurese|madourais
265
+ mag|||Magahi|magahi
266
+ mah||mh|Marshallese|marshall
267
+ mai|||Maithili|maithili
268
+ mak|||Makasar|makassar
269
+ mal||ml|Malayalam|malayalam
270
+ man|||Mandingo|mandingue
271
+ mao|mri|mi|Maori|maori
272
+ map|||Austronesian languages|austronésiennes, langues
273
+ mar||mr|Marathi|marathe
274
+ mas|||Masai|massaï
275
+ may|msa|ms|Malay|malais
276
+ mdf|||Moksha|moksa
277
+ mdr|||Mandar|mandar
278
+ men|||Mende|mendé
279
+ mga|||Irish, Middle (900-1200)|irlandais moyen (900-1200)
280
+ mic|||Mi'kmaq; Micmac|mi'kmaq; micmac
281
+ min|||Minangkabau|minangkabau
282
+ mis|||Uncoded languages|langues non codées
283
+ mkh|||Mon-Khmer languages|môn-khmer, langues
284
+ mlg||mg|Malagasy|malgache
285
+ mlt||mt|Maltese|maltais
286
+ mnc|||Manchu|mandchou
287
+ mni|||Manipuri|manipuri
288
+ mno|||Manobo languages|manobo, langues
289
+ moh|||Mohawk|mohawk
290
+ mon||mn|Mongolian|mongol
291
+ mos|||Mossi|moré
292
+ mul|||Multiple languages|multilingue
293
+ mun|||Munda languages|mounda, langues
294
+ mus|||Creek|muskogee
295
+ mwl|||Mirandese|mirandais
296
+ mwr|||Marwari|marvari
297
+ myn|||Mayan languages|maya, langues
298
+ myv|||Erzya|erza
299
+ nah|||Nahuatl languages|nahuatl, langues
300
+ nai|||North American Indian languages|nord-amérindiennes, langues
301
+ nap|||Neapolitan|napolitain
302
+ nau||na|Nauru|nauruan
303
+ nav||nv|Navajo; Navaho|navaho
304
+ nbl||nr|South Ndebele|ndébélé du Sud
305
+ nde||nd|North Ndebele|ndébélé du Nord
306
+ ndo||ng|Ndonga|ndonga
307
+ nds|||Low German; Low Saxon; German, Low; Saxon, Low|bas allemand; bas saxon; allemand, bas; saxon, bas
308
+ nep||ne|Nepali|népalais
309
+ new|||Nepal Bhasa; Newar; Newari|nepal bhasa; néwar; newari
310
+ nia|||Nias|nias
311
+ nic|||Niger-Kordofanian languages|nigéro-kordofaniennes, langues
312
+ niu|||Niuean|niué
313
+ nno||nn|Norwegian Nynorsk|norvégien nynorsk
314
+ nob||nb|Norwegian Bokmål|norvégien bokmål
315
+ nog|||Nogai|nogaï; nogay
316
+ non|||Norse, Old|norrois, vieux
317
+ nor||no|Norwegian|norvégien
318
+ nqo|||N'Ko|n'ko
319
+ nso|||Pedi; Sepedi; Northern Sotho|pedi; sepedi; sotho du Nord
320
+ nub|||Nubian languages|nubiennes, langues
321
+ nwc|||Classical Newari; Old Newari; Classical Nepal Bhasa|newari classique
322
+ nya||ny|Chichewa; Chewa; Nyanja|chichewa; chewa; nyanja
323
+ nym|||Nyamwezi|nyamwezi
324
+ nyn|||Nyankole|nyankolé
325
+ nyo|||Nyoro|nyoro
326
+ nzi|||Nzima|nzema
327
+ oci||oc|Occitan (post 1500)|occitan (après 1500)
328
+ oji||oj|Ojibwa|ojibwa
329
+ ori||or|Oriya|oriya
330
+ orm||om|Oromo|galla
331
+ osa|||Osage|osage
332
+ oss||os|Ossetian; Ossetic|ossète
333
+ ota|||Turkish, Ottoman (1500-1928)|turc ottoman (1500-1928)
334
+ oto|||Otomian languages|otomi, langues
335
+ paa|||Papuan languages|papoues, langues
336
+ pag|||Pangasinan|pangasinan
337
+ pal|||Pahlavi|pahlavi
338
+ pam|||Pampanga; Kapampangan|pampangan
339
+ pan||pa|Panjabi; Punjabi|pendjabi
340
+ pap|||Papiamento|papiamento
341
+ pau|||Palauan|palau
342
+ peo|||Persian, Old (ca.600-400 B.C.)|perse, vieux (ca. 600-400 av. J.-C.)
343
+ per|fas|fa|Persian|persan
344
+ phi|||Philippine languages|philippines, langues
345
+ phn|||Phoenician|phénicien
346
+ pli||pi|Pali|pali
347
+ pol||pl|Polish|polonais
348
+ pon|||Pohnpeian|pohnpei
349
+ por||pt|Portuguese|portugais
350
+ pra|||Prakrit languages|prâkrit, langues
351
+ pro|||Provençal, Old (to 1500); Occitan, Old (to 1500)|provençal ancien (jusqu'à 1500); occitan ancien (jusqu'à 1500)
352
+ pus||ps|Pushto; Pashto|pachto
353
+ qaa-qtz|||Reserved for local use|réservée à l'usage local
354
+ que||qu|Quechua|quechua
355
+ raj|||Rajasthani|rajasthani
356
+ rap|||Rapanui|rapanui
357
+ rar|||Rarotongan; Cook Islands Maori|rarotonga; maori des îles Cook
358
+ roa|||Romance languages|romanes, langues
359
+ roh||rm|Romansh|romanche
360
+ rom|||Romany|tsigane
361
+ rum|ron|ro|Romanian; Moldavian; Moldovan|roumain; moldave
362
+ run||rn|Rundi|rundi
363
+ rup|||Aromanian; Arumanian; Macedo-Romanian|aroumain; macédo-roumain
364
+ rus||ru|Russian|russe
365
+ sad|||Sandawe|sandawe
366
+ sag||sg|Sango|sango
367
+ sah|||Yakut|iakoute
368
+ sai|||South American Indian languages|sud-amérindiennes, langues
369
+ sal|||Salishan languages|salishennes, langues
370
+ sam|||Samaritan Aramaic|samaritain
371
+ san||sa|Sanskrit|sanskrit
372
+ sas|||Sasak|sasak
373
+ sat|||Santali|santal
374
+ scn|||Sicilian|sicilien
375
+ sco|||Scots|écossais
376
+ sel|||Selkup|selkoupe
377
+ sem|||Semitic languages|sémitiques, langues
378
+ sga|||Irish, Old (to 900)|irlandais ancien (jusqu'à 900)
379
+ sgn|||Sign Languages|langues des signes
380
+ shn|||Shan|chan
381
+ sid|||Sidamo|sidamo
382
+ sin||si|Sinhala; Sinhalese|singhalais
383
+ sio|||Siouan languages|sioux, langues
384
+ sit|||Sino-Tibetan languages|sino-tibétaines, langues
385
+ sla|||Slavic languages|slaves, langues
386
+ slo|slk|sk|Slovak|slovaque
387
+ slv||sl|Slovenian|slovène
388
+ sma|||Southern Sami|sami du Sud
389
+ sme||se|Northern Sami|sami du Nord
390
+ smi|||Sami languages|sames, langues
391
+ smj|||Lule Sami|sami de Lule
392
+ smn|||Inari Sami|sami d'Inari
393
+ smo||sm|Samoan|samoan
394
+ sms|||Skolt Sami|sami skolt
395
+ sna||sn|Shona|shona
396
+ snd||sd|Sindhi|sindhi
397
+ snk|||Soninke|soninké
398
+ sog|||Sogdian|sogdien
399
+ som||so|Somali|somali
400
+ son|||Songhai languages|songhai, langues
401
+ sot||st|Sotho, Southern|sotho du Sud
402
+ spa||es|Spanish; Castilian|espagnol; castillan
403
+ srd||sc|Sardinian|sarde
404
+ srn|||Sranan Tongo|sranan tongo
405
+ srp||sr|Serbian|serbe
406
+ srr|||Serer|sérère
407
+ ssa|||Nilo-Saharan languages|nilo-sahariennes, langues
408
+ ssw||ss|Swati|swati
409
+ suk|||Sukuma|sukuma
410
+ sun||su|Sundanese|soundanais
411
+ sus|||Susu|soussou
412
+ sux|||Sumerian|sumérien
413
+ swa||sw|Swahili|swahili
414
+ swe||sv|Swedish|suédois
415
+ syc|||Classical Syriac|syriaque classique
416
+ syr|||Syriac|syriaque
417
+ tah||ty|Tahitian|tahitien
418
+ tai|||Tai languages|tai, langues
419
+ tam||ta|Tamil|tamoul
420
+ tat||tt|Tatar|tatar
421
+ tel||te|Telugu|télougou
422
+ tem|||Timne|temne
423
+ ter|||Tereno|tereno
424
+ tet|||Tetum|tetum
425
+ tgk||tg|Tajik|tadjik
426
+ tgl||tl|Tagalog|tagalog
427
+ tha||th|Thai|thaï
428
+ tib|bod|bo|Tibetan|tibétain
429
+ tig|||Tigre|tigré
430
+ tir||ti|Tigrinya|tigrigna
431
+ tiv|||Tiv|tiv
432
+ tkl|||Tokelau|tokelau
433
+ tlh|||Klingon; tlhIngan-Hol|klingon
434
+ tli|||Tlingit|tlingit
435
+ tmh|||Tamashek|tamacheq
436
+ tog|||Tonga (Nyasa)|tonga (Nyasa)
437
+ ton||to|Tonga (Tonga Islands)|tongan (Îles Tonga)
438
+ tpi|||Tok Pisin|tok pisin
439
+ tsi|||Tsimshian|tsimshian
440
+ tsn||tn|Tswana|tswana
441
+ tso||ts|Tsonga|tsonga
442
+ tuk||tk|Turkmen|turkmène
443
+ tum|||Tumbuka|tumbuka
444
+ tup|||Tupi languages|tupi, langues
445
+ tur||tr|Turkish|turc
446
+ tut|||Altaic languages|altaïques, langues
447
+ tvl|||Tuvalu|tuvalu
448
+ twi||tw|Twi|twi
449
+ tyv|||Tuvinian|touva
450
+ udm|||Udmurt|oudmourte
451
+ uga|||Ugaritic|ougaritique
452
+ uig||ug|Uighur; Uyghur|ouïgour
453
+ ukr||uk|Ukrainian|ukrainien
454
+ umb|||Umbundu|umbundu
455
+ und|||Undetermined|indéterminée
456
+ urd||ur|Urdu|ourdou
457
+ uzb||uz|Uzbek|ouszbek
458
+ vai|||Vai|vaï
459
+ ven||ve|Venda|venda
460
+ vie||vi|Vietnamese|vietnamien
461
+ vol||vo|Volapük|volapük
462
+ vot|||Votic|vote
463
+ wak|||Wakashan languages|wakashanes, langues
464
+ wal|||Wolaitta; Wolaytta|wolaitta; wolaytta
465
+ war|||Waray|waray
466
+ was|||Washo|washo
467
+ wel|cym|cy|Welsh|gallois
468
+ wen|||Sorbian languages|sorabes, langues
469
+ wln||wa|Walloon|wallon
470
+ wol||wo|Wolof|wolof
471
+ xal|||Kalmyk; Oirat|kalmouk; oïrat
472
+ xho||xh|Xhosa|xhosa
473
+ yao|||Yao|yao
474
+ yap|||Yapese|yapois
475
+ yid||yi|Yiddish|yiddish
476
+ yor||yo|Yoruba|yoruba
477
+ ypk|||Yupik languages|yupik, langues
478
+ zap|||Zapotec|zapotèque
479
+ zbl|||Blissymbols; Blissymbolics; Bliss|symboles Bliss; Bliss
480
+ zen|||Zenaga|zenaga
481
+ zgh|||Standard Moroccan Tamazight|amazighe standard marocain
482
+ zha||za|Zhuang; Chuang|zhuang; chuang
483
+ znd|||Zande languages|zandé, langues
484
+ zul||zu|Zulu|zoulou
485
+ zun|||Zuni|zuni
486
+ zxx|||No linguistic content; Not applicable|pas de contenu linguistique; non applicable
487
+ zza|||Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki|zaza; dimili; dimli; kirdki; kirmanjki; zazaki
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NEU
4
+ module MODS
5
+ # ISO 639 code -> English language name, for projecting a code-only
6
+ # languageTerm as something a reader (and a Solr facet) can use.
7
+ #
8
+ # This is the one place a code is translated, on purpose. The alternative --
9
+ # mapping in each consumer's display layer -- leaves Solr indexing "eng"
10
+ # while the page shows "English", so the language facet reads in codes. One
11
+ # table, read once, keeps the projection, the display and the index agreed.
12
+ #
13
+ # Roles are deliberately NOT translated here; a MARC relator is a display
14
+ # label, and the label vocabulary belongs to the consumer (see README).
15
+ module LanguageCodes
16
+ # The Library of Congress ISO 639-2 registry, vendored byte-for-byte from
17
+ # https://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt so its
18
+ # provenance is a diff rather than a claim. Pipe-delimited:
19
+ # alpha3-bibliographic | alpha3-terminologic | alpha2 | English | French.
20
+ # It lives outside lib/*.rb because the English names carry non-ASCII and
21
+ # the source-purity spec holds the Ruby files to ASCII.
22
+ REGISTRY_PATH = File.expand_path("data/iso639-2.txt", __dir__)
23
+
24
+ # Every alpha-3 bibliographic, alpha-3 terminologic and alpha-2 code that
25
+ # the registry defines, each pointing at its English name. MODS records
26
+ # declare authority="iso639-2b" most often, but iso639-1 and the
27
+ # terminologic codes are equally valid, and a lookup table costs the same
28
+ # whether it holds one form or all three.
29
+ TERMS = File.readlines(REGISTRY_PATH, encoding: "bom|utf-8").each_with_object({}) do |line, terms|
30
+ bibliographic, terminologic, alpha2, english = line.chomp.split("|")
31
+ next if english.to_s.empty?
32
+
33
+ # The registry lists synonyms in preference order, so "Spanish;
34
+ # Castilian" becomes "Spanish". Rendering every synonym would make a
35
+ # facet value nobody would click.
36
+ name = english.split(";").first.strip
37
+ [bibliographic, terminologic, alpha2].each do |code|
38
+ terms[code] = name unless code.to_s.empty?
39
+ end
40
+ end.freeze
41
+
42
+ # The English name for a code, or the code itself when the registry does
43
+ # not define it. Never returns nil for a present value: an unrecognised
44
+ # code is still what the record says, and dropping it would lose data.
45
+ def self.term(code)
46
+ key = code.to_s.strip
47
+ return key if key.empty?
48
+
49
+ TERMS.fetch(key.downcase, key)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -116,9 +116,7 @@ module NEU
116
116
 
117
117
  # Every <topic> under any top-level <subject> (the access-copy projection,
118
118
  # equivalent to Atlas's extract_topical_subjects).
119
- def topical_subjects
120
- doc.xpath("/mods:mods/mods:subject/mods:topic", NAMESPACE).map { |t| clean(t.text) }
121
- end
119
+ def topical_subjects = texts_at("/mods:mods/mods:subject/mods:topic")
122
120
 
123
121
  # The other subject axes. Cerberus's IPTC ingest writes subject/geographic
124
122
  # from the IPTC City and State fields, so this one was also being written
@@ -168,12 +166,18 @@ module NEU
168
166
 
169
167
  # --- Scalars / simple arrays --------------------------------------------
170
168
 
169
+ # Prefer the type="text" term, and translate a code-only one through the
170
+ # ISO 639 registry. A record saying `eng` projects "English", so the
171
+ # display and the Solr language facet read the same value rather than the
172
+ # facet showing codes. An unrecognised code survives as itself.
171
173
  def languages
172
- doc.xpath("/mods:mods/mods:language", NAMESPACE).map do |lang|
173
- term = lang.at_xpath("mods:languageTerm[@type='text']", NAMESPACE) ||
174
- lang.at_xpath("mods:languageTerm", NAMESPACE)
175
- clean(term&.text)
176
- end.compact
174
+ doc.xpath("/mods:mods/mods:language", NAMESPACE).filter_map do |lang|
175
+ text = lang.at_xpath("mods:languageTerm[@type='text']", NAMESPACE)
176
+ next clean(text.text) if text
177
+
178
+ code = clean(lang.at_xpath("mods:languageTerm", NAMESPACE)&.text)
179
+ code && LanguageCodes.term(code)
180
+ end
177
181
  end
178
182
 
179
183
  # MODS repeats typeOfResource, and repeats physicalDescription (and form and
@@ -184,9 +188,7 @@ module NEU
184
188
  def extent = texts_at("/mods:mods/mods:physicalDescription/mods:extent")
185
189
  def digital_origin = texts_at("/mods:mods/mods:physicalDescription/mods:digitalOrigin")
186
190
 
187
- def genres
188
- doc.xpath("/mods:mods/mods:genre", NAMESPACE).map { |g| clean(g.text) }
189
- end
191
+ def genres = texts_at("/mods:mods/mods:genre")
190
192
 
191
193
  # originInfo repeats, and so do publisher and edition within one. Cerberus's
192
194
  # IPTC ingest writes the publisher from the IPTC Source field on every batch,
@@ -257,9 +259,7 @@ module NEU
257
259
  end
258
260
  end
259
261
 
260
- def identifiers
261
- doc.xpath("/mods:mods/mods:identifier", NAMESPACE).map { |i| clean(i.text) }
262
- end
262
+ def identifiers = texts_at("/mods:mods/mods:identifier")
263
263
 
264
264
  def permanent_url
265
265
  node = doc.at_xpath("/mods:mods/mods:identifier[@type='hdl']", NAMESPACE)
@@ -461,8 +461,11 @@ module NEU
461
461
  node ? NEU::MODS.canonical_ws(node.text) : ""
462
462
  end
463
463
 
464
- # The :many counterpart of #text_at. Blank members drop out rather than
465
- # arriving as nil, so a consumer mapping over the array cannot trip on one.
464
+ # The :many counterpart of #text_at, and the one way this file builds a
465
+ # string array. Blank members drop out rather than arriving as nil: a
466
+ # record template that seeds an empty <topic> for an edit form to fill --
467
+ # which is exactly what Atlas's MODSBuilder writes -- otherwise projects
468
+ # [nil], and every consumer of that array has to guard for it.
466
469
  def texts_at(xpath)
467
470
  doc.xpath(xpath, NAMESPACE).filter_map { |node| clean(node.text) }
468
471
  end
data/lib/neu-mods.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative "neu/mods/version"
4
4
  require_relative "neu/mods/canonicalize"
5
+ require_relative "neu/mods/language_codes"
5
6
  require_relative "neu/mods/selectors"
6
7
  require_relative "neu/mods/projection"
7
8
  require_relative "neu/mods/document"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neu-mods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cliff
@@ -68,7 +68,9 @@ files:
68
68
  - Rakefile
69
69
  - lib/neu-mods.rb
70
70
  - lib/neu/mods/canonicalize.rb
71
+ - lib/neu/mods/data/iso639-2.txt
71
72
  - lib/neu/mods/document.rb
73
+ - lib/neu/mods/language_codes.rb
72
74
  - lib/neu/mods/projection.rb
73
75
  - lib/neu/mods/selectors.rb
74
76
  - lib/neu/mods/version.rb