diggsweden / DCAT-AP-SE-Processor

GNU General Public License v3.0
9 stars 8 forks source link

DCAT-AP-SE Processor

Sveriges dataportal synliggör information om datamängder (d.v.s. metadata) där själva datamängderna och åtkomstpunkterna finns publicerade hos olika aktörer. Detta sker genom att Sveriges dataportal automatiskt inhämtar, ”skördar”, informationen hos publicerande aktör. En aktör kan vara både från offentlig och privat sektor samt från civilsamhället.

En förutsättning för att dataportalen ska kunna synliggöra bland annat information om datamängder och dess API:er, är att aktörerna upprättar och publicerar informationen enligt en gemensam och standardiserad metadataspecifikation som är tillgänglig för skördning. Den specifikationen heter DCAT-AP-SE och är speciellt framtagen för att passa Sveriges dataportal på grund av den är tillräckligt övergripande för att passa inhämtning av metadata från olika typer av organisationer och datadomäner. Det möjliggör en enhetlig beskrivning av datamängder för att förenkla insamling, sökning och presentation av data på Sveriges dataportal. Följande information innehåller mycket tekniska termer och begrepp. För att kunna tillgodogöra sig informationen bör därför någon med sådan typ av kompetens läsa instruktionen.

Automatiserad process för framställning av metadata

I syfte att hjälpa producenter av metadata, som ska skördas till dataportalen, har detta verktyg tagits fram för att kunna införlivas i godtycklig CI/CD driven kedja eller köras separat. Verktyget skapar en metadataspecifikation på RDF-format utifrån en API-definition alternativt separat metadatafil. RDF är det språk som används för att uttrycka metadata om ting på webben. En central egenskap med RDF är att man använder webbadresser (URI:er) för att referera till ting i olika påståenden.

Format på API-definitioner

Det finns stöd för formaten OpenAPI eller RAML.

Ingående delar i verktyget

Sekvensdiagram över flödet i verktyget. img_1.png

PreprocessorController (REST API)

REST API:n för verktyget, följande två är de som finns att använda:

"/dcat-generation/files/" - Skickar man in directory (dir) som sedan skickas vidare till Managern för hantering.
"/dcat-generation/web/" - Är endpointen från Web-guit som skickar med antingen en sträng med hela apidefinitionen eller en lista med filer som sedan skickas vidare till Managern.

Manager

Tar emot anrop från REST API't eller formuläret och styr parsning, konvertering och uppskapande av RDF-data.

ApiDefinitionParser

Använder snakeYaml för att parsa RAML1.0 och OAS3 yaml strängen, som innehåller apidefinitionen, till JSONObject.

När det gäller OAS3 json format läses den strängen in som JSONObject direkt.

RAML0.8 och/eller OAS2 på json/yaml format stöder inte annotations/extensions, så där får användaren tillgång att lägga metadata i en separat fil på json format, som parsas till JSONObject.

Converter

Använder MultiValuedMap (Apache Commons) och JSON.simple.

För att konvertera mellan inläst metadata till element på DCAT-AP-SE format används konverteringsfiler (t.ex. TO_DCAT_OAS.json).
I senare skeden kan man enkelt lägga till nya konverteringsfiler för andra format eller ändra till nyare versioner av befintliga format.

RDFWorker

Använder RDF4J.

Tar emot en lista av Katalog objekt och skapar matchande RDF utifrån det.

Hur du använder DCAT-AP-SE Processor

Bygg en container image från koden i det här repositoryt, t.ex:

docker build --no-cache -t "dcatprocessor" .

docker run -it --rm -p 8080:8080 dcatprocessor:latest

När container startas finns ett formulär och ett REST API tillgängligt att använda efter behov.

Alternativt, finns det också en experimentell färdigbyggd image för att testa.

docker run ghcr.io/diggsweden/dcat-ap-processor:latest

ANVÄND INTE OVAN IMAGE I PRODUKTIONSYFTEN - Den är endast avsedd för lokal test, och inga garantier lämnas på säkerhetsuppdateringar med mera.

Verktyget kan användas på följande sätt.

1. Via UI

Starta docker container, öppna browser till http://localhost:8080

Det finns val för att:

Verktyget levererar resultatet som svar på sidan.

2. Via anrop till REST gränssnitt

Anropa endpoints med valfritt verktyg. I utveckling har vi använt curl från git bash.

Jenkins pipeline exempel Jenkinsfile.

3. Via CLI

Konvertera en specifikationsfil och få DCAT-data till stdout:

java -jar dcatprocessor.jar -f FIL

Konvertera en katalog med specifikationsfiler och få DCAT-data till stdout:

java -jar dcatprocessor.jar -d KATALOG

Lägga till stöd för nya metadata i verktyget

Översikt över vad som finns och fungerar enligt DCAT-AP-SE spec
Tillägg i Converter
Tillägg i RDFWorker
specifikationsfil

Arbetsprocess för att publicera api/er på dataportalen

Införa metadata

För att verktyget ska ges information att generera data behöver api definitionen uppdateras med metadata information.
Repositoryt innehåller exempelfiler som visar hur metadata kan införas i apidefinition eller i separat metadatafil.
Attribut som stöds finns listade med beskrivning. Utgå från exempelfilerna och ta hjälp av rekommendationer på dataportalen

Det finns exempelfiler som visar hur obligatoriska, rekommenderade och valfria värden kan läggas in.
När apidefinition/erna är uppdaterade med metadata görs de tillgängliga på en publikt nåbar folder, så att den separata pipeline som kör verktyget kan nå dem.

Om ni har ett API

Se exempel enkel fil, där Katalog elementet ligger i samma fil som resterande metadata.

Exempel med obligatoriska och rekommenderade värden.
RAML
OAS YAML
OAS JSON

För API som inte har en definition (code-first) kan dataproducenten tillhandahålla separat metadata på json format
Separat JSON

Om ni har flera API:er

Organisation med multipla API att producera RDF från använder en separat catalog.json fil för att hålla samman de ingående API:ernas metadata, se exempel under multipla filer.
För att verktyget ska generera en sammanslagen RDF-fil krävs att organisationen skapar filer enligt följande:
catalog.json - beskriver det övergripande katalog elementet och är samma för alla ingående apier.
catalog.json - Katalog elementet i separat fil på json format.

Exempel på ingående API-definitioner innehållande metadata för DCAT-AP-SE
full_example.raml - Api A på RAML format
full_example_oas.yaml - Api B på OAS3 yaml format
full_example_oas.json - Api C på OAS3 json format
full_example.json, Api D, separat metadataspecifikation på json format

Licens

dcat-ap-se-processor är licensierad under GPL v3

Beroenden

snakeYaml Apache license
RDF4J EDL v1.0 license
Spring boot, Spring framework Apache license
Project Lombok MIT license
commonmark-java BSD-2 clause simplified license
json-ld-java BSD-3 clause license
jackson-dataformat-yaml Apache license
hibernate-json-org-contributor BSD-3 clause license
json-simple Apache license
commons-collections4 Apache license

Status v0.9

Detta är en första version av verktyget.
Arbetsförmedlingen och Bolagsverket kommer prova mjukvaran skarpt under hösten 2022.
När mjukvaran fungerar för tillräckligt många offentliga organisationer kommer versionen uppdateras till 1.0.
Mjukvaran utvecklas av DIGG och Arbetsförmedlingen.

Bidra