xml-datan kysely · 2015-03-15 · xml extensible markup language ihmisten ja koneiden luettava...
TRANSCRIPT
Web-teknologiatXML-datan kyselyTopi 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 100return $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!