Deze repository levert een Catmandu fix om een csv-bestand om te zetten naar een IIIF-manifestbestand.
Update: dit kan veel eenvoudiger met de CSV module van Python gedaan worden.
- Installeer Catmandu
- Installeer de Perl-module Catmandu-Store-REST:
cpan install Catmandu::Store::REST
- Zorg dat je CSV-bestand opgesteld is volgens de Opbouw CSV-bestand (of pas de fix aan volgens de opbouw van je eigen csv-bestand)
- Pas de manifest fix aan
- start Catmandu en voer volgend script uit:
catmandu convert csv to json --fix manifest.fix --array 0 --line_delimited 1 < path-naar-je-csv-bestand | split -l 1 --additional-suffix=".json"
Op deze manier krijg je per lijn in je csv-bestand een manifest-json.
Zie IIIF-testdata.csv.
Het CSV-bestand bestaat uit volgende velden:
- id (id van je manifest)
- label
- rechten
- PID
- afbeeldingen
Het veld afbeeldingen bevat een id en een label per afbeelding. Id en label worden van elkaar gescheiden door middel van een : (dubbelpunt).
Zie manifest.fix.
Een aantal variabelen worden vastgelegd in het begin van het document. Pas de eerste drie variabelen aan (url, attribution, logo).
add_field('url', 'url-van-je-IIIF-server')
add_field('attribution', 'naam-van-je-organisatie')
add_field('logo', 'url-naar-je-logo')
add_field('iiif-context', 'http://iiif.io/presentation/2/context.json')
add_field('manifest-type', 'sc:Manifest')
add_field('sequence-type', 'sc:Sequence')
add_field('canvas-type', 'sc:Canvas')
add_field('image-type', 'oa:Annotation')
add_field('image-motivation', 'sc:painting')
add_field('resource-type', 'dctypes:Image')
add_field('format', 'image/jpeg')
add_field('service-context', 'http://iiif.io/api.image/2/context.json')
add_field('service-profile', 'http://iiif.io/api/image/2/profiles/level1.json')
De rest van het bestand is verantwoordelijk voor de opbouw van de manifest-structuur, achtereenvolgens: manifest, sequence, canvas, images en resources.
Via een loop wordt per afbeelding een canvas met de juiste images en resources gemaakt. De breedte en de hoogte van de afbeeldingen worden via de IIIF Image API opgehaald. Hiervoor werd de Perl-module Catmandu-Store-REST geschreven.
Pas in de delen building canvases by looping, connect to the IIIF Image API, structure canvas en structure resource telkens de url aan naar de url van je eigen IIIF-server.
add_field('t.id.first', 'url-naar-eigen-IIIF-server')
lookup_in_store(
l.lookup_id,
REST,
base_url: 'url-naar-eigen-IIIF-server',
query_string: '/info.json'
)
prepend('fixed.sequences.$last.canvases.$last.@id', 'url-naar-eigen-IIIF-server')
prepend('fixed.sequences.$last.canvases.$last.images.$last.resource.@id', 'url-naar-eigen-IIIF-server')
Zie IIIF Prestentation API 2.1 voor meer info over de structuur van een manifest-bestand.
- bestandsnamen van de manifest-bestanden die je nu krijgt via de
split
-commando. - url naar je IIIF-server maar op één plaats aanpassen.
- In de json-bestanden hebben de velden geen vaste volgorde. Het zou mogelijk moeten zijn om dit wel vast te leggen zodat manifest-bestanden eenvoudiger te vergelijken zijn.