Öppen Länkad Data - Del 3 Från JSON till kunskapsgraf – En djupdykning i tekniken och API-svaren
Artikelserie om Öppen Länkad Data:
Del 1: Grunden och sammanhanget – Länk.
Del 2: Ontologier och kodlistor i praktiken – Länk.
Del 3: Från JSON till kunskapsgraf – Länk.
Del 4: Från lokal katalog till Europa – Länk.
Välkommen till den tredje delen i vår serie om hur Svenska kraftnät Data Service introducerar Öppen Länkad Data. Vi har pratat om teorin och om hur vi modellerar kraftsystemet med ontologier. Nu är det dags att kavla upp ärmarna och titta på källkoden. Hur ser ett API-svar ut under huven, och hur förvandlar du våra tabeller till en levande kunskapsgraf?
När du gör en sökning i vår plattform via vårt Datastore-API (till exempel för att hämta priser och volymer på kapacitetsmarknaden för aFRR), möts du av ett JSON-svar. Men till skillnad från traditionella API:er innehåller detta svar en dold superkraft: en inbäddad semantisk struktur.
Anatomin av ett smart API-svar
Låt oss titta på ett faktiskt exempel på hur ett utsnitt från vårt API-svar ser ut. När du efterfrågar marknadsdata får du ett objekt som innehåller tre viktiga komponenter: records (själva datan), fields (tekniska datatyper) och schema (den semantiska kartan).
Ett förenklat svar kan se ut så här:
{
"success": true,
"result": {
"resource_id": "6351d2cc-1657-43eb-b112-b8408c700529",
"records": [
{
"_id": 1,
"start_time_utc": "2022-06-14T10:00:00",
"bidding_zone": "SE2",
"reserve_product": "aFRRCapacityMarket",
"price": 50.0,
"price_unit": "EUR-MW",
"volume": 40.0,
"volume_unit": "MW",
"soda_hashbyte": "e66e16846297fa5bd772bf7fcfdc30a4"
}
],
"schema": [
{
"@id": "https://data.svk.se/ontology/emdo#hasBiddingZone",
"@type": ["http://www.w3.org/2002/07/owl#ObjectProperty"],
"http://www.w3.org/2000/01/rdf-schema#label": [{"@language": "sv", "@value": "har elområde"}]
}
]
}
}
Om du bara läser av records ser det ut som vilken tabell som helst. Det är när vi lägger till CSVW-schemat (CSV on the Web) som magin sker. Metadata-schemat talar om exakt hur dessa platta JSON-nycklar ska expanderas till globala webbadresser (URIs).
Hur transformationen sker: Från tabellrad till RDF-tripplar
Länkad data bygger på principen om tripplar: Subjekt -> Predikat -> Objekt. Tack vare CSVW-schemat som vi publicerar tillsammans med datan, vet din applikation exakt hur den ska översätta raden ovan till en del av en global kunskapsgraf.
Här är tre konkreta exempel på hur vår plattform instruerar maskinen att tolka datan:
1. Subjektet (Vem handlar datan om?)
Varje rad i tabellen blir en unik nod i grafen. Schemat definierar en aboutUrl baserad på radens unika ID (soda_hashbyte):
-
Rådata:
"soda_hashbyte": "e66e16846297fa5bd772bf7fcfdc30a4" -
Semantisk URI (Subjekt):
https://data.svk.se/dataset/afrr_capacity_market/resource/.../graph/e66e16846297fa5bd772bf7fcfdc30a4
2. Predikatet (Vad är det för typ av egenskap?)
Nyckeln bidding_zone i JSON-svaret mappas via schemats propertyUrl direkt till vår elmarknadsontologi:
-
JSON-nyckel:
bidding_zone -
Ontologi-URI (Predikat):
https://data.svk.se/ontology/emdo#hasBiddingZone
3. Objektet (Vilket värde eller resurs refereras det till?)
Istället för att bara lämna kvar textsträngen "SE2", använder schemat en valueUrl för att styra maskinen till rätt resurs i vår kontrollerade kodlista:
-
Rådata:
"SE2" -
Kodlista-URI (Objekt):
https://data.svk.se/ontology/codelist/biddingzone#SE2
Slutresultatet: Maskinen ser hela grafen
När en semantisk parser (eller din egen kod) har kört igenom API-svaret och dess tillhörande CSVW-schema, har den platta JSON-datan transformerats till ett standardiserat RDF-format. Maskinen kan nu läsa ut följande logiska kedja:
Raden [e66e168] -> [har elområde] -> [Elområde SE2 (Sundsvall)]
Raden [e66e168] -> [har prisenhet] -> [Euro per megawatt (EUR-MW)]
Raden [e66e168] -> [har starttid] -> "2022-06-14T10:00:00" (xsd:dateTime)
Eftersom hela raden dessutom deklareras som en emdo:CapacityMarketObservation, förstår systemet omedelbart vilka ekonomiska och tekniska regler som kan appliceras på datan.
Hur konsumerar du denna data idag?
Det fina med vår implementation är att du inte måste bygga om dina system.
-
För traditionella integrationer: Du kan fortsätta att läsa
result.recordsprecis som vanlig JSON i din Python-, Go- eller C#-applikation. -
För semantiska integrationer: Du kan använda färdiga bibliotek för CSVW (som finns tillgängliga i de flesta moderna programmeringsspråk) för att automatiskt parsa API-svaret, slå ihop det med metadata-schemat och generera RDF (Turtle, JSON-LD, eller n-triples). Denna data kan sedan skickas direkt in i din interna kunskapsgraf eller annan grafdatabas.
Sammanfattning av artikelserien om öppna, länkade data
Genom att ta steget till Öppen Länkad Data har Svenska kraftnät lagt grunden för en mer sammankopplad och intelligent energisektor. Vi har:
-
Frigjort datan från isolerade filer och gett den ett globalt sammanhang.
-
Skapat ett gemensamt språk genom våra egna ontologier och flerspråkiga kodlistor.
-
Implementerat W3C-standarden CSVW för att leverera detta sömlöst och högpresterande direkt via vårt API.
Vi befinner oss bara i början av denna resa, och vi ser fram emot att se hur ni som är utvecklare, forskare och analytiker använder dessa nya möjligheter för att bygga framtidens energilösningar. Den sista delen om hur man upptäcker vår katalog från andra portaler är den sista pusselbiten.
Hela specifikationen för våra ontologier, kodlistor och CSVW-scheman finns tillgänglig direkt på Svenska kraftnät Data Service. Länk.