Web-teknologiat XML-datan kysely Topi Sarkkinen Sisältö ● ● ● ● XML (lyhyesti) XPath XQuery XSLT XML ● Extensible Markup Language ● Ihmisten ja koneiden luettava metakieli, jolla voidaan määritellä muitakin kieliä ● Dokumentit, tiedon esittäminen, tiedon välitys ● Koostuu tekstipohjaisista elementeistä ○ <esim>Tämä on XML-elementti</esim> XML - Esimerkki <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <tietojenkäsittelytiede> <kurssit> <kurssi id="123">Ohjelmoinnin perusteet</kurssi> <kurssi id="432">Ohjelmoinnin jatkokurssi</kurssi> <kurssi id="876">Tietokantojen perusteet</kurssi> <kurssi id="967">Rinnakkaisohjelmointi</kurssi> </kurssit> <henkilöstö> <henkilö tyyppi="opettaja">Olli Opettaja</henkilö> <henkilö tyyppi="hallinto">Ella Esimies</henkilö> <henkilö tyyppi="hallinto">Jorma Johtaja</henkilö> </henkilöstö> </tietojenkäsittelytiede> XPath ● XML Path Language ● W3C Recommendation 1999 ● XML-dokumentin osien valitsemisen perusta ○ Melko yksinkertainen ○ Useat muut teknologiat pohjautuvat XPathiin ■ XQuery, XSLT... XPath - Elementtien valinta ● Perustuu XML-dokumentin puumaiseen rakenteeseen, jota pitkin liikutaan ● XPath-lauseke koostuu peräkkäisistä askeleista, joilla päästään haluttuihin elementteihin ● Lauseke koostuu kolmesta osasta ○ Akselimäärittely, solmutesti, ehtolause XPath - Akselimäärittely ● Liikkumissuunta XML-dokumentissa ○ Lapset (/), jälkeläiset (//), attribuutit (@) ym. ● Elementtien A lapset B: A/B ● Elementtien A jälkeläiset B: A//B ● Määritellään joka askeleen välissä XPath - Solmutesti ● Mitä kyseisellä askeleella valitaan ● Yleensä vain solmun nimi ● Esim. A/B: A ja B ovat solmutestit XPath - Ehtolause ● Ei pakollinen, mutta voidaan myös määrittää jokaiselle askeleelle useitakin ● Ehtoja löytyneiden elementtien valitsemiseen ● Askeleen lopussa hakasulkujen sisällä ● A/B[@nimi = ‘Topi’] ○ A:n lapset B, joilla attribuutti nimi arvolla ‘Topi’ XPath - Funktiot ja operaattorit ● XPath-haun tuloksia voi myös käsitellä erilaisilla funktioilla ja operaattoreilla ● Merkkijonofunktiot ○ concat, substring, contains... ● Aritmeettiset operaatiot ○ +, -, sum... XPath - Esimerkki /tietojenkäsittelytiede <tietojenkäsittelytiede> <kurssit> <kurssi id="123">Ohjelmoinnin perusteet</kurssi> <kurssi id="432">Ohjelmoinnin jatkokurssi</kurssi> <kurssi id="876">Tietokantojen perusteet</kurssi> <kurssi id="967">Rinnakkaisohjelmointi</kurssi> </kurssit> <henkilöstö> <henkilö tyyppi="opettaja">Olli Opettaja</henkilö> <henkilö tyyppi="hallinto">Ella Esimies</henkilö> <henkilö tyyppi="hallinto">Jorma Johtaja</henkilö> </henkilöstö> </tietojenkäsittelytiede> XPath - Esimerkki /tietojenkäsittelytiede/henkilöstö/ <tietojenkäsittelytiede> <kurssit> <kurssi id="123">Ohjelmoinnin perusteet</kurssi> <kurssi id="432">Ohjelmoinnin jatkokurssi</kurssi> <kurssi id="876">Tietokantojen perusteet</kurssi> <kurssi id="967">Rinnakkaisohjelmointi</kurssi> </kurssit> <henkilöstö> <henkilö tyyppi="opettaja">Olli Opettaja</henkilö> <henkilö tyyppi="hallinto">Ella Esimies</henkilö> <henkilö tyyppi="hallinto">Jorma Johtaja</henkilö> </henkilöstö> </tietojenkäsittelytiede> XPath - Esimerkki /tietojenkäsittelytiede/henkilöstö/henkilö <tietojenkäsittelytiede> <kurssit> <kurssi id="123">Ohjelmoinnin perusteet</kurssi> <kurssi id="432">Ohjelmoinnin jatkokurssi</kurssi> <kurssi id="876">Tietokantojen perusteet</kurssi> <kurssi id="967">Rinnakkaisohjelmointi</kurssi> </kurssit> <henkilöstö> <henkilö tyyppi="opettaja">Olli Opettaja</henkilö> <henkilö tyyppi="hallinto">Ella Esimies</henkilö> <henkilö tyyppi="hallinto">Jorma Johtaja</henkilö> </henkilöstö> </tietojenkäsittelytiede> XPath - Esimerkki /tietojenkäsittelytiede/henkilöstö/henkilö[@tyyppi="hallinto"] <tietojenkäsittelytiede> <kurssit> <kurssi id="123">Ohjelmoinnin perusteet</kurssi> <kurssi id="432">Ohjelmoinnin jatkokurssi</kurssi> <kurssi id="876">Tietokantojen perusteet</kurssi> <kurssi id="967">Rinnakkaisohjelmointi</kurssi> </kurssit> <henkilöstö> <henkilö tyyppi="opettaja">Olli Opettaja</henkilö> <henkilö tyyppi="hallinto">Ella Esimies</henkilö> <henkilö tyyppi="hallinto">Jorma Johtaja</henkilö> </henkilöstö> </tietojenkäsittelytiede> XPath - Esimerkki /tietojenkäsittelytiede/henkilöstö/henkilö[@tyyppi="hallinto"][1] <tietojenkäsittelytiede> <kurssit> <kurssi id="123">Ohjelmoinnin perusteet</kurssi> <kurssi id="432">Ohjelmoinnin jatkokurssi</kurssi> <kurssi id="876">Tietokantojen perusteet</kurssi> <kurssi id="967">Rinnakkaisohjelmointi</kurssi> </kurssit> <henkilöstö> <henkilö tyyppi="opettaja">Olli Opettaja</henkilö> <henkilö tyyppi="hallinto">Ella Esimies</henkilö> <henkilö tyyppi="hallinto">Jorma Johtaja</henkilö> </henkilöstö> </tietojenkäsittelytiede> XQuery ● ● ● ● ● XML Query W3C Recommendation 2002 Kysely- ja ohjelmointikieli Datan kyselyyn ja muuntamiseen Voi käyttää myös esim. HTML-dokumenttien kanssa XQuery ● Rakennettu XPathin pohjalta ○ Voi käyttää suoraan XPath-lausekkeita ● Mutta myös: “XQuery on XML-dokumenteille kuten SQL on tietokannoille” ○ Etsitään XML-dokumenteista tietoa ○ SQL-tyylinen syntaksi ■ Where, order by, join… XQuery - FLWOR ● For, Let, Where, Order by, Return ○ SQL-tyylinen syntaksi XQuery - FLWOR - FOR ● Mihin dokumenttiin tai kokoelmaan kysely tehdään ● Määritellään XPath-lausekkeella ● Asettaa löydetyt elementit määriteltyyn muuttujaan ja aloittaa niiden iteroinnin for $x in doc("tktl.xml")/tietojenkäsittelytiede/kurssit/kurssi XQuery - FLWOR - FOR ● Mihin dokumenttiin tai kokoelmaan kysely tehdään ● Määritellään XPath-lausekkeella ● Asettaa löydetyt elementit määriteltyyn muuttujaan ja aloittaa niiden iteroinnin for $x in doc("tktl.xml")/tietojenkäsittelytiede/kurssit/kurssi XQuery - FLWOR - LET ● Mahdollista määritellä muuttujia let $viisi := 5 XQuery - FLWOR - WHERE ● Haulle SQL-tyylisiä ehtoja ○ Suodatetaan siis mukaan vain tietyt ehdot täyttävät ● Ehdot voivat kohdistua: ○ Elementtiin itseensä ○ Elementin jälkeläiseen ○ Kumman tahansa attribuuttiin where $x/nimi = 'Tietokantojen perusteet' XQuery - FLWOR - ORDER BY ● Palautettavien tietojen järjestys order by $x/id XQuery - FLWOR - RETURN ● Mitä palautetaan ● Voidaan koko elementin sijaan palauttaa esim. tietty osa, lapsi tai attribuutti return $x/nimi XQuery - Ehtolauseet ● If - Then - Else ● Voidaan käyttää hyödyksi esim. tiedon muuntamisessa return if ($x/@tyyppi=”opettaja”) then <professori>{data($x)}</professori> else <hallinto>{data($x)}</hallinto> XQuery - Funktiot ● Käytössä yhteinen funktiokirjasto XPathin kanssa ● Merkkijonojen käsittely ● Matemaattiset funktiot ● Ym... XQuery - Funktiot ● Voi kuitenkin myös määritellä omia funktioita ● Alkaa declare function -käskyllä ○ Määritellään parametrit ja palautettavan datan tyyppi declare function local:alennettuHinta($hinta as xs:decimal, $alennusProsentti as xs:decimal) as xs:decimal { let $alennus := ($hinta * $alennusProsentti) div 100 return $hinta - $alennus } XSLT ● Extensible Stylesheet Language Transformations ● W3C Recommendation 1999 ● XML-dokumenttien muuntaminen toisiksi dokumenteiksi ● Elementtien valinta perustuu taas XPathiin XSLT ● CSS & HTML = XSLT & XML? ● XSLT-prosessorille annetaan lähdedokumentti ja XSL-tyylitiedosto ○ Tekee uuden dokumentin tyylitiedoston määrityksien mukaisesti XSLT - Syntaksi ● <xsl-template match=”/”> ○ Pohjia muunnoksille ○ Matchiin XPathilla alkuperäisen dokumentin osa, jota käytetään ● <xsl:value-of select=””> ○ Valitaan alkuperäisestä dokumentista elementtejä/attribuutteja XPathilla ● <xsl:for-each select=""> ○ Iteroidaan kokoelmia XSLT - Esimerkki <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>Laitoksen kurssit</h2> <ul> <xsl:for-each select="tietojenkäsittelytiede/kurssit/kurssi"> <li><xsl:value-of select="kurssi"/></li> </xsl:for-each> </ul> </body> </html> </xsl:template> </xsl:stylesheet> Yhteenveto ● XML ○ Haastajia kuten JSON, mutta vielä hyvin suosittu ● XPath ○ Yksinkertainen, mutta luo pohjan XML-kyselyille ● XQuery ○ Voimakkaampi, SQL-tyylinen ● XSLT ○ Dokumenttien muunto Kiitos!
© Copyright 2024