Lag datakataloger med datacatalogtordf
-
Med Python-biblioteket datacatalogtordf, kan du lett generere datakatalogar i DCAT-formatet.
Dette er blant anna bruk at NAV til å eksportere sin katalog slik at data-beskrivingane også vert synlege i data.norge.no så fleire kan finne dei, og NAV slepp å ajourføre informasjon fleire stader.Eksempel på bruk — straumforbruk i kommunale bygg
Vi brukte biblioteket til å generere ein datakatalog for fire nesten like data-beskrivingar, så vi slapp å manuelt føre inn og oppdatere desse.I anledning Open Data Challenge i mars 2022, vart det lagt til rette datasett om straumforbruk frå fire ulike kommunar. Vi ville få desse data-beskrivingane inn i data-katalogen på data.norge.no. Data-beskrivelsen for kvar kommune var heilt lik, med unntak av at det var forskjellige kommunar og kommune-namnet var bytta ut i lenkene til datasetta. Kvar data-beskrivelse peika så vidare til fire ulike datasett.
DCAT - kjapp repetisjon
DCAT er standard-formatet for datakatalogar, eller «Standard for beskrivelse av datasett, datatjenester og datakataloger (DCAT-AP-NO)» på fint.Overordna (og forenkla) består ein DCAT-katalog av
TODO: boks-skisse som viser katalog som kan ha opptil fleire Dataset, og desse kan ha opptil fleire Distribusjonar.Lage ein katalog med datacatalogtordf
For å lage ein katalog, må vi først lage topp-nivå-objektet, Catalog, og setje verdiane på dette.catalog = Catalog() catalogIdentifier = "https://example.com/kommunedata/energi" catalog.identifier = catalogIdentifier catalog.dct_identifier = catalogIdentifier catalog.title = { "nb": "Energimålingar i kommunale bygg", "en": "Energy usage datasets from municipality buildings" } catalog.description = { "nb": "Datasett frå kommunar, på samme format. Frå SamÅpne-prosjektet. Lansert til Open data challenge 2022.", "en": "Datasets from municipalities in the same format. From the SamÅpne-project. Launched for Open data challenge 2022." }Her ser du at for mange tekst-felt, som på tittel og beskrivelse, kan ein legge inn tekst på ulike språk.
For å oppgje kven som er utgjevar av katalogn, må vi lage eit Agent-objekt og knytte til Catalog-objektet.
agent = Agent() agent.identifier = "https://data.brreg.no/enhetsregisteret/enhet/991825827" agent.name = { "nb": "Digitaliseringsdirektoratet", "en": "The Norwegian Digitalisation Agency" } catalog.publisher = agentNo kan vi opprette Dataset-objekt og legge dei til i Catalog.
Slik opprettar ein Dataset:code_text# Values municipalities = [ ("Bodø", "bodo", "972418013"), ("Drammen", "drammen", "921234554"), ("Stavanger", "stavanger", "964965226"), ("Trondheim", "trondheim", "942110464")] datahotelDatasets = [("location-measurement-points", "Location measurement points"), ("locations", "Locations"), ("measurement-points", "Measurement points"), ("measurements", "Measurements")] # # Create datasets: for (municipalityName, municipalityShortname, orgnr) in municipalities: dataset = Dataset() dctIdentifier = "https://example.com/kommunedata/energi/" + municipalityShortname dataset.identifier = dctIdentifier dataset.dct_identifier = dctIdentifier agent = Agent() agent.identifier = "https://data.brreg.no/enhetsregisteret/api/enheter/" + orgnr agent.name = { "nb": municipalityName + " kommune", "en": municipalityName + " municipality" } dataset.publisher = agent contact = Contact() contact.email = "erlend.stav@sintef.no" contact.name = {"nb": "Erlend Stav"} contact.url = "https://www.sintef.no/alle-ansatte/ansatt/erlend.stav/" dataset.contactpoint = contact dataset.title = { "nb": "Energimålinger kommunale bygg", "en": "Energy usage in municipal buildings"} dataset.description = { "nb": """ Datasettene i denne katalogen er samordnet basert på kiledata fra kommunene. Det er fire typer datasett som hører sammen. - Location: Beskriver en lokasjon (vanligvis et bygg) som det finnes energidata for. - MeasurementPoint: Beskriver et målepunkt med en unik id, hva målepunktet er og enhet det måles i. - LocationMeasurementPoint: Knytter et målepunkt til en lokasjon og gir et lokalt navn for målepunktet. Enkelte målepunkt brukes av mange lokasjoner, f.eks. temperaturmålere fra offisielle målestasjoner fra meteorilogisk institutt (met.no) - Measurements: Tidsstemplede målinger fra målepunkt Beskrivelse av hvert av datasettene med deres felter følger under. For nærmere beskrivelse av hvert datasett, se dokumentasjon på GitHub: https://github.com/opendatalab-no/open-municipal-data/blob/main/coordinated-data/README.md """, "en" : """ The datasets in this directory are coordinated based on data sources from the municipalities. There are four types of data sets that belong together. - Location: Describes a location (usually a building) that has energy data. - MeasurementPoint: Describes a measurement point with a unique id, what it is and the unit measurements are performed in. - LocationMeasurementPoint: Connects a measurement point with a location and assigns a local namee for the measurement point. Some measurement points are used by multiple locations, e.g. for temperature measurements from official measurement stations from met.no. - Measurements: Timestamped measurements from measurement points. Follow this link for a description of each dataset with their attributes: https://github.com/opendatalab-no/open-municipal-data/blob/main/coordinated-data/README_en.md """ } dataset.access_rights = "http://publications.europa.eu/resource/authority/access-right/PUBLIC" dataset.theme = [ "http://publications.europa.eu/resource/authority/data-theme/ENER", "http://publications.europa.eu/resource/authority/data-theme/GOVE" ] dataset.keyword = {"nb": "energimåling"} dataset.landing_page = ["https://github.com/opendatalab-no/open-municipal-data"] # Create distributions for (datasetId, datasetName) in datahotelDatasets: dist = Distribution() datasetHotelId = municipalityShortname + "/energy/" + datasetId accessUrl = "https://hotell.difi.no/?dataset=" + datasetHotelId dist.identifier = accessUrl dist.access_URL = accessUrl dist.download_URL = "https://hotell.difi.no/download/" + datasetHotelId dist.title = { "nb": datasetName, "en": datasetName } dist.description = { "nb": "API i formatene JSON, XML, CSV og YAML. Komplett nedlasting som CSV", "en": "API supporting JSON, XML, CSV and YAML. Complete download as CSV" } dist.formats = [ "https://www.iana.org/assignments/media-types/text/csv", "https://www.iana.org/assignments/media-types/application/xml", "https://www.iana.org/assignments/media-types/application/yaml", "https://www.iana.org/assignments/media-types/application/json" ] dist.license = "https://data.norge.no/nlod/no/2.0" dataset.distributions.append(dist) # Add dataset to catalog: catalog.datasets.append(dataset) # get rdf representation in turtle (default) rdf = catalog.to_rdf() # print(rdf.decode()) # change working directory to same as script # https://stackoverflow.com/a/1432949 abspath = os.path.abspath(__file__) dname = os.path.dirname(abspath) os.chdir(dname) print(os.getcwd()) # write to file f = open("kommuneenergi.ttl", "w") f.write(rdf.decode()) f.close()Fila med heile scriptet for å lage DCAT finn du her:
https://github.com/opendatalab-no/open-municipal-data/blob/main/catalog/datanorgekatalog.pyOutput frå scriptet i TTL-format finn du her:
https://github.com/opendatalab-no/open-municipal-data/blob/main/catalog/kommuneenergi.ttlTODO: skriv om bruk av URL-ar med example.com, som er eit domene reservert.
https://en.wikipedia.org/wiki/Example.com
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Registrer Logg inn