Haun valmistelu ja suorittaminen

  1. Mene osoitteeseen http://yasgui.triply.cc/.
    Sivulle mennessä saattaa tulla tietoturvavaroitus. Sivusto on kuitenkin luotettava. Tästä huolimatta on muistettava, että jokaisessa organisaatiossa on seurattava organisaation omia tietoturvaohjeita. Jos olet epävarma, ota yhteyttä oman organisaatiosi tietoturvavastaavaan.
  2. Kopioi hammasrattaan vieressä olevaan kentään seuraava päätepiste (endpoint), http://api.finto.fi/sparql ja klikkaa sen jälkeen enter.
  3. Kopioi alhaalta sopiva SPARQL-haku hakukenttään.
  4. Klikkaa ikkunassa oikealla olevaa, play-painikkeen näköistä nuolta (Run query), niin saat tulostettua sivun alaosaan hakuvastauksen.

Jos haku ei jostain syystä onnistunut, kannattaa kokeilla hetken päästä kerran tai kaksi uudelleen, mutta jatkuva toimimattoman haun toistaminen ei tuota toivottua tulosta ja rasittaa vain tarpeettomasti palvelinta.

Alla on listattu SPARQL-kyselyitä yleisimpiin hakuihin sekä vinkkejä haun mukauttamiseen.

Haut on tehty esimerkkien avulla. Korvaa esimerkkien merkkijonot omilla merkkijonoillasi.

# YSO-haku Fintosta

