Сервер Z39.50
Сервер Z39.50 дозволяє отримувати бібліографічні та авторитетні записи з інших бібліотек мовою, яка зрозуміла бібліографічним системам. Обмін записами спрощує роботу каталогізаторів.
Конвертація між форматами MARC21 та UNIMARC
Можлива конвертація між форматами за допомогою XSLT-перетворень. Таку функціональність має як MarcEdit, так і Koha. З версії 3.18 можливо запозичувати записи і одразу ж їх конвертувати.
Для налаштування конвертації у Koha необхідно
- завантажити XSLT файл
- Для конвертації з MARC21 → UNIMARC
- marc21xml2unimarc.xsl від Terry Reese
- marc21xml2unimarc.xsl від Олега Василенко (з часом оновлення додаються до Terry Reese)
- marc21xml2unimarc_excl_marc_dubyk.xsl від Сергія Дубика (протестувати можна на демо-сервері http://liblab.tntu.edu.ua:8888)
- Для конвертації з UNIMARC → MARC21
- UNIMARC2MARC21.xsl від Terry Reese
- Для конвертації з MARC21 → UNIMARC
- Скопіювати файл у необхідну теку (/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/)
- Скопіювати файл у теки інших мов інтерфейсу
- У налаштуваннях окремого сервера (Koha → Керування → Сервери Z39.50/SRU) вказати файл(и) таблиць XSLT для перетворення результатів: marc21xml2unimarc.xsl (або інший)
- Для коректної конвертації MARC21 → UNIMARC небагато підкоректувати код Koha (Bug 17791)
латка для /usr/share/koha/lib/C4/Breeding.pm diff Breeding.pm_19.05.00 Breeding.pm 297c297 < ($marcrecord) = MarcToUTF8Record($raw, C4::Context->preference('marcflavour'), $servhref->{encoding} // "iso-5426" ); #ignores charset return values --- > ($marcrecord) = MarcToUTF8Record($raw, $servhref->{syntax}, $servhref->{encoding} // "iso-5426" ); #ignores charset return values 302c302,304 < --- > > ($marcrecord) = MarcToUTF8Record($marcrecord, C4::Context->preference('marcflavour'), $servhref->{encoding} // "iso-5426" ); #ignores charset return values >
Як це пояснити серверу:
Завантажуємо відповідний XSLT файл одразу у теку Koha:
sudo wget https://raw.githubusercontent.com/gelow/unimarc/master/marc21xml2unimarc.xsl -O /usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/xslt/marc21xml2unimarc.xsl
Оновлюємо переклади інтерфейсу (для копіювання необхідних змін:
sudo koha-translate --update uk-UA sudo koha-translate --update ru-RU
Для коректної конвертації MARC21 → UNIMARC (Bug 17791) відкриваємо файл Breeding.pm
sudo nano +274 /usr/share/koha/lib/C4/Breeding.pm
Десь на 274 (303 у версії 18.11) рядку знаходимо код:
} else { ($marcrecord) = MarcToUTF8Record($raw, C4::Context->preference('marcflavour'), $servhref->{encoding} // "iso-5426" ); #ignores charset return values }
замінюємо виділене на $servhref->{syntax}
} else { ($marcrecord) = MarcToUTF8Record($raw, $servhref->{syntax}, $servhref->{encoding} // "iso-5426" ); #ignores charset return values }
Зберігаємо (у nano це Ctrl+O, Enter, Ctrl+X)
Зміни у файл Breeding.pm необхідно вносити після кожного оновлення версії Koha
Налаштування бібліографічного серверу Z39.50
Редагуємо файл koha-conf.xml (Не забуваємо замінити library на назву свого екземпляра Koha)
sudo nano /etc/koha/sites/library/koha-conf.xml
Розкоментовуємо 14 рядок
<!-- <listen id="publicserver" >tcp:@:</listen> -->
Вказуємо порт, на якому бажаєте щоб працював сервер Z39.50. За замовчуванням, це порт 210. Але порти номером до 1024 потребують Root прав. На Ubuntu не вдалося домогтися роботи на цьому порті.
<listen id="publicserver" >tcp:@:2100</listen>
Розкоментовуємо блок після <!-- PUBLICSERVER'S BIBLIOGRAPHIC RECORDS -->
<server id="publicserver" listenref="publicserver">...</server> <serverinfo id="publicserver">...</serverinfo>
В цьому ж блоці знаходимо параметри доступу до серверу:
- база даних biblios
- користувач kohauser
- пароль
За замовчуванням, для отримання даних з серверу Z39.50, не потрібно вказувати пароль. Ім'я користувача та пароль потрібні тільки для редагування.
Зберігаємо (у nano це Ctrl+O, Enter, Ctrl+X)
Перезавантажуємо сервер Zebra
koha-zebra --restart library
(раніше було: sudo koha-stop-zebra; sudo koha-start-zebra)
Налаштування серверу авторитетних записів Z39.50
Редагуємо файл koha-conf.xml (Не забуваємо замінити library на назву свого екземпляра Koha)
sudo nano /etc/koha/sites/library/koha-conf.xml
Додаємо після <listen id="publicserver" > на новому рядку ще одну команду очікувати з'єднань:
<listen id="publicserver" >tcp:@:2100</listen> <listen id="publicauthserver" >tcp:@:2101</listen>
Вказуємо порт, на якому бажаєте щоб працював сервер авторитетних записів Z39.50 (у прикладі вище, це порт 2101). Це має бути окремий від бібліографічного серверу порт.
Блище до кінця файлу, перед <config> додаємо наступний код (більшою частиною, копію налаштувань авторитетного серверу):
<server id="publicauthserver" listenref="publicauthserver" > <directory>/var/lib/koha/lib/authorities</directory> <config>/etc/koha/sites/lib/zebra-authorities-dom.cfg</config> <cql2rpn>/etc/koha/zebradb/pqf.properties</cql2rpn> <xi:include href="/etc/koha/unimarc-retrieval-info-auth-dom.xml" xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:fallback> <retrievalinfo> <retrieval syntax="unimarc" name="F"/> <retrieval syntax="unimarc" name="B"/> <retrieval syntax="xml" name="marcxml" identifier="info:srw/schema/1/marcxml-v1.1"> <backend syntax="unimarc" name="F"> <marc inputformat="marc" outputformat="marcxml" inputcharset="utf-8"/> </backend> </retrieval> <retrieval syntax="xml" name="dc"> <backend syntax="unimarc" name="F"> <marc inputformat="marc" outputformat="marcxml" inputcharset="utf-8"/> <xslt stylesheet="/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/xslt/MARC21slim2DC.xsl"/> </backend> </retrieval> <retrieval syntax="xml" name="mods"> <backend syntax="unimarc" name="F"> <marc inputformat="marc" outputformat="marcxml" inputcharset="utf-8"/> <xslt stylesheet="/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/xslt/MARC21slim2MODS.xsl"/> </backend> </retrieval> <retrieval syntax="xml" name="rdfdc"> <backend syntax="unimarc" name="F"> <marc inputformat="marc" outputformat="marcxml" inputcharset="utf-8"/> <xslt stylesheet="/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/xslt/MARC21slim2RDFDC.xsl"/> </backend> </retrieval> <retrieval syntax="xml" name="utils"> <backend syntax="unimarc" name="F"> <marc inputformat="marc" outputformat="marcxml" inputcharset="utf-8"/> <xslt stylesheet="/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl"/> </backend> </retrieval> </retrievalinfo> </xi:fallback> </xi:include> </server> <serverinfo id="publicauthserver"> <ccl2rpn>/etc/koha/zebradb/ccl.properties</ccl2rpn> <user>kohauser</user> <password>ПАРОЛЬ_АВТОРИТЕТНОГО_СЕРВЕРУ</password> </serverinfo>
В цьому блоці вказуємо ПАРОЛЬ_АВТОРИТЕТНОГО_СЕРВЕРУ. Його знаходимо в налаштуваннях вище.
Зберігаємо (у nano це Ctrl+O, Enter, Ctrl+X)
Перезавантажуємо сервер Zebra
koha-zebra --restart library
(раніше було: sudo koha-stop-zebra; sudo koha-start-zebra)
Вирішення проблем із сервером
https://wiki.koha-community.org/wiki/Troubleshooting_Koha_as_a_Z39.50_server
Чи правильна конфігурація
Дивись вище, налаштування бібліографічного серверу Z39.50
Чи працює Zebra
ps aux | grep zebra
Чи відкритий порт
sudo netstat -pn --tcp --listen
Чи є доступ через yaz-client
Приклад підключення з використанням порта 2100 та синтаксису ccl:
root@lib:~# yaz-client -c /etc/koha/zebradb/ccl.properties 127.0.0.1:2100/biblios Connecting...OK. Sent initrequest. Connection accepted by v3 target. ID : 81 Name : Zebra Information Server/GFS/YAZ Version: 4.2.30 98864b44c654645bc16b2c54f822dc2e45a93031 Options: search present delSet triggerResourceCtrl scan sort extendedServices namedResultSets Elapsed: 0.005652 Z> querytype ccl2rpn Z> find (kw,wrdl,rtrn=human ) not Suppress=1 Sent searchRequest. Received SearchResponse. Search was a success. Number of hits: 7, setno 1 SearchResult-1: term=human cnt=7, term=1 cnt=0 records returned: 0 Elapsed: 0.022508
Журнали Zebra
Zebra створює журнали, в яких можна знайти інформацію про помилки, відфільтрувавши за допомогою grep (заміняємо library на назву свого екземпляра Koha):
grep ERROR /var/log/koha/library/zebra-output.log grep fatal /var/log/koha/library/zebra-output.log
Див. також
- https://wiki.koha-community.org/wiki/Troubleshooting_Koha_as_a_Z39.50_server
- http://www.bloovis.com/2017/01/18/koha-on-linode.html
- Сервери Z39.50/SRU в Україні
- Сервери Z39.50/SRU у світі
- Встановлення Koha з репозитарію на ОС Debian#Актуальні українські sql-файли (є готовий sql-файл з набором Z39.50/SRU для Koha в теці uk-UA/marcflafour/unimarc/optional/)
- Поширення АБІС Koha в Україні
- https://kohaprojectgr.wordpress.com/2014/11/04/%CF%80%CF%81%CE%BF%CF%83%CE%B8%CE%AE%CE%BA%CE%B7-%CF%84%CE%BF%CF%85-z39-50-%CF%84%CE%B7%CF%82-%CE%B5%CE%B8%CE%BD%CE%B9%CE%BA%CE%AE%CF%82-%CE%B2%CE%B9%CE%B2%CE%BB%CE%B9%CE%BF%CE%B8%CE%AE%CE%BA%CE%B7/
- https://wiki.koha-community.org/wiki/Z3950_RFC