Resource Description Framework (RDF) är en öppen standard från W3C för att beskriva koncept och resurser digitalt med semantisk innebörd. SPARQL standarden är en syntax och protokoll för att göra förfrågningar och manipulering av dataset i RDF format. Standarden är omfattande och innehåller allt från sök, uppdatering, exportering, underhåll av dataset och kan jämföras med SQL standarden för relationsdatabaser. Skillnaden att SPARQL tillämpas på grafer och dataset med tripletter mönster – subjekt, predikat, objekt och möjliggör semantisk innebörd. Guiden utgår ifrån kunskapsgrafen från föregående artikel.
Select
Nyckelordet SELECT används för att söka efter data i triplett format och resultatet presenterar i tabellform med rader och kolumner. SELECT binder samman resultat från grafen till variabler som definieras i anropet. WHERE klausulen måste följa triplett mönstret med subjekt, predikat och objekt för att specificera vilka resurser som eftersöks.
PREFIX cb: <https://www.clearbyte.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?artist ?painting
WHERE {
?artist rdf:type cb:Artist.
?artist cb:creatorOf ?painting.
}
Exemplet definierar två variabler för att knyta data från datasetet som stämmer överens med med triplett mönstret som specificeras i WHERE klausulen. Första tripletten – avlutas med punkt, letar efter subjekt av typen Artist. Det andra söker efter subjekt av typen creatorOf.
PREFIX cb: <https://www.clearbyte.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?artist ?painting
WHERE {
?artist rdf:type cb:Artist;
cb:creatorOf ?painting.
}
Det som skiljer förfrågningarna åt är att ovanstående anrop använder semikolon för att indikera att mönstret fortsätter på nästföljande rad. Resultatet blir det samma från båda och representeras i tabellformat. Apache Fuseki exportera tabeller i JSON, XML, CSV, TSV format. Tips på hur du kan installera Fuseki finns i slutet av artikeln.
?artist | ?painting |
<https://www.clearbyte.org/Picasso> | <https://www.clearbyte.org/guernica> |
<https://www.clearbyte.org/Picasso> | <https://www.clearbyte.org/maJolie> |
<https://www.clearbyte.org/Picasso> | <https://www.clearbyte.org/crossedArms> |
<https://www.clearbyte.org/VanGogh> | <https://www.clearbyte.org/starryNight> |
<https://www.clearbyte.org/VanGogh> | <https://www.clearbyte.org/sunflowers> |
<https://www.clearbyte.org/VanGogh> | <https://www.clearbyte.org/potatoEaters> |
<https://www.clearbyte.org/VanGogh> | <https://www.clearbyte.org/sundayEindhoven> |
<https://www.clearbyte.org/VanGogh> | <https://www.clearbyte.org/minersInTheSnow> |
Nästa exempel räknar antalet tavlor som varje målare har gjort i datasetet genom att aggregera resultatet med GROUP BY. För att snygga till resultatet kopieras för- efternamn till en variabel med BIND, CONCAT, och förekomsterna från COUNT formateras från heltal till sträng.
PREFIX cb: <https://www.clearbyte.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name (STR(COUNT(?painting)) AS ?pating_count)
WHERE {
?artist rdf:type cb:Artist.
?artist foaf:firstName ?fn.
?artist foaf:surname ?sn.
?artist cb:creatorOf ?painting.
BIND(CONCAT(?fn, " ", ?sn) AS ?name)
}
GROUP BY ?artist ?name
?name | ?pating_count |
Pablo Picasso | 3 |
Vincent van Gogh | 5 |
Genom att använda GROUP BY och COUNT går det enkelt att ta reda på vilka predikat och hur ofta dom förekommer i dataset.
SELECT ?predicate (STR(COUNT(?predicate)) AS ?pTotal)
WHERE {
?subject ?predicate ?object.
}
GROUP BY ?predicate
?predicate | ?pTotal |
<https://www.clearbyte.org/paintingTechnique> | 8 |
<https://www.clearbyte.org/city> | 1 |
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | 19 |
<http://www.w3.org/2000/01/rdf-schema#range> | 6 |
<http://xmlns.com/foaf/0.1/surname> | 3 |
<https://www.clearbyte.org/street> | 1 |
<https://www.clearbyte.org/country> | 1 |
<https://www.clearbyte.org/createdBy> | 5 |
<https://www.clearbyte.org/homeAddress> | 1 |
<http://www.w3.org/2000/01/rdf-schema#label> | 17 |
<http://xmlns.com/foaf/0.1/firstName> | 3 |
<https://www.clearbyte.org/createBy> | 3 |
<http://www.w3.org/2000/01/rdf-schema#domain> | 3 |
<http://www.w3.org/2000/01/rdf-schema#comment> | 6 |
<https://www.clearbyte.org/creatorOf> | 8 |
<http://www.w3.org/2000/01/rdf-schema#seeAlso> | 12 |
<http://www.w3.org/2000/01/rdf-schema#subPropertyOf> | 3 |
Om Clear Byte
Clear Byte är registrerad som allmännyttig idéburen organisation inom forskning och utveckling sedan 2011. Vi verkar för inkluderande digital transformation och samhällsutveckling. Som bygger på grundprinciper om öppenhet, delaktighet och kollaborativt samarbete för att möjliggöra datadriven utveckling och vidareutnyttjande av information för att tillvarata synergieffekter och möjliggör innovation inom och mellan samhällssektorer. Vidareutnyttjande och interoperabilitet baserat på öppen teknologi och standarder är ett av våra fokusområden för att skapa innovativa lösningar på de mångfacetterade samhällsutmaningarna som deklareras i agenda 2030.
Kontakt oss info[at]clearbyte.org om du vill veta mer om vårt arbete med att främja tillit och demokratisering kopplat till digital transformation och samhällsutveckling.
Optional
Tidigare förfrågning om antalet tavlor som varje målare har skapat genom att söka efter triplett mönstret ?artist cb:creatorOf ?painting. Det innebär att målare som inte har några tavlor i dataset inte kommer inkluderas i resultatet. Nyckelordet OPTIONAL möjliggör att även tripletter som inte uppfyller ett specifikt mönster inkluderas. Genom att använda OPTIONAL inkluderas även målare som inte har några tavlor i resultatet.
PREFIX cb: <https://www.clearbyte.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name (STR(COUNT(?painting)) AS ?pating_count)
WHERE {
?artist rdf:type cb:Artist.
?artist foaf:firstName ?fn.
?artist foaf:surname ?sn.
BIND(CONCAT(?fn, " ", ?sn) AS ?name)
OPTIONAL {?artist cb:creatorOf ?painting.}
}
GROUP BY ?artist ?name
?name | ?pating_count |
Carl Larsson | 0 |
Vincent van Gogh | 5 |
Pablo Picasso | 3 |
Union
För att migrering och integrera data från olika dataset är UNION användbart. Detta möjliggör sammanlänkning av olika dataset med likartad eller närbesläktade semantisk beskrivningar av resurser. Grundguiden förklarar förfrågningar av dataset som finns tillgängliga på en och samma SPARQL server. Integrering och sammanlänkning av dataset från olika externa datakällor och servrar – så kallade federerad förfrågningar beskrivs inte i denna guide.
I fallet med målare och tavlor fanns det en tidigare version av modellen som nyttjade standard Friend-of-a-friend, med prefixet foaf för att beskriva målare. Den tidiga modellen hade två tavlor som inte migrerats till den nyare versionen. Förfrågning visar att tavlorna weeping Woman av Picassso och lumberSale av vanGogh inte finns med i den nyare modellen.
PREFIX cb: <https://www.clearbyte.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?artist ?painting
WHERE {
?artist rdf:type foaf:Person.
?artist cb:creatorOf ?painting.
}
?artist | ?painting |
<http://examples.org/Picasso> | <http://examples.org/guernica> |
<http://examples.org/Picasso> | <http://examples.org/weepingWoman> |
<http://examples.org/VanGogh> | <http://examples.org/lumberSale> |
Nyckelordet UNION förenar olika triplett mönster och kombinerar målare som definierats med två olika objekttyper Artist och Person. För exemplets skull finns både den äldre och nyare definitionen av målare i samma dataset och resurserna särskiljs genom användning av URI fragment (#).
PREFIX cb: <https://www.clearbyte.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?artist ?painting
WHERE {
{
?artist rdf:type cb:Artist.
?artist cb:creatorOf ?painting.
}
UNION
{
?artist rdf:type foaf:Person.
?artist cb:creatorOf ?painting.
}
}
?artist | ?painting |
<https://www.clearbyte.org/Artist#Picasso> | <https://www.clearbyte.org/guernica> |
<https://www.clearbyte.org/Artist#Picasso> | <https://www.clearbyte.org/maJolie> |
<https://www.clearbyte.org/Artist#Picasso> | <https://www.clearbyte.org/crossedArms> |
<https://www.clearbyte.org/Artist#VanGogh> | <https://www.clearbyte.org/starryNight> |
<https://www.clearbyte.org/Artist#VanGogh> | <https://www.clearbyte.org/sunflowers> |
<https://www.clearbyte.org/Artist#VanGogh> | <https://www.clearbyte.org/potatoEaters> |
<https://www.clearbyte.org/Artist#VanGogh> | <https://www.clearbyte.org/sundayEindhoven> |
<https://www.clearbyte.org/Artist#VanGogh> | <https://www.clearbyte.org/minersInTheSnow> |
<https://www.clearbyte.org/Picasso> | <https://www.clearbyte.org/guernica> |
<https://www.clearbyte.org/Picasso> | <https://www.clearbyte.org/weepingWoman> |
<https://www.clearbyte.org/VanGogh> | <https://www.clearbyte.org/lumberSale> |
Construct
CONSTRUCT skapar tripletter / grafer som resultat. Detta är användbart för att söka, kopiera, transformera och exportera hela eller delar av dataset med bibehållen semantisk innebörd. CONSTRUCT klausulen måste innehålla minst en helt triplett mönster och avslutas med punkt inom en klammerparentesen.
PREFIX cb: <https://www.clearbyte.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT {?s ?p ?o.}
WHERE {
?s a cb:Painting;
?p ?o.
?o a cb:Artist.
}
CONSTRUCT förfrågningar resulterar i grafer med tillhörande prefix och IRI sökvägar till vokabulär och taxonomier som används i datasetet.
@prefix schema: <https://schema.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix wd: <http://www.wikidata.org/entity/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix cb: <https://www.clearbyte.org/> .
cb:Guernica cb:createBy cb:Picasso .
cb:PotatoEaters cb:createdBy cb:VanGogh .
cb:StarryNight cb:createdBy cb:VanGogh .
cb:SundayEindhoven cb:createdBy cb:VanGogh .
cb:MaJolie cb:createBy cb:Picasso .
cb:Sunflowers cb:createdBy cb:VanGogh .
cb:MinersInTheSnow cb:createdBy cb:VanGogh .
cb:CrossedArms cb:createBy cb:Picasso .
Följande anrop listar alla tripletter i ett dataset.
CONSTRUCT {?subject ?predicate ?object.}
WHERE {
?subject ?predicate ?object.
}
SPARQL standarden är omfattande och innehåller mycket mer än vad som kan beskrivas i en introduktion. Förfrågningar av data med semantisk innehåll avslutar serien av grundguide för RDF ramverket. Skriv gärna i kommentarsfältet om du har förslag på fördjupningsartikel som skulle vara av intresse för dig.
Apache Fuseki SPARQL server – installations tips
- Installera Apache Tomcat webbserver (Ubuntu)
- Installera Apache Jena Fuskeki som webbapplikation
Innehållet är skapat av Clear Byte och är licensierad under Creative Commons Erkännande-IckeKommersiell-DelaLika 4.0 Internationell licens.