{ "translatorID": "0e2235e7-babf-413c-9acf-f27cce5f059c", "label": "MODS", "creator": "Simon Kornblith and Richard Karnesky", "target": "xml", "minVersion": "2.1.9", "maxVersion": "", "priority": 50, "configOptions": { "dataMode": "xml/dom" }, "displayOptions": { "exportNotes": true }, "inRepository": true, "translatorType": 3, "lastUpdated": "2020-05-29 00:25:03" } /* ***** BEGIN LICENSE BLOCK ***** Copyright © 2019 Simon Kornblith and Richard Karnesky This file is part of Zotero. Zotero is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Zotero is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Zotero. If not, see . ***** END LICENSE BLOCK ***** */ var fromMarcGenre = { // "abstract or summary":XXX, // "abstract":XXX, // "summary":XXX, "art reproduction": "artwork", article: "journalArticle", autobiography: "book", bibliography: "book", biography: "book", book: "book", // "calendar":XXX, // "catalog":XXX, chart: "artwork", "comic or graphic novel": "book", comic: "book", "graphic novel": "book", "comic strip": "artwork", "conference publication": "conferencePaper", // "database":XXX, dictionary: "dictionaryEntry", diorama: "artwork", // "directory":XXX, drama: "book", encyclopedia: "encyclopediaArticle", // "essay":XXX, festschrift: "book", fiction: "book", // "filmography":XXX, filmstrip: "videoRecording", // "findingaid":XXX, // "flash card":XXX, folktale: "book", // "font":XXX, // "game":XXX, "government publication": "book", graphic: "artwork", globe: "map", handbook: "book", history: "book", hymnal: "book", "humor,satire": "book", humor: "book", satire: "book", // "index":XXX, // "instruction":XXX, // "interview":XXX, // "issue":XXX, journal: "journalArticle", kit: "artwork", // "language instruction":XXX, "law report or digest": "journalArticle", "law report": "journalArticle", digest: "journalArticle", "law digest": "journalArticle", "legal article": "journalArticle", "legal case and case notes": "case", "legal case": "case", "case notes": "case", legislation: "statute", "loose-leaf": "manuscript", map: "map", memoir: "book", "microscope slide": "artwork", model: "artwork", // "multivolume monograph":XXX, novel: "book", // "numeric data":XXX, // "offprint":XXX, "online system or service": "webpage", "online system": "webpage", service: "webpage", "online service": "webpage", patent: "patent", periodical: "journalArticle", picture: "artwork", // "poetry":XXX, // "programmed text":XXX, realia: "artwork", // "rehearsal":XXX, // "remote sensing image":XXX, // "reporting":XXX, // "review":XXX, script: "book", // "series":XXX, // "short story":XXX, slide: "artwork", sound: "audioRecording", speech: "audioRecording", "standard or specification": "report", standard: "report", // "specification":XXX, // "statistics":XXX, // "survey of literature":XXX, "technical report": "report", newspaper: "newspaperArticle", theses: "thesis", thesis: "thesis", // "toy":XXX, transparency: "artwork", // "treaty":XXX, videorecording: "videoRecording", letter: "letter", "motion picture": "film", "art original": "artwork", "web site": "webpage", yearbook: "book" }; var toMarcGenre = { artwork: "art original", audioRecording: "sound", bill: "legislation", blogPost: "web site", book: "book", bookSection: "book", case: "legal case and case notes", // "computerProgram":XXX, conferencePaper: "conference publication", dictionaryEntry: "dictionary", // "document":XXX, email: "letter", encyclopediaArticle: "encyclopedia", film: "motion picture", forumPost: "web site", // "hearing":XXX, instantMessage: "letter", interview: "interview", journalArticle: "journal", letter: "letter", magazineArticle: "periodical", // "manuscript":XXX, map: "map", newspaperArticle: "newspaper", patent: "patent", podcast: "speech", // "presentation":XXX, radioBroadcast: "sound", report: "technical report", statute: "legislation", thesis: "thesis", // "tvBroadcast":XXX, videoRecording: "videorecording", webpage: "web site" }; var dctGenres = { // "collection":XXX, // "dataset":XXX, // "event":XXX, image: "artwork", interactiveresource: "webpage", // "model":XXX, movingimage: "videoRecording", // "physical object":XXX, // "place":XXX, // "resource":XXX, // "service":XXX, software: "computerProgram", sound: "audioRecording", stillimage: "artwork" // "text":XXX }; var fromTypeOfResource = { // "text":XXX, cartographic: "map", // "notated music":XXX, "sound recording-musical": "audioRecording", "sound recording-nonmusical": "audioRecording", "sound recording": "audioRecording", "still image": "artwork", "moving image": "videoRecording", // "three dimensional object":XXX, "software, multimedia": "computerProgram" }; var toTypeOfResource = { artwork: "still image", audioRecording: "sound recording", bill: "text", blogPost: "software, multimedia", book: "text", bookSection: "text", case: "text", computerProgram: "software, multimedia", conferencePaper: "text", dictionaryEntry: "text", document: "text", email: "text", encyclopediaArticle: "text", film: "moving image", forumPost: "text", hearing: "text", instantMessage: "text", interview: "text", journalArticle: "text", letter: "text", magazineArticle: "text", manuscript: "text", map: "cartographic", newspaperArticle: "text", patent: "text", podcast: "sound recording-nonmusical", presentation: "mixed material", radioBroadcast: "sound recording-nonmusical", report: "text", statute: "text", thesis: "text", tvBroadcast: "moving image", videoRecording: "moving image", webpage: "software, multimedia" }; var modsTypeRegex = { // 'artwork': // 'audioRecording': /\bmusic/i, // 'bill': blogPost: /\bblog/i, // 'book': // 'bookSection': // 'case': // 'computerProgram': // 'conferencePaper': // 'dictionaryEntry': // 'email': // 'encyclopediaArticle': // 'film': // 'forumPost': // 'hearing': // 'instantMessage': // 'interview': journalArticle: /journal\s*article/i, // 'letter': magazineArticle: /magazine\s*article/i, // 'manuscript': // 'map': newspaperArticle: /newspaper\*article/i // 'patent': // 'podcast': // 'presentation': // 'radioBroadcast': // 'report': // 'statute': // 'thesis': // 'tvBroadcast': // 'videoRecording': // 'webpage': }; var modsInternetMediaTypes = { // a ton of types listed at http://www.iana.org/assignments/media-types/index.html 'text/html': 'webpage' }; var marcRelators = { aut: "author", edt: "editor", ctb: "contributor", pbd: "seriesEditor", trl: "translator", cmp: "composer", lyr: "wordsBy", prf: "performer" }; // Item types that are part of a larger work var partialItemTypes = ["blogPost", "bookSection", "conferencePaper", "dictionaryEntry", "encyclopediaArticle", "forumPost", "journalArticle", "magazineArticle", "newspaperArticle", "webpage"]; // Namespace array for using ZU.xpath var ns = "http://www.loc.gov/mods/v3", xns = { m: ns }; function detectImport() { let doc; try { doc = Zotero.getXML().documentElement; } catch (err) { // most likely just not XML return false; } if (!doc) { return false; } return doc.namespaceURI === "http://www.loc.gov/mods/v3" && (doc.tagName === "modsCollection" || doc.tagName === "mods"); } /** * If property is defined, this function adds an appropriate XML element as a child of * parentElement. * @param {Element} parentElement The parent of the new element to be created. * @param {String} elementName The name of the new element to be created. * @param {Any} property The property to inspect. If this property is defined and not * null, false, or empty, a new element is created whose textContent is its value. * @param {Object} [attributes] If defined, this object defines attributes to be added * to the new element. */ function mapProperty(parentElement, elementName, property, attributes) { if (!property && property !== 0) return null; var doc = parentElement.ownerDocument, newElement = doc.createElementNS(ns, elementName); if (attributes) { for (let i in attributes) { newElement.setAttribute(i, attributes[i]); } } newElement.appendChild(doc.createTextNode(property)); parentElement.appendChild(newElement); return newElement; } function doExport() { Zotero.setCharacterSet("utf-8"); var parser = new DOMParser(); var doc = parser.parseFromString('', 'application/xml'); var item; let titleInfo; while (item = Zotero.nextItem()) { // eslint-disable-line no-cond-assign // Don't export notes or standalone attachments if (item.itemType === "note" || item.itemType === "attachment") continue; var mods = doc.createElementNS(ns, "mods"), isPartialItem = partialItemTypes.includes(item.itemType), recordInfo = doc.createElementNS(ns, "recordInfo"), host = doc.createElementNS(ns, "relatedItem"), series = doc.createElementNS(ns, "relatedItem"), topOrHost = (isPartialItem ? host : mods); /** CORE FIELDS **/ // XML tag titleInfo; object field title if (item.title) { titleInfo = doc.createElementNS(ns, "titleInfo"); mapProperty(titleInfo, "title", item.title); mods.appendChild(titleInfo); } if (item.shortTitle) { titleInfo = doc.createElementNS(ns, "titleInfo"); titleInfo.setAttribute("type", "abbreviated"); mapProperty(titleInfo, "title", item.shortTitle); mods.appendChild(titleInfo); } // XML tag typeOfResource/genre; object field type mapProperty(mods, "typeOfResource", toTypeOfResource[item.itemType]); mapProperty(mods, "genre", item.itemType, { authority: "local" }); mapProperty(topOrHost, "genre", toMarcGenre[item.itemType], { authority: "marcgt" }); // XML tag genre; object field thesisType, type if (item.thesisType) { mapProperty(mods, "genre", item.thesisType); } else if (item.type) { mapProperty(mods, "genre", item.type); } // XML tag name; object field creators for (let j = 0; j < item.creators.length; j++) { var creator = item.creators[j], roleTerm = ""; if (creator.creatorType == "author") { roleTerm = "aut"; } else if (creator.creatorType == "editor") { roleTerm = "edt"; } else if (creator.creatorType == "translator") { roleTerm = "trl"; } else if (creator.creatorType == "seriesEditor") { roleTerm = "pbd"; } else if (creator.creatorType == "composer") { roleTerm = "cmp"; } else if (creator.creatorType == "wordsBy") { roleTerm = "lyr"; } else if (creator.creatorType == "performer") { roleTerm = "prf"; } else { roleTerm = "ctb"; } const name = doc.createElementNS(ns, "name"); if (creator.fieldMode == 1) { name.setAttribute("type", "corporate"); mapProperty(name, "namePart", creator.lastName); } else { name.setAttribute("type", "personal"); mapProperty(name, "namePart", creator.lastName, { type: "family" }); mapProperty(name, "namePart", creator.firstName, { type: "given" }); } var role = doc.createElementNS(ns, "role"); mapProperty(role, "roleTerm", roleTerm, { type: "code", authority: "marcrelator" }); name.appendChild(role); var creatorParent = (creator.creatorType === "seriesEditor") ? series : ((creator.creatorType === "editor") ? topOrHost : mods); creatorParent.appendChild(name); } // XML tag recordInfo.recordOrigin; used to store our generator note // mods.recordInfo.recordOrigin = "Zotero for Firefox "+Zotero.Utilities.getVersion(); /** FIELDS ON NEARLY EVERYTHING BUT NOT A PART OF THE CORE **/ // XML tag recordInfo.recordContentSource; object field source mapProperty(recordInfo, "recordContentSource", item.libraryCatalog); // XML tag accessCondition; object field rights mapProperty(mods, "accessCondition", item.rights); /** SUPPLEMENTAL FIELDS **/ var part = doc.createElementNS(ns, "part"); // XML tag detail; object field volume const details = ["volume", "issue", "section"]; for (let i = 0; i < details.length; i++) { if (item[details[i]] || item[details[i]] === 0) { const detail = doc.createElementNS(ns, "detail"), number = doc.createElementNS(ns, "number"); detail.setAttribute("type", details[i]); number.appendChild(doc.createTextNode(item[details[i]])); detail.appendChild(number); part.appendChild(detail); } } // XML tag detail; object field pages if (item.pages) { var extent = doc.createElementNS(ns, "extent"); extent.setAttribute("unit", "pages"); if (item.pages.search(/^\d+[-–]\d+$/) != -1) { var range = ZU.getPageRange(item.pages); mapProperty(extent, "start", range[0]); mapProperty(extent, "end", range[1]); } else { extent.setAttribute("unit", "pages"); mapProperty(extent, "list", item.pages); } part.appendChild(extent); } // Assign part if something was assigned if (part.hasChildNodes()) { // For a journal article, bookSection, etc., the part is the host topOrHost.appendChild(part); } var originInfo = doc.createElementNS(ns, "originInfo"); // XML tag originInfo; object fields edition, place, publisher, year, date mapProperty(originInfo, "edition", item.edition); if (item.place) { var place = doc.createElementNS(ns, "place"), placeTerm = doc.createElementNS(ns, "placeTerm"); placeTerm.setAttribute("type", "text"); placeTerm.appendChild(doc.createTextNode(item.place)); place.appendChild(placeTerm); originInfo.appendChild(place); } if (item.publisher) { mapProperty(originInfo, "publisher", item.publisher); } else if (item.distributor) { mapProperty(originInfo, "distributor", item.publisher); } if (item.date) { let dateType; if (["book", "bookSection"].includes(item.itemType)) { // Assume year is copyright date dateType = "copyrightDate"; } else if (["journalArticle", "magazineArticle", "newspaperArticle"].includes(item.itemType)) { // Assume date is date issued dateType = "dateIssued"; } else { // Assume date is date created dateType = "dateCreated"; } mapProperty(originInfo, dateType, item.date); } if (item.numPages) { var physicalDescription = doc.createElementNS(ns, "physicalDescription"); mapProperty(physicalDescription, "extent", item.numPages + " p."); mods.appendChild(physicalDescription); } if (isPartialItem) { // eXist Solutions points out that these types are more often // continuing than not & will use this internally. // Perhaps comment this out in the main distribution, though. if (["journalArticle", "magazineArticle", "newspaperArticle"].includes(item.itemType)) { mapProperty(originInfo, "issuance", "continuing"); } else if (["bookSection", "conferencePaper", "dictionaryEntry", "encyclopediaArticle"].includes(item.itemType)) { mapProperty(originInfo, "issuance", "monographic"); } } else { // eXist Solutions points out that most types are more often // monographic than not & will use this internally. // Perhaps comment this out in the main distribution, though. mapProperty(originInfo, "issuance", "monographic"); } if (originInfo.hasChildNodes()) { // For a journal article, bookSection, etc., the part is the host topOrHost.appendChild(originInfo); } // XML tag identifier; object fields ISBN, ISSN mapProperty(topOrHost, "identifier", item.ISBN, { type: "isbn" }); mapProperty(topOrHost, "identifier", item.ISSN, { type: "issn" }); mapProperty(mods, "identifier", item.DOI, { type: "doi" }); // XML tag relatedItem.name; object field conferenceName if (item.conferenceName) { const name = doc.createElementNS(ns, "name"); name.setAttribute("type", "conference"); mapProperty(name, "namePart", item.conferenceName); } // XML tag relatedItem.titleInfo; object field publication if (item.publicationTitle) { titleInfo = doc.createElementNS(ns, "titleInfo"); mapProperty(titleInfo, "title", item.publicationTitle); host.appendChild(titleInfo); } // XML tag relatedItem.titleInfo; object field journalAbbreviation if (item.journalAbbreviation) { titleInfo = doc.createElementNS(ns, "titleInfo"); titleInfo.setAttribute("type", "abbreviated"); mapProperty(titleInfo, "title", item.journalAbbreviation); host.appendChild(titleInfo); } // XML tag classification; object field callNumber mapProperty(topOrHost, "classification", item.callNumber); // XML tag location.url; object field url if (item.url) { const location = doc.createElementNS(ns, "location"); var url = mapProperty(location, "url", item.url, { usage: "primary display" }); if (url && item.accessDate) url.setAttribute("dateLastAccessed", item.accessDate); mods.appendChild(location); } // XML tag location.physicalLocation; object field archiveLocation if (item.archiveLocation) { const location = doc.createElementNS(ns, "location"); mapProperty(location, "physicalLocation", item.archiveLocation); topOrHost.appendChild(location); } // XML tag abstract; object field abstractNote mapProperty(mods, "abstract", item.abstractNote); // XML tag series/titleInfo; object field series, seriesTitle, seriesText, seriesNumber titleInfo = doc.createElementNS(ns, "titleInfo"); mapProperty(titleInfo, "title", item.series); mapProperty(titleInfo, "title", item.seriesTitle); mapProperty(titleInfo, "subTitle", item.seriesText); if (titleInfo.hasChildNodes()) series.appendChild(titleInfo); if (item.seriesNumber) { const seriesPart = doc.createElementNS(ns, "part"), detail = doc.createElementNS(ns, "detail"), number = doc.createElementNS(ns, "number"); detail.setAttribute("type", "volume"); number.appendChild(doc.createTextNode(item.seriesNumber)); detail.appendChild(number); seriesPart.appendChild(detail); series.appendChild(seriesPart); } /** NOTES **/ if (Zotero.getOption("exportNotes")) { for (let j = 0; j < item.notes.length; j++) { mapProperty(mods, "note", item.notes[j].note); } } /** TAGS **/ for (let j = 0; j < item.tags.length; j++) { var subject = doc.createElementNS(ns, "subject"), topic = doc.createElementNS(ns, "topic"); topic.appendChild(doc.createTextNode(item.tags[j].tag)); subject.appendChild(topic); mods.appendChild(subject); } /** LANGUAGE **/ if (item.language) { var language = doc.createElementNS(ns, "language"); mapProperty(language, "languageTerm", item.language, { type: "text" }); mods.appendChild(language); } /** EXTRA->NOTE **/ mapProperty(mods, "note", item.extra); if (recordInfo.hasChildNodes()) mods.appendChild(recordInfo); if (host.hasChildNodes()) { host.setAttribute("type", "host"); mods.appendChild(host); } if (series.hasChildNodes()) { series.setAttribute("type", "series"); topOrHost.appendChild(series); } doc.documentElement.appendChild(mods); } Zotero.write('\n'); var serializer = new XMLSerializer(); Zotero.write(serializer.serializeToString(doc)); } function processTitleInfo(titleInfo) { var title = ZU.xpathText(titleInfo, "m:title[1]", xns).trim(); var subtitle = ZU.xpathText(titleInfo, "m:subTitle[1]", xns); if (subtitle) title = title.replace(/:$/, '') + ": " + subtitle.trim(); var nonSort = ZU.xpathText(titleInfo, "m:nonSort[1]", xns); if (nonSort) title = nonSort.trim() + " " + title; var partNumber = ZU.xpathText(titleInfo, "m:partNumber[1]", xns); var partName = ZU.xpathText(titleInfo, "m:partName[1]", xns); if (partNumber && partName) title = title.replace(/\.$/, '') + ". " + partNumber.trim() + ": " + partName.trim(); else if (partNumber) title = title.replace(/\.$/, '') + ". " + partNumber.trim(); else if (partName) title = title.replace(/\.$/, '') + ". " + partName.trim(); return title; } function processTitle(contextElement) { // Try to find a titleInfo element with no type specified and a title element as a // child var titleElements = ZU.xpath(contextElement, "m:titleInfo[not(@type)][m:title][1]", xns); if (titleElements.length) return processTitleInfo(titleElements[0]); // That failed, so look for any titleInfo element without no type secified var title = ZU.xpathText(contextElement, "m:titleInfo[not(@type)][1]", xns); if (title) return title; // That failed, so just go for the first title return ZU.xpathText(contextElement, "m:titleInfo[1]", xns); } function processGenre(contextElement) { // Try to get itemType by treating local genre as Zotero item type var genre = ZU.xpath(contextElement, 'm:genre[@authority="local"]', xns); for (let i = 0; i < genre.length; i++) { const genreStr = genre[i].textContent; if (Zotero.Utilities.itemTypeExists(genreStr)) return genreStr; } // Try to get MARC genre and convert to an item type genre = ZU.xpath(contextElement, 'm:genre[@authority="marcgt"] | m:genre[@authority="marc"]', xns); for (let i = 0; i < genre.length; i++) { const genreStr = genre[i].textContent; if (fromMarcGenre[genreStr]) return fromMarcGenre[genreStr]; } // Try to get DCT genre and convert to an item type genre = ZU.xpath(contextElement, 'm:genre[@authority="dct"]', xns); for (let i = 0; i < genre.length; i++) { const genreStr = genre[i].textContent.replace(/\s+/g, ""); if (dctGenres[genreStr]) return dctGenres[genreStr]; } // Try unlabeled genres genre = ZU.xpath(contextElement, 'm:genre', xns); for (let i = 0; i < genre.length; i++) { const genreStr = genre[i].textContent; // Zotero if (Zotero.Utilities.itemTypeExists(genreStr)) return genreStr; // MARC if (fromMarcGenre[genreStr]) return fromMarcGenre[genreStr]; // DCT var dctGenreStr = genreStr.replace(/\s+/g, ""); if (dctGenres[dctGenreStr]) return dctGenres[dctGenreStr]; // Try regexps for (let type in modsTypeRegex) { if (modsTypeRegex[type].exec(genreStr)) return type; } } return undefined; } function processItemType(contextElement) { var type = processGenre(contextElement); if (type) return type; // Try to get type information from typeOfResource var typeOfResource = ZU.xpath(contextElement, 'm:typeOfResource', xns); for (let i = 0; i < typeOfResource.length; i++) { var typeOfResourceStr = typeOfResource[i].textContent.trim(); // Try list if (fromTypeOfResource[typeOfResourceStr]) { return fromTypeOfResource[typeOfResourceStr]; } // Try regexps for (let type in modsTypeRegex) { if (modsTypeRegex[type].exec(typeOfResourceStr)) return type; } } // Try to get genre data from host var hosts = ZU.xpath(contextElement, 'm:relatedItem[@type="host"]', xns); for (let i = 0; i < hosts.length; i++) { type = processGenre(hosts[i]); if (type) return type; } // Figure out if it's a periodical var periodical = ZU.xpath(contextElement, 'm:relatedItem[@type="host"]/m:originInfo/m:issuance[text()="continuing" or text()="serial"]', xns).length; // Try physicalDescription/internetMediaType var internetMediaTypes = ZU.xpath(contextElement, 'm:physicalDescription/m:internetMediaType', xns); for (let i = 0; i < internetMediaTypes.length; i++) { var internetMediaTypeStr = internetMediaTypes[i].textContent.trim(); if (modsInternetMediaTypes[internetMediaTypeStr]) { return modsInternetMediaTypes[internetMediaTypeStr]; } } // As a last resort, if it has a host, let's set it to book chapter, so we can import // more info. Otherwise default to document if (hosts.length) { if (periodical) return 'journalArticle'; return 'bookSection'; } return "document"; } function processCreator(name, itemType, defaultCreatorType) { var creator = {}; creator.firstName = ZU.xpathText(name, 'm:namePart[@type="given"]', xns, " ") || undefined; creator.lastName = ZU.xpathText(name, 'm:namePart[@type="family"]', xns, " "); if (!creator.lastName) { var isPersonalName = name.getAttribute("type") === "personal", backupName = ZU.xpathText(name, 'm:namePart[not(@type="date")][not(@type="termsOfAddress")]', xns, (isPersonalName ? " " : ": ")); if (!backupName) return null; if (isPersonalName) { creator = ZU.cleanAuthor(backupName.replace(/[[(][^A-Za-z]*[\])]/g, ''), "author", true); delete creator.creatorType; } else { creator.lastName = ZU.trimInternal(backupName); creator.fieldMode = 1; } } if (!creator.lastName) return null; // Look for roles let roles = ZU.xpath(name, 'm:role/m:roleTerm[@type="text" or not(@type)]', xns); var validCreatorsForItemType = ZU.getCreatorsForType(itemType); for (let i = 0; i < roles.length; i++) { const roleStr = roles[i].textContent.toLowerCase(); if (validCreatorsForItemType.includes(roleStr)) { creator.creatorType = roleStr; } } if (!creator.creatorType) { // Look for MARC roles roles = ZU.xpath(name, 'm:role/m:roleTerm[@type="code"][@authority="marcrelator"]', xns); for (let i = 0; i < roles.length; i++) { const roleStr = roles[i].textContent.toLowerCase(); if (marcRelators[roleStr]) creator.creatorType = marcRelators[roleStr]; } // Default to author if (!creator.creatorType) creator.creatorType = defaultCreatorType; } return creator; } function processCreators(contextElement, newItem, defaultCreatorType) { var names = ZU.xpath(contextElement, 'm:name', xns); for (let i = 0; i < names.length; i++) { var creator = processCreator(names[i], newItem.itemType, defaultCreatorType); if (creator) newItem.creators.push(creator); } } function processExtent(extent, newItem) { // try to parse extent according to // http://www.loc.gov/standards/mods/v3/mods-userguide-elements.html#extent // i.e. http://www.loc.gov/marc/bibliographic/bd300.html // and http://www.loc.gov/marc/bibliographic/bd306.html var extentRe = new RegExp( '^(.*?)(?=(?:[:;]|$))' // extent [1] + '(?::.*?(?=(?:;|$)))?' // other physical details + '(?:;(.*))?' // dimensions [2] + '$' // make sure to capture the rest of the line ); var ma = extentRe.exec(extent); if (ma && ma[1]) { // drop supplemental info (i.e. everything after +) if (ma[1].includes('+')) { ma[1] = ma[1].slice(0, ma[1].indexOf('+')); } // pages if (!newItem.pages && ZU.fieldIsValidForType('pages', newItem.itemType)) { const pages = ma[1].match(/\bp(?:ages?)?\.?\s+([a-z]?\d+(?:\s*-\s*[a-z]?\d+))/i); if (pages) { newItem.pages = pages[1].replace(/\s+/, ''); } } // volume if (!newItem.volume && ZU.fieldIsValidForType('volume', newItem.itemType)) { var volume = ma[1].match(/\bv(?:ol(?:ume)?)?\.?\s+(\d+)/i); if (volume) { newItem.volume = volume[1]; } } // issue if (!newItem.issue && ZU.fieldIsValidForType('issue', newItem.itemType)) { var issue = ma[1].match(/\b(?:no?|iss(?:ue)?)\.?\s+(\d+)/i); if (issue) { newItem.issue = issue[1]; } } // numPages if (!newItem.numPages && ZU.fieldIsValidForType('numPages', newItem.itemType)) { const pages = ma[1].match(/(\d+)\s*p(?:ages?)?\b/i); if (pages) { newItem.numPages = pages[1]; } } // numberOfVolumes if (!newItem.numberOfVolumes && ZU.fieldIsValidForType('numberOfVolumes', newItem.itemType)) { // includes volumes, scores, sound (discs, but I think there could be others) // video (cassette, but could have others) var nVol = ma[1].match(/(\d+)\s+(?:v(?:olumes?)?|scores?|sound|video)\b/i); if (nVol) { newItem.numberOfVolumes = nVol[1]; } } // runningTime if (!newItem.runningTime && ZU.fieldIsValidForType('runningTime', newItem.itemType)) { // several possible formats: var rt; // 002016 = 20 min., 16 sec. if (rt = ma[1].match(/\b(\d{2,3})(\d{2})(\d{2})\b/)) { // eslint-disable-line no-cond-assign newItem.runningTime = rt[1] + ':' + rt[2] + ':' + rt[3]; // (ca. 124 min.) } // eslint-disable-next-line no-cond-assign else if (rt = ma[1].match(/((\d+)\s*((?:hours?|hrs?)|(?:minutes?|mins?)|(?:seconds?|secs?))\.?\s+)?((\d+)\s*((?:hours?|hrs?)|(?:minutes?|mins?)|(?:seconds?|secs?))\.?\s+)?((\d+)\s*((?:hours?|hrs?)|(?:minutes?|mins?)|(?:seconds?|secs?))\.?)/i)) { var hrs = 0, mins = 0, secs = 0; for (let i = 2; i < 7; i += 2) { if (!rt[i]) continue; switch (rt[i].charAt(0).toLowerCase()) { case 'h': hrs = rt[i - 1]; break; case 'm': mins = rt[i - 1]; break; case 's': secs = rt[i - 1]; break; } } if (secs > 59) { mins += secs / 60; secs %= 60; } if (secs < 10) { secs = '0' + secs; } if (mins > 59) { hrs += hrs / 60; mins %= 60; } if (mins < 10) { mins = '0' + mins; } newItem.runningTime = ((hrs * 1) ? hrs + ':' : '') + mins + ':' + secs; // (46:00) } else if (rt = ma[1].match(/\b(\d{0,3}:\d{1,2}:\d{2})\b/)) { // eslint-disable-line no-cond-assign newItem.runningTime = rt[1]; } } } // dimensions: artworkSize // only part of artwork right now, but maybe will be in other types in the future if (!newItem.artworkSize && ma && ma[2] && ZU.fieldIsValidForType('artworkSize', newItem.itemType)) { // drop supplemental info (i.e. everything after +) if (ma[2].includes('+')) { ma[2] = ma[2].slice(0, ma[2].indexOf('+')); } // 26 cm. or 33 x 15 cm. or 1/2 in. or 1 1/2 x 15/16 in. var dim = ma[2].match(/(?:(?:(?:\d+\s+)?\d+\/)?\d+\s*x\s*)?(?:(?:\d+\s+)?\d+\/)?\d+\s*(?:cm|mm|m|in|ft)\./i); if (dim) newItem.artworkSize = dim[0]; } } function processIdentifiers(contextElement, newItem) { var isbnNodes = ZU.xpath(contextElement, './/m:identifier[@type="isbn"]', xns), isbns = []; for (let i = 0; i < isbnNodes.length; i++) { const m = isbnNodes[i].textContent.replace(/\s*-\s*/g, '').match(/(?:[\dX]{10}|\d{13})/i); if (m) isbns.push(m[0]); } if (isbns.length) newItem.ISBN = isbns.join(", "); var issnNodes = ZU.xpath(contextElement, './/m:identifier[@type="issn"]', xns), issns = []; for (let i = 0; i < issnNodes.length; i++) { const m = issnNodes[i].textContent.match(/\b\d{4}\s*-?\s*\d{4}\b/i); if (m) issns.push(m[0]); } if (issns.length) newItem.ISSN = issns.join(", "); newItem.DOI = ZU.xpathText(contextElement, 'm:identifier[@type="doi"]', xns); } function getFirstResult(contextNode, xpaths) { for (let i = 0; i < xpaths.length; i++) { var results = ZU.xpath(contextNode, xpaths[i], xns); if (results.length) return results[0].textContent; } return null; } function doImport() { var xml = Zotero.getXML(); var modsElements = ZU.xpath(xml, "/m:mods | /m:modsCollection/m:mods", xns); for (let iModsElements = 0, nModsElements = modsElements.length; iModsElements < nModsElements; iModsElements++) { var modsElement = modsElements[iModsElements], newItem = new Zotero.Item(); // title newItem.title = processTitle(modsElement); // shortTitle var abbreviatedTitle = ZU.xpath(modsElement, 'm:titleInfo[@type="abbreviated"]', xns); if (abbreviatedTitle.length) { newItem.shortTitle = processTitleInfo(abbreviatedTitle[0]); } // itemType newItem.itemType = processItemType(modsElement); // TODO: thesisType, type // creators processCreators(modsElement, newItem, "author"); // source newItem.source = ZU.xpathText(modsElement, 'm:recordInfo/m:recordContentSource', xns); // accessionNumber newItem.accessionNumber = ZU.xpathText(modsElement, 'm:recordInfo/m:recordIdentifier', xns); // rights newItem.rights = ZU.xpathText(modsElement, 'm:accessCondition', xns); /** SUPPLEMENTAL FIELDS **/ var part = [], originInfo = []; // host var hostNodes = ZU.xpath(modsElement, 'm:relatedItem[@type="host"]', xns); for (let i = 0; i < hostNodes.length; i++) { var host = hostNodes[i]; // publicationTitle if (!newItem.publicationTitle) newItem.publicationTitle = processTitle(host); // journalAbbreviation if (!newItem.journalAbbreviation) { const titleInfo = ZU.xpath(host, 'm:titleInfo[@type="abbreviated"]', xns); if (titleInfo.length) { newItem.journalAbbreviation = processTitleInfo(titleInfo[0]); } } // creators of host item will be evaluated by their role info // and only if this is missing then they are connected by a generic // contributor role processCreators(host, newItem, "contributor"); // identifiers processIdentifiers(host, newItem); part = part.concat(ZU.xpath(host, 'm:part', xns)); originInfo = originInfo.concat(ZU.xpath(host, 'm:originInfo', xns)); } if (!newItem.publicationTitle) newItem.publicationTitle = newItem.journalAbbreviation; // series var seriesNodes = ZU.xpath(modsElement, './/m:relatedItem[@type="series"]', xns); for (let i = 0; i < seriesNodes.length; i++) { var seriesNode = seriesNodes[i]; var series = ZU.xpathText(seriesNode, 'm:titleInfo/m:title', xns); if (ZU.fieldIsValidForType('series', newItem.itemType)) { newItem.series = series; } else if (ZU.fieldIsValidForType('seriesTitle', newItem.itemType)) { newItem.seriesTitle = series; } if (!newItem.seriesText) { newItem.seriesText = ZU.xpathText(seriesNode, 'm:titleInfo/m:subTitle', xns); } if (!newItem.seriesNumber) { newItem.seriesNumber = getFirstResult(seriesNode, ['m:part/m:detail[@type="volume"]/m:number', 'm:titleInfo/m:partNumber']); } processCreators(seriesNode, newItem, "seriesEditor"); } // Add part and originInfo from main entry part = part.concat(ZU.xpath(modsElement, 'm:part', xns)); originInfo = originInfo.concat(ZU.xpath(modsElement, 'm:originInfo', xns)); if (part.length) { // volume, issue, section var details = ["volume", "issue", "section"]; for (let i = 0; i < details.length; i++) { var detail = details[i]; newItem[detail] = getFirstResult(part, ['m:detail[@type="' + detail + '"]/m:number', 'm:detail[@type="' + detail + '"]']); } // pages and other extent information const extents = ZU.xpath(part, "m:extent", xns); for (let i = 0; i < extents.length; i++) { var extent = extents[i], unit = extent.getAttribute("unit"); if (unit === "pages" || unit === "page") { if (newItem.pages) continue; var pagesStart = ZU.xpathText(extent, "m:start[1]", xns); var pagesEnd = ZU.xpathText(extent, "m:end[1]", xns); if (pagesStart || pagesEnd) { if (pagesStart == pagesEnd) { newItem.pages = pagesStart; } else if (pagesStart && pagesEnd) { newItem.pages = pagesStart + "-" + pagesEnd; } else { newItem.pages = pagesStart + pagesEnd; } } } else { processExtent(extent.textContent, newItem); } } newItem.date = getFirstResult(part, ['m:date[not(@point="end")][@encoding]', 'm:date[not(@point="end")]', 'm:date']); } // physical description const extents = ZU.xpath(modsElement, "m:physicalDescription/m:extent", xns); for (let i = 0; i < extents.length; i++) { processExtent(extents[i].textContent, newItem); } // identifier processIdentifiers(modsElement, newItem); if (originInfo.length) { // edition var editionNodes = ZU.xpath(originInfo, 'm:edition', xns); if (editionNodes.length) newItem.edition = editionNodes[0].textContent; // place var placeNodes = ZU.xpath(originInfo, 'm:place/m:placeTerm[@type="text"]', xns); if (placeNodes.length) newItem.place = placeNodes[0].textContent; // publisher/distributor var publisherNodes = ZU.xpath(originInfo, 'm:publisher', xns); if (publisherNodes.length) { newItem.publisher = publisherNodes[0].textContent; if (newItem.itemType == "webpage" && !newItem.publicationTitle) { newItem.publicationTitle = newItem.publisher; } } // date newItem.date = getFirstResult(originInfo, ['m:copyrightDate[@encoding]', 'm:copyrightDate', 'm:dateIssued[not(@point="end")][@encoding]', 'm:dateIssued[not(@point="end")]', 'm:dateIssued', 'm:dateCreated[@encoding]', 'm:dateCreated']) || newItem.date; // lastModified newItem.lastModified = getFirstResult(originInfo, ['m:dateModified[@encoding]', 'm:dateModified']); // accessDate newItem.accessDate = getFirstResult(originInfo, ['m:dateCaptured[@encoding]', 'm:dateCaptured[not(@encoding)]']); } // call number newItem.callNumber = ZU.xpathText(modsElement, 'm:classification', xns); // archiveLocation newItem.archiveLocation = ZU.xpathText(modsElement, './/m:location/m:physicalLocation', xns, "; "); // attachments and url var urlNodes = ZU.xpath(modsElement, 'm:location/m:url', xns); for (let i = 0; i < urlNodes.length; i++) { var urlNode = urlNodes[0], access = urlNode.getAttribute("access"), usage = urlNode.getAttribute("usage"); if (access === "raw object") { var attachment = { title: (urlNode.getAttribute("displayLabel") || "Attachment"), path: urlNode.textContent }; if (attachment.path.substr(-4) === ".pdf") attachment.mimeType = "application/pdf"; newItem.attachments.push(attachment); } if ((!newItem.url || usage === "primary" || usage === "primary display") && access !== "preview") { newItem.url = urlNode.textContent; } if (!newItem.accessDate) { newItem.accessDate = urlNode.getAttribute("dateLastAccessed"); } } // abstract newItem.abstractNote = ZU.xpathText(modsElement, 'm:abstract', xns, "\n\n"); /** NOTES **/ var noteNodes = ZU.xpath(modsElement, 'm:note', xns); for (let i = 0; i < noteNodes.length; i++) { var note = noteNodes[i]; newItem.notes.push({ note: (note.hasAttribute("type") ? note.getAttribute("type") + ': ' : '') + note.textContent }); } // ToC - goes into notes var tocNodes = ZU.xpath(modsElement, 'm:tableOfContents', xns); for (let i = 0; i < tocNodes.length; i++) { newItem.notes.push({ note: 'Table of Contents: ' + tocNodes[i].textContent }); } /** TAGS **/ var tagNodes = ZU.xpath(modsElement, 'm:subject/m:topic', xns); for (let i = 0; i < tagNodes.length; i++) { newItem.tags.push(ZU.trimInternal(tagNodes[i].textContent)); } // scale if (ZU.fieldIsValidForType('scale', newItem.itemType)) { var scale = ZU.xpathText(modsElement, 'm:subject/m:cartographics/m:scale', xns); if (scale) { var m = scale.match(/1\s*:\s*\d+(?:,\d+)/); if (m) newItem.scale = m[0]; } } // Language // create an array of languages var languages = []; var languageNodes = ZU.xpath(modsElement, 'm:language', xns); for (let i = 0; i < languageNodes.length; i++) { var code = false, languageNode = languageNodes[i], languageTerms = ZU.xpath(languageNode, 'm:languageTerm', xns); for (let j = 0; j < languageTerms.length; j++) { var term = languageTerms[j], termType = term.getAttribute("type"); if (termType === "text") { languages.push(term.textContent); code = false; break; // code authorities should be used, not ignored // but we ignore them for now } else if (termType === "code" || term.hasAttribute("authority")) { code = term.textContent; } } // If we have a code or text content of the node // (prefer the former), then we add that if (code || (languageNode.childNodes.length === 1 && languageNode.firstChild.nodeType === 3 /* Node.TEXT_NODE*/ && (code = languageNode.firstChild.nodeValue))) { languages.push(code); } } // join the list separated by semicolons & add it to zotero item newItem.language = languages.join('; '); Zotero.setProgress(iModsElements / nModsElements * 100); newItem.complete(); } } /** BEGIN TEST CASES **/ var testCases = [ { "type": "import", "input": "\n\n\n \n \t \tFranUlmer.com -- Home Page\n \t\n \tFran Ulmer, Democratic candidate for Governor, Alaska, 2002\n \t\n \t\n \t \tUlmer, Fran\n \t\n \tWeb site\n \t\n \t \t20020702 \n \t \t 20021203\n \t\n \t\n \t \teng\n \t\n \t\n \t \ttext/html\n \t \timage/jpg\n \t\n \tWeb site promoting the candidacy of Fran Ulmer, Democratic candidate for Governor, Alaska, 2002. Includes candidate biography, issue position statements, campaign contact information, privacy policy and campaign news press releases. Site features enable visitors to sign up for campaign email list, volunteer, make campaign contributions and follow links to other internet locations. \n \t\n \t \tElections\n \t \tAlaska\n \t\n \t\n \t \tGovernors\n \t \tAlaska\n \t \tElection\n \t\n \t\n \t \tDemocratic Party (AK)\n \t\n \t\n \t \t\n \t \t \tElection 2002 Web Archive\n \t \t\n \t \t\n \t \t \thttp://www.loc.gov/minerva/collect/elec2002/\n \t \t\n \t\n \t\n \t \thttp://www.franulmer.com/\n \t\n \t\n \t \thttp://wayback-cgi1.alexa.com/e2002/*/http://www.franulmer.com/\n \t\n\n", "items": [ { "itemType": "webpage", "title": "FranUlmer.com -- Home Page", "creators": [ { "firstName": "Fran", "lastName": "Ulmer", "creatorType": "author" } ], "abstractNote": "Web site promoting the candidacy of Fran Ulmer, Democratic candidate for Governor, Alaska, 2002. Includes candidate biography, issue position statements, campaign contact information, privacy policy and campaign news press releases. Site features enable visitors to sign up for campaign email list, volunteer, make campaign contributions and follow links to other internet locations.", "language": "eng", "url": "http://www.franulmer.com/", "websiteTitle": "Election 2002 Web Archive", "attachments": [], "tags": [ "Democratic Party (AK)", "Election", "Elections", "Governors" ], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n\n \n \t \tAt Gettysburg, or, What a Girl Saw and Heard of the Battle: A True Narrative\n \t\n \t\n \t \tAlleman, Tillie Pierce [1848-1914]\n \t \t\n \t \t \taut\n \t \t \tAuthor\n \t \t\n \t\n \ttext\n \t\n \t \t\n \t \t \tNew York\n \t \t\n \t \tW. Lake Borland\n \t \t1889\n \t\n \t\n \t \teng\n \t \tEnglish\n \t\n \t\n \t \ttext/html\n \t \treformatted digital\n \t\n \t\n \t \tGettysburg, Battle of, Gettysburg, Pa., 1863\n \t\n \t\n \t \tGettysburg (Pa.) -- History -- Civil War, 1861-1865\n \t\n \t\n \t \tUnited States -- History -- Civil War, 1861-1865 -- Campaigns\n \t\n \tE475.53 .A42\n \t\n \t \t\n \t \t \tA Celebration of Women Writers: Americana\n \t \t\n \t\n \t\n \t \t http://digital.library.upenn.edu/women/alleman/gettysburg/gettysburg.html\n\n \t\n \t Personal, noncommercial use of this item is permitted in the United States of America. Please see http://digital.library.upenn.edu/women/ for other rights and restrictions that may apply to this resource.\n\n\n \tUniversity of Pennsylvania Digital Library\n \t MODS auto-converted from a simple Online Books Page metadata record. For details, see http://onlinebooks.library.upenn.edu/mods.html \n \t\n \t \teng\n \t\n\n\n", "items": [ { "itemType": "webpage", "title": "At Gettysburg, or, What a Girl Saw and Heard of the Battle: A True Narrative", "creators": [ { "firstName": "Tillie Pierce", "lastName": "Alleman", "creatorType": "author" } ], "date": "1889", "language": "English", "rights": "Personal, noncommercial use of this item is permitted in the United States of America. Please see http://digital.library.upenn.edu/women/ for other rights and restrictions that may apply to this resource.", "url": "http://digital.library.upenn.edu/women/alleman/gettysburg/gettysburg.html", "websiteTitle": "A Celebration of Women Writers: Americana", "attachments": [], "tags": [ "Gettysburg (Pa.) -- History -- Civil War, 1861-1865", "Gettysburg, Battle of, Gettysburg, Pa., 1863", "United States -- History -- Civil War, 1861-1865 -- Campaigns" ], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n\n \n \t \tTelescope Peak from Zabriskie Point\n \t\n \t\n \t \tTelescope PK from Zabriskie Pt.\n \t\n \t\n \t \tCushman\n \t \tCharles Weever\n \t \t1896-1972\n \t \t\n \t \t \tpht\n \t \t \tPhotographer\n \t \t\n \t\n \tstill image\n \tLandscape photographs\n \t\n \t \t1955-03-22\n \t \t2003\n \t\n \t\n \t \timage/jpeg\n \t \treformatted digital\n \t \t Original 35mm slide was digitized in 2003 as a TIFF image. Display versions in JPEG format in three sizes are available.\n \t \t100 f 6.3 tl\n \t\n \t\n \t \tMountains\n \t\n \t\n \t \tSnow\n \t\n \t\n \t \tTelescope Peak (Inyo County, Calif.)\n \t\n \t\n \t \tZabriskie Point (Calif.)\n \t\n \t\n \t \t\n \t \t \tUnited States\n \t \t \tCalifornia\n \t \t \tInyo\n \t \t\n \t\n \t\n \t \t\n \t \t \t1955-03-22\n \t \t\n \t \t\n \t \t \t
graphic
\n \t \t \t1 slide : col. ; 35mm\n \t \t \tOriginal 35mm slide was digitized in 2003 as a TIFF image. Display versions in JPEG format in three sizes are available.\n \t \t
\n \t \t\n \t \t \t Indiana University, Bloomington. University Archives P07803 \n \t \t\n \t
\n \t\n \t \t\n \t \t \t Indiana University Digital Library Program: Charles W. Cushman Photograph Collection\n \t \t\n \t\n \t955.11\n \tP07803\n \t\n \t \thttp://purl.dlib.indiana.edu/iudl/archives/cushman/P07803\n \t \thttp://quod.lib.umich.edu/m/mods/thumbs/Indiana/oai.dlib.indiana.edu/ archives/cushman/oai_3Aoai.dlib.indiana.edu_3Aarchives_5Ccushman_5CP07803.png\n \t\n \t Copyright and reproduction rights for all Charles W. Cushman photographs are held by Indiana University and administered by the University Archives, Indiana University, Bloomington, IN 47405\n \t\n \tIndiana University Digital Library Program\n \t2004-09-09\n \tarchives/cushman/P07803\n \t\n
\n\n
", "items": [ { "itemType": "artwork", "title": "Telescope Peak from Zabriskie Point", "creators": [ { "firstName": "Charles Weever", "lastName": "Cushman", "creatorType": "author" } ], "date": "2003", "archiveLocation": "Indiana University, Bloomington. University Archives P07803", "rights": "Copyright and reproduction rights for all Charles W. Cushman photographs are held by Indiana University and administered by the University Archives, Indiana University, Bloomington, IN 47405", "url": "http://purl.dlib.indiana.edu/iudl/archives/cushman/P07803", "attachments": [], "tags": [ "Mountains", "Snow", "Telescope Peak (Inyo County, Calif.)", "Zabriskie Point (Calif.)" ], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n \t \tHiring and recruitment practices in academic libraries\n \t\n \t\n \t \tRaschke, Gregory K.\n \t \tGregory K. Raschke\n \t\n \ttext\n \tjournal article\n \t\n \t \t\n \t \t \tBaltimore, Md.\n \t \t\n \t \tJohns Hopkins University Press\n \t \t2003\n \t \tmonographic\n \t\n \teng\n \t\n \t \t
print
\n \t \t15 p.\n \t
\n \t\nAcademic libraries need to change their recruiting and hiring procedures to stay competitive in today's changing marketplace. By taking too long to find and to hire talented professionals in a tight labor market, academic libraries are losing out on top candidates and limiting their ability to become innovative and dynamic organizations. Traditional, deliberate, and risk-averse hiring models lead to positions remaining open for long periods, opportunities lost as top prospects find other positions, and a reduction in the overall talent level of the organization. To be more competitive and effective in their recruitment and hiring processes, academic libraries must foster manageable internal solutions, look to other professions for effective hiring techniques and models, and employ innovative concepts from modern personnel management literature. \n \t\n \t \tCollege librarians\n \t \tRecruiting\n \t \tUnited States\n \t\n \t\n \t \tCollege librarians\n \t \tSelection and appointment\n \t \tUnited States\n \t\n \t\n \t \t\n \t \t \tportal: libraries and the academy\n \t \t\n \t \t\n \t \t \t\n \t \t \t \t3\n \t \t \t \tvol.\n \t \t \t\n \t \t \t\n \t \t \t \t1\n \t \t \t \tno.\n \t \t \t\n \t \t \t\n \t \t \t \t53\n \t \t \t \t57\n \t \t \t\n \t \t \tJan. 2003\n \t \t\n \t \t1531-2542\n \t\n
\n\n
", "items": [ { "itemType": "journalArticle", "title": "Hiring and recruitment practices in academic libraries", "creators": [ { "firstName": "Gregory K.", "lastName": "Raschke", "creatorType": "author" } ], "date": "2003", "ISSN": "1531-2542", "abstractNote": "Academic libraries need to change their recruiting and hiring procedures to stay competitive in today's changing marketplace. By taking too long to find and to hire talented professionals in a tight labor market, academic libraries are losing out on top candidates and limiting their ability to become innovative and dynamic organizations. Traditional, deliberate, and risk-averse hiring models lead to positions remaining open for long periods, opportunities lost as top prospects find other positions, and a reduction in the overall talent level of the organization. To be more competitive and effective in their recruitment and hiring processes, academic libraries must foster manageable internal solutions, look to other professions for effective hiring techniques and models, and employ innovative concepts from modern personnel management literature.", "language": "eng", "pages": "53-57", "publicationTitle": "portal: libraries and the academy", "volume": "3", "attachments": [], "tags": [ "College librarians", "College librarians", "Recruiting", "Selection and appointment" ], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n\n \n Sound and fury\n the making of the punditocracy\n \n\n \n Alterman, Eric\n\n \n creator\n \n \n\n text\n\n bibliography\n\n \n \n nyu\n \n \n Ithaca, N.Y\n \n\n Cornell University Press\n c1999\n 1999\n monographic\n \n\n \n\n eng\n \n\n \n
print
\n vii, 322 p. ; 23 cm.\n
\n\n Eric Alterman.\n Includes bibliographical references (p. 291-312) and index.\n\n \n Journalism\n Political aspects\n United States\n\n \n\n \n United States\n Politics and\n government\n 20th century\n \n\n \n Mass media\n Political aspects\n United States\n \n\n \n Television and\n politics\n\n United States\n \n\n \n Press and politics\n United States\n \n\n \n Talk shows\n United States\n \n\n PN4888.P6 A48 1999\n 071/.3\n\n 0801486394 (pbk. : acid-free, recycled paper)\n 99042030\n\n \n aacr\n DLC\n 990730\n\n 20000406144503.0\n 11761548\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl (Revision\n 1.74), valueURIs and authorityURIs added by hand 20120123\n \n
\n", "items": [ { "itemType": "book", "title": "Sound and fury: the making of the punditocracy", "creators": [ { "firstName": "Eric", "lastName": "Alterman", "creatorType": "author" } ], "date": "1999", "ISBN": "0801486394", "callNumber": "PN4888.P6 A48 1999, 071/.3", "language": "eng", "numPages": "322", "place": "Ithaca, N.Y", "publisher": "Cornell University Press", "attachments": [], "tags": [ "Journalism", "Mass media", "Political aspects", "Political aspects", "Politics and government", "Press and politics", "Talk shows", "Television and politics" ], "notes": [ { "note": "statement of responsibility: Eric Alterman." }, { "note": "Includes bibliographical references (p. 291-312) and index." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n\t\tModels, Fantasies and Phantoms of Transition\n\t\n\t\n\t\tAsh\n\t\tAmin\n\n\t\t\n\t\t\tauthor\n\t\t\n\t\n\ttext\n\t\n\t\t\n\t\t\tPost-Fordism\n\n\t\t\tA Reader\n\t\t\n\t\t\n\t\t\tAsh\n\t\t\tAmin\n\t\t\t\n\t\t\t\teditor\n\n\t\t\t\n\t\t\n\t\t\n\t\t\t1994\n\t\t\tBlackwell Publishers\n\t\t\t\n\t\t\t\tOxford\n\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t23\n\t\t\t\t45\n\t\t\t\n\t\t\n\n\t\n\tAmin1994a\n", "items": [ { "itemType": "bookSection", "title": "Models, Fantasies and Phantoms of Transition", "creators": [ { "firstName": "Ash", "lastName": "Amin", "creatorType": "author" }, { "firstName": "Ash", "lastName": "Amin", "creatorType": "editor" } ], "date": "1994", "bookTitle": "Post-Fordism: A Reader", "pages": "23-45", "place": "Oxford", "publisher": "Blackwell Publishers", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n \t\n\t\t\tThe\n\t\t\tUrban Question as a Scale Question\n\t\t\tReflections on Henri Lefebre, Urban Theory and the Politics of Scale\n\t\t\n\t\t\n\t\t\tNeil\n\n\t\t\tBrenner\n\t\t\t\n\t\t\t\tauthor\n\t\t\t\n\t\t\n\t\ttext\n\t\tarticle\n\n\t\t\n\t\t\tmonographic\n\t\t\n\t\t\n\t\t\t\n\t\t\t\tInternational Journal of Urban and Regional Research\n\t\t\t\n\t\t\t\n\n\t\t\tcontinuing\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t24\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t2\n\n\t\t\t\t\tno.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t361\n\t\t\t\t\t378\n\t\t\t\t\n\t\t\t\t2000\n\n\t\t\t\n\t\t\n\t\tBrennerN2000a\n\t", "items": [ { "itemType": "journalArticle", "title": "The Urban Question as a Scale Question: Reflections on Henri Lefebre, Urban Theory and the Politics of Scale", "creators": [ { "firstName": "Neil", "lastName": "Brenner", "creatorType": "author" } ], "date": "2000", "issue": "2", "pages": "361-378", "publicationTitle": "International Journal of Urban and Regional Research", "volume": "24", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n \t\n\t\t\tFifth-Grade Boys' Decisions about Participation in Sports Activities\n\t\t\n\t\t\n\t\t\tConley\n\t\t\tAlice\n\t\t\t\n\n\t\t\t\tauthor\n\t\t\t\n\t\t\n\t\ttext\n\t\t\n\t\t\t\n\t\t\t\tNon-subject-matter Outcomes of Schooling\n\n\t\t\t\n\t\t\t\n\t\t\t\tGood, Thomas L.\n\t\t\t\t\n\t\t\t\t\teditor\n\t\t\t\t\n\t\t\t\n\t\t\ted. Thomas L. Good\n\n\t\t\t\n\t\t\t\tcontinuing\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tSpecial issue, Elementary School Journal\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\t99\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t5\n\t\t\t\t\tno.\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\t131\n\t\t\t\t\t146\n\t\t\t\t\n\t\t\t\t1999\n\t\t\t\n\t\t\n\t", "items": [ { "itemType": "journalArticle", "title": "Fifth-Grade Boys' Decisions about Participation in Sports Activities", "creators": [ { "firstName": "Alice", "lastName": "Conley", "creatorType": "author" }, { "lastName": "Good, Thomas L.", "fieldMode": 1, "creatorType": "editor" } ], "date": "1999", "issue": "5", "pages": "131-146", "publicationTitle": "Non-subject-matter Outcomes of Schooling", "volume": "99", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n \n\t\t2700 MHz observations of 4c radio sources in the declination zone +4 to -4\n\t\n\t\n\t\tWall\n\t\tJ. V.\n\t\t\n\n\t\t\tauthor\n\t\t\n\t\n\ttext\n\t\n\t\n\t\tAustralian Journal of Physics and Astronphysics\n\n\t\n\t\t\n\t\t\tAustralian J. Phys. Astronphys.\n\t\t\n\t\t\n\t\t\tcontinuing\n\t\t\n\t\tacademic journal\n\n\t\t\n\t\t\t\n\t\t\t\tSuppl. no.\n\t\t\t\t20\n\t\t\t\n\t\t\t1971\n\t\t\n\n\t\n", "items": [ { "itemType": "journalArticle", "title": "2700 MHz observations of 4c radio sources in the declination zone +4 to -4", "creators": [ { "firstName": "J. V.", "lastName": "Wall", "creatorType": "author" } ], "date": "1971", "journalAbbreviation": "Australian J. Phys. Astronphys.", "publicationTitle": "Australian Journal of Physics and Astronphysics", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n \t\n\t\t\tEmergence and Dissolvence in the Self-Organization of Complex Systems\n\t\t\n\t\t\n\t\t\tTesta\n\t\t\tBernard\n\t\t\t\n\n\t\t\t\tauthor\n\t\t\t\n\t\t\n\t\t\n\t\t\tKier\n\t\t\tLamont B.\n\t\t\t\n\n\t\t\t\tauthor\n\t\t\t\n\t\t\n\t\ttext\n\t\thttp://www.mdpi.org/entropy/papers/e2010001.pdf\n\t\t\n\t\t\t\n\n\t\t\t\tEntropy\n\t\t\t\n\t\t\t\n\t\t\t\tcontinuing\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t2\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tno.\n\t\t\t\t\t1\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t17\n\n\t\t\t\t\t17\n\t\t\t\t\n\t\t\t\t2000\n\t\t\t\n\t\t\n\t", "items": [ { "itemType": "journalArticle", "title": "Emergence and Dissolvence in the Self-Organization of Complex Systems", "creators": [ { "firstName": "Bernard", "lastName": "Testa", "creatorType": "author" }, { "firstName": "Lamont B.", "lastName": "Kier", "creatorType": "author" } ], "date": "2000", "issue": "1", "pages": "17", "publicationTitle": "Entropy", "volume": "2", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n\n\t\n\t\t3 Viennese arias :\n\t\tfor soprano, obbligato clarinet in B flat, and piano\n\t\n\n\t\n\t\tLawson, Colin (Colin James)\n\n\t\n\n\tnotated music\n\n\t\n\t\t\n\t\t\tenk\n\t\t\n\t\t\n\n\t\t\tLondon\n\t\t\n\t\tNova Music\n\t\tc1984\n\t\t1984\n\t\tmonographic\n\n\t\n\n\t\n\t\tita\n\t\n\t\n\t\teng\n\t\n\n\t\n\t\t
print
\n\t\t1 score (12 p.) + 2 parts ; 31 cm.\n\t
\n\n\tTutto in pianto il cor struggete / Emperor Joseph I -- E sempre inquieto quel\n\t\tcore infelice : from Endimione / G. Bononcini -- L'adorata genitrice : from Muzio [i.e.\n\t\tMutio] Scevola / G. Bononcini.\n\n\tG.B. Bononcini and Emperor Joseph I ; edited by Colin\n\t\tLawson.\n\n\tOpera excerpts.\n\tAcc. arr. for piano; obbligato for the 2nd-3rd excerpts originally for chalumeau.\n\tItalian words.\n\tCover title.\n\tThe 1st excerpt composed for inclusion in M.A. Ziani's Chilonida.\n\tTexts with English translations on cover p. [2].\n\n\t\n\t\tOperas\n\t\tExcerpts,\n\t\t\tArranged\n\t\tScores and parts\n\t\n\n\t\n\n\t\tSongs (High voice) with\n\t\t\tinstrumental ensemble\n\t\tScores and parts\n\t\n\n\tM1506 .A14 1984\n\n\t\n\t\t\n\n\t\t\tMusic for voice and instrument\n\t\t\n\t\n\n\t\n\t\t\n\t\t\tTutto in pianto il cor struggete\n\t\t\n\n\t\t\n\t\t\tJoseph I, Holy Roman Emperor,\n\t\t\t1678-1711\n\t\t\n\t\n\n\t\n\t\t\n\n\t\t\tEndimione.\n\t\t\tE sempre inquieto quel core infelice.\n\t\t\n\t\t\n\t\t\tBononcini, Giovanni,\n\t\t\t1670-1747\n\t\t\n\n\t\n\n\t\n\t\t\n\t\t\tMutio Scevola.\n\t\t\tAdorata genitrice.\n\t\t\n\t\t\n\n\t\t\tBononcini, Giovanni,\n\t\t\t1670-1747\n\t\t\n\t\n\n\t\n\t\t\n\t\t\tThree Viennese arias.\n\n\t\t\n\t\n\n\t\n\t\t\n\t\t\tViennese arias.\n\t\t\n\t\n\n\t\n\t\taacr\n\t\tDLC\n\t\t850813\n\t\t19950601141653.9\n\t\t5594130\n\n\t\tConverted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n\t\t\t(Revision 1.74), valueURIs and authority URIs added by hand 20120124\n\t\n
", "items": [ { "itemType": "document", "title": "3 Viennese arias : for soprano, obbligato clarinet in B flat, and piano", "creators": [ { "firstName": "Colin (Colin James)", "lastName": "Lawson", "creatorType": "author" } ], "date": "1984", "callNumber": "M1506 .A14 1984", "language": "ita; eng", "publisher": "Nova Music", "attachments": [], "tags": [ "Operas", "Songs (High voice) with instrumental ensemble" ], "notes": [ { "note": "statement of responsibility: G.B. Bononcini and Emperor Joseph I ; edited by Colin\n\t\tLawson." }, { "note": "Opera excerpts." }, { "note": "Acc. arr. for piano; obbligato for the 2nd-3rd excerpts originally for chalumeau." }, { "note": "Italian words." }, { "note": "Cover title." }, { "note": "The 1st excerpt composed for inclusion in M.A. Ziani's Chilonida." }, { "note": "Texts with English translations on cover p. [2]." }, { "note": "Table of Contents: Tutto in pianto il cor struggete / Emperor Joseph I -- E sempre inquieto quel\n\t\tcore infelice : from Endimione / G. Bononcini -- L'adorata genitrice : from Muzio [i.e.\n\t\tMutio] Scevola / G. Bononcini." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n Directory of computer assisted research in musicology\n \n \n Computer assisted research in musicology\n \n \n Center for Computer Assisted Research in the Humanities\n \n text\n directory\n \n \n cau\n \n \n Menlo Park, CA\n \n Center for Computer Assisted Research in the Humanities\n -1988\n 1985\n 1988\n serial\n Annual\n Annual\n \n \n eng\n \n \n
print
\n 4 v. : ill., music ; 26 cm.\n
\n Began in 1985.\n -1988.\n Description based on: 1986.\n \n Musicology\n Data processing\n Periodicals\n \n \n Music\n Bibliography\n Periodicals\n \n \n Musicians\n Directories\n \n \n Musicologists\n Directories\n \n \n Musicology\n Data processing\n Directories\n \n ML73 .D57\n 780/.01/02584\n \n \n Computing in musicology\n \n 1057-9478\n (DLC) 91656596\n (OCoLC)21202412\n \n 86646620\n 86101572\n ocm14913926\n \n aacr\n DLC\n 861202\n 20120109163740.0\n 11315879\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n
", "items": [ { "itemType": "document", "title": "Directory of computer assisted research in musicology", "creators": [ { "lastName": "Center for Computer Assisted Research in the Humanities", "fieldMode": 1, "creatorType": "author" } ], "date": "1985", "callNumber": "ML73 .D57, 780/.01/02584", "language": "eng", "publisher": "Center for Computer Assisted Research in the Humanities", "attachments": [], "tags": [ "Data processing", "Data processing", "Music", "Musicians", "Musicologists", "Musicology", "Musicology" ], "notes": [ { "note": "date/sequential designation: Began in 1985." }, { "note": "date/sequential designation: -1988." }, { "note": "Description based on: 1986." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n The \n American ballroom companion\n dance instruction manuals, ca. 1600-1920\n \n \n Dance instruction manuals, ca. 1600-1920\n \n \n Library of Congress\n Music Division.\n \n \n Library of Congress\n National Digital Library Program.\n \n software, multimedia\n \n \n dcu\n \n \n Washington, D.C\n \n Library of Congress\n 1998-]\n 1998\n 9999\n monographic\n \n \n eng\n \n \n
electronic
\n
electronic resource
\n
Computer data and programs.
\n
\n Presents over two hundred social dance manuals, pocket-sized books with diagrams used by itinerant dancing masters to teach the American gentry the latest dance steps. Includes anti-dance manuals as well as treatises on etiquette. Offered as part of the American Memory online resource compiled by the National Digital Library Program of the Library of Congress.\n Title from title screen dated Mar. 23, 1998.\n System requirements: World Wide Web (WWW) browser software.\n Mode of access: Internet.\n \n n-us---\n \n \n Ballroom dancing\n United States\n \n GV1623\n 793.3\n \n http://hdl.loc.gov/loc.music/collmus.mu000010\n \n 98801326\n hdl:loc.music/collmus.mu000010\n hdl:loc.music/collmus.mu000010\n \n aacr\n DLC\n 980323\n 20060131154904.0\n 5004836\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n
", "items": [ { "itemType": "computerProgram", "title": "The American ballroom companion: dance instruction manuals, ca. 1600-1920", "creators": [ { "lastName": "Library of Congress: Music Division.", "fieldMode": 1, "creatorType": "author" }, { "lastName": "Library of Congress: National Digital Library Program.", "fieldMode": 1, "creatorType": "author" } ], "date": "1998", "abstractNote": "Presents over two hundred social dance manuals, pocket-sized books with diagrams used by itinerant dancing masters to teach the American gentry the latest dance steps. Includes anti-dance manuals as well as treatises on etiquette. Offered as part of the American Memory online resource compiled by the National Digital Library Program of the Library of Congress.", "callNumber": "GV1623, 793.3", "company": "Library of Congress", "place": "Washington, D.C", "url": "http://hdl.loc.gov/loc.music/collmus.mu000010", "attachments": [], "tags": [ "Ballroom dancing" ], "notes": [ { "note": "Title from title screen dated Mar. 23, 1998." }, { "note": "system details: System requirements: World Wide Web (WWW) browser software." }, { "note": "system details: Mode of access: Internet." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n Papers from the First International Workshop on Plasma-Based Ion Implantation\n 4-6 August 1993, University of Wisconsin--Madison, Madison, Wisconsin\n \n \n International Workshop on Plasma-Based Ion Implantation 1993 : University of Wisconsin--Madison)\n \n \n Conrad, John R.\n \n \n Sridharan, Kumar.\n \n \n Applied Science and Technology (ASTeX), Inc\n \n text\n bibliography\n conference publication\n \n \n nyu\n \n \n New York\n \n Published for the American Vacuum Society by the American Institute of Physics\n 1994\n monographic\n \n \n eng\n \n \n
print
\n p. 813-998 : ill. ; 30 cm.\n
\n \"Published in both 1994 March/April issue of the Journal of vacuum science and technology B, vol. 12, no. 2\"--T.p. verso.\n Includes bibliographical references and index.\n \n Ion implantation\n Congresses\n \n TS695.25 .I57 1993\n 621.3815/2\n \n \n Journal of vacuum science & technology. B, Microelectronics and nanometer structures processing, measurement and phenomena\n \n 1071-1023\n (OCoLC)23276603\n (DLC)sn 92021098\n \n 2nd ser., v. 12, no. 2\n \n \n 1563963442\n 97129132\n 35547175\n \n aacr\n DLC\n 940504\n 19970618142736.9\n 4968605\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n
", "items": [ { "itemType": "book", "title": "Papers from the First International Workshop on Plasma-Based Ion Implantation: 4-6 August 1993, University of Wisconsin--Madison, Madison, Wisconsin", "creators": [ { "lastName": "International Workshop on Plasma-Based Ion Implantation 1993 : University of Wisconsin--Madison)", "fieldMode": 1, "creatorType": "author" }, { "firstName": "John R.", "lastName": "Conrad", "creatorType": "author" }, { "firstName": "Kumar", "lastName": "Sridharan", "creatorType": "author" }, { "lastName": "Applied Science and Technology (ASTeX), Inc", "fieldMode": 1, "creatorType": "author" } ], "date": "1994", "ISBN": "1563963442", "bookTitle": "Journal of vacuum science & technology. B, Microelectronics and nanometer structures processing, measurement and phenomena", "callNumber": "TS695.25 .I57 1993, 621.3815/2", "language": "eng", "pages": "813-998", "place": "New York", "publisher": "Published for the American Vacuum Society by the American Institute of Physics", "attachments": [], "tags": [ "Congresses", "Ion implantation" ], "notes": [ { "note": "\"Published in both 1994 March/April issue of the Journal of vacuum science and technology B, vol. 12, no. 2\"--T.p. verso." }, { "note": "bibliography: Includes bibliographical references and index." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n Campbell County, Wyoming\n \n \n Campbell County Chamber of Commerce\n \n cartographic\n map\n \n \n wyu\n \n \n Gillette, Wyo.]\n \n Campbell County Chamber of Commerce\n [1982?]\n 1982\n monographic\n \n \n eng\n \n \n 1 map ; 33 x 15 cm.\n \n In lower right corner: Kintzels-Casper.\n \n \n Scale [ca. 1:510,000].\n \n \n \n Campbell County (Wyo.)\n Maps\n \n G4263.C3 1982 .C3\n 83691515\n \n aacr\n DLC\n 830222\n 19830426000000.0\n 5466714\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n", "items": [ { "itemType": "map", "title": "Campbell County, Wyoming", "creators": [ { "lastName": "Campbell County Chamber of Commerce", "fieldMode": 1, "creatorType": "author" } ], "date": "1982", "callNumber": "G4263.C3 1982 .C3", "language": "eng", "place": "Gillette, Wyo.]", "publisher": "Campbell County Chamber of Commerce", "scale": "1:510,000", "attachments": [], "tags": [ "Maps" ], "notes": [ { "note": "In lower right corner: Kintzels-Casper." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n 3 Viennese arias\n for soprano, obbligato clarinet in B flat, and piano\n \n \n Three Viennese arias\n \n \n Viennese arias\n \n \n Lawson, Colin (Colin James)\n \n \n Joseph\n I, Holy Roman Emperor\n 1678-1711\n \n \n Bononcini, Giovanni\n 1670-1747\n \n \n Bononcini, Giovanni\n 1670-1747\n \n notated music\n \n \n enk\n \n \n London\n \n Nova Music\n c1984\n 1984\n monographic\n \n \n ita\n \n \n eng\n \n \n
print
\n 1 score (12 p.) + 2 parts ; 31 cm.\n
\n Tutto in pianto il cor struggete / Emperor Joseph I -- E sempre inquieto quel core infelice : from Endimione / G. Bononcini -- L'adorata genitrice : from Muzio [i.e. Mutio] Scevola / G. Bononcini.\n Opera excerpts.\n Acc. arr. for piano; obbligato for the 2nd-3rd excerpts originally for chalumeau.\n Italian words.\n Cover title.\n The 1st excerpt composed for inclusion in M.A. Ziani's Chilonida.\n Texts with English translations on cover p. [2].\n \n Operas\n Excerpts, Arranged\n Scores and parts\n \n \n Songs (High voice) with instrumental ensemble\n Scores and parts\n \n M1506 .A14 1984\n \n \n Music for voice and instrument\n \n \n \n \n Tutto in pianto il cor struggete; arr. 1984\n \n \n Joseph\n I, Holy Roman Emperor\n 1678-1711\n \n \n \n \n Endimione. arr. 1984\n E sempre inquieto quel core infelice; arr. 1984\n \n \n Bononcini, Giovanni,\n 1670-1747\n \n \n \n \n Mutio Scevola. arr. 1984\n Adorata genitrice; arr. 1984\n \n \n Bononcini, Giovanni,\n 1670-1747\n \n \n 85753651\n N.M. 275 Nova Music\n \n aacr\n DLC\n 850813\n 19950601141653.9\n 5594130\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n
", "items": [ { "itemType": "document", "title": "3 Viennese arias: for soprano, obbligato clarinet in B flat, and piano", "creators": [ { "firstName": "Colin (Colin James)", "lastName": "Lawson", "creatorType": "author" }, { "lastName": "Joseph", "creatorType": "author" }, { "firstName": "Giovanni", "lastName": "Bononcini", "creatorType": "author" }, { "firstName": "Giovanni", "lastName": "Bononcini", "creatorType": "author" } ], "date": "1984", "callNumber": "M1506 .A14 1984", "language": "ita; eng", "publisher": "Nova Music", "attachments": [], "tags": [ "Excerpts, Arranged", "Operas", "Scores and parts", "Scores and parts", "Songs (High voice) with instrumental ensemble" ], "notes": [ { "note": "Opera excerpts." }, { "note": "Acc. arr. for piano; obbligato for the 2nd-3rd excerpts originally for chalumeau." }, { "note": "Italian words." }, { "note": "Cover title." }, { "note": "The 1st excerpt composed for inclusion in M.A. Ziani's Chilonida." }, { "note": "Texts with English translations on cover p. [2]." }, { "note": "Table of Contents: Tutto in pianto il cor struggete / Emperor Joseph I -- E sempre inquieto quel core infelice : from Endimione / G. Bononcini -- L'adorata genitrice : from Muzio [i.e. Mutio] Scevola / G. Bononcini." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n 2001 bluegrass odyssey\n \n \n Roustabouts (Musical group)\n \n prf\n \n \n sound recording-musical\n \n \n ncu\n \n \n Charlotte, NC\n \n Lamon Records\n p1980\n 1980\n monographic\n \n \n eng\n \n \n
sound recording
\n
sound recording
\n
sound disc
\n 1 sound disc : analog, 33 1/3 rpm ; 12 in.\n
\n Bluegrass odyssey -- Hills of Tennessee -- Sassafrass -- Muddy river -- Take your shoes off Moses -- Don't let Smokey Mountain smoke get in your eyes -- Farewell party -- Faded love -- Super sonic bluegrass -- Old love letters -- Will the circle be unbroken.\n Brief record.\n Performed by the Roustabouts.\n \n Country music\n 1971-1980\n \n \n Bluegrass music\n 1971-1980\n \n Lamon Records LR-4280\n 94759273\n LR-4280 Lamon Records\n 31023015\n \n aacr\n DLC\n 940829\n 19940830080228.8\n 5718053\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n
", "items": [ { "itemType": "audioRecording", "title": "2001 bluegrass odyssey", "creators": [ { "lastName": "Roustabouts (Musical group)", "fieldMode": 1, "creatorType": "author" } ], "date": "1980", "callNumber": "Lamon Records LR-4280", "label": "Lamon Records", "language": "eng", "numberOfVolumes": "1", "place": "Charlotte, NC", "attachments": [], "tags": [ "Bluegrass music", "Country music" ], "notes": [ { "note": "Brief record." }, { "note": "performers: Performed by the Roustabouts." }, { "note": "Table of Contents: Bluegrass odyssey -- Hills of Tennessee -- Sassafrass -- Muddy river -- Take your shoes off Moses -- Don't let Smokey Mountain smoke get in your eyes -- Farewell party -- Faded love -- Super sonic bluegrass -- Old love letters -- Will the circle be unbroken." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n Massachusetts death and marriage records, 1837-1897\n \n mixed material\n \n monographic\n \n \n eng\n \n \n 2 volumes.\n \n Records of deaths and marriages in Millbury and Springfield, Mass.\n Open to research.\n Purchase, 1946.\n Collection material in English.\n Forms part of: Miscellaneous Manuscripts collection.\n \n Registers of births, etc\n Massachusetts\n Millbury\n \n \n Registers of births, etc\n Massachusetts\n Springfield\n \n \n Library of Congress Manuscript Division Washington, D.C. 20540 USA\n http://hdl.loc.gov/loc.mss/mss.home\n \n mm 83001404\n \n aacr\n dacs\n DLC\n 830926\n 20110707103737.0\n 5810505\n Converted from MARCXML to MODS version 3.4 using MARC21slim2MODS3-4.xsl\n \t\t(Revision 1.76 2012/02/01)\n \n", "items": [ { "itemType": "document", "title": "Massachusetts death and marriage records, 1837-1897", "creators": [], "abstractNote": "Records of deaths and marriages in Millbury and Springfield, Mass.", "archiveLocation": "Library of Congress Manuscript Division Washington, D.C. 20540 USA; http://hdl.loc.gov/loc.mss/mss.home", "language": "eng", "rights": "Open to research.", "attachments": [], "tags": [ "Registers of births, etc", "Registers of births, etc" ], "notes": [ { "note": "acquisition: Purchase, 1946." }, { "note": "language: Collection material in English." }, { "note": "Forms part of: Miscellaneous Manuscripts collection." } ], "seeAlso": [] } ] }, { "type": "import", "input": "\n\n \n Ludvig Holbergs udvalgte Skrifter\n D. 1-6 B. 4\n Holbergs Comedier\n \n \n Den honette Ambition\n \n \n Den Stundesløse\n \n \n De Usynlige\n \n \n Pernilles korte Frøkenstand\n \n \n Erasmus Montanus\n \n \n Det lykkelige Skibbrud\n \n \n Den pantsatte Bondedreng\n \n \n Comedier\n \n \n Udvalgte Skrifter\n \n \n Holberg, Ludvig\n 1684-1754\n bibsys.no:authority:90073658\n \n \n Rahbek, K.L.\n bibsys.no:authority:90253663\n \n text\n fiction\n fiction\n \n \n dk\n \n \n dk\n \n \n Kjøbenhavn\n \n Schultz\n 1805\n monographic\n \n \n dan\n \n \n
print
\n
electronic resource
\n
remote
\n
text
\n
regular print
\n XII, 532 s.\n
\n \n Elektronisk reproduksjon [Norge] Nasjonalbiblioteket Digital 2014-02-07\n \n \n Holberg, Ludvig\n 1684-1754\n \n \n \n http://urn.nb.no/URN:NBN:no-nb_digibok_2012051624006\n \n \n http://urn.nb.no/URN:NBN:no-nb_digibok_2014012024006\n \n \n http://urn.nb.no/URN:NBN:no-nb_digibok_2012051624006\n \n URN:NBN:no-nb_digibok_2012051624006\n \n http://urn.nb.no/URN:NBN:no-nb_digibok_2014012024006\n \n URN:NBN:no-nb_digibok_2014012024006\n \n NO-0183300\n \n \n 0183300\n \n \n \n \n NO-0030100\n \n \n 0030100\n (ib.) (Proveniens Johan Schweigaard) (Til bruk på NB Oslos lesesal)\n \n \n \n \n NO-0030100\n \n \n 0030100\n (ib.) (Til bruk på Spesiallesesalen)\n \n \n \n \n NO-0030100\n \n \n 0030100\n (ib.) (Til bruk på Spesiallesesalen)\n \n \n \n \n \n Ludvig Holbergs udvalgte Skrifter. D. 1-6, Holbergs Comedier\n \n \n Holberg, Ludvig, 1684-1754\n \n \n Kjøbenhavn : Schultz, 1804-1806\n \n 999417135394702201\n \n B. 4\n \n \n oai:bibsys.no:biblio:941621081\n oai:bibsys.no:biblio:121586413\n http://urn.nb.no/URN:NBN:no-nb_digibok_2012051624006\n http://urn.nb.no/URN:NBN:no-nb_digibok_2014012024006\n \n katreg\n NO-TrBIB\n 120621\n 20170126171829.0\n 999416210814702202\n Converted from MARCXML to MODS version 3.6 using a customized MARC21slim2MODS3-5.xsl\n (based on 3.5 Revision 1.106 2014/12/19)\n \n nob\n \n \n \n \n Schweigaardsamlingen\n \n bibliography\n \n 4c8b333d27a2eb37c35f99ce42a679bf\n oai:nb.bibsys.no:999416210814702202\n
", "items": [ { "itemType": "book", "title": "Ludvig Holbergs udvalgte Skrifter. D. 1-6 B. 4: Holbergs Comedier", "creators": [ { "firstName": "Ludvig", "lastName": "Holberg", "creatorType": "author" }, { "firstName": "K. L.", "lastName": "Rahbek", "creatorType": "author" }, { "lastName": "Holberg, Ludvig, 1684-1754", "fieldMode": 1, "creatorType": "contributor" } ], "date": "1805", "archiveLocation": "NO-0183300; NO-0030100; NO-0030100; NO-0030100", "language": "dan", "place": "Kjøbenhavn", "publisher": "Kjøbenhavn : Schultz, 1804-1806", "url": "http://urn.nb.no/URN:NBN:no-nb_digibok_2012051624006", "attachments": [], "tags": [], "notes": [ { "note": "reproduction: Elektronisk reproduksjon [Norge] Nasjonalbiblioteket Digital 2014-02-07" } ], "seeAlso": [] } ] } ] /** END TEST CASES **/