OJS und DNB / xMetaDissPlus

Super, vielen Dank. Wir planen erst ein OJS-Update auf die aktuelle Version zu machen und werden dann das Plugin installieren.

Ich habe das Plugin in einem Testsystem installiert und aktiviert. Soweit scheint alles ok, vielen Dank! Probiert habe ich bisher einzelne Artikel manuell zu exportieren. Das tar-File mit den Metadaten und dem PDF wird dann erzeugt. Für die automatische Ablieferung haben wir bei der DNB ein Kennung für das Hotfolderverfahren angefragt.

Dennoch ist mir ein Problem aufgefallen. Bei einer Testzeitschrift schlägt der Export fehl. Nach dem Klick auf den Button erscheint dann einfach ein weißer Bildschirm und die Seite antwortet nicht. Soweit ich das Problem eingrenzen kann, scheint es mir daran zu liegen, dass bei dieser Zeitschrift, die PDF-Dateien nicht intern als “Galley” in OJS hochgeladen sind, sondern die Option genutzt wurde, dass nur ein Link zum PDF gespeichert ist, siehe:

2018-10-09_123307

Ich habe mal in den Logdateien geschaut, hier erscheint:

PHP Fatal error: Uncaught Error: Call to a member function getGenreId() on null in /var/www/html/ojs/plugins/importexport/dnb/DNBExportPlugin.inc.php:452\nStack trace:\n#0 [internal function]: DNBExportPlugin->filterGalleys(Object(ArticleGalley))\n#1 /var/www/html/ojs/plugins/importexport/dnb/DNBExportPlugin.inc.php(438): array_filter(Array, Array)\n#2 /var/www/html/ojs/plugins/importexport/dnb/DNBExportPlugin.inc.php(227): DNBExportPlugin->canBeExported(Object(PublishedArticle), Object(Issue), Array)\n#3 /var/www/html/ojs/classes/plugins/PubObjectsExportPlugin.inc.php(161): DNBExportPlugin->executeExportAction(Object(Request), Array, 'galley=>dnb-xml', 'exportSubmissio...', 'articles', false)\n#4 /var/www/html/ojs/plugins/importexport/dnb/DNBExportPlugin.inc.php(55): PubObjectsExportPlugin->display(Array, Object(Request))\n#5 /var/www/html/ojs/lib/pkp/pages/management/PKPToolsHandler.inc.php(98): DNBExpo...

Das Problem trifft unsere aktuellen Hefte zum Glück nicht. Für die Übertragung von älteren Artikeln haben wir schon überlegt, die PDFs so zu verlinken. Ich habe aber keinen Überblick, wer solche Möglichkeiten noch in Betracht zieht. Ggf. ist das auch ein Spezialproblem, das sonst niemand hat?

@florianruckelshausen,

viele Dank für die Rückmeldung!

Ja, die Fehlermeldung kommt von den verlinkten Galleys, diesen Fall haben wir nicht vorgesehen und leider auch nicht daran gedacht ihn abzufangen und eine Rückmeldung zu geben. Das werde ich noch nachholen.

Wir selbst nutzen diese Option nicht. Wir werden sie aber diskutieren und überlegen, wie wir damit umgehen.

Falls es noch mehr Journals gibt, die diese Option benutzen und gleichzeitig das DNB Plugin nutzen wollen, wäre es gut, uns das mitzuteilen!

viele Grüße,
Carola

Liebe @carola

wir haben das Plugin unter OJS 3.0.2.0 und 3.1.1.4 nun für mehrere Zeitschriften erfolgreich im Einsatz und schon Artikel per “Hotfolder” abgeliefert, z.B. http://d-nb.info/1129107418.

Die Ablieferung klappt - bis auf einen Fehler - gut und die Zusammenarbeit mit der DNB läuft auch gut.

