Tutorial - Länkade data i Sverige
Skip to content, Skip to search

Tutorial

Tillhandahålla länkade data - hur gör jag?

Den här sidan riktar sig till dig som vill komma igång med länkade data, eller som funderar på om länkade data är rätt sätt att publicera era data. Koll även gärna på beskrivningen som finns i den nya vitboken om länkade data.

Vi börjar med att översiktligt beskriva hur man kan tillhandahålla länkade data, vilka val man behöver göra och de praktiska steg man går igenom. Här finns även ett antal exempel beskrivna - hur andra har gjort för att publicera sina data, som kan användas som inspiration. Beskrivningen förutsätter inga speciella teknikkunskaper, men i varje avsnitt finns länkar till mer detaljerad och teknisk information.

Till sist finns en lite mer teknisk/praktisk beskrivning av hur man kan skapa och länka data, inklusive ett konkret exempel som visar hur du rent praktiskt kan komma igång med länkade data. Det sista avsnittet är till för dig som vill komma igång med det praktiska arbetet och kan en del om tekniken redan.

Innehåll

Hur kan jag tillhandahålla länkade öppna data?

Det finns många olika sätt att tillhandahålla länkade data på. Tre av de vanligaste varianterna är genom att publicera separata RDF-filer, genom att integrera RDFa som en del av HTML-sidor, eller genom en så kallad SPARQL endpoint där användare kan ställa frågor mot en datamängd.

