Haun valmistelu ja suorittaminen
- 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. - Kopioi hammasrattaan vieressä olevaan kentään seuraava päätepiste (endpoint), http://api.finto.fi/sparql ja klikkaa sen jälkeen enter.
- Kopioi alhaalta sopiva SPARQL-haku hakukenttään.
- 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) }
# 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.
- Mene https://yasgui.triply.cc/-osoitteeseen
- Kirjoita alasvetovalikkoon osoite "http://api.dev.finto.fi/sparql"
- Lisää SPARQL-kyselyyn WHEREn perään rivi GRAPH <http://www.yso.fi/onto/tao/> (tai muu ontologia) (ks kuva)
- 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 )
}