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

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

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älviä 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

#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 ?s ?p ?o
#SELECT count(?s)
WHERE {
    ?s ?p ?o .
    # Jätä kommentoimatta, 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

Haetaan 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

Haetaan 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

#SELECT count(*)
SELECT *
WHERE {
    ?s1 skos:prefLabel ?o .
    ?s2 skos:prefLabel ?o.
FILTER ( str(?s1) <  str(?s2) )
FILTER (lang(?o) = "en")
}

Käsitteet, joilla ei ole englanninkielistä 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")
}
}

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:)))
}
}
}

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

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

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, 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, '\\(')) }
}
}

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'))
   }

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

 

Erikoisontologiat

SPARQL-kyselyjen tekeminen Yasguissa

Ontologian ekvivalentit käsitteet

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

  1. Mene yasgui.org-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)
}
  • No labels