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!