Hopp til innhold
  • Kategorier
  • Emneord
  • Siste
  • Populære
  • Brukere
  • Grupper
Lukk
Logo

Datalandsbyen

  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 594 Visninger
  • Eldste til nyeste
  • Nyeste til eldste
  • Flest anbefalinger
Svar
  • Svar som innlegg
Logg inn for å besvare
Denne innlegget har blitt slettet.
  • 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

    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
    Svar
    • Svar som innlegg
    Logg inn for å besvare
    • Eldste til nyeste
    • Nyeste til eldste
    • Flest anbefalinger


    • 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