{ "translatorID": "26ce1cb2-07ec-4d0e-9975-ce2ab35c8343", "label": "Russian State Library", "creator": "PChemGuy", "target": "^https?://(search|favorites|aleph)\\.rsl\\.ru/", "minVersion": "3.0", "maxVersion": "", "priority": 100, "inRepository": true, "translatorType": 4, "browserSupport": "gcsibv", "lastUpdated": "2021-06-14 20:16:14" } /* ***** BEGIN LICENSE BLOCK ***** Copyright © 2020-2021 PChemGuy 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 ***** */ /* Testing/troubleshooting issues in Scaffold (valid as of April 2020): Care must be taken when loading an additional translator as a preprocessor. setTranslator: - does not throw any errors when invalid translator id is supplied; - does not provide any human readable feedback with translator name, so even if a valid translator id for a wrong translator is supplied, no immediate feedback is supplied. In both cases "Translation successful" status is likely to be returned. Working environment: Windows 7 x64 */ /* RSL has two primary catalog interfaces: https://search.rsl.ru (sRSL) http://aleph.rsl.ru (aRSL) search.rsl.ru records can be accessed via search.rsl.ru/(ru|en)/record/ aleph.rsl.ru is a total mess, a very basic partial support for single record saving is implemented. search.rsl.ru/(ru|en)/download/marc21?id= interface provides access to binary MARC21 records, but requires prior authentication, so they are not used. Translator's logic for both catalogs involves parsing the web page into MARCXML, loading MARCXML translator for initial processing, followed by postprocessing as necessary. Postprocessing for search.rsl.ru aslo involves parsing of the human readable descriptioto harvest additional metadata. TODO: search.rsl.ru - some records contain expandable "Consists of" or "Periodicals" reference with an arrow, when displayed as part of a search result, and "Contents" tab on the record page, referring to related/constituent records. Such references may potentially be processed via the "multiple" routine, but such processing is not implemented. */ /* Item type is adjusted based on the catalog information. Present implementation assumes that each record belongs to a single catalog (it is not clear whether this is correct or not.) Russian style thesis abstracts are more like manuscripts, but they are assigned the "thesis" type, with additional type note added to the "Extra" field. At present, technical standards are commonly mapped to Zotero "report" due to lack of a dedicated type. Such a type is expected to be implemented in the near future, but for the time being a type note is added to the "Extra" field. The following catalogs are supported. For items beloning to other catalogs no type adjustment is made. */ const catalog2type = { "Книги (изданные с 1831 г. по настоящее время)": "book", "Старопечатные книги (изданные с 1450 по 1830 г.)": "book", "Сериальные издания (кроме газет)": "journal", "Авторефераты диссертаций": "thesisAutoreferat", Диссертации: "thesis", Стандарты: "standard" }; /* Filter strings used for extraction of metadata from https://search.rsl.ru/(ru|en)/record/ https://search.rsl.ru/(ru|en)/search# https://favorites.rsl.ru/(ru|en)/ */ const sRSLFilters = { libraryCatalog: "Российская Государственная Библиотека", marcTableCSS: "div#marc-rec > table", descTableCSS: "table.card-descr-table", searchListCSS: "span.js-item-maininfo", searchRecordRslidAttr: "data-id", searchRecordTitle: /^[^:/[]*/, searchPattern: "https://search.rsl.ru/ru/search#q=id:{@id@} AND title:({@title@})", rslidPrefix: "https://search.rsl.ru/ru/record/", thesisRelAttr: "href", thesisRelPrefix: "/ru/transition/", thesisRelCSS: 'a[href^="/ru/transition/"]', favRslidCSS: "a.rsl-link", favDescCSS: "div.rsl-fav-item-descr", title: "Заглавие", catalog: "Каталоги", bbk: "BBK-код", callNumber: "Места хранения", eResource: "Электронный адрес" }; /* Filter strings for extraction of metadata from aleph.rsl.ru */ const aRSLFilters = { marcTableTagCSS: "td.td1[nowrap]", marcTableValCSS: "td.td1:not([nowrap])", marcTableSetCSS: 'a[title="Добавить в подборку"]', recordMarcSignature: "&format=001", recordStandardSignature: "&format=999", recordFormatRegex: /&format=[0-9]{3}/, urlPrefix: "http://aleph.rsl.ru/F/", }; const baseEurl = 'https://dlib.rsl.ru/'; /** * Adds link attachment to a Zotero item. * * @param {Object} item - Zotero item * @param {String} title - Link name * @param {String} url - Link url * * @return {None} */ function addLink(item, title, url) { item.attachments.push({ title: title, snapshot: false, contentType: "text/html", url: url }); } /* Scaffold issue (valid as of April 2020): When detectWeb is run via - "Ctrl/Cmd-T", "doc" receives "object HTMLDocument"; - "Run test", "doc" receives JS object (not sure about details). Both objects have doc.location.host defined. When tester runs a web translator on a search results page, it fails to present the search result selection dialog and throws an error: "Error: Translator called select items with no items" When tester is called on "https://search.rsl.ru/ru/search#q=math", the part starting with the hashtag is lost and not passed to the processing function (not available from either "url" or "doc"). Working environment: Windows 7 x64 */ function detectWeb(doc, url) { let domain = url.match(/^https?:\/\/([^/]*)/)[1]; let subdomain = domain.slice(0, -'.rsl.ru'.length); let pathname = doc.location.pathname; // Z.debug(subdomain); switch (subdomain) { case 'search': if (pathname.includes('/search')) { return 'multiple'; } else if (pathname.includes('/record/')) { let metadata = getRecordDescriptionsRSL(doc, url); let itemType = metadata.itemType; if (itemType == 'thesis') { if (metadata.relatedURL['Autoreferat RSL record'] || metadata.relatedURL['Thesis RSL record']) { return 'multiple'; } } // Z.debug(metadata); return itemType ? itemType : 'book'; } else { Z.debug('Catalog section not supported'); return false; } case 'favorites': return 'multiple'; case 'aleph': /* There are other single record patterns, but the full repertoire is unclear. Only this pattern is supported */ if (url.includes('func=full-set-set')) { return 'book'; /* There are other single record patterns, but the full repertoire is unclear. Due to awful implementation, "multiple" is not supported. */ } else if (url.match(/func=(find-[abcm]|basket-short|(history|short)-action)/)) { Z.debug('Due to awful implementation, "multiple" is not supported.'); // return 'multiple'; return false; } else { Z.debug('Catalog section not supported'); return false; } default: Z.debug('Subdomain not supported: ' + subdomain); return false; } } /* Scaffold issue (date detected: April 2020): When detectWeb is run via "Ctrl/Cmd-T", "doc" receives "HTMLDocument object"; "Run test", "doc" receives JS object (not sure about details). Working environment: Windows 7 x64 */ function doWeb(doc, url) { // Zotero.debug(doc); // Z.debug(doc.toString()); let domain = url.match(/^https?:\/\/([^/]*)/)[1]; let subdomain = domain.slice(0, -'.rsl.ru'.length); if (detectWeb(doc, url) != 'multiple') { switch (subdomain) { case 'search': scrape(doc, url); break; case 'aleph': if (url.includes(aRSLFilters.recordMarcSignature)) { scrape(doc, url); } else { let href = aRSLFilters.urlPrefix + '?' + url.split('?')[1].replace(aRSLFilters.recordFormatRegex, aRSLFilters.recordMarcSignature); ZU.processDocuments([href], scrape); } break; default: Z.debug('Subdomain not supported'); } } else { let pathname = doc.location.pathname; var records; if (pathname.includes('/record/')) { let metadata = getRecordDescriptionsRSL(doc, url); let itemType = metadata.itemType; records = {}; if (itemType == 'thesis' && metadata.relatedURL['Autoreferat RSL record']) { records[url] = 'Thesis'; records[metadata.relatedURL['Autoreferat RSL record']] = 'Autoreferat'; } else if (itemType == 'thesis' && metadata.relatedURL['Thesis RSL record']) { records[metadata.relatedURL['Thesis RSL record']] = 'Thesis'; records[url] = 'Autoreferat'; } else { Z.debug('Unsupported case of related records'); } } else { records = getSearchResults(doc, url); } Zotero.selectItems(records, function (records) { if (records) ZU.processDocuments(Object.keys(records), scrape); } ); } } function scrape(doc, url) { // Convert HTML table of MARC record to MARCXML let recordMarcxml; let scrapeCallback; let domain = url.match(/^https?:\/\/([^/]*)/)[1]; let subdomain = domain.slice(0, -'.rsl.ru'.length); switch (subdomain) { case 'search': recordMarcxml = getMarcxmlsRSL(doc); scrapeCallback = scrapeCallbacksRSL; break; case 'aleph': recordMarcxml = getMarcxmlaRSL(doc); scrapeCallback = scrapeCallbackaRSL; break; default: Z.debug('Subdomain not supported'); return; } // Z.debug('\n' + recordMarcxml); // call MARCXML translator const MarcxmlTid = 'edd87d07-9194-42f8-b2ad-997c4c7deefd'; let trans = Zotero.loadTranslator('import'); trans.setTranslator(MarcxmlTid); trans.setString(recordMarcxml); trans.setHandler('itemDone', scrapeCallback(doc, url)); trans.translate(); } /* Additional processing after the MARCXML translator for search.rsl.ru Adjust item type based on catalog information for supported catalogs. For types not available in Zotero, "type" annotation is added to the "extra" field. Add the following information: RSL record ID, call numbers (semicolon separated), catalog/item type, BBK codes (semicolon separated), electronic url, if available. */ function scrapeCallbacksRSL(doc, url) { function callback(obj, item) { // Zotero.debug(item); let metadata = getRecordDescriptionsRSL(doc, url); // Z.debug(metadata); if (metadata.itemType) { item.itemType = metadata.itemType; } item.url = metadata.url; item.libraryCatalog = sRSLFilters.libraryCatalog; item.callNumber = metadata[sRSLFilters.callNumber]; item.archive = metadata[sRSLFilters.catalog]; let extra = []; extra.push('RSLID: ' + metadata.rslid); if (metadata.extraType) { extra.push('Type: ' + metadata.extraType); } if (metadata[sRSLFilters.bbk]) { extra.push('BBK: ' + metadata[sRSLFilters.bbk]); } if (item.extra) { extra.push(item.extra); } item.extra = extra.join('\n'); // Z.debug(item.attachments[0]); let rURLs = metadata.relatedURL; Object.keys(rURLs).forEach(key => addLink(item, key, rURLs[key])); // Z.debug(item); item.complete(); } return callback; } /* Additional processing after the MARCXML translator for aleph.rsl.ru */ function scrapeCallbackaRSL(doc, url) { function callback(obj, item) { // RSLID let add2set = attr(doc, aRSLFilters.marcTableSetCSS, 'href'); let RSLID = add2set.match(/&doc_library=RSL([0-9]{2})/)[1] + add2set.match(/&doc_number=([0-9]{9})/)[1]; let extra = ['RSLID: ' + RSLID]; if (item.extra) { extra.push(item.extra); } item.extra = extra.join('\n'); item.url = aRSLFilters.urlPrefix + '?' + url.split('?')[1].replace(aRSLFilters.recordFormatRegex, aRSLFilters.recordStandardSignature); let metadata = {}; metadata.relatedURL = {}; let href = sRSLFilters.rslidPrefix + RSLID; metadata.relatedURL['search.rsl.ru'] = href; let rURLs = metadata.relatedURL; Object.keys(rURLs).forEach(key => addLink(item, key, rURLs[key])); // Z.debug(item); item.complete(); } return callback; } function getSearchResults(doc, url) { let domain = url.match(/^https?:\/\/([^/]*)/)[1]; let subdomain = domain.slice(0, -'.rsl.ru'.length); let records = {}; if (subdomain == 'search') { let rows = doc.querySelectorAll(sRSLFilters.searchListCSS); // ZU.processDocuments(url, function (doc, url) { Z.debug(doc); }); // ZU.doGet(url, function (responseText, response, url) { Z.debug(response); }); for (let row of rows) { let href = sRSLFilters.rslidPrefix + row.getAttribute(sRSLFilters.searchRecordRslidAttr); records[href] = row.innerText.match(sRSLFilters.searchRecordTitle)[0]; } } else if (subdomain == 'favorites') { let rows = doc.querySelectorAll(sRSLFilters.favRslidCSS); for (let row of rows) { let href = row.href; records[href] = row.parentNode.parentNode.querySelector(sRSLFilters.favDescCSS).innerText.match(sRSLFilters.searchRecordTitle)[0]; } } return records; } /** * Parses record table with MARC data https://search.rsl.ru/(ru|en)/record/. * Returned MARCXML string can be processed using the MARCXML import translator. * * @return {String} - MARCXML record */ function getMarcxmlsRSL(doc) { let irow = 0; let marc21TableRows = doc.querySelector(sRSLFilters.marcTableCSS).rows; let marcxmlLines = []; marcxmlLines.push( '', '', ' ' + marc21TableRows[0].cells[1].innerText.replace(/#/g, ' ') + '' ); irow++; // Control fields for (irow; irow < marc21TableRows.length; irow++) { let curCells = marc21TableRows[irow].cells; let fieldTag = curCells[0].innerText; let fieldVal = curCells[1].innerText; if (Number(fieldTag) > 8) { break; } marcxmlLines.push( ' ' + fieldVal.replace(/#/g, ' ') + '' ); } // Data fields for (irow; irow < marc21TableRows.length; irow++) { let curCells = marc21TableRows[irow].cells; let fieldTag = curCells[0].innerText; /* Subfield separator is '$'. Subfield separator always comes right after a tag, so triple all '$' that follow immediately after '>' before stripping HTML tags to prevent collisions with potential occurences of '$' as part of subfield contets. */ curCells[1].innerHTML = curCells[1].innerHTML.replace(/>\$/g, '>$$$$$$'); let fieldVal = curCells[1].innerText; let subfields = fieldVal.split('$$$'); curCells[1].innerHTML = curCells[1].innerHTML.replace(/\$\$\$/g, '$$'); let inds = subfields[0].replace(/#/g, ' '); // Data field tag and indicators marcxmlLines.push( ' ' ); // Subfields for (let isubfield = 1; isubfield < subfields.length; isubfield++) { // Split on first character to extract the subfield code and its contents let subfield = subfields[isubfield].replace(/\s/, '\x01').split('\x01'); marcxmlLines.push( ' ' + subfield[1] + '' ); } marcxmlLines.push( ' ' ); } marcxmlLines.push( '' ); return marcxmlLines.join('\n'); } /** * Parses record table with human readable bibliographic description on * https://search.rsl.ru/(ru|en)/record/ and constructs metadata object. * Returned metadata object can be used for additional processing of the output * produced by the MARCXML import translator. * * @return {Object} - extracted metadata. */ function getRecordDescriptionsRSL(doc, url) { let irow; let metadata = {}; let propertyName = ''; let propertyValue = ''; let descTableRows = doc.querySelector(sRSLFilters.descTableCSS).rows; // Parse description table for (irow = 0; irow < descTableRows.length; irow++) { let curCells = descTableRows[irow].cells; let buffer = curCells[0].innerText; if (buffer) { metadata[propertyName] = propertyValue; propertyName = buffer; propertyValue = curCells[1].innerText; } else { propertyValue = propertyValue + '; ' + curCells[1].innerText; } } metadata[propertyName] = propertyValue; delete metadata['']; // Record type let type = catalog2type[metadata[sRSLFilters.catalog]]; if (type) { metadata.type = type; metadata.itemType = type; } // Record ID metadata.rslid = url.slice(sRSLFilters.rslidPrefix.length); // URL metadata.url = url; // Array of link attachments: {title: title, url: url} metadata.relatedURL = {}; /* Some metadata is only included with the record when displayed as part of search result. Here a search query is constructed combining (AND) record title and system record id, which is RSL ID without the two most significant digits. */ let href = sRSLFilters.searchPattern .replace(/\{@title@\}/, metadata[sRSLFilters.title]) .replace(/\{@id@\}/, metadata.rslid.slice(2)); metadata.relatedURL['via search'] = href; // E-resource if (metadata[sRSLFilters.eResource]) { let eurl = baseEurl + metadata.rslid; metadata.relatedURL['E-resource'] = eurl; } // Workaround until implementation of a "technical standard" type if (type == 'standard') { metadata.itemType = 'report'; metadata.extraType = type; } if (type == 'journal') { metadata.itemType = 'book'; metadata.extraType = type; } // Complementary thesis/autoreferat record if availabless if (type == 'thesis') { let aurl = attr(doc, sRSLFilters.thesisRelCSS, sRSLFilters.thesisRelAttr); if (aurl) { aurl = sRSLFilters.rslidPrefix + aurl.slice(sRSLFilters.thesisRelPrefix.length + metadata.rslid.length + '/'.length); metadata.relatedURL['Autoreferat RSL record'] = aurl; } } if (type == 'thesisAutoreferat') { // From citation point of view, the "manuscript" type might be more suitable // On the other hand, the thesis should be cited rather then this paper anyway. metadata.itemType = 'thesis'; let turl = attr(doc, sRSLFilters.thesisRelCSS, sRSLFilters.thesisRelAttr); if (turl) { turl = sRSLFilters.rslidPrefix + turl.slice(sRSLFilters.thesisRelPrefix.length + metadata.rslid.length + '/'.length); metadata.relatedURL['Thesis RSL record'] = turl; } metadata.extraType = type; } return metadata; } /** * Parses record table with MARC data from aleph.rsl.ru. * Returned MARCXML string can be processed using the MARCXML import translator. * * @return {String} - MARCXML record */ function getMarcxmlaRSL(doc) { // -------------- Parse MARC table into a MARC array object -------------- // let marcTags = doc.querySelectorAll(aRSLFilters.marcTableTagCSS); let marcVals = doc.querySelectorAll(aRSLFilters.marcTableValCSS); let marc = []; if (marcTags.length < 1) { return ''; } // Leader marc.push([marcTags[1].innerText.padEnd(5, ' '), marcVals[1].innerText]); for (let fieldCount = 2; fieldCount < marcTags.length; fieldCount++) { let tag = marcTags[fieldCount].innerText; if (Number(tag)) { tag = tag.padEnd(5, ' '); marc.push([tag, marcVals[fieldCount].innerText]); } } if (marc.length < 5) { return ''; } // ---------- Format MARCXML from the prepared MARC array object --------- // let irow = 0; let marcxmlLines = []; marcxmlLines.push( '', '', ' ' + marc[1][1] + '' ); irow++; // Control fields for (irow; irow < marc.length; irow++) { let fieldTag = marc[irow][0].slice(0, 3); let fieldVal = marc[irow][1]; if (Number(fieldTag) > 8) { break; } marcxmlLines.push( ' ' + fieldVal + '' ); } // Data fields for (irow; irow < marc.length; irow++) { let fieldTag = marc[irow][0].slice(0, 3); let fieldInd = marc[irow][0].slice(3); let fieldVal = marc[irow][1]; // Data field tag and indicators marcxmlLines.push(' '); // Subfields let subfields = fieldVal.split('|'); for (let isubfield = 1; isubfield < subfields.length; isubfield++) { // Split on first character to extract the subfield code and its contents let subfield = subfields[isubfield].replace(/\s/, '\x01').split('\x01'); marcxmlLines.push( ' ' + subfield[1] + '' ); } marcxmlLines.push( ' ' ); } marcxmlLines.push( '' ); return marcxmlLines.join('\n'); } /** BEGIN TEST CASES **/ var testCases = [ { "type": "web", "url": "https://search.rsl.ru/ru/record/01002457709", "items": [ { "itemType": "book", "title": "Study of the ⁴He+²⁰⁹Bi fusion reaction", "creators": [ { "firstName": "A. A.", "lastName": "Hassan", "creatorType": "editor" } ], "date": "2003", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB 3 04-32/701", "extra": "RSLID: 01002457709\nBBK: В383.5,09", "language": "eng", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "11", "place": "Дубна", "publisher": "Объед. ин-т ядер. исслед", "series": "Объединенный ин-т ядерных исследований, Дубна", "seriesNumber": "E15-2003-186", "url": "https://search.rsl.ru/ru/record/01002457709", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Физико-математические науки -- Физика -- Физика атомного ядра -- Ядерные реакции" } ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01007721928", "items": "multiple" }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01009512194", "items": "multiple" }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01000580022", "items": [ { "itemType": "book", "title": "Труды Международной конференции \"Математика в индустрии\", 29 июня - 3 июля 1998 года", "creators": [], "date": "1998", "ISBN": "9785879761405", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB 2 98-27/128; FB 2 98-27/129", "extra": "RSLID: 01000580022\nBBK: Ж.с11я431(0)", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "352", "place": "Таганрог", "publisher": "Изд-во Таганрог. гос. пед. ин-та", "url": "https://search.rsl.ru/ru/record/01000580022", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Техника и технические науки -- Применение математических методов -- Материалы конференции" } ], "notes": [ { "note": "В надзаг.: М-во общ. и проф. образования РФ. Таганрог. гос. пед. ин-т На обл. в подзаг.: ICIM - 98 Текст рус., англ Посвящается 300-летию основания г. Таганрога" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01004044482", "items": [ { "itemType": "book", "title": "Химия. Неорганическая химия: учебник для 8 класса общеобразовательных учреждений", "creators": [ { "firstName": "Гунтис Екабович", "lastName": "Рудзитис", "creatorType": "author" }, { "firstName": "Фриц Генрихович", "lastName": "Фельдман", "creatorType": "author" } ], "date": "2008", "ISBN": "9785090198592", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB 3 08-13/261", "edition": "12-е изд., испр", "extra": "RSLID: 01004044482\nBBK: Г1я721-1", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "175", "place": "Москва", "publisher": "Просвещение", "shortTitle": "Химия. Неорганическая химия", "url": "https://search.rsl.ru/ru/record/01004044482", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Химические науки -- Общая и неорганическая химия -- Учебник для средней общеобразовательной школы" } ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01008704042", "items": "multiple" }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01010006646", "items": "multiple" }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01008942252", "items": [ { "itemType": "report", "title": "Товары бытовой химии. Метод определения щелочных компонентов: Goods of household chemistry. Method for determination of alkaline components: государственный стандарт Российской Федерации: издание официальное: утвержден и введен в действие Постановлением Госстандарта России от 29 января 1997 г. № 26: введен впервые: введен 1998-01-01", "creators": [], "date": "1997", "archive": "Стандарты", "callNumber": "SVT ГОСТ Р 51021-97", "extra": "RSLID: 01008942252\nType: standard", "institution": "Изд-во стандартов", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "place": "Москва", "shortTitle": "Товары бытовой химии. Метод определения щелочных компонентов", "url": "https://search.rsl.ru/ru/record/01008942252", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" }, { "title": "E-resource", "snapshot": false, "contentType": "text/html" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01007057068", "items": [ { "itemType": "book", "title": "Химия и реставрация", "creators": [], "date": "1970", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB Бр 130/952; FB Бр 130/953; FB Арх", "extra": "RSLID: 01007057068", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "10", "place": "Москва", "publisher": "б. и.", "series": "Химия/ М-во культуры СССР", "seriesNumber": "70", "url": "https://search.rsl.ru/ru/record/01007057068", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01000681096", "items": [ { "itemType": "book", "title": "Тезисы докладов Межрегиональной научной конференции \"Химия на пути в XXI век\", Ухта, 13-14 марта 2000 г", "creators": [], "date": "2000", "ISBN": "9785881792152", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB 2 00-8/1758-0; FB 2 00-8/1759-9", "extra": "RSLID: 01000681096\nBBK: Г.я431(2)", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "46", "place": "Ухта", "publisher": "Ухт. гос. техн. ун-т", "url": "https://search.rsl.ru/ru/record/01000681096", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Химия -- Материалы конференции" } ], "notes": [ { "note": "В надзаг.: В надзаг.: М-во образования Рос. Федерации. Ухт. гос. техн. ун-т. Каф. химии" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01002792532", "items": [ { "itemType": "book", "title": "Физическая химия", "creators": [], "date": "2005", "ISBN": "9785812208066", "abstractNote": "Учебное пособие предназначено для студентов, аспирантов, научных и инженерно-технических работников, преподавателей ВУЗов и техникумов", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB 12 05-8/83", "extra": "RSLID: 01002792532\nBBK: Г5я732-1; Г6я732-1", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "282", "place": "М.", "publisher": "Моск. гос. ун-т печати", "url": "https://search.rsl.ru/ru/record/01002792532", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01004080147", "items": [ { "itemType": "book", "title": "Физическая химия: учебное пособие", "creators": [ { "firstName": "Константин Григорьевич", "lastName": "Боголицын", "creatorType": "editor" } ], "date": "2008", "ISBN": "9785261003861", "archive": "Книги (изданные с 1831 г. по настоящее время)", "callNumber": "FB 3 08-25/12", "extra": "RSLID: 01004080147\nBBK: Г5я738-1", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "111", "place": "Архангельск", "publisher": "Архангельский гос. технический ун-т", "shortTitle": "Физическая химия", "url": "https://search.rsl.ru/ru/record/01004080147", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" }, { "title": "E-resource", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Химические науки -- Физическая химия. Химическая физика -- Учебник для высшей школы -- Заочное обучение" } ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01002386114", "items": [ { "itemType": "book", "title": "Журнал физической химии", "creators": [ { "lastName": "АН СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "РСФСР", "creatorType": "editor", "fieldMode": true }, { "lastName": "СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "Российская академия наук", "creatorType": "editor", "fieldMode": true } ], "date": "1930", "archive": "Сериальные издания (кроме газет)", "extra": "RSLID: 01002386114\nType: journal\nBBK: Г5я5", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "place": "Москва", "publisher": "Российская академия наук", "url": "https://search.rsl.ru/ru/record/01002386114", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Химические науки -- Физическая химия. Химическая физика -- Общий раздел -- Периодические и продолжающиеся издания" } ], "notes": [ { "note": "Основан Бюро физ.-хим. конф. при НТУ ВСНХ СССР в 1930 г Журнал издается под руководством Отделения химии и наук о материалах РАН 1931-1934 (Т. 5 Вып. 1-3) является \"Серией В Химического журнала\" Изд-во: Т. 1 Гос. изд-во; Т. 2 Гос. науч.-техн. изд-во ; Т. 3-5 (Вып. 1-7) Гос. техн.-теорет. изд-во ; Т. 5 (Вып. 8-12) - 11 (Вып. 1-3) ОНТИ НКТП СССР; Т. 11 (Вып. 4-6) - 38 не указано; Т. 39-66 Наука ; Т. 67-72 МАИК \"Наука\"; Т. 73- Наука: МАИК \"Наука\"/Интерпериодика ; Т. 82- Наука Место изд.: 1930, т. 1, 29- М.; 1931. т. 2-28 М.; Л Изд-во: 2017- Федеральное государственное унитарное предприятие Академический научно-издательский, производственно-полиграфический и книгораспространительский центр \"Наука\" ; 2018- Российская академия наук" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/07000380351", "items": [ { "itemType": "book", "title": "Журнал физической химии", "creators": [ { "lastName": "АН СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "РСФСР", "creatorType": "editor", "fieldMode": true }, { "lastName": "СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "Российская академия наук", "creatorType": "editor", "fieldMode": true } ], "date": "1930", "archive": "Сериальные издания (кроме газет)", "extra": "RSLID: 07000380351\nType: journal", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "place": "Москва", "publisher": "Российская академия наук", "url": "https://search.rsl.ru/ru/record/07000380351", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [], "notes": [ { "note": "Основан Бюро физ.-хим. конф. при НТУ ВСНХ СССР в 1930 г Журнал издается под руководством Отделения химии и наук о материалах РАН 1931-1934 (Т. 5 Вып. 1-3) является \"Серией В Химического журнала\" Изд-во: Т. 1 Гос. изд-во; Т. 2 Гос. науч.-техн. изд-во; Т. 3-5 (Вып. 1-7) Гос. техн.-теорет. изд-во; Т. 5 (Вып. 8-12) - 11 (Вып. 1-3) ОНТИ НКТП СССР; Т. 11 (Вып. 4-6) - 38 не указано; Т. 39-66 Наука; Т. 67-72 МАИК \"Наука\"; Т. 73- Наука: МАИК \"Наука\"/Интерпериодика ; Т. 82- Наука Место изд.: 1930, т. 1, 29- М.; 1931. т. 2-28 М.; Л Изд-во: 2017- Федеральное государственное унитарное предприятие Академический научно-издательский, производственно-полиграфический и книгораспространительский центр \"Наука\" ; 2018- Российская академия наук" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01010153224", "items": [ { "itemType": "report", "title": "Стабильные жидкие углеводороды. Определение ванадия, никеля, алюминия, мышьяка, меди, железа, натрия и свинца спектральными методами: стандарт организации: издание официальное: введен впервые: дата введения 2018-12-01", "creators": [ { "lastName": "\"Газпром\", российское акционерное общество", "creatorType": "editor", "fieldMode": true } ], "date": "2019", "archive": "Стандарты", "callNumber": "SVT СТО Газпром 5.78-2018", "extra": "RSLID: 01010153224\nType: standard\nBBK: Л54-101с344я861(2Р); Д453.1-43,0; И36-1я861", "institution": "Газпром экспо", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "place": "Санкт-Петербург", "shortTitle": "Стабильные жидкие углеводороды. Определение ванадия, никеля, алюминия, мышьяка, меди, железа, натрия и свинца спектральными методами", "url": "https://search.rsl.ru/ru/record/01010153224", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Горное дело -- Разработка нефтяных и газовых месторождений -- Исследование -- Стандарты" }, { "tag": "Науки о Земле -- Геологические науки -- Полезные ископаемые -- Горючие полезные ископаемые. Битумы -- Нефть -- Химический состав -- Стандарты" } ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01008033518", "items": [ { "itemType": "report", "title": "ГОСТ IEC 61010-1-2014. Безопасность электрических контрольно-измерительных приборов и лабораторного оборудования =: Safety requirements for electrical equipment for measurement, control, and laboratory use. Part 1. General requirements: межгосударственный стандарт. Ч. 1: Общие требования", "creators": [ { "lastName": "Межгосударственный совет по стандартизации, метрологии и сертификации", "creatorType": "editor", "fieldMode": true } ], "date": "2015", "archive": "Стандарты", "callNumber": "SVT ГОСТ IEC 61010-1-2014", "extra": "RSLID: 01008033518\nType: standard", "institution": "Стандартинформ", "libraryCatalog": "Российская Государственная Библиотека", "place": "Москва", "shortTitle": "ГОСТ IEC 61010-1-2014. Безопасность электрических контрольно-измерительных приборов и лабораторного оборудования =", "url": "https://search.rsl.ru/ru/record/01008033518", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "аналитическая химия" }, { "tag": "измерительные приборы" }, { "tag": "лабораторное оборудование" }, { "tag": "средства автоматизации и вычислительной техники" }, { "tag": "техника безопасности" }, { "tag": "химическая промышленность" }, { "tag": "электрические и электронные испытания" } ], "notes": [ { "note": "Настоящий стандарт идентичен международному стандарту IEC 61010-1:2010 Safety requirements for electrical equipment for measurement, control, and laboratory use - Part 1: General requirements (Безопасность контрольно-измерительных приборов и лабораторного оборудования. Часть 1. Общие требования)" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01010285501", "items": [ { "itemType": "book", "title": "Индия: путеводитель + карта: 12+", "creators": [ { "firstName": "Дмитрий Евгеньевич", "lastName": "Кульков", "creatorType": "author" } ], "date": "2020", "ISBN": "9785041079505", "archive": "Карты", "callNumber": "FB Гр Ч518; KGR Ко 169-20/IX-21", "edition": "2-е изд., испр. и доп.", "extra": "RSLID: 01010285501\nBBK: Я23(5Ид)", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "413", "place": "Москва", "publisher": "Эксмо, Бомбора™", "series": "Orangевый гид", "shortTitle": "Индия", "url": "https://search.rsl.ru/ru/record/01010285501", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Литература универсального содержания -- Справочные издания -- Страноведческие справочники. Путеводители. Адресные книги. Адрес-календари -- Отдельные зарубежные страны -- Азия -- Индия" }, { "tag": "Республика Индия, государство" } ], "notes": [ { "note": "Авт. указан перед вып. дан Указ. в конце кн" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01008937943", "items": [ { "itemType": "thesis", "title": "Реакция Дильса-Альдера при деформации органических веществ под давлением: диссертация ... кандидата химических наук: 02.00.03", "creators": [ { "firstName": "Валентин Сергеевич", "lastName": "Абрамов", "creatorType": "author" } ], "date": "1980", "archive": "Диссертации", "callNumber": "OD Дк 81-2/93", "extra": "RSLID: 01008937943\nBBK: Г591,0; Г222.6Дл,0", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "numPages": "118", "place": "Москва", "shortTitle": "Реакция Дильса-Альдера при деформации органических веществ под давлением", "url": "https://search.rsl.ru/ru/record/01008937943", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Органическая химия" } ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01000287561", "items": "multiple" }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01002444380", "items": [ { "itemType": "book", "title": "Основы общей химии: В 2 т.", "creators": [ { "firstName": "Борис Владимирович", "lastName": "Некрасов", "creatorType": "author" } ], "date": "2003", "ISBN": "9785811405008", "abstractNote": "Книга является первым томом двухтомной монографии, суммирующей основные особенности химии всех химических элементов. Монография предназначена для широкого круга научных работников, инженеров, студентов химических специальностей", "archive": "Книги (изданные с 1831 г. по настоящее время)", "edition": "4. изд., стер", "extra": "RSLID: 01002444380\nBBK: Г1я731-1", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "place": "СПб. [и др.]", "publisher": "Лань", "shortTitle": "Основы общей химии", "url": "https://search.rsl.ru/ru/record/01002444380", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Химические науки -- Общая и неорганическая химия -- Учебник для высшей школы" } ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/01002386114", "items": [ { "itemType": "book", "title": "Журнал физической химии", "creators": [ { "lastName": "АН СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "РСФСР", "creatorType": "editor", "fieldMode": true }, { "lastName": "СССР", "creatorType": "editor", "fieldMode": true }, { "lastName": "Российская академия наук", "creatorType": "editor", "fieldMode": true } ], "date": "1930", "archive": "Сериальные издания (кроме газет)", "extra": "RSLID: 01002386114\nType: journal\nBBK: Г5я5", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "place": "Москва", "publisher": "Российская академия наук", "url": "https://search.rsl.ru/ru/record/01002386114", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [ { "tag": "Химические науки -- Физическая химия. Химическая физика -- Общий раздел -- Периодические и продолжающиеся издания" } ], "notes": [ { "note": "Основан Бюро физ.-хим. конф. при НТУ ВСНХ СССР в 1930 г Журнал издается под руководством Отделения химии и наук о материалах РАН 1931-1934 (Т. 5 Вып. 1-3) является \"Серией В Химического журнала\" Изд-во: Т. 1 Гос. изд-во; Т. 2 Гос. науч.-техн. изд-во ; Т. 3-5 (Вып. 1-7) Гос. техн.-теорет. изд-во ; Т. 5 (Вып. 8-12) - 11 (Вып. 1-3) ОНТИ НКТП СССР; Т. 11 (Вып. 4-6) - 38 не указано; Т. 39-66 Наука ; Т. 67-72 МАИК \"Наука\"; Т. 73- Наука: МАИК \"Наука\"/Интерпериодика ; Т. 82- Наука Место изд.: 1930, т. 1, 29- М.; 1931. т. 2-28 М.; Л Изд-во: 2017- Федеральное государственное унитарное предприятие Академический научно-издательский, производственно-полиграфический и книгораспространительский центр \"Наука\" ; 2018- Российская академия наук" } ], "seeAlso": [] } ] }, { "type": "web", "url": "https://search.rsl.ru/ru/record/07000380352", "items": [ { "itemType": "book", "title": "Журнал физической химии. 2019", "creators": [], "archive": "Книги (изданные с 1831 г. по настоящее время)", "extra": "RSLID: 07000380352", "language": "rus", "libraryCatalog": "Российская Государственная Библиотека", "url": "https://search.rsl.ru/ru/record/07000380352", "attachments": [ { "title": "via search", "snapshot": false, "contentType": "text/html" } ], "tags": [], "notes": [], "seeAlso": [] } ] } ] /** END TEST CASES **/