SELECT *
WHERE {
SERVICE <http://api.finto.fi/sparql> {
GRAPH <http://www.yso.fi/onto/yso/> { ...

Hakuja käsitteen labeliin

Etukatkaisu prefLabelista

# Haetaan siirto-loppuisia käsitteitä (*siirto)
SELECT *
WHERE {
    ?subject skos:prefLabel ?label .
    FILTER (regex(?label, "siirto$"))
}

Loppukatkaisu mistä tahansa ruotsinkielisestä termistä

# Etsitään katt-alkuisia ruotsinkielisiä termejä
#
SELECT *
WHERE {
    ?s ?p ?o .
    FILTER(lang(?o) = "sv")
    FILTER (regex(?o, "^katt"))
}

Missä tahansa kohdassa prefLabelia

# Haetaan termejä, jotka sisältävät merkkijonon "kirja" missä tahansa kohdassa termiä
#
SELECT *
WHERE {
    ?subject skos:prefLabel ?label .
    FILTER (regex(?label, "kirja"))
}


Missä tahansa kohdassa ruotsinkielisiä labeleita

# Etsitään katt-merkkijonon sisältäviä ruotsinkielisiä termejä
#
SELECT *
WHERE {
    ?s ?p ?o .
    FILTER(lang(?o) = "sv")
    FILTER (regex(?o, "katt"))
}

Hae kaikki suomenkieliset oldLabelit.

SELECT *
WHERE {
    ?subject yso-meta:oldLabel ?label .
   FILTER(LANGMATCHES(LANG(?label), "fi"))
}

Ruotsinkieliset sulkuja sisältävät prefLabelit

# Hakee kaikki prefLabelit, joissa on (-merkki ja ne ovat ruotsiksi
#
SELECT ?conc ?label
WHERE { 
    ?conc skos:prefLabel ?label .
    FILTER (langMatches(lang(?label), "sv")) 
    FILTER (regex(?label, '\\(')) 
}

Käsitteet, joissa suomenkielinen prefLabel on asiasanaketju

# etsitään käsitteitä, joiden labelissa on kaksi tavuviivaa peräkkäin
#SELECT count(?conc)
SELECT str(?conc) ?label
WHERE { 
    ?conc skos:prefLabel ?label .
    FILTER (langMatches(lang(?label), "fi")) 
    FILTER (regex(?label, '--')) 
}

Ei kieltä labelissa

# Hae kaikki oldLabelit, joille ei ole määritelty kieltä
#
SELECT *
WHERE {
    ?subject yso-meta:oldLabel ?label .
   FILTER(LANG(?label) = "")
}

Useampi peräkkäinen välilyönti labelissa

# Listaa labelit, joissa on useampi peräkkäinen välilyönti
#
#SELECT count(?s)
SELECT ?s ?p ?o
WHERE {
    ?s ?p ?o .
#   Poista rivin alun kommenttimerkki, jos haluat vain tietyntyyppisiä käsitteitä
#   ?s a kauno:Concept .
    FILTER( regex(?o, "  "))
}


Käsitteet, jotka alkavat isolla alkukirjaimella

SELECT ?label
WHERE {
    ?conc skos:prefLabel ?label .
     FILTER (langMatches(lang(?label), "fi"))
     FILTER (regex(?label, "^[A-ZÄÖ]"))
}

Kaikki käsitteet tiettyyn aakkosjärjestyksen kohtaan asti

# Hae kaikki käsitteet, joiden suomenkielinen prefLabel aakkosjärjestyksessä edeltää "oppimiskeskukset"-labelia.
#
SELECT *
WHERE {
    ?subject skos:prefLabel ?pref 
    FILTER (?pref < "oppimiskeskukset"@fi)
}

Diakriittisiä merkkejä sisältävät prefLabelit ja altLabelit

# Hae kaikki käsitteet, joiden pref tai altlabelissa on erikoismerkkejä. Poislukien ä, ö ja ruotsalainen å.
#
SELECT ?sub ?obj
WHERE
{
{
   ?sub skos:prefLabel ?obj .
     filter regex(?obj,"[^\\x00-\\x7F]+") .
   filter ( !contains(lcase(?obj), "ä") ) .
   filter ( !contains(lcase(?obj), "ö") ) .
   filter ( !contains(lcase(?obj), "å") )
}

 UNION

 {
   ?sub skos:altLabel ?obj .
    filter regex(?obj,"[^\\x00-\\x7F]+")
   filter ( !contains(lcase(?obj), "ä") ) .
   filter ( !contains(lcase(?obj), "ö") ) .
   filter ( !contains(lcase(?obj), "å") )
}
}

Kahdella käsitteellä sama prefLabel englannissa

# muokattu 2021-06-24 JS, OS
# deprekoidut poistettu ja suomenkieliset labelit näytetään
SELECT ?o ?s1 ?s2 ?s1fi ?s2fi
WHERE {
GRAPH <http://www.yso.fi/onto/yso/> {
?s1 skos:prefLabel ?o .
?s2 skos:prefLabel ?o .
FILTER NOT EXISTS {?s2 a skosext:DeprecatedConcept }
FILTER NOT EXISTS {?s1 a skosext:DeprecatedConcept }
FILTER ( str(?s1) < str(?s2) )
FILTER (lang(?o) = "en")
?s1 skos:prefLabel ?s1fi . FILTER(LANG(?s1fi)='fi')
?s2 skos:prefLabel ?s2fi . FILTER(LANG(?s2fi)='fi')
}
} ORDER BY ?o

Käsitteet, joilla ei ole englanninkielistä termiä

# Etsi käsitteet, joilla ei ole eng-termiä. Toimii erotettujen kielilabelien kanssa
#
#SELECT (count(?concept) as ?count)
SELECT * WHERE {
?concept skos:prefLabel ?plfi .
FILTER(lang(?plfi) = "fi")
MINUS{
?concept skos:prefLabel ?plen . FILTER(lang(?plen) = "en")
}
}

Käsitteet, joilla on idettinen prefLabel suomeksi ja englanniksi

SELECT * WHERE {
?concept skos:prefLabel ?plfi .
FILTER(lang(?plfi) = "fi")
?concept skos:prefLabel ?plen .
FILTER(lang(?plen) = "en")
FILTER ( str(?plfi) = str(?plen) )
}

Muita hakuja

Kommentteihin kohdistuva haku

#Haetaan käsitteitä, joilla on kommentti
SELECT *
WHERE {
    ?subject rdfs:comment ?comment .
}

Pienellä kirjaimella alkavat kommentit

# Haetaan kaikki kommentit, jotka alkavat pienellä kirjaimella

SELECT * WHERE {
  ?sub rdfs:comment ?obj .
  FILTER(REGEX(STR(?obj), "^[a-zäö]"))
}

Comment- tai YsaComment-kentässä "vuodesta" tai "vuoteen"