Ein Problem ist mir aufgefallen: Artikel mit einem kaufmännischem und (&) im Artikel-Titel können nicht abgeliefert werden (“Validierungsfehler:unterminated entity”). Ich vermute, dass das & als Steuerzeichen fehlinterpretiert wird bzw. verhindert, dass das entsprechende Tag im XML geschlossen wird. Andere Sonderzeichen wie Anführungszeichen machen dagegen keine Probleme. Ich habe mir so beholfen, dass ich “&” im Titel vor der Ablieferung durch ein ausgeschriebenes “und” ersetzt habe, die Artikel exportiert habe und dann den Titel wieder zurück geändert habe. Eine dauerhafte Lösung ist das natürlich eigentlich nicht.

Kann man hier noch etwas machen, z.B. das & im Titel maskieren / escapen?

@bibliothekswelt, lieber Sebastian,

vielen Dank für den Hinweis! Ich habe es in die Überarbeitungsliste aufgenommen. Ich weiß allerdings noch nicht, wann wir die Punkte abarbeiten können. Ich gebe hier auf jeden Fall Bescheid, wenn es Updates gibt.

viele Grüße,
Carola

Wir haben noch nicht an die DNB geliefert, weil sich das OJS Update etwas verzögert hat. Wir sind jetzt aber auf der aktuelle OJS3 Version und die DNB will uns die Zugangsdaten für den Hotfolder bis Freitag schicken. Dann werden wir auch mit der Lieferung anfangen.

Übrigens hat die DNB uns empfohlen, keine URNs in OJS zu vergeben. Es gibt dort wohl Prozesse die via Checksumme prüfen, ob die Publikation schon ggf. abgelifert wurde und dann ein Matching versuchen. Das kann dann unter Umständen schief gehen. Bei uns ist das aber unkritisch, da wir bisher nur DOIs vergeben haben und gut damit leben können, wenn eine URN von der DNB bei der Ablieferung erzeugt wird.

Ja, damit haben wir aktuell ein Problem. Zeitschriften, die URNs haben, müssen sich derzeit etwas in Geduld üben, aber funktionieren wird es hoffentlich trotzdem. Man kann die URNs ja nicht mehr abschaffen, wenn sie schon da sind :-).

Sehe ich das richtig, dass ich derzeit nur Artikel manuell als .tar ausgeben kann, nicht aber Hefte? Ich würde gerne die XML in den tar vor der Ablieferung kontrollieren und ggf. Daten wie Hrsg. nachtragen.

Besten Dank
Klaus

Hallo @klausru,

ja, es werden nur Artikel exportiert und das wird auch so bleiben. Manuelles Bearbeiten muss dann ggf. für jede Datei durchgeführt werden, kann aber auch automatisiert werden, z.B. mit sed (sed (Unix) – Wikipedia). Ich würde empfehlen, Veränderungen mit der DNB abzusprechen, da es ansonsten zu Importproblemen kommen kann.

viele Grüße,
Carola

Leider sind wir erst jetzt dazu gekommen, das Plugin im Produktivsystem auszuprobieren. Wir nutzen OJS 3.1.1.4 und im DNB Plugin habe ich bei der Zeitschrift unsere DNB-Einlogdaten hinterlegt. Ich habe dann im Tab “Artikel” zunächst einen einzelnen Artikel selektiert und auf “Abliefern” geklickt. Es erscheint nach einer Weile die grüne Erfolgsmeldung, dass der Artikel erfolgreich abgeliefert wurde. Schaue ich dann im DNB Hotfolder, sind dort aber keine Dateien zu finden. Die automatische Ablieferung hat daher doch nicht geklappt.

Bisher habe ich probiert:

  • Der Nutzer, den wir von den DNB für den sftp-Upload bekommen haben, hat in den Verzeichnis für den Upload Schreibrechte. Wenn ich in OJS Artikel für den Export selektieren und kann ich die Datei händlisch dort Hochladen.
  • In den PHP-Logs finde ich erstmal nichts besonders auffälliges. Öfter kommt:
