pkp-lib ontleed - De kern van academische publicatiesystemen
Als je ooit een paper hebt ingediend bij een universitair tijdschrift of hebt gezocht naar een peer-reviewed preprint, heb je vrijwel zeker het Open Journal Systems-platform tegen gekomen. Het is een klassieker in de academische webwereld. Maar weinig ontwikkelaars denken na over wat zulke platforms bij elkaar houdt.
Achter de schermen van de academische softwarefamilie van het Public Knowledge Project bevindt zich de PHP-bibliotheek pkp-lib. Deze bevat gedeelde logica voor verschillende producten tegelijk, waaronder het OJS-tijdschriftplatform, OMP-monografieën, OPS-preprints en de OHS-metadataharvester.
Wat erin zit en waarom het zo is gedaan
In plaats van code te kopiëren tussen verschillende projecten, heeft het team de kernfunctionaliteit in een aparte repository geplaatst. De bibliotheek wordt als submodule opgenomen in de lib/pkp-map binnen elke applicatie.
De interne architectuur verwerkt de routine:
- Autorisatie, rolbeheer voor reviewers en redacteuren.
- Ondersteuning voor academische metadatastandaarden OAI-PMH en Dublin Core.
- Een hook-engine voor het uitbreiden van functionaliteit.
- Gemeenschappelijke UI-componenten en afhandeling van manuscriptindieningsworkflows.
Het is interessant om de GitHub-statistieken te bekijken. De repository heeft een bescheiden 350 sterren. Maar er zijn bijna vijfhonderd forks, en het aantal openstaande issues heeft de duizend overschreden. Voor open academische software is dit een normaal beeld. Mensen komen hier niet voor de sterren, maar om echte werktaken op te lossen.
Hoe bugtracking is georganiseerd
De hoofd-README van het project ziet er terughoudend uit. Er zijn geen voorbeelden van terminalcommando's of instructies voor installatie via Composer. De reden is eenvoudig: de repository dient als centraal dispatchpunt voor fouten in de hele applicatiefamilie.
Als een redacteur van een wetenschappelijk tijdschrift een bug vindt in OJS 3.3, maken ze een ticket aan right in pkp-lib. Maintainers koppelen het issue aan een specifieke kernrelease, waarna de fix zijn weg vindt naar alle afhankelijke platforms. Voor langlopende producten met een klein ontwikkelingsteam helpt deze aanpak om de chaos onder controle te houden.
Ruimte voor code om te groeien
Het project bestaat sinds 2009, dus de codebase bevat architectuurlagen uit verschillende era's van PHP-ontwikkeling. Legacy-code coëxisteert met MVC-componenten, en refactoring gaat incrementeel van release naar release.
Het bestuderen van de repository heeft in verschillende gevallen zin:
- Je bent toegewezen om een universiteitstijdschrift dat draait op OJS uit te breiden of aan te passen.
- Je schrijft een plugin voor artikelexport of citatendatabase-integratie.
- Je wilt zien hoe een gedeelde kern is georganiseerd voor verschillende gespecialiseerde producten.
Het gebruiken van pkp-lib als framework voor een willekeurige website is niet aan te raden. De bibliotheek heeft een smalle specialisatie voor publicatieworkflows. Maar als voorbeeld van een domeingestuurd systeem met een lange geschiedenis, biedt het interessant voer voor gedachten.
Gerelateerde projecten