SELECT *
#SELECT count(?l)
WHERE {
{
    ?s yso-meta:ysaComment ?l .
    FILTER(regex(lcase(?l), "vuodesta|vuoteen"))
}
UNION
{
    ?s rdfs:comment ?l .
    FILTER(regex(lcase(?l), "vuodesta|vuoteen"))
}
}

Haku tietyn URIn perusteella

# Huom! Dollarimerkki ei ole osa URIa, mutta on tärkeä lisätä URIn perään

SELECT *
WHERE {
    ?subject a ysometa:Concept .
FILTER regex(str(?subject), "^http://www.yso.fi/onto/yso/p30149$") .
}

Rajaus URIn / nimiavaruuden perusteella (strstarts)

# Etsi ne YSO-käsitteet, joilla on sulkutarkenne sekä exactmatch-suhde YSAan. Rajaus tehty YSA-nimiavaruudella.

PREFIX yso: <http://www.yso.fi/onto/yso-meta/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ysa: <http://www.yso.fi/onto/ysa/>
SELECT *
WHERE {
SERVICE <http://api.finto.fi/sparql> {
GRAPH <http://www.yso.fi/onto/yso/> {
?ysoconcept skos:prefLabel ?label .
?ysoconcept a yso:Concept .
FILTER (lang(?label) = 'fi')
FILTER (regex(?label, '\\('))
?ysoconcept skos:exactMatch ?ysa .
FILTER (strstarts(str(?ysa), str(ysa:)))
}
}
}

Tee rajaus URIn perusteella: hae käsitteet, joiden URI on kahden arvon välissä

Kysely hakee YSOn yleis- ja yksilökäsitteet, joiden URI on p1000 ja p2000 välissä.

SELECT ?s ?num
WHERE {
?s a ?allowed .
VALUES ?allowed { yso-meta:Concept yso-meta:Individual }
BIND(xsd:integer(REPLACE(STR(?s), "http://www.yso.fi/onto/yso/p", "")) AS ?num)
FILTER (?num > 1000)
FILTER(?num < 2000)
}

Vaihtoehtojen esittäminen kyselyssä: jokin näistä yläkäsitteistä

Hae sellaiset  JUHO-käsitteet, jotka eivät ole ekvivalentteja jonkin YSO-käsitteen kanssa ja joiden yläkäsitteenä on jokin FILTER-lausekkeessa luetelluista YSO-käsitteistä (käsitteet sisältyvät YSOn toiminta-hierarkiaan). Huom! Kysely tehty Yasguissa.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

#SELECT (count(?sub) as ?count)
SELECT ?label
(GROUP_CONCAT(?ylalabel) as ?ylakasitteet)
WHERE {
  GRAPH <http://www.yso.fi/onto/afo/>
  {
    ?sub a <http://www.yso.fi/onto/afo-meta/Concept> .
    ?sub skos:broader ?ylakasite .
    FILTER (
    ?ylakasite = <http://www.yso.fi/onto/yso/p3027> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p14> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p5192> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p5427> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p649> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p6561> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p317> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p15232> ||  
    ?ylakasite = <http://www.yso.fi/onto/yso/p4389> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p464> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p1452> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p2697> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p5637> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p1744> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p193> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p2375> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p976> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p889> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p5440> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p355> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p721> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p42> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p277> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p1945> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p2715> ||
    ?ylakasite = <http://www.yso.fi/onto/yso/p2954>
   )
    FILTER NOT EXISTS {
    ?sub skos:exactMatch ?obj .
    }
    OPTIONAL {
   ?sub skos:prefLabel ?label .
   FILTER(LANGMATCHES(LANG(?label), "fi"))
    }
    OPTIONAL {
      ?ylakasite skos:prefLabel ?ylalabel .
   FILTER(LANGMATCHES(LANG(?ylalabel), "fi"))
  }
  }
  }
GROUP BY ?label ?ylakasitteet



Vaihtoehtojen esittäminen kyselyssä, versio 2: VALUES-toiminto

PTO-ontologiassa on useita käsitetyyppejä. Hae kaikki PTO-käsitteet, jotka kuuluvat toimintahierarkian alle.

