Samling av SPARQL spørringer - Utdanningsdirektoratet/Grep_SPARQL GitHub Wiki
2024-06-15: Dette er en revisjon etter en gjennomgang av alle spørringene etter inntreden av moduslstrukturerte læreplaner (for voksne). Vi benyttet også anledningen til å omstrukturere ved å lage kapitler etter hvilken grep-type som har hovedrollen i spørringen. Noen ganger også etter forholdet mellom to typer (f.eks. fra læreplaner til fagkoder, og omvendt). Vi har også forsynt hver spørring med en referanse (egenkomponert UID) som gjør det enklere å vise til en spesifikk spørring.
Denne siden inneholder eksempler på SPARQL-spørringer som kan testes mot miljøene
- Sandkassen: repoet "KL06_201906" på http://sandkasse-data.udir.no:7200/sparql (fyres opp og oppdateres ved behov)
- Beta: https://beta-data.udir.no/kl06/sparql (bruk denne til testing) (data oppdateres nattlig)
- Produksjon: https://sparql-data.udir.no/sparql (bruk denne kun til produksjonsformål) (data oppdateres nattlig)
- Først noen innledende tips
- Utforskende SPARQL-spørringer
- Spørringer mot innholdet
- SPARQL-spørringer som tilsvarer "spesialspørringene" i REST
[klikk for å åpne/lukke kapittelet]
Nedenfor (hvis du klikker på overskriften over) har vi samlet noen innledende tips. Først noen anbefalinger til kilder du kan bruke til å sette deg inn i SPARQL generelt, deretter noen tips som handler om SPARQL-spørringer mot Grep spesielt. [Klikk for å åpne avsnittet]
Først kan vi nevne at vi har prøvd å lage et kurs i SPARQL: [Søk i Grep med hjelp av SPARQL](SPARQL%E2%80%90kurs).
Prof. Dr. Harald Sack fra FIZ Karlsruhe – Leibniz Institute for Information Infrastructure, har laget et par foredragsserier på Youtube som kan anbefales for de som ønsker å gå i dybden:
- Linked Data Engenering (Semantic Web) OpenHPI (45 videoer fra 2019)
- Knowledge Engeneering with Semantic Web Technologies (70 videoer fra 2019)
En annen som også kan anbefales i samme sjanger, er Professur fur Wissensbasierte Systeme, Markus Krötzsh fra Technische Universität Dresden. Han har blant annet delt denne spillelisten:
- Knowledgde Graphs (lecture) (33 videoer, februar 2021)
I tillegg til mye matnyttig (i betydningen praktisk og håndfast), byr han også på en del om grafteori i denne sammenhengen.
Merk at Harald Sack bruker Virtuoso i eksemplene sine, og ikke GraphDB mot dbpedia. Derfor kan det være noen få avvik på hvordan man utformer spørringer. Dette er også greit å vite for de som har brukt forrige versjon av Greps SPARQL-tjeneste, som jo var basert på Virtuoso. Vi har f.eks. funnet at
- i GraphDB, må du i "FILTER(LANG("... eksplisitt definere "default" for å få default-språket for en språkversjonert streng, og ikke en tom streng ("") som vi gjorde i Virtuoso
- i GraphDB krever REGEX-filteret "str" for å gjøre om til streng hvis du vil filtrere på noe som er url - f.eks i
"FILTER REGEX(str(?status), "publisert", "i")"
er?status
i dette tilfellet i utgangspunktet returnert som url, om du ikke som i eksempelet over spesifiserer at du vil ha den som en streng. Dette filteret finner du mange eksempler på i samlingen nedenfor. - Når du konkatenerer i SELECT-delen av spørringer, må du i GrapDB sette hele konkateneringsuttrykket i en ytre parentes, slik som i snutten nedenfor:
SELECT DISTINCT ?s (concat(group_concat(distinct ?x;separator=', ')) as ?y) ...osv
Vi håper ikke de innledende linjene var avskrekkende. Det meste i videoene nevnt over er bygd på de samme prinsippene, og kan brukes hos oss. Nedenfor finner du mange eksempler du kan ta utgangspunkt i, og vi håper de er til hjelp.
Du er kanskje vant til å se at alle variabler skrives med ?
foran, som i ?s ?p ?o
. Men i de tilfellene vi ikke bryr oss om hva som er bak variabelen, kan vi bruke variablene anonymt ved å bruke symbolet for "array"/liste, nemlig []
. Vi kaller ikke på innholdet, men det må uansett representeres av noe i enten subjekt-plassen og/eller i objektplassen trippelen. Derfor er f.eks [] u:grep-type []
en gyldig triple, og den betyr "alt [
hva som helst]
som er u:grep-type
[
hva som helst]
, vi bryr oss verken om hva subjektet eller objektet er, bare at det er noe...."
[åpne/lukke]
Ref.: xb10g44T
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?type
WHERE {
[] rdf:type ?type
}
eller
Ref.: xb10g46s
SELECT DISTINCT ?type
WHERE {
[] rdf:type ?type
}
eller
Ref.: xb10g46D
SELECT DISTINCT ?type WHERE
{
[] a ?type
}
Ref.: xb10g47m
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?type
WHERE {
[] u:grep-type ?type
}
Ref.: xb10g47z
SELECT DISTINCT ?property
WHERE {
[] ?property [] .
FILTER (!CONTAINS(STR(?property), "gyldighet-"))
}
Negasjonsfilteret for å fjerne "gyldighet-" fra resultatet handler om ett av våre tiltak for å forflate gyldighetsinformasjon på koblinger/referanser. Se artikkelen: Blanke noder for gyldighetsinformasjon i referanseobjekter.
Ref.: xb11g16e
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?property
WHERE {
[] a u:laereplan_lk20;
?property [] .
FILTER (!CONTAINS(STR(?property), "gyldighet-"))
}
Negasjonsfiltere: se forklaring til forrige spørring
Ref.: xb10g48s
PREFIX d: <http://psi.udir.no/kl06/>
SELECT * WHERE {
d:NOR01-06 ?p ?o
}
Ref.: xb10g48C
SELECT (COUNT(*) AS ?tripler) WHERE {
?s ?p ?o
}
Ref.: xb10g48Q
SELECT (COUNT(distinct ?s) AS ?entiteter) WHERE{
?s a []
}
Ref.: xb10g49&
SELECT (COUNT(distinct ?o) AS ?typer) WHERE{
[] a ?o
}
Ref.: xb10g49l
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT (COUNT(distinct ?o) AS ?typer) WHERE{
[] u:grep-type ?o
}
Ref.: xb10g49w
SELECT (COUNT(distinct ?p) AS ?predikater) WHERE{
[] ?p []
}
For noen spørringer siden så vi at vi kunne telle antall grep-typer (xb10g49l). I denne spørringen lister vi opp alle predikater/properties som er brukt av alle disse typene. Med andre ord – hvilke egenskaper finnes for alle grep-typer?
Ref.: xd12g38D
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?property
WHERE {
[] ?property [] ;
u:grep-type ?type .
{
SELECT (COUNT(DISTINCT ?type) AS ?totaltAntallTyper)
WHERE {
[] u:grep-type ?type .
}
}
}
GROUP BY ?property ?totaltAntallTyper
HAVING (COUNT(DISTINCT ?type) = ?totaltAntallTyper)
I denne spørringen bruker vi en delspørring inne i det vi kan kalle hovedspørringen. Den evalueres først, og formålet er å telle totalt antall typer som vi bruker i HAVING nederst der vi modifiserer spørringen. Der teller vi ?type
for mønsteret der vi har alle ?property
for hver u:grep-type ?type
, og bestemmer at det skal være likt med ?totaltAntallTyper
som vi fant i den indre spørringen. Siden vi vet at (i skrivende stund) har 44 grep-typer totalt, kunne vi også skrevet en enklere spørring, slik:
Ref.: xd21g20g
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?property
WHERE {
[] ?property [] ;
u:grep-type ?type .
}
GROUP BY ?property
HAVING (COUNT(distinct ?type) >= 44)
Og for fremtiden vil denne trolig også fungere også etter at vi får flere typer enn 44, siden vi bruker >=
(større eller lik).
Ref.: xb10g49G
SELECT (COUNT(DISTINCT ?s ) AS ?no) WHERE{
?s ?p []
}
Merk negasjonsfilteret !isLiteral
som filtrerer bort alle ?o som er tekststrenger
Ref.: xb10g50b
SELECT (COUNT(DISTINCT ?o ) AS ?antallObjektnoder) {
?s ?p ?o
filter(!isLiteral(?o))
}
[åpne/lukke]
[åpne/lukke]
I Grep har vi to grep-typer som representerer læreplaner i Kunnskapsløftet:
- 'laereplan': Lærpelaner i Kunnskapsløftet LK06 som var gyldige fra 2006, og til og med overgangen til "fagfdornyelsen" (våren 2023)
- laereplan_lk20': Lærpelaner i Kunnskapsløftet LK20, "fagfornyelsen" som var gyldige fra 2020 (noe overlapp med LK06 i overgangen)
- Egenskapen 'laereplanstruktur' med verdien laereplanstruktur_1 angir de "vanlige" læreplanene (uri i SPARQL: laereplanstruktur_1).
- Egenskapen 'laereplanstruktur' med verdien laereplanstruktur_2 angir de moduslstrukturerte læreplanene som blir innført høsten 2024 (uri i SPARQL: laereplanstruktur_2).
Når det gjelder LK20-planer, og du vil f.eks. ignorere de modulstrukturerte, så kan du spesifisere dette i spørringen ved å angi hvilken av de to du vil ha:
Ref.: xb10g50T
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
select * where {
?s a u:laereplan_lk20 ;
u:laereplanstruktur d:laereplanstruktur_2
}
Denne spørringen spesifiser at læreplanene som listes i resultatet skal være modulstrukturert. Hvis du vil ha de "vanlige", skriver du heller d:laereplanstruktur_1
Ref.: xb10g51d
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?kode ?tittel WHERE {
?uri a u:laereplan_lk20 ;
u:tittel ?tittel ;
u:kode ?kode .
FILTER (lang(?tittel) = "default")
} ORDER BY ?kode ?tittel
Ref.: xb11g18K
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?tittel ?kode WHERE {
?uri a u:laereplan_lk20 ;
u:tittel ?tittel ;
u:status ?status ;
u:kode ?kode .
FILTER REGEX(str(?status), "publisert", "i")
FILTER (lang(?tittel) = "default")
} ORDER BY ?kode
Læreplaner av LK06-typen og LK20-typen har mange egenskaper som er ulike, men også en del som er like. Her er en spørring som viser hvilke (hvis vi holder oss til RDF-terminologien) "predikater" de begge har:
Ref.: xd11g22k
PREFIX d: <http://psi.udir.no/kl06/>
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?predikat WHERE {
{
SELECT DISTINCT ?predikat WHERE {
?s a u:laereplan ;
?predikat ?o.
}
}
FILTER EXISTS {
?s2 a u:laereplan_lk20 ;
?predikat ?o2.
}
}
ORDER BY ?predikat
Vi kan også nevne at i listen over predikater som både LK06 og LK20 har, så er u:fastsatt-spraak
en god kandidat å ta utgangspunkt i for å liste alle læreplaner uansett "reform":
Ref.: xd11g27i
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select * where {
?laereplan u:fastsatt-spraak [] .
}
Ref.: xb10g51N
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?kode ?tittel WHERE {
?laereplan a u:laereplan ;
u:tittel ?tittel ;
u:kode ?kode ;
u:opplaeringsnivaa ?nivaa ;
u:status ?status .
FILTER regex(str(?status), "publisert", "i")
FILTER regex(str(?nivaa), "grunnskole", "i")
FILTER (lang(?tittel) = "default")
} ORDER BY ?kode
# endring: "u:har-opplaeringsnivaa" har byttet navn til "u:opplaeringsnivaa" for å forenkle, eller bedre matche navngivning i JSON-endepunktet
Ref.: xb11g20M
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?kode ?tittel WHERE {
?laereplan a u:laereplan ;
u:tittel ?tittel ;
u:kode ?kode ;
u:status ?status .
MINUS { ?laereplan u:erstatter ?erstatter. }
FILTER regex(str(?status), "publisert", "i")
FILTER (lang(?tittel) = "default")
} ORDER BY ?kode
Ref.: xb11g20z
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT *
WHERE {
?laereplan u:tittel "Læreplan i norsk"@nob ;
u:tittel ?tittel .
FILTER langMatches(lang(?tittel), "eng" )
}
Tekstsøk i mutiple tekstfelt i LK06-planer (LP-tittel. formålkapittelet, kompetansemål)
Ref.: xb10g53b
PREFIX u:<http://psi.udir.no/ontologi/kl06/>
PREFIX d:<http://psi.udir.no/kl06/>
SELECT DISTINCT ?soeketekst ?data ?type ?lptittel WHERE {
{
?kompetansemaal a u:kompetansemaal ;
u:tittel ?soeketekst ;
u:kode ?kode ;
u:url-data ?data ;
u:grep-type ?type ;
u:tilhoerer-laereplan ?lp ;
u:tilhoerer-kompetansemaalsett ?kms .
?lp u:tittel ?lptittel .
FILTER (lang(?lptittel) = "default")
FILTER (lang(?soeketekst) = "default")
}
UNION
{
?laereplan a u:laereplan .
?laereplan u:tittel ?soeketekst ;
u:tittel ?lptittel ;
u:kode ?kode ;
u:url-data ?data ;
u:status ?status ;
u:grep-type ?type .
FILTER regex(str(?status), "publisert", "i")
FILTER (lang(?lptittel) = "default")
FILTER (lang(?soeketekst) = "default")
}
UNION
{
?laereplan a u:laereplan .
?laereplan u:formaal ?soeketekst ;
u:kode ?kode ;
u:tittel ?lptittel ;
u:url-data ?data ;
u:grep-type ?type ;
u:status ?status .
FILTER regex(str(?status), "publisert", "i")
FILTER (lang(?lptittel) = "default")
FILTER (lang(?soeketekst) = "default")
}
FILTER regex(str(?soeketekst), "i forhold til", "i")
} ORDER BY ?type ?data
Ref.: xb10g53q
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?s ?tittel ?type ?soeketekst ?tekstFor ?tilhoererLaereplan ?laereplanTittel where {
?s ?tekstFor ?soeketekst ;
u:grep-type ?type ;
u:tittel ?tittel ;
u:status ?status .
OPTIONAL {
?s u:tilhoerer-laereplan ?tilhoererLaereplan .
?tilhoererLaereplan u:tittel ?laereplanTittel .
FILTER (lang(?laereplanTittel) = "default")
}
FILTER (isLiteral(?soeketekst)
&& (lang(?tittel) = "default")
&& (regex(?soeketekst, "digital dømmekraft", "i")
&& (regex(str(?status), "publisert", "i")
)))
} ORDER BY ?tilhoererLaereplan ?S
Ref.: xb10g53C
prefix u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?s ?kmKode ?kmTekst ?laereplanTittel ?laereplan WHERE {
[] ^u:tilhoerer-kompetansemaalsett ?kompetansemaal . # triks for å få både LK06 og LK20 versjoner
?kompetansemaal u:tittel ?kmTekst ;
u:kode ?kmKode ;
u:tilhoerer-kompetansemaalsett/u:etter-fag/u:laereplan-referanse ?laereplan .
?laereplan u:tittel ?laereplanTittel ;
u:status ?lpStatus .
FILTER (regex(?kmTekst, "i forhold til", "i")
&& (lang(?kmTekst) = "default")
&& (lang(?laereplanTittel) = "default")
&& (regex(str(?lpStatus), "publisert", "i")))
} ORDER BY ?laereplan ?kmKode
Ref.: xb10g53Y
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select DISTINCT ?tittel1 (concat(group_concat(distinct ?km2;separator=', ')) as ?kompArray) (COUNT (distinct ?k2 ) as ?antLike) where {
# (concat('[',group_concat(distinct ?km2;separator=','),']') as ?komp2) # Hvis du vil vise ?komp2 som array
?k1 a u:kompetansemaal_lk20 ;
u:kode ?km1 ;
u:tittel ?tittel1;
u:tilhoerer-laereplan ?lp1 ;
u:tittel ?tittel2 .
FILTER (lang(?tittel1) = "default")
FILTER (lang(?tittel2) = "default")
?k2 u:tittel ?tittel2 ;
u:kode ?km2 ;
u:tilhoerer-laereplan ?lp2 .
?lp1 u:grep-type u:laereplan_lk20 ; u:kode ?lpKode1 ;
u:tittel ?lpTittel1 . FILTER (lang(?lpTittel1) = "default")
?lp2 u:grep-type u:laereplan_lk20 ; u:kode ?lpKode2 ;
u:tittel ?lpTittel2 . FILTER (lang(?lpTittel2) = "default")
FILTER (?tittel2 = ?tittel1)
FILTER (?k1 != ?k2)
# FILTER (?lp1 != ?lp2)
}
GROUP BY ?tittel1
ORDER BY DESC(?antLike)
Ref.: xb10g54n
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select DISTINCT ?tittel1 (concat(group_concat(distinct ?km1;separator=', ')) as ?kompArray1) (concat(group_concat(distinct ?km2;separator=', ')) as ?kompArray2) (COUNT (distinct ?k1 ) as ?antLike1) (COUNT (distinct ?k2 ) as ?antLike2) where {
# Hvis du vil vise ?komp2 som array (concat('[',group_concat(distinct ?km2;separator=','),']') as ?komp2)
?k1 a u:kompetansemaal ;
u:kode ?km1 ;
u:tittel ?tittel1;
u:tilhoerer-laereplan ?lp1 ;
u:tittel ?tittel2 .
FILTER (lang(?tittel1) = "default")
FILTER (lang(?tittel2) = "default")
?k2 u:tittel ?tittel2 ;
u:kode ?km2 ;
u:tilhoerer-laereplan ?lp2 .
?lp1 u:grep-type u:laereplan ; u:kode ?lpKode1 ;
u:tittel ?lpTittel1 . FILTER (lang(?lpTittel1) = "default")
?lp2 u:grep-type u:laereplan_lk20 ; u:kode ?lpKode2 ;
u:tittel ?lpTittel2 . FILTER (lang(?lpTittel2) = "default")
FILTER ((?tittel2 = ?tittel1) && (?k1 != ?k2))
# FILTER (?lp1 != ?lp2)
}
GROUP BY ?tittel1
ORDER BY DESC(?antLike2) DESC(?antLike1)
Ref.: xb10g54B
PREFIX d: <http://psi.udir.no/kl06/>
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select distinct ?lp ?lpTittel ?kmsKode ?kmsTittel ?km ?tittel where {
?KM a u:kompetansemaal_lk20 ;
u:kode ?km ;
u:tittel ?tittel ;
u:tilhoerer-kompetansemaalsett ?kms ;
u:tilhoerer-laereplan ?lp ;
u:tilknyttede-grunnleggende-ferdigheter d:GF1, d:GF2, d:GF3, d:GF4, d:GF5 .
FILTER (lang(?tittel) = "default")
# MINUS { ?KM u:tilknyttede-grunnleggende-ferdigheter [] . }
?lp u:tittel ?lpTittel ;
u:kode ?lpKode .
FILTER (lang(?lpTittel) = "default")
?kms u:tittel ?kmsTittel ;
u:kode ?kmsKode .
FILTER (lang(?kmsTittel) = "default")
} ORDER BY ?lp ?kms ?km
Legg spesielt merke til avsnittet der vi binder nordsamisk (@sme) til bokmål (@nob). I denne spørringen har vi i tillegg listet opp tilgjengelige språk som tilhørende læreplan har (kolonnen helt til høyre i resultatet). Av kapasitetshensyn har vi også satt en LIMIT på 1000, men denne kan fjernes ved ved faktisk bruk (10.386 rader i skrivende stund).
Ref.: xb10g54U
# Alle kompetansemål (LK20) sortert etter læreplan, kompetansemålsett og rekkefølgen til kompetansemålet innenfor hvert kompetansemålsett
# Har også lagt inn liste over hvilke tilgjengelige språk som læreplanen har
# Linje 17: Kan tas med ved behov (fjern da "#"). Tar da kun med publiserte læreplaner
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX st: <https://data.udir.no/kl06/v201906/status/status_>
PREFIX d: <http://psi.udir.no/kl06/>
select ?lpKode ?lpTittel ?status ?kmsKode ?kmsTittel ?kompKode ?kompTtittel ?urlData ?fastsattSpr (concat(group_concat(distinct ?sprk;separator=', ')) as ?spraak) where {
?komp a u:kompetansemaal_lk20 ;
u:url-data ?urlData ;
u:kode ?kompKode ;
u:tittel ?kompTtittel ;
u:rekkefoelge ?rekkefoelge ;
u:tilhoerer-kompetansemaalsett ?kms ;
u:tilhoerer-laereplan ?lp .
?lp u:kode ?lpKode ;
u:status ?st ;
# u:status st:publisert ;
u:fastsatt-spraak ?fastsattSpr ;
u:tilgjengelige-spraak ?spr ;
u:tittel ?lpTittel .
?kms u:kode ?kmsKode ;
u:kortform ?kmsTittel .
?spr u:kode ?sprk .
BIND (
IF(?st = st:publisert, str("publisert"), "utgått")
AS ?status
)
# BIND nedenfor (kombinert med filtrene nedenfor) tvinger nordsamiske titler til å vises i bokmål
BIND (
IF(?fastsattSpr = d:sme, "nob" , "default"
) AS ?spraak
)
FILTER (lang(?kompTtittel) = ?spraak)
FILTER (lang(?lpTittel) = ?spraak)
FILTER (lang(?kmsTittel) = ?spraak)
}
GROUP BY ?lpKode ?lpTittel ?status ?kmsKode ?kmsTittel ?kompKode ?kompTtittel ?urlData ?fastsattSpr
ORDER BY ?lpKode ?kms ?rekkefoelge
LIMIT 1000
Ref.: xb10g55d
prefix u: <http://psi.udir.no/ontologi/kl06/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE {
?uri rdf:type u:laereplan ;
u:tittel ?tittel ;
u:kode ?kode ;
u:fastsettelsestekst ?fastsatt_av .
FILTER regex(str(?fastsatt_av), "av K", "i")
FILTER (lang(?tittel) = "default")
FILTER (lang(?fastsatt_av) = "default")
}
Ref.: xb10g55o
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT (count (?telleobjekt) as ?antall) WHERE {
?telleobjekt a u:laereplan_lk20 ;
u:status ?status .
FILTER regex(str(?status), "publisert","i")
}
Ref.: xb10g55A
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select (count (?telleobjekt) as ?antall) where {
?telleobjekt a u:laereplan_lk20;
u:tittel ?tittel ;
u:status ?status .
FILTER regex(str(?status), "publisert","i")
FILTER (lang(?tittel) = "nob")
}
Antall læreplaner fastsatt på enten bokmål eller nynorsk (nordsamisk er trukket fra)
Ref.: xb10g55B
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
select (COUNT(?nob) as ?antallBokmål) (COUNT(?nno) as ?antallNynorsk) (COUNT(*)as ?totBokmålOgNynorsk) where {
?lp a u:laereplan_lk20 ;
OPTIONAL{?lp u:fastsatt-spraak ?nob FILTER(?nob = d:nob)}
OPTIONAL{?lp u:fastsatt-spraak ?nno FILTER(?nno = d:nno)}
MINUS{?lp u:fastsatt-spraak ?sme FILTER(?sme = d:sme)}
}
Antall læreplaner fastsatt på enten bokmål, nynorsk eller nordsamisk
Ref.: xb10g56f
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
select (COUNT ( ?nob ) as ?antallBokmål) (COUNT ( ?nno ) as ?antallNynorsk) (COUNT (*) as ?totBokmålNynorskogNordsamisk) where {
?lp a u:laereplan_lk20 ;
OPTIONAL{?lp u:fastsatt-spraak ?nob FILTER(?nob = d:nob)}
OPTIONAL{?lp u:fastsatt-spraak ?nno FILTER(?nno = d:nno)}
OPTIONAL{?lp u:fastsatt-spraak ?sme FILTER(?sme = d:sme)}
}
Antall læreplaner fastsatt på enten bokmål, nynorsk eller nordsamisk (filtrert på publiserte)
Ref.: xb10g56K
# Fordeling av fastsatt-språk alle læreplaner (kun status publisert)
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
select (COUNT(?nob) as ?antallBokmål) (COUNT(?nno) as ?antallNynorsk) (COUNT(?sme) as ?antallNordsamisk) (COUNT(?lp) as ?totBokmålNynorskOgNordsamisk) where {
{?lp a u:laereplan_lk20 ; u:status ?status }
UNION
{ ?lp a u:laereplan ; u:status ?status}
OPTIONAL{?lp u:fastsatt-spraak ?nob FILTER(?nob = d:nob)}
OPTIONAL{?lp u:fastsatt-spraak ?nno FILTER(?nno = d:nno)}
OPTIONAL{?lp u:fastsatt-spraak ?sme FILTER(?sme = d:sme)}
FILTER REGEX(str(?status), "publisert", "i")
}
Ref.: xb10g56T
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?laereplan ?tittel WHERE {
?laereplan a u:laereplan ;
u:tittel ?tittel ;
u:merkelapper ?merkelapp .
FILTER regex(str(?merkelapp), "valg", "i")
FILTER (lang(?tittel) = "default")
} ORDER BY ?laereplan
Ref.: xb10g57g
prefix u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?laereplan ?tittel ?merkelappTittel WHERE {
?laereplan a u:laereplan ;
u:tittel ?tittel ;
u:status ?status ;
u:merkelapper ?merkelapp .
?merkelapp u:tittel ?merkelappTittel .
FILTER (regex(str(?status), "publisert")
&& (lang(?tittel) = "default")
&& (lang(?merkelappTittel) = "default"))
} ORDER BY ?laereplan ?merkelapp
Ref.: xb10g57u
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?trinn WHERE {
d:SAS1-04 u:kompetansemaalsett/u:etter-aarstrinn ?aarstrinn .
?aarstrinn u:rekkefoelge ?trinnOrder ;
u:tittel ?trinn .
FILTER (lang(?trinn) = "default")
} ORDER BY ?trinnOrder
Ref.: xb10g57K
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT ?kmkode ?kompetansemaal ?kmstittel ?laereplan ?lpkode
WHERE {
d:KM1256 u:tittel ?kompetansemaal ; # prøv også d:K15426 for et LK06-kompetansemål
u:kode ?kmkode ;
u:tilhoerer-laereplan ?lp ;
u:tilhoerer-kompetansemaalsett ?kms .
?kms u:tittel ?kmstittel .
?lp u:tittel ?laereplan ;
u:kode ?lpkode .
FILTER (
(lang(?kompetansemaal) = "default")
&& (lang(?kmstittel) = "default")
&& (lang(?laereplan) = "default")
)
}
Ref.: xb11g19k
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT ?tittel ?etterAarstrinn ?benyttesPaaAarstrinn WHERE {
d:KM1 u:tittel ?tittel ;
u:tilhoerer-kompetansemaalsett/u:etter-aarstrinn ?etterTrinn ;
u:tilhoerer-kompetansemaalsett/u:benyttes-paa-aarstrinn ?benyttesPaa .
?etterTrinn u:tittel ?etterAarstrinn .
?benyttesPaa u:tittel ?benyttesPaaAarstrinn ;
u:rekkefoelge ?trinnOrder .
FILTER (
(lang(?tittel) = 'default')
&& (lang(?etterAarstrinn) = 'default')
&& (lang(?benyttesPaaAarstrinn) = 'default')
)
} ORDER BY ?trinnOrder
Ref.: xb10g58n
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?lp ?type ?tittel ?status WHERE {
[] a u:opplaeringsfag;
u:fagomraade-referanser d:FOMR404 ;
u:laereplan-referanse ?lp .
?lp u:tittel ?tittel ;
u:status ?st ;
u:grep-type ?type .
BIND(STRAFTER(str(?st), "/status/status_") as ?status)
FILTER (lang(?tittel) = "default")
} ORDER BY ?type ?lp ?status
Ref.: xb11g19E
prefix u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?lp ?nobTittel ?nnoTittel ?fastsattSpraak WHERE {
[] a u:opplaeringsfag ; u:laereplan-referanse ?lp .
?lp u:tittel ?nobTittel ;
u:tittel ?nnoTittel ;
u:fastsatt-spraak ?fastsattSpraak .
FILTER (
(lang(?nobTittel) = "nob")
&& (lang(?nnoTittel) = "nno")
)
} ORDER BY ?lp ?fastsattSpraak
Ref.: xb10g58P
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?lp ?lpTittel (COUNT(?km) AS ?antKm) where {
?km a u:kompetansemaal_lk20 ;
u:tilhoerer-laereplan ?lp .
?lp u:tittel ?lpTittel ;
u:status ?status .
FILTER (
(lang(?lpTittel) = "default")
&& regex(str(?status), "publisert", "i")
)
} GROUP BY ?lp ?lpTittel
ORDER BY DESC(?antKm)
[åpne/lukke]
Ref.: xb10g59a
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?fagkode ?tittel WHERE {
?fagkode a u:fagkode ;
u:tittel ?tittel ;
u:merkelapper ?merkelapp .
FILTER regex(str(?merkelapp), "avvik", "i")
FILTER (lang(?tittel) = "default")
} ORDER BY ?fagkode
Ref.: xb10g59n
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT * WHERE {
?fagkode a u:fagkode ;
u:tittel ?fagkodeTittel ;
u:merkelapper ?merkelapp .
FILTER (lang(?fagkodeTittel) = "default")
} ORDER BY ?fagkode ?merkelapp
Ref.: xb10g59z
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT ?fagkodetittel ?opplFag ?opplaeringsfag WHERE {
d:NOR0214 u:tittel ?fagkodetittel ;
u:opplaeringsfag ?opplFag .
?opplFag u:status ?opplFagStatus ;
u:tittel ?opplaeringsfag.
FILTER (regex(str(?opplFagStatus), "publisert")
&& (lang(?fagkodetittel) = "default")
&& (lang(?opplaeringsfag) = "default"))
}
Ref.: xb10g59J
prefix u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?rekkefoelge ?aarstrinn ?tittel WHERE {
?aarstrinn a u:aarstrinn;
u:rekkefoelge ?rekkefoelge;
u:tittel ?tittel .
FILTER (lang(?tittel) = "default")
} ORDER BY ?rekkefoelge
Ref.: xb10g59U
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?fagkode ?tittel WHERE {
?fagkode a u:fagkode ;
u:tittel ?tittel ;
u:naar-gis-det-undervisning-foerste-semester ?foerstesemester .
FILTER regex(str(?foerstesemester), "semester_hoest_2022", "i")
FILTER (lang(?tittel) = "default")
} ORDER BY ?fagkode
Ref.: xb11g00d
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?po ?tittel WHERE {
?po a u:programomraade ;
u:tittel ?tittel ;
u:url-data ?kode ;
u:foerste-semester ?foerstesemester .
FILTER (
REGEX(str(?foerstesemester), "2022", "i")
&& (lang(?tittel) = "default")
)
} ORDER BY ?po
Ref.: xb11g00v
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?up ?tittel WHERE {
?up a u:utdanningsprogram ;
u:tittel ?tittel ;
u:foerste-semester ?foersteSemester .
FILTER (
(lang(?tittel) = "default")
&& regex(str(?foersteSemester), "2016", "i")
)
} ORDER BY ?up
Ref.: xb11g00F
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?up ?po ?poTittel ?lp ?fagtype ?sluttkompetanse ?yrkesTittel WHERE {
?opplaeringsfag a u:opplaeringsfag ;
u:status ?ofstatus ;
u:programomraader-referanse ?po ;
u:fagtype ?fagtype ;
u:status ?poStatus ;
u:laereplan-referanse ?lp .
?po u:tittel ?poTittel ;
u:utdanningsprogram-referanse ?up ;
u:sluttkompetanse ?sluttkompetanse ;
u:yrkestittel ?yrkesTittel ;
u:status ?upStatus .
FILTER (
regex(str(?fagtype), "program", "i")
&& regex(str(?poStatus), "publisert", "i")
&& (lang(?poTittel) = "default")
&& (lang(?yrkesTittel) = "default")
)
}
ORDER BY ?up ?po ?lp ?poStatus
Se artikkelen Gyldige-kryssløp-det-kan-søkes-på-i-et-gitt-tidspunkt-(et-litt-vrient-SPARQL-case)
Ref.: xb11g00Z
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?up ?po ?lpKode ?tittel WHERE {
?opplaeringsfag a u:opplaeringsfag ;
u:fagtype ?fagtype ;
u:programomraader-referanse ?po ;
u:status ?ofStatus ;
u:tilhoerende-kompetansemaalsett ?sett ;
u:laereplan-referanse ?lp .
?po u:utdanningsprogram-referanse ?up .
?up u:type-utdanningsprogram ?uptype .
?lp u:kode ?lpKode ;
u:status ?status ;
u:tittel ?tittel .
FILTER (
regex(str(?ofStatus), "publisert", "i")
&& regex(str(?fagtype), "program", "i")
&& regex(str(?uptype), "yrke", "i")
&& regex(str(?status), "publisert", "i")
&& (lang(?tittel) = "default")
)
} ORDER BY ?up ?po ?lpKode ?lpTittel
[åpne/lukke]
Ref.: xb11g01v
PREFIX d: <http://psi.udir.no/kl06/>
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT DISTINCT ?fagkodetittel ?lp ?lptittel WHERE {
d:NOR0214 u:opplaeringsfag/u:laereplan-referanse ?lp ;
u:tittel ?fagkodetittel .
?lp u:tittel ?lptittel ;
u:status ?lpStatus .
FILTER (regex(str(?lpStatus), "publisert")
&&(lang(?lptittel) = "default")
&& (lang(?fagkodetittel) = "default"))
} ORDER BY ?lp
Ref.: xb11g01F
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?opplaeringsfag ?kmstittel ?ksett ?opplaeringsfagtittel ?trinn WHERE {
d:NOR1Z37 u:tittel ?opplaeringsfagtittel ;
u:kode ?opplaeringsfag ;
u:tilhoerende-kompetansemaalsett ?ksett .
?ksett u:etter-aarstrinn ?trinn ;
u:tittel ?kmstittel .
FILTER (
(lang(?opplaeringsfagtittel) = 'default')
&& (lang(?kmstittel) = 'default')
)
}
Ref.: xb11g01G
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?trinn WHERE {
d:NOR1Z37 u:tilhoerende-kompetansemaalsett/u:etter-aarstrinn ?trinn .
}
Ref.: xb11g02n
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX kode: <http://psi.udir.no/kl06/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?trinn ?kms ?km ?kmtittel WHERE {
?km u:tilhoerer-laereplan d:NOR01-06 ;
u:tittel ?kmtittel ;
u:rekkefoelge ?kmOrder ; # denne linjen fjernes hvis LK06-plan
u:tilhoerer-kompetansemaalsett ?kms .
?kms u:etter-aarstrinn ?trinn .
?trinn u:rekkefoelge ?trinnOrder .
FILTER (lang(?kmtittel) = "default")
} ORDER BY ?trinnOrder ?kms ?kmOrder # ?kmOrder byttes til ?km hvis LK06-plan
[åpne/lukke]
Ref.: xb11g02I
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
SELECT ?kode ?psi ?tittel ?type WHERE {
?psi u:id "uuid:01b784dd-aebc-46ec-9dfd-a0ad38fe8225" ;
u:tittel ?tittel ;
u:url-data ?kode ;
a ?type .
FILTER (lang(?tittel) = "default")
}
[åpne/lukke]
Ref.: xb11g03h
PREFIX u:<http://psi.udir.no/ontologi/kl06/>
PREFIX d:<http://psi.udir.no/kl06/>
SELECT ?po ?poStatus ?poTittel WHERE {
d:AMB2002 u:opplaeringsfag/u:programomraader-referanse ?po .
?po u:tittel ?poTittel ;
u:status ?st ;
u:kode ?kode ;
u:url-data ?url_data .
BIND(STRAFTER(str(?st), "/status/status_") as ?poStatus)
FILTER (lang(?poTittel) = "default")
} ORDER BY ?poStatus ?po
Ref.: xb11g03r
PREFIX u:<http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT ?opplaeringsfagTittel ?programomraader ?programomraadeTittel WHERE {
d:AMB2Z02 u:tittel ?opplaeringsfagTittel ;
u:programomraader-referanse ?programomraader .
?programomraader u:tittel ?programomraadeTittel .
FILTER (
(lang(?opplaeringsfagTittel) = "default")
&& (lang(?programomraadeTittel) = "default")
)
}
Ref.: xb11g03C
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT ?laereplan ?lpTittel WHERE {
?laereplan a u:laereplan ;
u:tittel ?lpTittel ;
u:kompetansemaalsett/u:etter-fag/u:programomraader-referanse ?programomraade .
?programomraade u:uri d:DHTRB3---- .
FILTER (lang(?lpTittel) = "default")
} ORDER BY ?laereplan
Ref.: xb11g03P
PREFIX u:<http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?of ?ofTittel ?fagtypeTittel WHERE {
?of a u:opplaeringsfag ;
u:programomraader-referanse d:DHTRB3---- ;
u:tittel ?ofTittel ;
u:fagtype ?fagtype .
?fagtype u:tittel ?fagtypeTittel .
FILTER (
(lang(?ofTittel) = "default")
&& REGEX(str(?fagtype), "felles_programfag")
&& (lang(?fagtypeTittel) = "default")
)
}
Ref.: xb11g20g
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?opplaeringsfag ?tittel WHERE {
?fagkode u:uri d:AMB2002 ;
u:opplaeringsfag ?opplaeringsfag ;
u:fagtype ?fagtype .
?opplaeringsfag u:tittel ?tittel .
FILTER (
regex(str(?fagtype), "fagtype_felles_programfag")
&& (lang(?tittel) = "default")
)
}
Ref.: xb11g04g
PREFIX u: <http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?fagkode ?tittel WHERE {
?fagkode a u:fagkode ;
u:tittel ?tittel ;
u:fagtype d:fagtype_fellesfag ;
u:opplaeringsfag/u:programomraader-referanse d:BABAT1---- .
FILTER (lang(?tittel) = "default")
}
ORDER BY ?fagkode
Ref.: xb11g04u
prefix u: <http://psi.udir.no/ontologi/kl06/>
prefix d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?lptittel ?lpA ?lpB ?kode ?kmtekst ?kompetansemaalsett WHERE {
{
?kompetansemaal a u:kompetansemaal ;
u:tittel ?kmtekst ;
u:kode ?kode ;
u:url-data ?data ;
u:grep-type ?type ;
u:tilhoerer-laereplan ?lpA ;
u:tilhoerer-kompetansemaalsett ?kms .
?kms u:tittel ?kompetansemaalsett .
?lpA u:uri d:NOR1-04 ;
u:tittel ?lptittel .
FILTER (
(lang(?kompetansemaalsett) = "default")
&& (lang(?lptittel) = "default")
&& (lang(?kmtekst) = "default")
)
}
UNION
{
?kompetansemaal a u:kompetansemaal ;
u:tittel ?kmtekst ;
u:kode ?kode ;
u:url-data ?data ;
u:grep-type ?type ;
u:tilhoerer-laereplan ?lpB ;
u:tilhoerer-kompetansemaalsett ?kms .
?kms u:tittel ?kompetansemaalsett ;
u:tilhoerer-laereplan ?lpB .
?lpB u:uri d:NOR1-05 ;
u:tittel ?lptittel .
FILTER (
(lang(?kompetansemaalsett) = "default")
&& (lang(?lptittel) = "default")
&& (lang(?kmtekst) = "default")
)
}
}
ORDER BY ?kmtekst ?kompetansemaalsett ?lpA ?lpB
Ref.: xb11g04K
prefix u: <http://psi.udir.no/ontologi/kl06/>
prefix d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?lptittel ?lpA ?lpB ?kode ?kmtekst ?kompetansemaalsett WHERE {
{
?kompetansemaal rdf:type u:kompetansemaal ;
u:tittel ?kmtekst ;
u:kode ?kode ;
u:url-data ?data ;
u:grep-type ?type ;
u:tilhoerer-laereplan ?lpA ;
u:tilhoerer-kompetansemaalsett ?kms .
?kms u:tittel ?kompetansemaalsett .
?lpA u:uri d:NOR1-05 ;
u:tittel ?lptittel .
FILTER (
(lang(?kompetansemaalsett) = "default")
&& (lang(?lptittel) = "default")
&& (lang(?kmtekst) = "default")
)
}
UNION
{
?kompetansemaal a u:kompetansemaal_lk20 ;
u:tittel ?kmtekst ;
u:kode ?kode ;
u:url-data ?data ;
u:grep-type ?type ;
u:tilhoerer-laereplan ?lpB ;
u:tilhoerer-kompetansemaalsett ?kms .
?kms u:tittel ?kompetansemaalsett .
?lpB u:uri d:NOR01-06 ;
u:tittel ?lptittel .
FILTER (
(lang(?kompetansemaalsett) = "default")
&& (lang(?lptittel) = "default")
&& (lang(?kmtekst) = "default")
)
}
}
ORDER BY ?kmtekst ?kompetansemaalsett ?lpA ?lpB
Ref.: xb11g04Z
PREFIX u:<http://psi.udir.no/ontologi/kl06/>
PREFIX d: <http://psi.udir.no/kl06/>
SELECT DISTINCT ?uri ?kode ?type ?tittel ?sistEndret WHERE {
?uri u:kode ?kode ;
u:tittel ?tittel ;
u:grep-type ?type ;
u:sist-endret ?sistEndret ;
u:url-data ?restUrl .
FILTER (lang(?tittel) = "default")
}
ORDER BY DESC(?sistEndret)
LIMIT 100