[Tue Feb 26 08:11:22.330197 2019] [php7:warn] [pid 17828] [client xxx.xxx.xxx.xxx:59567] PHP Warning:  Declaration of DNBExportPlugin::getExportPath($journalId, $currentExportPath = NULL, $exportContentDir = NULL) should be compatible with ImportExportPlugin::getExportPath() in /srv/www/htdocs/plugins/importexport/dnb/DNBExportPlugin.inc.php on line 22, referer: https://journals.ub.uni-giessen.de/kult-online/management/tools
[Tue Feb 26 08:11:24.048435 2019] [php7:warn] [pid 17801] [client xxx.xxx.xxx.xxx:59551] PHP Warning:  Declaration of DNBSettingsForm::fetch($request = NULL, $template = NULL) should be compatible with Form::fetch($request, $template = NULL, $display = false) in /srv/www/htdocs/plugins/importexport/dnb/classes/form/DNBSettingsForm.inc.php on line 20, referer: https://journals.ub.uni-giessen.de/kult-online/management/tools
  • Testweise habe ich falsche Zugangsdaten für die DNB eingetragen und auch dann bekomme ich die Rückmeldung, dass der Artikel erfolgreich abgeliefert wurde?

Hat jemand eine Idee, warum der Upload scheitern könnte?

Hallo @florianruckelshausen

Testweise habe ich falsche Zugangsdaten für die DNB eingetragen und auch dann bekomme ich die Rückmeldung, dass der Artikel erfolgreich abgeliefert wurde?

Seltsam … Ich habe bei mir (OJS 3, Plugin Installation von GitHub - ojsde/dnb: OJS plugin that exports full texts and metadata to the Deutsche Nationalbibliothek (DNB), branch ojs-stable-3_1_1) testweise das Passwort, den Benutzernamen und den Foldernamen falsch eingeben. Bei falschem Passwort oder Benutzernamen bekomme ich die Fehlermeldung

authError

Bei falscher Subfolder-ID bekomme ich die Fehlermeldung

folderError

Wurden denn Dateien im Exportverzeichnis (%Files-Folder%/dnb) abgelegt?

viele Grüße,
Carola

Ja, in dem Verzeichnis sind verschiedene Unterordner, die mit einem Nummernschema benannt sind. Navigiere ich tiefer, komme ich bei einigen Ordnern zumindest zu tar-Dateien mit den Artikeln.

Ich habe jetzt die Artikel im DNB Plugin erstmal exportiert und manuell in den Hotfolder hochgeladen. Trotzdem würden wir natürlich gerne automatisiert und direkt aus dem Plugin abliefern. Ich bin nur etwas ratlos, wo man die Fehlersuche starten soll.

@florianruckelshausen

Ich kann mir das erst am Montag genauer anschauen, morgen bin ich nicht im Büro. Ich melde mich dann!

viele Grüße,
Carola

@florianruckelshausen

Habt Ihr curl installiert?

viele Grüße,
Carola

Ja, curl ist installiert inkl. sftp Zugriff:

curl -V
curl 7.60.0 (x86_64-suse-linux-gnu) libcurl/7.60.0 OpenSSL/1.1.0h zlib/1.2.11 libidn2/2.0.4 libpsl/0.20.1 (+libidn2/2.0.4) libssh/0.7.5/openssl/zlib nghttp2/1.31.1                                                                                                                                                                    
Release-Date: 2018-05-16
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp                                                                                          
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL Metalink                                                                                            

Kann es sein, dass der Upload wegen Zertifikatsfehlern bei sftp nicht klappt? Ich habe mal folgendes Kommando ausprobiert und der Upload schlägt fehl.

curl -T /srv/www/files/dnb/6-20190221-114104/6-189-216.tar -u *username*:*passw* sftp://hotfolder.dnb.de:22122/631439365/test.tar
...
curl: (51) SSL peer certificate or SSH remote key was not OK

EDIT: Auf der Kommandozeile hat der Transfer mit -k geklappt. Dann lädt er die Datei hoch.

@florianruckelshausen

Ah, das ist doch schon mal ein Fortschritt!

Welches Betriebssystem habt Ihr und welche SSL-Version wird unterstützt? Im Plugin wird m.E. der Default für curlopt_sslsversion verwendet:

https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html / http://php.net/manual/de/function.curl-setopt.php

Ich habe heute noch einmal versucht, in unseren Test-Hotfolder abzuliefern und das hat problemlos funktioniert, so dass ich erst einmal vermuten würden, dass es Einstellungsprobleme sind.

viele Grüße,
Carola

Wir nutzen OpenSuse 15.0. Es ist OpenSSL 1.1.0h-fips installiert

openssl version -a
OpenSSL 1.1.0h-fips  27 Mar 2018
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -DZLIB -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -D_FORTIFY_SOURCE=2 -DTERMIO -DPURIFY -D_GNU_SOURCE -DOPENSSL_NO_BUF_FREELISTS -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib64/engines-1.1\""  -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -std=gnu99 -Wa,--noexecstack -fno-common -Wall -Wa,--noexecstack
OPENSSLDIR: "/etc/ssl"
ENGINESDIR: "/usr/lib64/engines-1.1"

Oder welche Angaben braucht ihr?

@florianruckelshausen

Wir haben OpenSSL 1.0.1t, also sogar älter.

Könnt Ihr mal das Script unten ausprobieren? Bei dem Aufruf in der Kommandozeile bekomme ich auch die Fehlermeldung “curl: (51) SSL peer certificate or SSH remote key was not OK”
Mit dem Script funktioniert es bei mir.

<?php
		$curlCh = curl_init();

		curl_setopt($curlCh, CURLOPT_UPLOAD, true);
		curl_setopt($curlCh, CURLOPT_HEADER, true);
		curl_setopt($curlCh, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curlCh, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);

		$filename="eintragen";// absoluten Pfad bis zur tar-Datei
		
		$fh = fopen($filename, 'rb');
		$username = "eintragen"; 
		$password = "eintragen";
		$folderId = "eintragen";

		curl_setopt($curlCh, CURLOPT_URL, 'sftp://@hotfolder.dnb.de/'.$folderId.'/'.basename($filename));
		curl_setopt($curlCh, CURLOPT_PORT, 22122);
		curl_setopt($curlCh, CURLOPT_USERPWD, "$username:$password");
		curl_setopt($curlCh, CURLOPT_INFILESIZE, filesize($filename));
		curl_setopt($curlCh, CURLOPT_INFILE, $fh);
		$response = curl_exec($curlCh);
		$curlError = curl_error($curlCh);
		
		curl_close($curlCh);
		fclose($fh);
?>

Ich habe das Skript entsprechend angepasst und unsere Daten eingetragen. Es wird ohne weiteres ausgeführt und gibt keine Fehlermeldung aus. Allerdings wird keine Datei hochgeladen? Trage ich falsche Zugangsdaten ein, kommt auch keine Fehlermeldung.

Schaue ich auf die PHPinfo Ausgabe, kommt zu curl:

curl

cURL support => enabled
cURL Information => 7.60.0
Age => 4
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => Yes
GSSAPI => Yes
KERBEROS5 => Yes
UNIX_SOCKETS => Yes
PSL => Yes
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
Host => x86_64-suse-linux-gnu
SSL Version => OpenSSL/1.1.0h
ZLib Version => 1.2.11
libSSH Version => libssh/0.7.5/openssl/zlib

@florianruckelshausen

Ich wollte mit dem Script erst schauen, ob dort der Fehler auftritt und das tut er scheinbar.

Mit
echo curl_setopt($curlCh, CURLOPT_VERBOSE, true);

(einfach bei den Optionen einfügen) wird auch eine Ausgabe gemacht.

Bei mir ist das:

1* Hostname was NOT found in DNS cache

  • Trying 193.175.100.143…
  • Connected to hotfolder.dnb.de (193.175.100.143) port 22122 (#0)
  • SSH MD5 fingerprint: 91f4dd9a4db13790224256b522296c73
  • SSH authentication methods available: password
  • Initialized password authentication
  • Authentication complete
  • We are completely uploaded and fine
  • Connection #0 to host hotfolder.dnb.de left intact