PREFIX inspire: <http://paikkatiedot.fi/def/1001000/InspireConcept>
PREFIX paikhak: <http://paikkatiedot.fi/def/1001000/PaikhakConcept>
PREFIX tsk: <http:paikkatiedot.fi/def/1001000/TskConcept>
PREFIX ryhma: <http://paikkatiedot.fi/def/1001000/InspireThematicGroup>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
#SELECT (count(?sub) as ?count) 
SELECT ?label 
(GROUP_CONCAT(?ylalabel) as ?ylakasitteet)
WHERE {
  GRAPH <http://www.yso.fi/onto/pto/> 
  {
   ?sub a ?allowed .
    VALUES ?allowed { inspire: paikhak: tsk: ryhma: }
    ?sub skos:broader+ <http://www.yso.fi/onto/yso/p8090> .
    ?sub skos:broader ?ylakasite . }
   ?sub skos:prefLabel ?label .
   FILTER(LANGMATCHES(LANG(?label), "fi"))
    OPTIONAL { 
        ?sub skos:broader ?ylakasite .
        ?ylakasite skos:prefLabel ?ylalabel .
   FILTER(LANGMATCHES(LANG(?ylalabel), "fi"))
  }
  }
GROUP BY ?label ?ylakasitteet
LIMIT 10000



Eri kieliversioiden esittäminen rinnakkain taulukkona

Tällä haulla saa kätevästi esitettyä samalla rivillä taulukossa YSO:n käsitteitä suomeksi, ruotsiksi ja englanniksi. Hakua on kätevä muokata rivillä 8 olevan säännöllisen lausekkeen avulla. 

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT * WHERE {
  ?concept skos:prefLabel ?plfi .
  FILTER regex(str(?concept), "^http://www.yso.fi/onto/yso/") .
  FILTER(lang(?plfi) = "fi")
  FILTER (regex(?plfi, "^[Aa]"))
  OPTIONAL{
    ?concept skos:prefLabel ?plen . FILTER(lang(?plen) = "en")
  }
  OPTIONAL{
    ?concept skos:prefLabel ?plsv . FILTER(lang(?plsv) = "sv")
  }
}
LIMIT 100






Wikidataan liittyviä hakuja

Hae Wikidatasta YSO-ID propertyllä merkityt käsitteet

#tee tämä haku Wikdatassa: https://query.wikidata.org/

SELECT *
WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
OPTIONAL { ?item wdt:P2347 ?YSO_tunniste. }
?item rdfs:label ?label_se filter (lang(?label_se) = "se").
?item rdfs:label ?label_fi filter (lang(?label_fi) = "fi").
# ?item rdfs:label ?label_sv filter (lang(?label_sv) = "sv").
# ?item rdfs:label ?label_en filter (lang(?label_en) = "en").
}
LIMIT 10

Hae Wikidatasta kaikki käsitteen Q alakäsitteet

# LIST All subclasses of Q as $s 
# https://query.wikidata.org/
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT  ?s ?fi_desc ?sv_desc ?en_desc $sLabel
WHERE {
?s wdt:P279+ wd:Q1318295 .  # vaihda tähän käsite, jonka alakäsitteitä haluat listata
OPTIONAL { 
  { ?s rdfs:label ?en_desc filter (lang(?en_desc) = "en"). }
  { ?s rdfs:label ?fi_desc filter (lang(?fi_desc) = "fi"). }
  { ?s rdfs:label ?sv_desc filter (lang(?sv_desc) = "sv"). }
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en","fi","sv". } # Helps get the label in your language, if not, then en language
}
limit 100

Hae Wikidatasta kaikki MML-paikkatyypit

# Tee tämä haku Wikidatassa: https://w.wiki/6aT4
SELECT  ?paikkatyyppi ?paikkatyyppiLabel ?Paikannimirekisterin_paikkatyyppitunniste   WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  
  ?paikkatyyppi wdt:P31 wd:Q106589826.
  OPTIONAL { ?paikkatyyppi wdt:P9230 ?Paikannimirekisterin_paikkatyyppitunniste. }
}


YKL:ään liittyviä hakuja

Etsi kaikkien YKL-luokkien URI, prefLabel ja skos:scopeNote

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ykl: <http://urn.fi/URN:NBN:fi:au:ykl:>