Publiceringsprocessen kan naturligtvis också se ut på många olika sätt men vi kan tänka oss ett slags generell modell, som innehåller de vanligaste stegen, och som ser ut såhär (baserat på Linked Open Data: The Essentials, A Quick Start Guide for Decision Makers – http://www.semantic-web.at/LOD-TheEssentials.pdf):

  • Analysera era data - vad ska publiceras, hur och varför? Hur ser era datamodeller och metadata ut i dagsläget?
  • Städa era data - data som kommer från många olika källor kan innehålla inkompatibla delar, eller värden som måste översättas. Rensa även bort sådant som inte ska publiceras.
  • Modellera era data – skapa stabila och långsiktiga URI:er för era data (designmönster för URI:er - http://patterns.dataincubator.org/book/identifier-patterns.html) som ett första steg mot RDF, använd sedan gärna designmönstren som finns här för att uttrycka olika datastrukturer som RDF: http://patterns.dataincubator.org/book/modelling-patterns.html
  • Om möjligt, återanvänd befintliga vokabulärer - återanvändning gör det enklare att länka ihop data, och så slipper ni “återuppfinna hjulet”. En lista över vanliga vokabulärer hittar ni i avsnitt 4.4.4 i boken “Linked Data” - http://linkeddatabook.com/editions/1.0/#htoc53, men leta även efter vokabulärer inom just er domän (t ex från olika internationella standardiseringsorgan eller EU-initiativ).
  • Ange vilken licens som gäller för era data - många använder Creative Commons licenser för sina öppna data - http://creativecommons.org.
  • Konvertera era data till RDF - detta är ett tekniskt moment, som ofta delvis kan automatiseras (exempelvis genom att använda verktyg såsom Google Refine med dess RDF plugin, eller något av konverteringsverktygen som W3C listar här: http://www.w3.org/wiki/ConverterToRdf), men det kräver ofta en del manuellt arbete för att få ett bra resultat och en hög kvalitet på resulterande data.
  • Länka era data till andras datamängder - Dels vill man vanligen länka sina data till auktoritära datamängder, datamängder som många andra använder och är bekanta med (t ex till DBPedia, Geonames etc) - detta ökar chansen att andra förstår och vill återanvända just era data. Å andra sidan är alla länkar värdefulla, så länka även gärna till andra data “bara för sakens skull” - länkade data är data som förbereds för oförutsedd användning i framtiden, varför alla länkar kan bli värdefulla så småningom.
  • Publicera era data och låt världen veta om att de finns - Se till att era data kommer med i the Linked Open Data Cloud, och syns i datakataloger såsom thedatahub.org. Glöm inte heller bort att dokumentera era data, både genom textuella beskrivningar av data och vokabulärer, samt genom att göra data i sig så självbekrivande som möjligt.

Beroende på vilket format era data finns i just nu finns olika avvägningar man behöver göra, och olika verktyg som kan användas för att exempelvis konvertera från CSV-filer eller relationsdatabaser till RDF.

Läs mer - Om att publicera länkade data

Svenska länkade data - Exempel

  • Ett av de första exemplen på länkade data i Sverige som dök upp var data ur LIBRIS som publicerades som länkade data i RDF av Kungliga Biblioteket. Data ur LIBRIS finns tillgängligt i en rad olika format, däribland RDF. Hela LIBRIS är inte öppna data men svensk nationalbibliografi och svenska auktoritetsposter finns fritt tillgängliga under en Creative Commons licens. LIBRIS kataloger innehåller stora delar av alla svenska böcker och tidskrifter som publicerats från 1600-talet och framåt, och i nationalbiografin har alla svenska publikationer med betydande spridning registrerats sedan 70-talet, och sedan 80-talet ingår även kartor och vissa musikverk. Dessa data är länkade till bland annat DBPedia. För mer information om format och hur man kan komma åt dessa data, se: http://librishelp.libris.kb.se/help/tech_swe.jsp?open=tech
  • K-samsök är en service för de som vill hämta kulturarvsdata från olika organisationer som tillhandahåller just kulturarvsinformation. K-samsök fungerar som en mellanhand mellan de ursprungliga databaser där data finns och de organisationer som vill använda informationen i egna tillämpningar. Målet är att det ska bli enklare för fler att få tillgång till och dra nytta av all kulturarvsinformation som finns samlad i en lång rad databaser runt om i Sverige. Delar av K-samsöks data levereras även vidare till ett europeiskt initiativ, Europeana (för att förstå vad Europeana gör och hur länkade data hjälper dem finns även följande introduktionsvideo), som har en liknande roll som K-samsök men för hela Europa. K-samsök tillhandahåller data för applikationer genom ett API, där data som hämtas är i RDF-format och innehåller länkar mellan data som kommer från olika källor. För mer information om K-samsök och dess API se: http://www.ksamsok.se/om-k-samsok/

Jag har bestämt mig för att publicera data - hur kommer jag igång rent praktiskt?

Det första du behöver göra för att komma igång med publicering av länkade öppna data är att förstå vad det innebär att länka. En förutsättning för att det ska gå att länka överhuvudtaget är att du har olika resurser (dataelement) som du kan länka mellan. Dessa resurser måste vara tillgängliga via webbadresser, dvs kunna identifieras genom unika URI:er, för att länkningen ska fungera. En annan viktig förutsättning är att länkarna ska gå att tolka som semantiska relationer mellan dessa resurser. Ett bra test är att försöka verbalisera dem, som till exempel "del av", "handlar om", "samma som", "förälder till", "huvudstad i", osv. Detta innebär också att resurserna bör motsvara olika objekt (saker, artifakter, koncept) som man kan tala om och gärna sätta namn på.

Resurserna och de relationer som länkarna utrycker bör alltså motsvara en någorlunda genomtänkt informationsmodell, snarare än en godtycklig uppdelning av en större mängd data. Låt oss ta ett exempel med län, kommuner och församlingar så som de är beskrivna hos SCB. På SCBs webb exponeras län kommuner och församlingar som ett expanderbart träd (https://www.h2.scb.se/metadata/klassdb.aspx):

Trädstruktur för län kommuner och församlingar

När vi modellerar detta som länkad data får varje län, kommun och försammling en egen webbadress. För att utrycka relationerna mellan de olika resurserna (hierarkin) använder vi relationen "parentFeature" från den etablerade vokabulären geoNames (http://geonames.org/).

Hierarkiska relationer mellan län, kommuner och församlingar

Om vi nu laddar resursen med adressen http://data.scb.se/terms/lkf/0305 och begär att få tillbaka RDF så får vi följande:

 @prefix scb-lkf: <http://data.scb.se/terms/lkf/>
 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 @prefix wgs84_pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>
 @prefix gn: <http://www.geonames.org/ontology#>
 @prefix skos: <http://www.w3.org/2004/02/skos/core#>
 @prefix owl: <http://www.w3.org/2002/07/owl#>
 @prefix dcterms: <http://purl.org/dc/terms/>
 
 scb-lkf:0305  rdf:type skos:Concept ;
 rdf:type gn:Feature ;
 gn:featureClass gn:A ;
 gn:featureCode gn:A-ADM2 ;
 gn:parentFeature scb-lkf:038 ;
 skos:prefLabel "Håbo" ;
 skos:inConceptScheme <http://data.scb.se/terms/lkf> ;
 wgs84_pos:lat “60.1” ;
 wgs84_pos:long “17” ;
 rdfs:seeAlso <http://www.habo.se> ;
 owl:sameAs <http://dbpedia.org/page/Håbo_Municipality> .


Detta är alltså Håbo kommun utryckt som en RDF-graf i formatet Turtle (http://www.w3.org/TeamSubmission/turtle/), detta syns också i HTTP headerns content-type fält, som säger "text/turtle". Man kan ange när man begär en resurs vilket format man vill ha tillbaka, för RDF är de vanligaste "application/rdf+xml", "application/rdf+json", "text/n3" och "text/turtle".

Via relationen gn:parentFeature (raden "gn:parentFeature scb-lkf:038" ovan är alltså en länk till ett annat dataelement) når man Uppsala Län, återigen utryckt i Turtle:

  @prefix scb-lkf: <http://data.scb.se/terms/lkf/>
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  @prefix wgs84_pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  @prefix gn: <http://www.geonames.org/ontology#>
  @prefix skos: <http://www.w3.org/2004/02/skos/core#>
  @prefix owl: <http://www.w3.org/2002/07/owl#>
  @prefix dcterms: <http://purl.org/dc/terms/>
  scb-lkf:038      rdf:type skos:Concept ;
  rdf:type gn:Feature ;
  gn:featureClass gn:A ;
  gn:featureCode gn:A-ADM1 ;
  skos:prefLabel "Uppsala Län" ;
  skos:inConceptScheme <http://data.scb.se/terms/lkf> ;
  wgs84_pos:lat “60” ;
  wgs84_pos:long “17.75” ;
  rdfs:seeAlso <http://www.lansstyrelsen.se/Uppsala> ;
  owl:sameAs <http://dbpedia.org/page/Uppsala_County> .


Så kan man fortsätta att nysta sig vidare mellan olika resurser i RDF-grafen. Notera att en del länkar leder till andra externa tjänster, tex så ser vi att owl:sameAs pekar på dbpedia.org vilket är en länkad data-variant av wikipedia. Vi kan alltså inte bara länka internt inom vår egen datamängd, utan även till vilka andra länkade data som helst som finns publicerade på webben.

Ett vanligt scenario är att man redan har webbsidor som beskriver de resurser man vill exponera som länkad data. Dessa webbsidor drivs ofta med PHP eller med mallspråk som JSP eller Freemarker och en enkel variant för att snabbt komma igång med publicering av länkad data är helt enkelt att man ändrar i dessa sidor så att de kan producera RDF i något av de ovan nämnda formaten. En nackdel med ett sådan angreppsätt är att det blir mycket jobb om man vill stödja flera syntaxer för RDF. Det kan också bli tämligen svårt att underhålla denna kod om man behöver ändra i uttrycket senare. Det innebär också att man tänker mer på syntaxen än på hur RDF som språk är konstruerat. (RDF som språk har en tämligen enkel abstrakt syntax, den konkreta syntaxen i XML, RDF/XML, är däremot är att jämföra med sjörövarspråket, tämligen klumpigt och onödigt tillkrånglat.)

Ett alternativ till att fokusera på syntaxen i mallspråk är att återanvända något RDF bibliotek som Sesame i Java, rdflib i python eller RAP för PHP. Sådana bibliotek tillhandahåller i allmänhet ett API för att läsa in och skriva ut RDF i olika format samt för att kunna bygga upp och manipulera RDF grafer programmatiskt.

Ett tredje alternativ för att exponera länkad data är att man utnyttjar något större ramverk som till exempel D2RQ som kan kopplas upp mot olika datakällor, som t ex relationsdatabaser, och via en konfiguration exponera länkad data i valfritt RDF format.

Här gäller det även att fundera på om man vill tillhandahålla direkt access till sin datakälla genom att låta användare ställa frågor online mot en s.k. SPARQL endpoint, dvs en tjänst för att hämta RDF data ur någon lagringslösning, eller om man bara vill tillhandahålla statiska RDF filer. Det senare är oftast enklare att lösa, men å andra sidan måste användaren då ladda ner alla data på en gång, istället för att välja ut de data som är intressanta, och det är inte säkert att data är uppdaterat (beroende på med vilken frekvens data förändras och hur ofta RDF-filerna uppdateras).