A small Python library to transform an openAPI file to a dcat:DataService
At this moment we support all 3.0.x versions of The OpenAPI specification
% pip install oastodcatExample usage:
import yaml
import requests
from datacatalogtordf import Catalog
from oastodcat import OASDataService
# Create catalog object
catalog = Catalog()
catalog.identifier = "http://example.com/catalogs/1"
catalog.title = {"en": "A dataset catalog"}
catalog.publisher = "https://example.com/publishers/1"
# Create a dataservice based on an openAPI-specification:
url = ("https://raw.githubusercontent.com/"
      "OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml"
     )
oas = yaml.safe_load(requests.get(url).text)
identifier = "http://example.com/dataservices/{id}"
oas_spec = OASDataService(url, oas, identifier)
#
# Add dataservices to catalog:
for dataservice in oas_spec.dataservices:
  catalog.services.append(dataservice)
get dcat representation in turtle (default)
dcat = catalog.to_rdf()
# Get dcat representation in turtle (default)
dcat = catalog.to_rdf()
print(dcat)The following table shows how an openAPI specification is mapped to a dcat:DataService:
(Only dcat:DataService properties are shown.)
| dcat:DataService | RDF property | openAPI v 3.0.x | Note | 
|---|---|---|---|
| endpoint description | dcat:endpointDescription | url to description | |
| endpoint URL | dcat:endpointURL | servers.url | [1] | 
| serves dataset | n/a | ||
| access rights | |||
| conforms to | dct:conformsTo | ||
| contact point | dcat:contactPoint | info.contact | |
| creator | |||
| description | dct:description | info.description | |
| has policy | |||
| identifier | n/a | ||
| is referenced by | |||
| keyword/tag | |||
| landing page | dcat:landingPage | externalDocs | |
| license | dct:license | info.license.url | |
| resource language | |||
| relation | |||
| rights | |||
| qualified relation | |||
| publisher | dct:publisher | ||
| release date | |||
| theme/category | |||
| title | dct:title | info.title | |
| type/genre | |||
| update/modification date | |||
| qualified attribution | |||
| media type | dcat:mediaType | <it's complicated> | 
[1] For each url in the servers object array, an instance of dcat:DataService will be created.
- python3
- pyenv (recommended)
- pipx (recommended)
- poetry
- nox
- nox-poetry
% pipx install poetry==1.0.5
% pipx install nox==2019.11.9
% pipx inject nox nox-poetry```Shell
% git clone https://github.com/Informasjonsforvaltning/oastodcat.git
% cd oastodcat
% pyenv install 3.8.6
% pyenv install 3.9.0
% pyenv install 3.10.4
% poetry install% nox% nox -rs testsYou can enter into Pdb by passing --pdb to pytest:
nox -rs tests -- --pdbYou can set breakpoints directly in code by using the function breakpoint().