Сервер Z39.50

From Koha Ukraine Wiki
Jump to: navigation, search

Сервер Z39.50 дозволяє отримувати бібліографічні та авторитетні записи з інших бібліотек мовою, яка зрозуміла бібліографічним системам. Обмін записами спрощує роботу каталогізаторів.

Конвертація між форматами MARC21 та UNIMARC[edit]

Можлива конвертація між форматами за допомогою XSLT-перетворень. Таку функціональність має як MarcEdit, так і Koha. З версії 3.18 можливо запозичувати записи і одразу ж їх конвертувати.
Z39-50 replace.png

Для налаштування конвертації у Koha необхідно

  1. завантажити XSLT файл
    1. Для конвертації з MARC21 → UNIMARC
    2. Для конвертації з UNIMARC → MARC21
  2. Скопіювати файл у необхідну теку (/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/)
  3. Скопіювати файл у теки інших мов інтерфейсу
  4. У налаштуваннях окремого сервера (Koha → Керування → Сервери Z39.50/SRU) вказати файл(и) таблиць XSLT для перетворення результатів: marc21xml2unimarc.xsl (або інший)
  5. Для коректної конвертації 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
>     


Як це пояснити серверу:[edit]

Завантажуємо відповідний 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[edit]

Редагуємо файл 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[edit]

Редагуємо файл 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)

Вирішення проблем із сервером[edit]

https://wiki.koha-community.org/wiki/Troubleshooting_Koha_as_a_Z39.50_server

Чи правильна конфігурація[edit]

Дивись вище, налаштування бібліографічного серверу Z39.50

Чи працює Zebra[edit]

ps aux | grep zebra

Чи відкритий порт[edit]

sudo netstat -pn --tcp --listen

Чи є доступ через yaz-client[edit]

Приклад підключення з використанням порта 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[edit]

Zebra створює журнали, в яких можна знайти інформацію про помилки, відфільтрувавши за допомогою grep (заміняємо library на назву свого екземпляра Koha):

grep ERROR /var/log/koha/library/zebra-output.log
grep fatal /var/log/koha/library/zebra-output.log

Див. також[edit]