Prefikser - Utdanningsdirektoratet/Grep_SPARQL GitHub Wiki

De tre vanligste prefiksene vi bruker i spørringene våre:

prefix u: <http://psi.udir.no/ontologi/kl06/>
prefix d: <http://psi.udir.no/kl06/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

Hvorfor u: og d:?

<http://psi.udir.no/ontologi/kl06/[navn_på_type]> og <http://psi.udir.no/kl06/[en_eller_annen_kode]> er URIer som brukes i Greps SPARQL-univers. Den første representerer typer. Den andre representerer forekomster av typer. Prefiksene vi bruker internt hos oss er:

  • "u:" som står for "uri for typen" (altså egenskaper med "grep-type:" i datasettet (slik som i REST))
  • "d:" som står for "uri for data" (egenskaper med "uri:" i datasettet (slik som i REST)) uri og grep-type i REST Du står selvsagt fritt til å dikte opp dine egne prefikser, f.eks:
PREFIX ontologi: <http://psi.udir.no/ontologi/kl06/>
PREFIX data: <http://psi.udir.no/kl06/>

...eller hva du måtte foretrekke.

Hvorfor prefikser?

Ved å bruke prefikser, trenger vi ikke å skrive hele URIen hver gang du trenger den i spørringen. Så i stedet for å skrive:

# List årstrinn:
SELECT ?url ?tittel WHERE {
?url <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://psi.udir.no/ontologi/kl06/aarstrinn>;
<http://psi.udir.no/ontologi/kl06/tittel> ?tittel
FILTER (lang(?tittel) = "default")
}

kan du heller skrive:

# List årstrinn:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?url ?tittel WHERE {
?url rdf:type u:aarstrinn;
u:tittel ?tittel
FILTER (lang(?tittel) = "default")
}

Det har kanskje ikke så mye for seg i korte spørringer som dette, men i lange og komplekse spørringer vil bruk av prefikser lette både skrivingen og lesingen av den.

Da erstatter "u:" <http://psi.udir.no/ontologi/kl06/>, og det som skrives etter "u:", legges til i slutten av strengen, slik at det som sendes ut i spørringen egentlig er <http://psi.udir.no/ontologi/kl06/aarstrinn> i eksempelet over.

Man kan gjerne droppe å skrive:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

siden "rdf:" er en innebygget standard-prefiks for (alle?) SPARQL-grensesnitt. Du vil derfor finne flere spørringer i eksempelsamlingen der "rdf:" er skrevet direkte i spørringen uten innledende PREFIX for den.

Vi tar også med et eksempel med "d:"

# Gå fra et spesifikt fagområde til læreplan
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>

SELECT DISTINCT ?lp ?tittel ?status
WHERE {
?of rdf:type u:opplaeringsfag;
    u:fagomraade-referanser d:FOMR404 ;
    u:laereplan-referanse ?lp .
?lp u:tittel ?tittel ;
    u:grep-type ?type ;
    u:status ?status
    FILTER (lang(?tittel) = "default")

} ORDER BY ?type ?lp

Bruken av "#" i første linje i eksemplene, viser hvordan man kan "kommentere" i SPARQL. Noen ganger kan det være praktisk å gi spørringene en overskrift som sier hva den gjør, så slipper du å tolke deg gjennom hele for å se hva det dreier seg om. Det er særlig praktisk hvis du har en større samling av spørringer liggende i ei tekstfil e.l._