SELECT (?s AS ?URI) ?label ?note
WHERE {
GRAPH ykl: {
	?s skos:scopeNote ?note .
	?s skos:prefLabel ?label .
	}
}

Suora linkki hakuun: https://api.triplydb.com/s/QwgEchRQu

Etsi kaikkien YKL-luokkeen skos:prefLabel ja skos:altLabel

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
prefix hklj: <http://urn.fi/URN:NBN:fi:au:hklj:> 
prefix skos: <http://www.w3.org/2004/02/skos/core#> 
prefix ykl: <http://urn.fi/URN:NBN:fi:au:ykl:> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix owl: <http://www.w3.org/2002/07/owl#> 
 
#SELECT  (count(?alt) as ?lkm)  WHERE {
SELECT  ?c ?pref  ?alt  WHERE {
  GRAPH <http://urn.fi/URN:NBN:fi:au:ykl:> {
    ?c a skos:Concept .
    ?c skos:prefLabel ?pref .     filter (lang(?pref) = "fi")
    ?c skos:altLabel ?alt .     filter (lang(?alt) = "fi")
  } 
}
# linkki hakuun https://api.triplydb.com/s/lpdA9L2L3


Hae kaikkien skos:scopeNoten sisältämien luokkien lukumäärä

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ykl: <http://urn.fi/URN:NBN:fi:au:ykl:>
  
SELECT (COUNT(distinct ?s) AS ?lkm)
WHERE {
  GRAPH ykl: {
  ?s skos:scopeNote ?note .
  }
}

Suora linkki hakuun: https://api.triplydb.com/s/9nRb_Hywr


YSOon liittyviä hakuja

YSO-käsitteet, jotka löytyvät YSAsta

# Listaa kaikki YSO-käsitteet, jotka perustuvat johonkin YSA-asiasanaan
SELECT *
WHERE {
?subject om:definedConcept ?object .
FILTER regex(str(?object), "^http://www.yso.fi/onto/ysa/") .
}

YSO-käsitteet, jotka eivät löydy YSAsta

# YSO-käsitteet, joille ei ole määritelty vastaavaa asiasanaa YSAsta
SELECT *
WHERE {
    ?subject a  <http://www.yso.fi/onto/yso-meta/2007-03-02/Concept>.
FILTER NOT EXISTS {?subject om:definedConcept ?object
  FILTER regex(str(?object), "^http://www.yso.fi/onto/ysa/").
 }
}

YSO-käsitteet, joilla closeMatch-suhde


# YSO-käsitteet, joilla closeMatch-suhde
SELECT ?s ?map
WHERE {
    ?subject <http://www.yso.fi/onto/yso-peilaus/2007-03-02/closeMatch> ?map .
    ?subject skos:prefLabel ?s
    FILTER(LANG(?s) = "fi")
}


Haku aikaleiman perusteella

Hae kaikki käsitteet, jotka on luotu 1.1.2015 jälkeen.

SELECT *
WHERE {
?subject dcterms:created ?date .
FILTER (?date > "2015-01-01"^^xsd:date)
}

YSO-käsitteet, joilla sulkutarkenne ja myös singularPrefLabel

PREFIX ysometa: <http://www.yso.fi/onto/yso-meta/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?subject 
WHERE {
?subject ysometa:singularPrefLabel ?yksikko .
FILTER(LANGMATCHES(LANG(?yksikko), "fi"))
?subject skos:prefLabel ?pref .
FILTER(LANGMATCHES(LANG(?pref), "fi"))
FILTER (regex(?pref, '\\('))
}

YSO-käsitteet, joissa on sulkutarkenteellinen singularAltLabel

PREFIX ysometa: <http://www.yso.fi/onto/yso-meta/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX yso: <http://www.yso.fi/onto/yso/>
SELECT *
WHERE {
  GRAPH <http://www.yso.fi/onto/yso/> {
?subject skos:prefLabel ?pref .
?subject ysometa:singularPrefLabel ?yksikko .
?subject ysometa:singularAltLabel ?altyksikko .
FILTER(LANGMATCHES(LANG(?pref), "fi"))
FILTER(LANGMATCHES(LANG(?yksikko), "fi"))
FILTER(LANGMATCHES(LANG(?altyksikko), "fi"))
FILTER (regex(?altyksikko, '\\('))
}
}

