Hopp til innhold
  • Kategorier
  • Emneord
  • Siste
  • Populære
  • Brukere
  • Grupper
Lukk
Logo
  1. Hjem
  2. Tips og spørsmål
  3. Lag datakataloger med datacatalogtordf

Lag datakataloger med datacatalogtordf

Planlagt Festet Låst Flyttet Tips og spørsmål
1 Innlegg 1 Innlegg 225 Visninger
  • Eldste til nyeste
  • Nyeste til eldste
  • Flest tilrådinger
Svar
  • Svar som tråd
Logg inn for å besvare
Denne tråden har blitt slettet. Bare brukere med trådhåndterings-privilegier kan se den.
  • L Frakoblet
    L Frakoblet
    livar.bergheim
    skrev på Sist endret av livar.bergheim
    #1

    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 = agent 
    

    No 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.py

    Output frå scriptet i TTL-format finn du her:
    https://github.com/opendatalab-no/open-municipal-data/blob/main/catalog/kommuneenergi.ttl

    TODO: skriv om bruk av URL-ar med example.com, som er eit domene reservert.
    https://en.wikipedia.org/wiki/Example.com

    1 svar Siste svar
    0
    Svar
    • Svar som tråd
    Logg inn for å besvare
    • Eldste til nyeste
    • Nyeste til eldste
    • Flest tilrådinger


    • Data.norge.no
    • Kontakt oss
    • Samtykke og brukervilkår
    • Tilgjengelighetserklæring
    • Personvernerklæring
    • Informasjonskapsler
    • github logoFølg oss på Github
    • Logg inn

    • Logg inn eller registrer deg for å søke.
    • Første innlegg
      Nyeste innlegg
    0
    • Kategorier
    • Emneord
    • Siste
    • Populære
    • Brukere
    • Grupper