Ticket #1825: MODS.js.diff
| File MODS.js.diff, 9.8 KB (added by karnesky, 5 years ago) |
|---|
-
MODS.js
2 2 "translatorID":"0e2235e7-babf-413c-9acf-f27cce5f059c", 3 3 "translatorType":3, 4 4 "label":"MODS", 5 "creator":"Simon Kornblith ",5 "creator":"Simon Kornblith and Richard Karnesky", 6 6 "target":"xml", 7 7 "minVersion":"2.1b3", 8 8 "maxVersion":"", … … 21 21 return name.uri == "http://www.loc.gov/mods/v3" && (name.localName == "modsCollection" || name.localName == "mods"); 22 22 } 23 23 24 var partialItemTypes = ["bookSection", "journalArticle", "magazineArticle", "newspaperArticle" ];24 var partialItemTypes = ["bookSection", "journalArticle", "magazineArticle", "newspaperArticle", "conferencePaper", "encyclopediaArticle", "dictionaryEntry"]; 25 25 26 26 function doExport() { 27 27 Zotero.setCharacterSet("utf-8"); … … 39 39 if(item.title) { 40 40 mods.titleInfo.title = item.title; 41 41 } 42 if(item.shortTitle) { 43 mods.titleInfo += <titleInfo type="abbreviated"><title>{item.shortTitle}</title></titleInfo>; 44 } 42 45 43 46 // XML tag typeOfResource/genre; object field type 47 // 48 // The exact marcGenre of a book section can, perhaps, be debated; 49 // But it should have 'book' as the host's genre. 44 50 var modsType, marcGenre; 45 if(item.itemType == "book" || item.itemType == "bookSection") {51 if(item.itemType == "book") { 46 52 modsType = "text"; 47 53 marcGenre = "book"; 48 } else if(item.itemType == "journalArticle" || item.itemType == "magazineArticle" ) {54 } else if(item.itemType == "journalArticle" || item.itemType == "magazineArticle" || item.itemType == "conferencePaper" || item.itemType == "encyclopediaArticle" || item.itemType == "newspaperArticle" || item.itemType == "bookSection") { 49 55 modsType = "text"; 50 marcGenre = "periodical"; 51 } else if(item.itemType == "newspaperArticle") { 52 modsType = "text"; 53 marcGenre = "newspaper"; 56 marcGenre = "article"; 54 57 } else if(item.itemType == "thesis") { 55 58 modsType = "text"; 56 59 marcGenre = "thesis"; … … 85 88 if(item.thesisType) { 86 89 mods.genre += <genre>{item.thesisType}</genre>; 87 90 } 88 if(item.type) {91 else if(item.type) { 89 92 mods.genre += <genre>{item.type}</genre>; 90 93 } 91 94 … … 96 99 roleTerm = "aut"; 97 100 } else if(item.creators[j].creatorType == "editor") { 98 101 roleTerm = "edt"; 102 } else if(item.creators[j].creatorType == "translator") { 103 roleTerm = "trl"; 99 104 } else { 100 105 roleTerm = "ctb"; 101 106 } 102 107 103 108 // FIXME - currently all names are personal 104 if(item.creators[j].fieldMode == 1) { 105 mods.name += <name type="personal"> 106 <namePart>{item.creators[j].lastName}</namePart> 107 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 108 </name>; 109 } else { 110 mods.name += <name type="personal"> 111 <namePart type="family">{item.creators[j].lastName}</namePart> 112 <namePart type="given">{item.creators[j].firstName}</namePart> 113 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 114 </name>; 109 if(item.creators[j].creatorType != "seriesEditor") { 110 if(isPartialItem && item.creators[j].creatorType == "editor"){ 111 if(item.creators[j].fieldMode == 1) { 112 mods.relatedItem.name += <name type="personal"> 113 <namePart>{item.creators[j].lastName}</namePart> 114 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 115 </name>; 116 } else { 117 mods.relatedItem.name += <name type="personal"> 118 <namePart type="family">{item.creators[j].lastName}</namePart> 119 <namePart type="given">{item.creators[j].firstName}</namePart> 120 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 121 </name>; 122 } 123 } else { 124 if(item.creators[j].fieldMode == 1) { 125 mods.name += <name type="personal"> 126 <namePart>{item.creators[j].lastName}</namePart> 127 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 128 </name>; 129 } else { 130 mods.name += <name type="personal"> 131 <namePart type="family">{item.creators[j].lastName}</namePart> 132 <namePart type="given">{item.creators[j].firstName}</namePart> 133 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 134 </name>; 135 } 136 } 115 137 } 116 138 } 117 139 … … 209 231 var tag = <{dateType}>{item.date}</{dateType}>; 210 232 originInfo += tag; 211 233 } 212 if(item.accessDate) { 213 originInfo += <dateCaptured>{item.accessDate}</dateCaptured>; 234 235 if(item.numPages) { 236 mods.physicalDescription = <physicalDescription><extent unit="pages"><total>{item.numPages}</total></extent></physicalDescription>; 214 237 } 238 215 239 if(originInfo.length() != 1) { 216 240 if(isPartialItem) { 217 241 // For a journal article, bookSection, etc., this goes under the host … … 220 244 mods.originInfo += <originInfo>{originInfo}</originInfo>; 221 245 } 222 246 } 247 248 // eXist Solutions points out that most types are more often 249 // monographic than not & will use this internally. 250 // Perhaps comment this out in the main distribution, though. 251 mods.originInfo.issuance = "monographic"; 252 253 if(isPartialItem) { 254 // eXist Solutions points out that these types are more often 255 // continuing than not & will use this internally. 256 // Perhaps comment this out in the main distribution, though. 257 if(item.itemType == "journalArticle" || item.itemType == "magazineArticle" || item.itemType == "newspaperArticle") { 258 mods.relatedItem.originInfo.issuance = "continuing"; 259 if(item.itemType == "journalArticle" || item.itemType == "magazineArticle") { 260 mods.relatedItem.genre += <genre authority="marcgt">periodical</genre>; 261 } else if (item.itemType == "newspaperArticle") { 262 mods.relatedItem.genre += <genre authority="marcgt">newspaper</genre>; 263 } 264 } 265 else if (item.itemType == "bookSection" || item.itemType == "conferencePaper" || item.itemType == "encyclopediaArticle") { 266 mods.relatedItem.originInfo.issuance = "monographic"; 267 if (item.itemType == "bookSection") { 268 mods.relatedItem.genre += <genre authority="marcgt">book</genre>; 269 } else if (item.itemType == "conferencePaper") { 270 mods.relatedItem.genre += <genre authority="marcgt">conference publication</genre>; 271 if (item.conferenceName) { 272 mods.relatedItem.name += <name type="conference"> 273 <namePart>{item.conferenceName}</namePart> 274 </name>; 275 } 276 } else if (item.itemType == "encyclopediaArticle") { 277 mods.relatedItem.genre += <genre authority="marcgt">encyclopedia</genre>; 278 } 279 } 280 } 223 281 224 282 // XML tag identifier; object fields ISBN, ISSN 225 283 if(isPartialItem) { … … 247 305 mods.classification = item.callNumber; 248 306 } 249 307 308 // XML tag location.url; object field archiveLocation 309 if(item.url) { 310 mods.location.url += item.url; 311 if(item.accessDate) { 312 mods.location.url.@dateLastAccessed = item.accessDate; 313 } 314 } 315 250 316 // XML tag location.physicalLocation; object field archiveLocation 251 317 if(item.archiveLocation) { 252 mods.location .physicalLocation = item.archiveLocation;318 mods.location += <location><physicalLocation>{item.archiveLocation}</physicalLocation></location>; 253 319 } 254 320 255 // XML tag location.url; object field archiveLocation256 if(item.url) {257 mods.location.url = item.url;258 }259 260 321 // XML tag title.titleInfo; object field journalAbbreviation 261 322 if(item.journalAbbreviation) { 262 323 mods.relatedItem.titleInfo += <titleInfo type="abbreviated"><title>{item.journalAbbreviation}</title></titleInfo>; … … 286 347 for(var j in item.tags) { 287 348 mods.subject += <subject><topic>{item.tags[j].tag}</topic></subject>; 288 349 } 350 351 /** LANGUAGE **/ 352 353 if(item.language) { 354 mods.language.languageTerm = <languageTerm type="text">{item.language}</languageTerm>; 355 } 356 357 /** EXTRA->NOTE **/ 358 if(item.extra) { 359 mods.note += <note>{item.extra}</note>; 360 } 289 361 290 362 291 363 // XML tag relatedItem.titleInfo; object field series 292 364 if(item.seriesTitle || item.series || item.seriesNumber || item.seriesText) { 293 365 var series = <relatedItem type="series"/>; 366 367 // eXist Solutions points out that these types are more often 368 // continuing than not & will use this internally. 369 // Perhaps comment this out in the main distribution, though. 370 series.originInfo.issuance = "continuing"; 294 371 295 372 if(item.series) { 296 373 series.titleInfo.title = item.series; 297 374 } 298 375 299 376 if(item.seriesTitle) { 300 series.titleInfo. partTitle = item.seriesTitle;377 series.titleInfo.title += <title>{item.seriesTitle}</title>; 301 378 } 302 379 303 380 if(item.seriesText) { … … 305 382 } 306 383 307 384 if(item.seriesNumber) { 308 series. titleInfo.partNumber = item.seriesNumber;385 series.part.detail = <detail type="volume"><number>{item.seriesNumber}</number></detail>; 309 386 } 387 388 // handle series editors 389 for(var j in item.creators) { 390 var roleTerm = ""; 391 if(item.creators[j].creatorType == "seriesEditor") { 392 roleTerm = "pbd"; 393 if(item.creators[j].fieldMode == 1) { 394 series.name += <name type="personal"> 395 <namePart>{item.creators[j].lastName}</namePart> 396 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 397 </name>; 398 } else { 399 series.name += <name type="personal"> 400 <namePart type="family">{item.creators[j].lastName}</namePart> 401 <namePart type="given">{item.creators[j].firstName}</namePart> 402 <role><roleTerm type="code" authority="marcrelator">{roleTerm}</roleTerm></role> 403 </name>; 404 } 405 } 406 } 310 407 311 408 // TODO: make this work in import 312 / *if(item.itemType == "bookSection") {313 // For a book section, series info must go inside host tag409 // 410 if(isPartialItem) { 314 411 mods.relatedItem.relatedItem = series; 315 } else { */412 } else { 316 413 mods.relatedItem += series; 317 //}414 } 318 415 } 319 416 320 417 modsCollection.mods += mods;