YSO-käsitteet, joilla sulkutarkenne ja skos:exactMatch YSAan

Vertaillaan labeleita kahdesta eri graafista

PREFIX yso: <http://www.yso.fi/onto/yso-meta/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT *
WHERE {
SERVICE <http://api.finto.fi/sparql> {
GRAPH <http://www.yso.fi/onto/yso/> {
?ysoconcept skos:prefLabel ?label .
?ysoconcept a yso:Concept .
FILTER (lang(?label) = 'fi')
FILTER (regex(?label, '\\('))
?ysoconcept skos:exactMatch ?ysa .
}
}
GRAPH <http://www.yso.fi/onto/ysa/> {
?ysa skos:prefLabel ?ysalabel .
FILTER (lang(?ysalabel) = 'fi')
FILTER NOT EXISTS { FILTER (regex(?ysalabel, '\\(')) }
}
}


YSO-käsitteet, joiden linkin kohteessa on html

Etsi käsitteet, joilla on close/broader/narrower match linkki kohteeseen, jonka tunnisteessa on html. (LCSH-linkit pitäisi tehdä käyttäen käsitteen pysyvää URIa, ei käsitteen html-sivua.)

SELECT ?subject ?object
WHERE {
?subject a ?allowed .
VALUES ?allowed { ysometa:Concept ysometa:Individual }
?subject ?match ?object .
VALUES ?match { skos:closeMatch skos:broadMatch skos:narrowMatch }
FILTER regex(str(?object), "html")
}

Erikoistuneempia

Hae x, mutta älä hae y:tä (ts. hae kaikki tällaiset PAITSI ei tuollaisia)


Hae kaikki preflabelit, joissa on sulkumerkki, mutta ei "kooste"-sanaa)

