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)) 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._