Analyse von pkp-lib – Das Herzstück akademischer Publikationssysteme
Wenn Sie schon einmal einen Beitrag bei einer Universitätszeitschrift eingereicht oder nach einem Peer-Review-Preprint gesucht haben, sind Sie mit hoher Wahrscheinlichkeit auf die Open Journal Systems-Plattform gestoßen. Sie ist ein Klassiker des akademischen Webs. Doch nur wenige Entwickler denken darüber nach, was solche Plattformen zusammenhält.
Hinter den Kulissen der akademischen Softwarefamilie des Public Knowledge Project verbirgt sich die PHP-Bibliothek pkp-lib. Sie enthält gemeinsame Logik für mehrere Produkte gleichzeitig, darunter die OJS-Journalplattform, OMP-Monografien, OPS-Preprints und den OHS-Metadaten-Harvester.
Was drin steckt und warum es so gemacht wurde
Statt Code zwischen verschiedenen Projekten zu kopieren, extrahierte das Team die Kernfunktionalität in ein separates Repository. Die Bibliothek wird als Submodul im lib/pkp-Ordner jeder Anwendung eingebunden.
Die interne Architektur bewältigt das Tagesgeschäft:
- Autorisierung, Rollenverwaltung für Gutachter und Redakteure.
- Unterstützung für akademische Metadatenstandards OAI-PMH und Dublin Core.
- Eine Hook-Engine zur Erweiterung der Funktionalität.
- Allgemeine UI-Komponenten und Bearbeitung des Manuskripteinreichungs-Workflows.
Es ist interessant, sich die GitHub-Statistiken anzusehen. Das Repository hat bescheidene 350 Sterne. Aber es gibt fast fünfhundert Forks, und die Anzahl der offenen Issues hat tausend überschritten. Für offene akademische Software ist das ein normales Bild. Die Leute kommen nicht wegen der Sterne, sondern um reale Arbeitsaufgaben zu lösen.
Wie das Bug-Tracking organisiert ist
Die Haupt-README des Projekts wirkt zurückhaltend. Es gibt keine Beispiele für Terminalbefehle oder Anleitungen zur Installation via Composer. Der Grund ist einfach: Das Repository dient als zentraler Dispatch-Punkt für Fehler in der gesamten Anwendungsfamilie.
Wenn ein Redakteur einer wissenschaftlichen Zeitschrift einen Bug in OJS 3.3 findet, erstellt er ein Ticket direkt in pkp-lib. Die Maintainer verknüpfen das Issue mit einem bestimmten Core-Release, danach findet der Fix seinen Weg in alle abhängigen Plattformen. Für langlebige Produkte mit einem kleinen Entwicklungsteam hilft dieser Ansatz, das Chaos unter Kontrolle zu halten.
Raum für Code zum Wachsen
Das Projekt existiert seit 2009, daher enthält die Codebasis architektonische Schichten aus verschiedenen Epochen der PHP-Entwicklung. Legacy-Code koexistiert mit MVC-Komponenten, und das Refactoring schreitet von Release zu Release inkrementell voran.
Das Studium des Repositories macht in mehreren Fällen Sinn:
- Sie wurden beauftragt, eine Universitätszeitschrift auf OJS zu erweitern oder anzupassen.
- Sie schreiben ein Plugin für Article-Export oder Zitationsdatenbank-Integration.
- Sie möchten sehen, wie ein gemeinsamer Core für mehrere spezialisierte Produkte organisiert ist.
Es ist nicht ratsam, pkp-lib als Framework für eine beliebige Website zu verwenden. Die Bibliothek hat eine enge Spezialisierung für Publishing-Workflows. Aber als Beispiel für ein domänengesteuertes System mit langer Geschichte bietet es interessante Denkanstöße.
Ähnliche Projekte