SELECT ?conc ?label
WHERE {
    ?conc skos:prefLabel ?label .
    FILTER (langMatches(lang(?label), "fi"))
    FILTER (regex(?label, '\\('))
    FILTER NOT EXISTS
  {
    FILTER(regex(?label, 'kooste'))
   }

Ilmoita lukumääriä

Ilmoita erikseen, kuinka monta käsitettä on kunkin YSOn ryhmittelevän käsitteen alaisessa hierarkiassa. Huom! Kysely ei huomioi tapauksia, joissa lukumäärä on nolla.

SELECT ?ryhma (COUNT(?s) as ?lukumaara)
WHERE {
  ?s a ?allowed .
  VALUES ?allowed { yso-meta:Concept yso-meta:Individual }
  ?s rdfs:subClassOf+ ?ryhma .
  ?ryhma a yso-meta:GroupConcept .
  }
GROUP BY ?ryhma

Hae alakäsitteet ja alakäsitteiden alakäsitteet

Hae kaikki muuttaminen-käsitteen alakäsitteet ja niiden alakäsitteet ja niiden alakäsitteet ja niiden alakäsitteet ad infinitum. Huom! Plusmerkki on tärkeä! Ja ilmoita kunkin käsitteen YSA-ryhmä jos sellainen on.

SELECT *
WHERE {
    ?subject rdfs:subClassOf+ <http://www.yso.fi/onto/yso/p19378> .
    OPTIONAL{?subject yso-meta:hasThematicGroup ?g .}
} 

Ei samaa käsitettä tuplana kyselytuloksiin

SPARQL-kyselyillä saattaa tulla sama käsite useaan kertaan tuloslistaukseen, mikäli käsitteellä on useita arvoja jossakin kentässä. Nämä saa niputettua yhteen ja kyselytuloksen helpommin luettavaksi GROUP_CONCAT-toiminnolla. Esimerkissä on haettu käsitteitä, joiden oldlabelissa esiintyy "matka". Ilman GROUP_CONCAT-toimintoa tuloksiin olisi tullut tuplia, sillä joillakin käsitteillä on useampi kuin yksi oldlabel, jossa esiintyy "matka".

SELECT ?subject

(GROUP_CONCAT(?old) as ?oldlabelit)

WHERE {

    ?subject ysometa:oldLabel ?old .

   FILTER (langMatches(lang(?old), "fi"))

   FILTER (regex(?old, 'matka'))

}

GROUP BY ?subject ?oldlabelit

Etsi kaikki YSO, YSA ja ALLÄRS käsitteiden labelit

Oheinen listaus tuottaa hieman yli sata tuhatta riviä (100.000)  ja listaa prefLabel, altLabel ja hiddenLabel arvot kolmena sarakkeena.

# dc:creator  "Osma Suominen"
# dc:date "2022-02-02"
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT
    (?uri AS ?_id)
    ('finto' as ?type)
    (GROUP_CONCAT(DISTINCT ?prefLabel; separator='|') AS ?prefLabels)
    (GROUP_CONCAT(DISTINCT ?altLabel; separator='|') AS ?altLabels)
    (GROUP_CONCAT(DISTINCT ?hiddenLabel; separator='|') AS ?hiddenLabels)
WHERE {
  VALUES ?graph {
    <http://www.yso.fi/onto/yso/>
    <http://www.yso.fi/onto/ysa/>
    <http://www.yso.fi/onto/allars/>
  }
  GRAPH ?graph {
    ?uri a skos:Concept .
    FILTER NOT EXISTS { ?uri owl:deprecated true }
    ?uri skos:prefLabel ?prefLabel .
    OPTIONAL {
      ?uri skos:altLabel ?altLabel
    }
    OPTIONAL {
      ?uri skos:hiddenLabel ?hiddenLabel
    }
  }
}
GROUP BY ?uri

Erikoisontologiat

SPARQL-kyselyjen tekeminen Yasguissa

Ontologian ekvivalentit käsitteet

Ontologiaeditorin lisäksi SPARQL-kyselyjä voi tehdä myös verkossa yasgui.org-osoitteessa.

  1. Mene https://yasgui.triply.cc/-osoitteeseen
  2. Kirjoita alasvetovalikkoon osoite "http://api.dev.finto.fi/sparql"
  3. Lisää SPARQL-kyselyyn WHEREn perään rivi  GRAPH <http://www.yso.fi/onto/tao/> (tai muu ontologia) (ks kuva)
  4. Tee haluamasi kysely

Tässä esimerkkikysely (hakee kaikki tao-ontologian käsitteet, joilla on exachmatch-suhde):

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
#SELECT (count(?sub) as ?count)
SELECT ?sub
WHERE {
  GRAPH <http://www.yso.fi/onto/tao/> {
    ?sub skos:exactMatch ?obj .
    ?sub  a <http://www.yso.fi/onto/tao-meta/Concept> .
    
  }
}
LIMIT 10000

Ekvivalenssi, mutta ei samoja labeleita

JUPO-käsitteet, joilla on ekvivalenssi YSO-käsitteeseen, mutta joiden prefLabelit eivät ole samat

PREFIX jupometa: <http://www.yso.fi/onto/jupo-meta/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT *
#SELECT  str(?jupoconcept) ?jupolabel str(?ysoconcept) ?ysolabel
WHERE {
    # käväistään Finton SPARQL endpointin puolella...
    SERVICE <http://api.finto.fi/sparql> {
        # JUPOsta ekvivalenssiyhteys ja prefLabel
        GRAPH <http://www.yso.fi/onto/jupo/> {
            ?jupoconcept skos:prefLabel ?jupolabel .
            ?jupoconcept a jupometa:Concept .
             FILTER (lang(?jupolabel) = 'fi')
            ?jupoconcept skos:exactMatch ?ysoconcept .
        }

        # haetaan YSOsta käsitteen tuorein prefLabel
        GRAPH <http://www.yso.fi/onto/yso/> {
            ?ysoconcept skos:prefLabel ?ysolabel .
            FILTER (lang(?ysolabel) = 'fi')
        }
    }
    FILTER(?jupolabel != ?ysolabel)
}

Sama label, mutta ei ekvivalenssiyhteyttä

JUPOn ja YSOn käsitteillä on sama prefLabel, mutta näiden käsitteiden välillä ei ole ekvivalenssiyhteyttä

