ThisTest/translators/eLibrary.ru.js

764 lines
24 KiB
JavaScript
Raw Normal View History

2022-03-23 12:58:01 +01:00
{
"translatorID": "587709d3-80c5-467d-9fc8-ed41c31e20cf",
"label": "eLibrary.ru",
"creator": "Avram Lyon",
"target": "^https?://(www\\.)?elibrary\\.ru/",
"minVersion": "2.1",
"maxVersion": "",
"priority": 100,
"inRepository": true,
"translatorType": 4,
"browserSupport": "gcsbv",
"lastUpdated": "2020-03-09 18:50:52"
}
/*
***** BEGIN LICENSE BLOCK *****
eLibrary.ru Translator
Copyright © 2010-2011 Avram Lyon, ajlyon@gmail.com
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 <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/
function detectWeb(doc, url) {
if (url.match(/\/item.asp/)) {
return getDocType(doc);
}
else if (url.match(/\/(query_results|contents|org_items|itembox_items)\.asp/)) {
return "multiple";
}
return false;
}
function doWeb(doc, url) {
var articles = [];
if (detectWeb(doc, url) == "multiple") {
var results = ZU.xpath(doc, '//table[@id="restab"]/tbody/tr[starts-with(@id, "arw")]/td[2]');
// Zotero.debug('results.length: ' + results.length);
var items = {};
for (let i = 0; i < results.length; i++) {
// Zotero.debug('result [' + i + '] text: ' + results[i].textContent);
var title = ZU.xpathText(results[i], './a');
var uri = ZU.xpathText(results[i], ' ./a/@href');
if (!title || !uri) continue;
items[uri] = fixCasing(title);
}
Zotero.selectItems(items, function (items) {
if (!items) {
return;
}
for (let i in items) {
articles.push(i);
}
Zotero.Utilities.processDocuments(articles, scrape);
});
}
else {
scrape(doc, url);
}
}
function fixCasing(string) {
if (string && string == string.toUpperCase()) {
return ZU.capitalizeTitle(string, true);
}
else return string;
}
function getDocType(doc) {
var docType = ZU.xpathText(doc, '//tr/td/text()[contains(., "Тип:")]/following-sibling::*[1]');
var itemType;
switch (docType) {
case "обзорная статья":
case "статья в журнале - научная статья":
case "научная статья":
case "статья в журнале":
case "статья в открытом архиве":
itemType = "journalArticle";
break;
case "статья в сборнике трудов конференции":
itemType = "conferencePaper";
break;
case "учебное пособие":
case "монография":
itemType = "book";
break;
case "публикация в сборнике трудов конференции":
itemType = "conferencePaper";
break;
default:
Zotero.debug("Unknown type: " + docType + ". Using 'journalArticle'");
itemType = "journalArticle";
break;
}
return itemType;
}
function scrape(doc, url) {
var item = new Zotero.Item();
item.itemType = getDocType(doc);
item.title = fixCasing(doc.title);
item.url = url;
var rightPart = doc.getElementById("leftcol").nextSibling;
var centralColumn = ZU.xpath(rightPart, './table/tbody/tr[2]/td[@align="left"]');
var datablock = ZU.xpath(centralColumn, './div[1]');
var authors = ZU.xpath(datablock, './/table[1]//b');
// Zotero.debug('authors.length: ' + authors.length);
for (let i = 0; i < authors.length; i++) {
var dirty = authors[i].textContent;
// Zotero.debug('author[' + i + '] text: ' + dirty);
/* Common author field formats are:
(1) "LAST FIRST PATRONIMIC"
(2) "LAST F. P." || "LAST F.P." || "LAST F.P" || "LAST F."
In all these cases, we put comma after LAST for `ZU.cleanAuthor()` to work.
Other formats are rare, but possible, e.g. "ВАН ДЕ КЕРЧОВЕ Р." == "Van de Kerchove R.".
They go to single-field mode (assuming they got no comma). */
var nameFormat1RE = new ZU.XRegExp("^\\p{Letter}+\\s\\p{Letter}+\\s\\p{Letter}+$");
var nameFormat2RE = new ZU.XRegExp("^\\p{Letter}+\\s\\p{Letter}\\.(\\s?\\p{Letter}\\.?)?$");
var isFormat1 = ZU.XRegExp.test(dirty, nameFormat1RE);
var isFormat2 = ZU.XRegExp.test(dirty, nameFormat2RE);
if (isFormat1 || isFormat2) {
// add comma before the first space
dirty = dirty.replace(/^([^\s]*)(\s)/, '$1, ');
}
var cleaned = ZU.cleanAuthor(dirty, "author", true);
/* Now `cleaned.firstName` is:
(1) "FIRST PATRONIMIC"
(2) "F. P." || "F."
The `fixCasing()` makes 2nd letter lowercase sometimes,
for example, "S. V." -> "S. v.", but "S. K." -> "S. K.".
Thus, we can only apply it to Format1 . */
if (isFormat1) {
// "FIRST PATRONIMIC" -> "First Patronimic"
cleaned.firstName = fixCasing(cleaned.firstName);
}
if (cleaned.firstName === undefined) {
// Unable to parse. Restore punctuation.
cleaned.fieldMode = true;
cleaned.lastName = dirty;
}
cleaned.lastName = fixCasing(cleaned.lastName, true);
// Skip entries with an @ sign-- email addresses slip in otherwise
if (!cleaned.lastName.includes("@")) item.creators.push(cleaned);
}
var mapping = {
Издательство: "publisher",
"Дата депонирования": "date",
"Год издания": "date",
Год: "date",
Том: "volume",
Номер: "issue",
ISSN: "ISSN",
"Число страниц": "pages", // e.g. "83"
Страницы: "pages", // e.g. "10-16"
Язык: "language",
"Место издания": "place"
};
for (let key in mapping) {
var t = ZU.xpathText(datablock, './/tr/td/text()[contains(., "' + key + ':")]/following-sibling::*[1]');
if (t) {
item[mapping[key]] = t;
}
}
/*
// Times-cited in Russian-Science-Citation-Index.
// This value is hardly useful for most users, would just clutter "extra" field.
// Keeping this code just-in-case.
var rsci = ZU.xpathText(doc, '//tr/td/text()[contains(., "Цитирований в РИНЦ")]/following-sibling::*[2]');
Zotero.debug("Russian Science Citation Index: " + rsci);
if (rsci) item.extra = "Цитируемость в РИНЦ: " + rsci;
*/
var journalBlock = ZU.xpath(datablock, './table/tbody[tr[1]/td/font[contains(text(), "ЖУРНАЛ:")]]/tr[2]/td[2]');
if (!item.publicationTitle) item.publicationTitle = ZU.xpathText(journalBlock, ".//a[1]");
item.publicationTitle = fixCasing(item.publicationTitle);
var tags = ZU.xpath(datablock, './table[tbody/tr/td/font[contains(text(), "КЛЮЧЕВЫЕ СЛОВА:")]]//tr[2]/td/a');
for (let j = 0; j < tags.length; j++) {
item.tags.push(fixCasing(tags[j].textContent));
}
item.abstractNote = ZU.xpathText(datablock, './table/tbody/tr[td/font[text() = "АННОТАЦИЯ:"]]/following-sibling::*[1]');
// Language to RFC-4646 code
switch (item.language) {
case "русский":
item.language = "ru";
break;
case "английский":
item.language = "en";
break;
default:
Zotero.debug("Unknown language: " + item.language + " - keeping as-is.");
break;
}
item.DOI = ZU.xpathText(doc, '/html/head/meta[@name="doi"]/@content');
/* var pdf = false;
// Now see if we have a free PDF to download
var pdfImage = doc.evaluate('//a/img[@src="/images/pdf_green.gif"]', doc, null,XPathResult.ANY_TYPE, null).iterateNext();
if (pdfImage) {
// A green PDF is a free one. We need to construct the POST request
var postData = [], postField;
var postNode = doc.evaluate('//form[@name="results"]/input', doc, null,XPathResult.ANY_TYPE, null);
while ((postField = postNode.iterateNext()) !== null) {
postData.push(postField.name + "=" +postField.value);
}
postData = postData.join("&");
Zotero.debug(postData + postNode.iterateNext());
Zotero.Utilities.HTTP.doPost('http://elibrary.ru/full_text.asp', postData, function(text) {
var href = text.match(/http:\/\/elibrary.ru\/download\/.*?\.pdf/)[0];
pdf = {url:href, title:"eLibrary.ru полный текст", mimeType:"application/pdf"};
});
}*/
item.complete();
}
/** BEGIN TEST CASES **/
var testCases = [
{
"type": "web",
"url": "https://elibrary.ru/org_items.asp?orgsid=3326",
"items": "multiple"
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=9541154",
"items": [
{
"itemType": "journalArticle",
"title": "Иноязычные заимствования в художественной прозе на иврите в XX в",
"creators": [
{
"firstName": "М. В.",
"lastName": "Свет",
"creatorType": "author"
}
],
"date": "2007",
"ISSN": "0320-8095",
"issue": "1",
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"pages": "40-58",
"publicationTitle": "Вестник Московского Университета. Серия 13: Востоковедение",
"url": "https://elibrary.ru/item.asp?id=9541154",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=17339044",
"items": [
{
"itemType": "journalArticle",
"title": "Использование Молекулярно-Генетических Методов Установления Закономерностей Наследования Для Выявления Доноров Значимых Признаков Яблони",
"creators": [
{
"firstName": "Иван Иванович",
"lastName": "Супрун",
"creatorType": "author"
},
{
"firstName": "Елена Владимировна",
"lastName": "Ульяновская",
"creatorType": "author"
},
{
"firstName": "Евгений Николаевич",
"lastName": "Седов",
"creatorType": "author"
},
{
"firstName": "Галина Алексеевна",
"lastName": "Седышева",
"creatorType": "author"
},
{
"firstName": "Зоя Михайловна",
"lastName": "Серова",
"creatorType": "author"
}
],
"date": "2012",
"ISSN": "2219-5335",
"abstractNote": "На основе полученных новых знаний по формированию и проявлению ценных селекционных признаков выделены новые доноры и комплексные доноры значимых признаков яблони.",
"issue": "13 (1)",
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"pages": "1-10",
"publicationTitle": "Плодоводство И Виноградарство Юга России",
"url": "https://elibrary.ru/item.asp?id=17339044",
"attachments": [],
"tags": [
{
"tag": "Apple-Tree"
},
{
"tag": "Immunity"
},
{
"tag": "Scab"
},
{
"tag": "Variety"
},
{
"tag": "Иммунитет"
},
{
"tag": "Парша"
},
{
"tag": "Сорт"
},
{
"tag": "Яблоня"
}
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=21640363",
"items": [
{
"itemType": "journalArticle",
"title": "На пути к верификации C программ. Часть 3. Перевод из языка C-light в язык C-light-kernel и его формальное обоснование",
"creators": [
{
"firstName": "В. А.",
"lastName": "Непомнящий",
"creatorType": "author"
},
{
"firstName": "И. С.",
"lastName": "Ануреев",
"creatorType": "author"
},
{
"firstName": "И. Н.",
"lastName": "Михайлов",
"creatorType": "author"
},
{
"firstName": "А. В.",
"lastName": "Промский",
"creatorType": "author"
}
],
"date": "14.06.2002",
"abstractNote": "Описаны правила перевода из языка C-light в язык C-light-kernel, являющиеся основой двухуровневой схемы верификации C-программ. Для языка C-light предложена модифицированная операционная семантика. Модификация позволяет упростить как описание семантики сложных конструкций языка C-light, так и доказательство непротиворечивости аксиоматической семантики языка C-light-kernel. Определено понятие семантического расширения и проведено формальное обоснование корректности перевода. Предполагается реализовать правила перевода в системе верификации программ.",
"issue": "097",
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"pages": "83",
"url": "https://elibrary.ru/item.asp?id=21640363",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=21665052",
"items": [
{
"itemType": "journalArticle",
"title": "Информационно-поисковая полнотекстовая система \"Боярские списки XVIII века\"",
"creators": [
{
"firstName": "А. В.",
"lastName": "Захаров",
"creatorType": "author"
}
],
"date": "08.04.2005",
"abstractNote": "В полнотекстовой электронной публикации (со статусом препринта), основанной по технологии реляционных баз данных, представлены боярские списки из коллекции документов Российского государственного архива древних актов и научной библиотеки Казанского федерального университета. Публикуемые документы составлялись Разрядным приказом и Сенатом для пофамильного учета думных и московских чинов (\"царедворцев\"). Ключевая археографическая проблема проектирования базы данных состоит в максимально адекватном отображении структуры и текстовых данных источника с возможностью поиска информации по нескольким параметрам. База данных \"Боярские списки XVIII века\" доступна в сети Интернет с 2003 г. Зарегистрирована ФГУП \"Информрегистр\" в 2005 г. Сфера применения: исследования по генеалогии, биографике, археографии, история России, преподавание исторической информатики. К настоящему времени в базе данных размещены полные тексты 14 боярских и чиновных списков 1700-1721 гг.",
"issue": "0220510249",
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"url": "https://elibrary.ru/item.asp?id=21665052",
"attachments": [],
"tags": [
{
"tag": "Археография"
},
{
"tag": "Боярские Списки"
},
{
"tag": "Информационная Система"
},
{
"tag": "Источниковедение"
},
{
"tag": "Московские Чины"
},
{
"tag": "Петр I"
},
{
"tag": "Полнотекстовая База Данных"
},
{
"tag": "Разрядный Приказ"
},
{
"tag": "Царедворцы"
}
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=20028198",
"items": [
{
"itemType": "book",
"title": "Аппарат издания и правила оформления",
"creators": [
{
"firstName": "Людмила Павловна",
"lastName": "Стычишина",
"creatorType": "author"
},
{
"firstName": "А. В.",
"lastName": "Хохлов",
"creatorType": "author"
}
],
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"publisher": "Изд-во Политехнического университета",
"url": "https://elibrary.ru/item.asp?id=20028198",
"attachments": [],
"tags": [
{
"tag": "Аппарат Издания"
},
{
"tag": "Издательское Дело"
},
{
"tag": "Культура. Наука. Просвещение"
},
{
"tag": "Оформление Изданий"
},
{
"tag": "Оформление Книги"
},
{
"tag": "Печать"
},
{
"tag": "Подготовка Рукописи И Графических Материалов К Изданию"
},
{
"tag": "Редакционно-Издательский Процесс"
},
{
"tag": "Российская Федерация"
},
{
"tag": "Теория И Практика Издательского Дела"
},
{
"tag": "Техническое Оформление"
},
{
"tag": "Учебное Пособие Для Высшей Школы"
}
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=38164350",
"items": [
{
"itemType": "journalArticle",
"title": "Графики негладких контактных отображений на группах карно с сублоренцевой структурой",
"creators": [
{
"firstName": "М. Б.",
"lastName": "Карманова",
"creatorType": "author"
}
],
"date": "2019",
"DOI": "10.31857/S0869-56524863275-279",
"ISSN": "0869-5652",
"abstractNote": "Для классов графиков -отображений нильпотентных градуированных групп доказана формула площади на сублоренцевых структурах произвольной глубины с многомерным временем.",
"issue": "3",
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"pages": "275-279",
"publicationTitle": "Доклады Академии Наук",
"url": "https://elibrary.ru/item.asp?id=38164350",
"volume": "486",
"attachments": [],
"tags": [
{
"tag": "Contact Mapping"
},
{
"tag": "Graph-Mapping"
},
{
"tag": "Intrinsic Basis"
},
{
"tag": "Multidimensional Time"
},
{
"tag": "Nilpotent Graded Group"
},
{
"tag": "Sub-Lorentzian Structure"
},
{
"tag": "Surface Area"
},
{
"tag": "Внутренний Базис"
},
{
"tag": "Контактное Отображение"
},
{
"tag": "Многомерное Время"
},
{
"tag": "Нильпотентная Градуированная Группа"
},
{
"tag": "Отображение-График"
},
{
"tag": "Площадь Поверхности"
},
{
"tag": "Сублоренцева Структура"
}
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=30694319",
"items": [
{
"itemType": "conferencePaper",
"title": "Intellectual Differentiation in the Structure of Students' Civil Identity",
"creators": [
{
"firstName": "M. K.",
"lastName": "Akimova",
"creatorType": "author"
},
{
"firstName": "E. I.",
"lastName": "Gorbacheva",
"creatorType": "author"
},
{
"firstName": "S. V.",
"lastName": "Persiyantseva",
"creatorType": "author"
},
{
"firstName": "S. V.",
"lastName": "Yaroshevskaya",
"creatorType": "author"
}
],
"date": "2017",
"DOI": "10.15405/epsbs.2017.12.1",
"language": "en",
"libraryCatalog": "eLibrary.ru",
"pages": "1-7",
"url": "https://elibrary.ru/item.asp?id=30694319",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://elibrary.ru/item.asp?id=18310800",
"items": [
{
"itemType": "journalArticle",
"title": "Обзор И Инвентаризация Археологических Раскопок В Долине Каракол (парк Уч-Энмек). Доклад Бельгийско-Российской Экспедиции В Алтайские Горы (2007-2008)",
"creators": [
{
"firstName": "Й.",
"lastName": "Боургеоис",
"creatorType": "author"
},
{
"firstName": "Щ.",
"lastName": "Гхеыле",
"creatorType": "author"
},
{
"firstName": "Р.",
"lastName": "Гооссенс",
"creatorType": "author"
},
{
"lastName": "Де Щулф А.",
"creatorType": "author",
"fieldMode": true
},
{
"firstName": "Е.",
"lastName": "Дворников",
"creatorType": "author"
},
{
"firstName": "А. В.",
"lastName": "Ебел",
"creatorType": "author"
},
{
"lastName": "Ван Хооф Л.",
"creatorType": "author",
"fieldMode": true
},
{
"firstName": "С.",
"lastName": "Лоуте",
"creatorType": "author"
},
{
"lastName": "Де Лангхе К.",
"creatorType": "author",
"fieldMode": true
},
{
"firstName": "А.",
"lastName": "Малмендиер",
"creatorType": "author"
},
{
"lastName": "Ван Де Керчове Р.",
"creatorType": "author",
"fieldMode": true
},
{
"firstName": "Р.",
"lastName": "Цаппелле",
"creatorType": "author"
},
{
"lastName": "Те Киефте Д.",
"creatorType": "author",
"fieldMode": true
}
],
"date": "2009",
"abstractNote": "О результатах совместной бельгийско-российской археологической экспедиции в Парке Уч-Энмек (Горный Алтай) (2007-2008), занимавшейся изучением могил скифской культуры.",
"issue": "1 (4)",
"language": "ru",
"libraryCatalog": "eLibrary.ru",
"pages": "10-20",
"publicationTitle": "Мир Евразии",
"url": "https://elibrary.ru/item.asp?id=18310800",
"attachments": [],
"tags": [
{
"tag": "Belgian-Russian Expedition"
},
{
"tag": "Karakol"
},
{
"tag": "Scythian Culture"
},
{
"tag": "Uch Enmek Park"
},
{
"tag": "Бельгийско-Русская Экспедиция"
},
{
"tag": "Каракол"
},
{
"tag": "Парк Уч-Энмек"
},
{
"tag": "Скифская Культура"
}
],
"notes": [],
"seeAlso": []
}
]
}
]
/** END TEST CASES **/