RDF grundguide del 3: SPARQL förfrågningar av kunskapsgrafer och dataset med semantisk innebörd

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 Picasso3
Vincent van Gogh5

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

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 Larsson0
Vincent van Gogh5
Pablo Picasso3

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>

Semantisk teknologi och integrerade digitala samhällstjänster

Behöver din verksamhet bygga förmågor att skapa integrerade digitala samhällstjänster för att exekvera affärslogisk och sömlös utbyta dataset mellan samhällsviktiga sektorer. Kontakta oss på info[at]clearbyte.org och läs mer om Clear Byte’s fokusområden.

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

  1. Installera Apache Tomcat webbserver (Ubuntu)
  2. Installera Apache Jena Fuskeki som webbapplikation