Реализация активного резолвера для некоторых полей метаданных в DSpace JSPUI

Данный пост описывает, как стандартными средствами и без изменения программного кода реализовать активные ссылки для значений полей, содержащих внешние идентификаторы документов (и не только), которые позволяют однозначно сформировать ссылку на внешний источник, имея только внешний идентификатор. Не понятно… но если сказать проще, пост описывает схему, которая позволяет автоматически генерировать ссылку вида:

https://gateway.webofknowledge.com/gateway/Gateway.cgi?GWVersion=2&SrcAuth=tsmetrics&SrcApp=tsm_test&DestApp=WOS_CPL&DestLinkType=FullRecord&UT=000467178700013

имея в поле метаданных только:

000467178700013


В «интерьере» это выглядит так. Далее в тексте будут приводиться примеры реализации в Электронном научном архиве Уральского федерального университета и Электронном архиве Российского государственного профессионально-педагогического университета.

Будут приведены примеры для DOI, SCOPUS EID, WOS ID, идентификатора РИНЦ и некоторых грантовых систем.


Актуальность и научная новизна исследования обусловлены… тем, что хранить длинные ссылки не всегда удобно. Они не всегда верно интерпретируются агрегаторами, например, CORE не всегда адекватно реагирует на URL не в домене репозитория в dc.identifier, а OpenAIRE — в dc.relation. Так что, не лишним будет иметь понятный инструмент, который позволит хранить лишь уникальный идентификатор, и реализовывать резолвер на лету.

На сколько мне известно, единственное упоминание данного функционала в документации расположено здесь. Аннотация (по сути, единственная документация!) выглядит так:

Не, ну а чего… всё же понятно — бери и делай.


Мне в своё время было ничего не понятно, но задача была поставлена — сделать ссылки на DOI активными. Соответственно, нужно было:

  1. Определить поле реестра метаданных, которое содержало нужные значения
  2. Реализовать вывод/показ поля в Базовом виде описания ресурса
  3. Реализовать, если потребуется, перевод названия поля
  4. Реализовать собственно активную ссылку
  5. При необходимости, изменить, или провалидировать значения по полю

С определением поля всё в общем просто. Для упомянутых выше двух репозиториев, поля для DOI будут разными в силу разных причин, для одного репозитория это поле dc.identifier.doi, для другого — local.identifier.doi.

В рамках данного поста речь идет только о DSpace JSPUI, так что реализация вывода поля и его значений в базовом виде описания ресурса реализуется через правку строки webui.itemdisplay.default= в dspace.cfglocal.cfg для DSpace 6.x). Описание этого параметра доступно здесь, а так же, непосредственно в dspace.cfg. Если максимально упростить суть данного параметра — он задаёт набор и порядок полей метаданных на странице Базового вида документа, а так же, позволяет задать некоторые параметры значений полей. Для примера, строка с параметром Электронного архива РГППУ:

webui.itemdisplay.default=dc.title,dc.title.alternative, dc.contributor.author, dc.contributor.compiler, dc.contributor.advisor, \
dc.contributor.editor, dc.contributor.commentator, dc.date.issued, dc.publisher, dc.identifier.citation, dc.description.abstract, \
dc.subject, local.thesis.discipline, local.subject.oksvnk, local.conference.name, local.conference.date, dc.identifier.isbn, \
dc.identifier.issn, local.identifier.doi(doi), local.identifier.eid(scopus), local.identifier.wos(wos), local.identifier.rsi(rsi), \
dc.description.sponsorship, dc.relation.ispartof

Сразу бросается в глаза подстрока:

local.identifier.doi(doi), local.identifier.eid(scopus), local.identifier.wos(wos), local.identifier.rsi(rsi)

но не будем забегать вперед. Сейчас мы определили поле для DOI (а так же, для других ID) и реализовали показ его значений в Базовом виде документа.

Т.к. обсуждаемые поля в общем не стандартные (dc.identifier.doi появился в DSpace 6), надо позаботиться о том, чтобы название поля отображалось в интерфейсе правильно. Т.е. так:


а не так:


Корректировка файла перевода для JSPUI делается известным способом с разницей только в том, что помимо Messages_ru.properties надо поправить еще и Messages.properties приммерно так:

metadata.dc.identifier.doi = DOI
metadata.local.identifier.doi = DOI
metadata.dc.identifier.rsi = \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0420\u0418\u041D\u0426
metadata.local.identifier.rsi = \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0420\u0418\u041D\u0426
metadata.dc.identifier.eid = SCOPUS
metadata.local.identifier.eid = SCOPUS
metadata.dc.identifier.wos = WoS
metadata.local.identifier.wos = WoS

В примере кода выше поля продублированы для реестров local и dc просто потому, что я работаю с большим пулом репозиториев, в реестрах метаданных которых нет единства. В свою очередь «английский» вариант выглядит так:

metadata.dc.identifier.doi = DOI
metadata.local.identifier.doi = DOI
metadata.dc.identifier.rsi = Russian Science Citation Index Identifier
metadata.local.identifier.rsi = Russian Science Citation Index Identifier
metadata.dc.identifier.eid = SCOPUS
metadata.local.identifier.eid = SCOPUS
metadata.dc.identifier.wos = WoS
metadata.local.identifier.wos = WoS

