GREPF 2196 - Utdanningsdirektoratet/Grep_SPARQL GitHub Wiki

  • Denne siden er en del av videreutvikling
  • OBS: Denne saken har vi valgt å gjengi slik den fremstår internt i Udir

Vår referanse: GREPF-2196, release-dato: 2024.09.12

Feil med blanke noder (bNoder) i koblingen mellom programfag og underliggende-hovedområder

Beskrivelse

Følgende sparql-spørring gir 123 treff med blanke noder for ?o:

PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select * where { 
    ?s a u:programfag ;
       ?p ?o .
   FILTER (regex(str(?p), "gyldighet-underliggende-hovedomraader", "i")) 
} 

og som gir resultat, lignende dette:

?s ?p ?o
1 d:PF255 u:gyldighet-underliggende-hovedomraader-HO1669 _:genid-3a19375db20e44f1ba5bad4082874f24437126-b0
2 d:PF255 u:gyldighet-underliggende-hovedomraader-HO1670 _:genid-3a19375db20e44f1ba5bad4082874f24437126-b1
osv...

Altså vil vi forvente å kunne borre videre under ?o for å finne data fra ?p2 og ?o2 slik:

PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select * where { 
    ?s a u:programfag ;
       ?p ?o .
    FILTER (regex(str(?p), "gyldighet-underliggende-hovedomraader", "i")) 
    ?o ?p2 ?o2
} 

Men denne spørringen gir ingen treff.

Det er fordi jsonld-versjonen av programfag er skrevet slik (for f.eks programfaget PF255):

{
    "gyldighet-underliggende-hovedomraader-HO1669": {
        "gyldig-fra": null,
        "gyldig-til": null
    },
    "gyldighet-underliggende-hovedomraader-HO1671": {
        "gyldig-fra": null,
        "gyldig-til": null
    },
    "gyldighet-underliggende-hovedomraader-HO1670": {
        "gyldig-fra": null,
        "gyldig-til": null
    }
}

og ikke slik:

"gyldighet-underliggende-hovedomraader-HO1669": null,
"gyldighet-underliggende-hovedomraader-HO1671": null,
"gyldighet-underliggende-hovedomraader-HO1670": null 

På mengdelære-vis, kan vi si at vi altså heller ønsker å skrive A=∅ og ikke A={∅,∅}, hvis og bare hvis, begge mengdene i objektet er ∅. Da slipper vi å slå opp den tomme mengden for bare å bekrefte at den er tom, når vi evaluerer.

Når så jsonld-fila eksporteres til SPARQL, vil alt som har verdien null slettes fra grafen. Da vil predikatet (f,eks) 'gyldighet-underliggende-hovedomraader-HO1669' ikke være å finne.

(vi vet fortsatt at programfaget 'PF255' har 'underliggende-hovedomraader' 'HO1669', men vi trenger ikke å eksplisitt skrive at den ikke har gyldighetsdaoer for koblingen)

Akseptansekrav

AK.1 -
Som bruker av GraphDB for det miljøet jeg skal teste
Når jeg kjører følgende spørring:

PREFIX u: <http://psi.udir.no/ontologi/kl06/>
select * where { 
    ?s a u:programfag ;
       ?p ?o .
   FILTER (regex(str(?p), "gyldighet-underliggende-hovedomraader", "i"))

Så skal jeg ikke få treff.

⚠️ **GitHub.com Fallback** ⚠️