PREFIX jupometa: <http://www.yso.fi/onto/jupo-meta/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT *
#SELECT str(?jupoconcept) str(?ysoconcept) ?label
WHERE {
    # käväistään Finton SPARQL endpointin puolella...
    SERVICE <http://api.finto.fi/sparql> {
        # JUPOsta prefLabel
        GRAPH <http://www.yso.fi/onto/jupo/> {
            ?jupoconcept skos:prefLabel ?label .
            ?jupoconcept a jupometa:Concept .
             FILTER (lang(?label) = 'fi')
            # Ei ekvivalenssiyhteyttä YSOn ja JUPOn käsitteen välillä
           NOT EXISTS{ ?jupoconcept skos:exactMatch ?ysoconcept .}
        }

        # haetaan YSOsta samalabelinen käsite
        GRAPH <http://www.yso.fi/onto/yso/> {
            ?ysoconcept skos:prefLabel ?label .
        }
    }
}

Erikoisontologian altlabel sama kuin YSOn preflabel

Etsi PUHOsta käsitteet, joiden altlabel on sama kuin jonkin YSO-käsitteen preflabel ilman, että näillä on ekvivalenssisuhdetta.


PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?puhopref ?puhoalt ?ysok
WHERE {
GRAPH <http://www.yso.fi/onto/puho/> {
  ?sub a <http://www.yso.fi/onto/puho-meta/Concept> .
  ?sub skos:prefLabel ?puhopref .
  ?sub skos:altLabel ?puhoalt .
  FILTER(lang(?puhoalt) = "fi")
  ?ysok skos:prefLabel ?puhoalt .
    FILTER NOT EXISTS { ?sub skos:exactMatch ?ysok }
}
}


Toimintoja

Haun lisäksi SPARQL-kielellä voi myös suorittaa erilaisia muokkaustoimenpiteitä käsitteille.

Siirrä kaikki tietyn tyyppiset käsitteet yhden käsitteen alle

Siirtää kaikki kauno-käsitteet ylimääräisen käsitteen alle

INSERT{
    ?s rdfs:subClassOf kauno:kauno-kasitteet .
}
#SELECT *
WHERE {
    ?s a kauno:Concept .
}

Käsitteiden poistaminen tietyn yläkäsitteen alta

Poistaa ongelmat-käsitteen alta kaikki siellä olevat käsitteet. Huom! SPARQL ei poista itse käsitteitä vaan vain niiden yläkäsitesuhteen.

DELETE{
    ?s rdfs:subClassOf ongelmat  .
}
WHERE {
   ?s rdfs:subClassOf ongelmat .
}

Kopioi kaikki sisältö yhdestä ominaisuuskentästä toiseen

Kopioidaan JUHO-ontologian juho-meta:ysoSvAlt-kentästä kaikki sisältö skos:altlabel-kenttään.

INSERT {
    ?subject skos:altLabel ?oo }
WHERE {
    ?subject a juho-meta:Concept.
    ?subject juho-meta:ysoSvAlt ?oo .
}

Kielikoodin lisääminen kommentille

Lisää kaikille niille kommenteille, joista puuttuu kielikoodi, kieleksi suomi.

 INSERT {
?s rdfs:comment ?oo }
WHERE {
?s yso-meta:ysaComment ?o
BIND( strlang(?o, "fi")  AS ?oo)
}

Uuden YSO-käsitteen luonti TBC:ssä

Luo uuden yleikäsitteen YSOon, jonka suomenkielinen preflabel on "UUSI KÄSITE". Mikäli luodaan yksilökäsite, hierarkisoiva käsite tai ryhmittelevä käsite, käsitetyyppi pitää vaihtaa tämän SPARQL:n jälkeen.

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX yso: <http://www.yso.fi/onto/yso/>
PREFIX yso-update: <http://www.yso.fi/onto/yso-update/>
PREFIX yso-meta: <http://www.yso.fi/onto/yso-meta/>

INSERT {
?uusi rdf:type skos:Concept, owl:Class, yso-meta:Concept;
skos:prefLabel 'UUSI KÄSITE'@fi ;
dct:created ?now ;
rdfs:subClassOf yso-update:uudet, yso-update:uudetSv, yso-update:uudetEn .

} WHERE {
BIND( IRI(CONCAT(str(yso:),struuid())) as ?uusi )
BIND( xsd:date(SUBSTR( xsd:string(now()), 0, 11)) as ?now )
}


  • No labels