Собственно, подготовительный этап закончен — поле есть, оно показывается в Базовом описании в нужном месте и название поля такое, как ожидается. Осталось сделать резолвер…

Внимательный читатель заметил в примерах рядом с некоторыми полями (link) и (date), которые описаны слабо, но понять что это такое, достаточно легко. Вкратце, если добавить к полю метаданных (link), то система отдаст в интерфейсе значение этого поля как ссылку, открывающуюся в том же окне. Таким образом представлено поле dc.identifier.uri(link) в конфигурации из коробки.
Если подумать, это очень нужное и логичное поле — оно позволяет при нажатии на ссылку перейти на ту же самую страницу в той же самой вкладке — очень нужный функционал! Ну а если серьезно, именно потому, что это в общем не нужно, и порой даже вредно, мы, в поддерживаемых репозиториях стараемся не показывать поле dc.identifier.uri, либо делать его не активным — т.е. убираем (link).
Тем не менее, если мы поместим в поле local.identifier.doi не 10.1134/S1063785019030143, а http://dx.doi.org/10.1134/S1063785019030143 и добавим к значению webui.itemdisplay.default= строку local.identifier.doi(link), то всё будет работать. Но если ссылка DOI обычно достаточно короткая, то ссылка на карточку публикации WOS или SCOPUS уже гораздо длиннее, и хранить полную ссылку, а так же, отображать её в интерфейсе может быть не очень удобно. Так что, отставив полумеры, возвращаемся к резолверам!

Собственно код (помещается в dspace.cfg и/или local.cfg!):

webui.resolver.1.urn = doi
webui.resolver.1.baseurl = http://dx.doi.org/

webui.resolver.2.urn = scopus
webui.resolver.2.baseurl = https://www.scopus.com/record/display.uri?origin=resultslist&eid=

webui.resolver.3.urn = rsi
webui.resolver.3.baseurl = https://elibrary.ru/item.asp?id=

webui.resolver.4.urn = wos
webui.resolver.4.baseurl = https://gateway.webofknowledge.com/gateway/Gateway.cgi?GWVersion=2&SrcAuth=tsmetrics&SrcApp=tsm_test&DestApp=WOS_CPL&DestLinkType=FullRecord&UT=

Данный код реализует четыре резолвера — для DOI, для Scopus, для РИНЦ и для WOS. Каждый резолвер состоит из двух строк — первая задаёт «имя» резолвера, вторая — строку, которая подставляется к значению поля слева. Чтобы связать поле (в Базовом виде) и резолвер, нужно добавить «имя» резолвера к названию поля в скобках:

local.identifier.doi(doi), local.identifier.eid(scopus), local.identifier.wos(wos), local.identifier.rsi(rsi)

Если по каким-то причинам поле содержит значение, уже являющееся ссылкой — резолвер не срабатывает и не «портит» значение. Например, для РИНЦ характерны разные ссылки на Журнал/Оглавление и на Статью и в РГППУ было принято решение описывать разные типы документов по-разному — где-то использовать полную ссылку, а где-то — идентификатор:

В итоге, на примере Электронного архива РГППУ удалось задачу активных резолверов реализовать, и возможно, это поможет потенциальному читателю найти полные тексты статей, проиндексированных в SCOPUS/WOS/РИНЦ, либо имеющих DOI, но отсутствующиее вархиве (пример).


Небольшой бонус в ключе того, какие еще данные можно представить подобным образом. Собственно код (номера резолверов не абсолютные!):

webui.resolver.6.urn = rsf
webui.resolver.6.baseurl = https://grant.rscf.ru/prjcard_int?

webui.resolver.7.urn = nsf
webui.resolver.7.baseurl = https://www.nsf.gov/awardsearch/showAward?AWD_ID=

webui.resolver.8.urn = cordis
webui.resolver.8.baseurl = https://cordis.europa.eu/project/id/

Примеры:

  • Пример 1 (см. Карточка проекта РНФ, Карточка проекта CORDIS)
  • Пример 2 (см. Карточка проекта NSF)

Данные грантовые организации были выбраны только потому, что для них реализовать резолвер было не сложно. Так же, статьи, поддержанные РНФ, уже содержали в описании номер проекта, а доописать немногочисленные, поддержанные NSF и CORDIS (H2020, FP6, FP7) публикации не составило большого труда.

В принципе, логичной видится реализация активной ссылки ORCID (если ORCID ID всех авторов просто приписывается к статье), на внутренние корпоративные системы (Пример см. Идентификатор PURE) и много чего еще.


Подводя итог, можно сказать о том, что стандартный резолвер DSpace JSPUI не смотря на некоторую ограниченность и слабую документированность может быть использован для решения определённого круга задач, как то предоставление активных ссылок на различные внешие и корпоративные ресурсы по идентификатору. При этом, механизм резолвера «Определённая строка+ID» не позволяет его использовать в случаях, когда ID не является самой правой частью ссылки. По этой причине не удалось реализовать систему создания ссылок на карточки проекторв РФФИ.

Так же, ссылка всегда открывается в текущем окне и форсировать target=’_blank’ (без изменения кода) нельзя.

Запись опубликована в рубрике Библиотека с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован.