XPath. namespace nodes, processing instruction nodes, comment nodes. a root node, element nodes, text nodes, attribute nodes,

Samankaltaiset tiedostot
XPath. namespace nodes, processing instruction nodes, comment nodes. a root node, element nodes, text nodes, attribute nodes,

Helsingin yliopisto/tktl XML-metakieli XPath

Luento 4: XPath ja XLink

Hohde Consulting 2004

Capacity Utilization

C++11 seminaari, kevät Johannes Koskinen

XQuery tietokannan kyselykielenä

Returns to Scale II. S ysteemianalyysin. Laboratorio. Esitelmä 8 Timo Salminen. Teknillinen korkeakoulu

XSL-muunnokset. 9 XSL-muunnokset

Web-teknologiat. XML-datan kysely Topi Sarkkinen

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

The CCR Model and Production Correspondence

Hohde Consulting 2004

Alternative DEA Models

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

Apuja ohjelmointiin» Yleisiä virheitä

ELEC-C1220 Automaatio 2 - XML

Ohjelmointi 1 C#, kevät 2013, 2. tentti

XML-datan kysely. Topi Sarkkinen. Seminaarityö. Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Extensible Stylesheet Language (XSL)

Bootstrap / HTDP2 / Realm of Racket. Vertailu

Ohjelmointi 1 C#, kevät 2013,

Ohjelmoinnin peruskurssien laaja oppimäärä

812336A C++ -kielen perusteet,

8 XSLT-muunnoskieli XSLT-muunnoskieli

TIEKE Verkottaja Service Tools for electronic data interchange utilizers. Heikki Laaksamo

Salasanan vaihto uuteen / How to change password

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

You can check above like this: Start->Control Panel->Programs->find if Microsoft Lync or Microsoft Lync Attendeed is listed

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Other approaches to restrict multipliers

RINNAKKAINEN OHJELMOINTI A,

SIMULINK S-funktiot. SIMULINK S-funktiot

kieltenoppimiskertomukseni My Language Biography

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Bounds on non-surjective cellular automata

Valuation of Asian Quanto- Basket Options

Choose Finland-Helsinki Valitse Finland-Helsinki

Ensimmäiset XPath-lausekkeet

Luento 7: XML-ohjelmointirajapinnat

5 XML Query Language. Skeemojen opiskelun myötä olemme polulla joka luontevasti johtaa ajatukseen XMLdokumenteista

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Digitaalisen median tekniikat xhtml - jatkuu

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus

16. Allocation Models

Paikkatiedot ja Web-standardit

XML-evoluutio ja kestävä kehitys

W3C, Web-teknologiat ja XML

CSE-A1200 Tietokannat

BDD (behavior-driven development) suunnittelumenetelmän käyttö open source projektissa, case: SpecFlow/.NET.

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

Infrastruktuurin asemoituminen kansalliseen ja kansainväliseen kenttään Outi Ala-Honkola Tiedeasiantuntija

Luento 3: Tietorakenteiden esittäminen

PIC-koodin luominen URF-tietokantaan Participant Portal

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

LANSEERAUS LÄHESTYY AIKATAULU OMINAISUUDET. Sähköinen jäsenkortti. Yksinkertainen tapa lähettää viestejä jäsenille

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Osoittimet ja taulukot

Telecommunication Software

A TIETORAKENTEET JA ALGORITMIT

Travel Getting Around

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

XML rakenteen suunnittelu. Jaana Holvikivi

Tutkija Mikko Salmenperä. huone: sd109. TTY / Systeemitekniikan laitos. puh: mikko.salmenpera@tut.fi

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

Use of spatial data in the new production environment and in a data warehouse

MUSEOT KULTTUURIPALVELUINA

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat. JSP ja XML

Julkishallinnon XML-skeemat v0.5 JHS-suositus

W3C-teknologiat ja yhteensopivuus

Network to Get Work. Tehtäviä opiskelijoille Assignments for students.

Digitaalilaitteen signaalit

Ohjelmoinnin perusteet Y Python

Lähetysnumero Sändningsnummer. Muut lavat Övriga lastpallar. Rullakot Postbehållare. Postipussit Postsäckar. Lava Pall

Ohjelmoinnin peruskurssien laaja oppimäärä

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

Capacity utilization

Basic Flute Technique

Hankintailmoitus: Pohjois-Savon sairaanhoitopiirin kuntayhtymä/kiinteistöyksikkö : Puijon sairaalan Pääaula-alueen uudistus, Sähköurakka

Digitaalisen median tekniikat xhtml - jatkuu

Results on the new polydrug use questions in the Finnish TDI data

XSL-muunnokset. 9 XSL-muunnokset

Muutokset suoran sanoma-asioinnin webservicepalvelun

Tietorakenteet ja algoritmit

Attribuuttipohjainen käyttövaltuuksien hallinta Case Dreamspark Premium

Ohjelmoinnin peruskurssien laaja oppimäärä

SÄHKE-hanke. Tekninen mallintaminen SÄHKE-metatietojen XML Schema

Business Opening. Arvoisa Herra Presidentti Very formal, recipient has a special title that must be used in place of their name

SELECT-lauseen perusmuoto

Olet vastuussa osaamisestasi

18. Abstraktit tietotyypit 18.1

Metsälamminkankaan tuulivoimapuiston osayleiskaava

Etsintä verkosta (Searching from the Web) T Datasta tietoon Heikki Mannila, Jouni Seppänen

Transkriptio:

XPath 73

XPath Syntax for defining parts in an XML document (or rather in an XML tree) Supported by all XML and XSLT processors in practise A W3C recommendation and used by other languages Defines a library of standard functions Main concepts: location paths and expressions locations paths express how to find data from an XML document expression is the primary syntactic construct in XPath location path is one kind of an expression XPath assumes that the XML document is modeled as a tree The tree can include the following types of nodes: a root node, element nodes, text nodes, attribute nodes, namespace nodes, processing instruction nodes, comment nodes 74 Tällä kurssilla tutustutaan XPath kieleen ja sen käyttöön pääpiirteittäin. Monista muista XMLdokumenttien prosessointia tukevista teknologioista poiketen XPath ei ole XML-pohjainen kieli. XPath-kieltä käytetään osoittamaan XML-dokumentin eri osiin. XPath-kieltä hyödynnetäänkin monissa muissa kielissä (esim. XSLT, XPointer ja XQuery) ja on myös siksi hyödyllistä tuntea. XPath käsittelee XML-dokumenttia loogisena puuna (kuten DOM) ja sen fyysisestä esitysmuodosta riippumattomasti. Käytännössä kaikki XML- ja XSLT-prosessorit tukevat XPath-kieltä. XPath on ollut W3C-suositus vuodesta 1999 lähtien. XPath-kielen pääkäsitteet ovat sijaintipolut (location paths) ja lausekkeet (expressions). Sijaintipolkujen avulla löydetään XML-dokumentista haluttu osa tai halutut osat. Sijaintipolku on esimerkki lausekkeesta. Lausekkeet ovatkin XPath-kielen peruskäsitteitä syntaktisessa mielessä. Lausekkeita voidaan yhdistää erilaisien operaattoreiden avulla ja ne voivat hyödyntää XPath-kieleen kuuluvia funktioita. Lisäinformaatiota XPath-kielestä löytyy W3C:n sivuilta. Lisäksi hyvä opas löytyy osoitteesta http://www.w3schools.com/xpath/. XPath-osuus tässä materiaalissa perustuu näihin lähteisiin. Muita tutustumisen arvoisia XML-pohjaisia tai XML-pohjaisen data käsittelyyn tarkoitettuja kieliä ovat: XQuery o Käytetään kyselykielenä XML-pohjaiselle datalle o XPath-kieleen pohjautuva toiminnallinen kieli, jossa kysely esitetään lausekkeina o "XQuery tarjoaa yhtenäisen rajapinnan XML-datan lukemiseen, pitkälti samalla tavalla kuin mitä SQL on tehnyt relaatiodatalle", sanoo Don Chamberlin, IBM Almaden Research Center (Suomen W3C toimisto)

o Tätä kieltä käsitellään matematiikan laitoksen järjestämällä kurssilla Rakenteisten dokumenttien jatkokurssi XLink o XML-dokumenttien tehokasta ulkoista linkitystä varten tuotettu kieli o Käytetään resurssien linkittämiseen. Sen avulla voidaan osoittaa ja linkittää mikä tahansa resurssi (tai sen osa), jolla on URI. Resurssi voi olla esim. kyselyn tulos (esim. XQuerykielellä tehty kysely), XML-dokumentti, kuva jne. o HTML-kielen linkkausmekanismiin verrattuna, XLink tarjoaa paljon monipuolisemmat tavat yhdistellä resursseja. Se sallii esim. ristiin- ja taaksepäin viittaukset, useamman kuin kahden osapuolen väliset linkit, kaksisuuntaiset linkit jne. o Linkkeihin voi lisätä myös metainformaatiota XPointer o XPath-kielen laajennos o Sen kehittämisen päämotivaationa on ollut tarve hienojakoiseen ja monipuoliseen viittausmekanismiin. XPointer-kielen avulla voidaankin osoittaa paitsi tiettyyn kohtaan (esim. elementti, attribuutti tai merkki) niin myös tiettyyn blokkiin (range) tai tiettyyn joukkoon (esim. kaikki Chapter ja Para elementit) XML-dokumentissa. Lisäksi XPointerkielen avulla osoitettava resurssin osa voi kuulua myös toiseen dokumenttiin. XInclude o Käytetään XML-dokumenttien yhdistämiseen. Kyse ei ole siis eri resurssien linkittämisestä vaan niiden yhdistämisestä (vrt. XLink). o Verrattuna XLink-kieleen myös määritysten prosessointi eroaa: jäsentäjä prosessoi XInclude-määritykset kun taas XLink-määritysten prosessointi on sovelluksen vastuulla. o Käytännössä XInclude on varsin yksinkertainen kieli. Siinä pääosat ovat include ja fallback komennot. Edellistä käytetään varsinaisen yhdistämisen tekemiseen, kun taas jälkimmäisen avulla voidaan raportoida virhetilanteista. XSLT o XML-dokumentin konvertoiminen toiseen esitysformaattiin (esim. HTML tai PDF) o XML-dokumentin rakenteen muokkaus o Tätä kieltä käsitellään mat. laitoksen järjestämällä kurssilla Rakenteiset dokumentit XFragment o XML-dokumentin jakaminen pienempiin osiin XML Encryption ja XML Signature o Käsitellään myöhemmin tällä kurssilla puhuttaessa turvallisesta viestinvälityksestä verkossa

Location paths For addressing a set of nodes from a certain node Absolute and relative location paths location steps are separated with a slash (/) an absolute location path starts with a slash (/): /locationstep/locationstep/... a relative location path starts from the current node: locationstep/locationstep/... Location step format: axisname::nodetest[predicate] axisname: specifies the relationship between the current node and the nodes selected by a location step ancestor, ancestor-or-self, attribute, child, descendant, descendant-or-self, following, following-sibling, namespace, parent, preceding, preceding-sibling, and self nodetest: specifies the node type and nodes selected by a location step predicate: zero or more predicates that further refines the set of nodes to be selected 75 Sijaintipolkuja käytetään osoittamaan joukkoon solmuja XML-dokumentista muodostetussa puussa. Sijaintipolku voi olla suhteellinen tai absoluuttinen. Suhteellinen polku alkaa nykyisestä sijaintikohdasta, kun taas absoluuttinen polku alkaa aina juurisolmusta ja se merkitään polkumäärityksen alkuun merkillä /. Sijaintipolut vastaavatkin hyvin pitkälle hakemistopolkuja. Yksi askel sijaintipolussa erotetaan merkeillä / ja se koostuu akselin nimestä, solmutestistä ja predikaateista. Akselin nimien avulla voidaan navigoida puussa isäsolmuihin, lapsisolmuihin ja sisarsolmuihin. Solmutestissä määritellään minkä tyyppisiä solmuja valitaan. Predikaattien avulla puolestaan annetaan lisämäärityksiä, joiden avulla valintaa voidaan edelleen rajoittaa. Esimerkkejä: child::* ; valitsee kaikki lapsielementit aloituskohdasta eteenpäin descendant::recipe ; valitsee kaikki recipe-jälkeläiselementit aloituskohdasta eteenpäin /child::book/child::chapter[position()=3]/para[position()=1] ; valitsee kirjan kolmannen luvun ensimmäisen kappaleen /descendant::cd[position()=7] ; valitsee seitsemännen cd-elementin dokumentista child::cd[attribute::type="classic"] ; valitsee kaikki ne aloitussolmun (current node) cdlapsielementit, joiden type-attribuutin arvo on classic. child::cd[position()=last()-1] ; valitsee aloitussolmusta (current node) katsoen viimeistä edellisen cd-lapsisolmun child::cd[position()<6] ; valitsee aloitussolmun viisi ensimmäistä cd-lapsisolmua

Location path abbreviations (http://www.w3schools.com/xpath/) Abbr. none Meaning child:: Example cd is short for child::cd @... // attribute:: self::node() parent::node() /descendant-orself::node()/ cd[@type="classic"] is short for child::cd[attribute::type="classic"].//cd is short for self::node()/descendant-orself::node()/child::cd../cd is short for parent::node()/child::cd //cd is short for /descendant-or-self::node()/child::cd 76 Lyhennetyt muodot sijaintipolkumäärityksistä ovat yleisesti käytössä. Niiden avulla voidaan sijaintipolkumäärityksistä saada huomattavasti selkeämpiä ja kompaktimpeja. Esimerkiksi yksi yleisesti käytetty lyhenne on //. Mikäli sijaintipolku alkaa merkeillä //, niin silloin kaikki annetun kriteerin (jälkiosa) täyttävät elementit valitaan dokumentista. Mitä seuraavat sijaintipolkumääritykset valitsevat: @src @* cd[@type="classic"][5] valitsee aloitussolmusta katsoen viidennen cd-lapsielementin, jonka typeattribuutin arvo on classic. Mitä tällöin valitsisi cd[5][@type="classic"]? cd[@type and @country]

Location paths (cont d) Wildcards (*) can be used to select unknown XML elements, e.g., /Book/*/Para selects all the grandchild Para elements of the Book element /*/*/Para selects all the Para elements with two ancestors Selecting brances child::chapter[position()<6] selects the first five Chapter elements of the current node (also functions first() and last() exist) /Book/Chapter[Para] selects all the Chapter elements (of the Book) that have Para elements as their children note that parts of a path can also appear as predicates Selecting several paths by using //Chapter //Para selects all Chapter and Para elements in the document 77 Villiä merkkiä * voidaan käyttää (kuten yleensäkin) korvaamaan tuntemattomia elementtejä. Mietittävää...Oletetaan seuraavanlainen XML-dokumentin rakenne: <?xml version= 1.0?> <Book> <Chapter num= 1 > <Para>Text1</Para> <Para>Text2</Para> </Chapter> <Chapter>...</Chapter>... </Book> Miten valitsisit yllä olevasta rakenteesta ensimmäisen Para elementin kolmannesta Chapter elementistä, joka on siis Book elementin alla? Miten valitsisit toiseksi viimeisen Chapter elementin? Miten valitsisit kaikki Chapter elementit, joilla on attribuutti num? Mitä seuraavat sijaintipolut valitsevat? o */Para o //* o //cd[@country] o //cd[@*]

Expressions Expression evaluation occurs with respect to a context context node, context position, context size, variable values, available functions, scope Expressions can be variable references, strings, numbers, function calls, paths, node sets, or booleans e.g. a location path Expressions are bound together with arithmetic, logical, boolean, and relational operators Numerical expressions: +, -, *, div, mod e.g. 5 mod 2 returns 1 Equality expressions: = and!= e.g., price=3.70 returns true if the price is 3.70 Relational expressions: <, >, <=, >= Boolean expressions: or, and e.g., price = 3.70 or price = 4.20 78 XPath-kieli tarjoaa sijaintipolkujen ohella muita mekanismeja, joiden avulla hakuja voidaan tarkentaa. Lausekkeet voivat hyödyntää kieleen kuuluvia funktiota ja niitä voidaan sitoa yhteen tyypillisten aritmeettisten, loogisten, boolean- ja vertailuoperaattoreiden avulla. Lausekkeet evaluoidaan aina suhteessa kontekstiin. Kontekstiin kuuluu kaikki se informaatio, joka voi vaikuttaa kyselyn vastaukseen (lausekkeen arvoon). Konteksti muodostuu paitsi kontekstisolmusta, myös kontekstin kohdasta (käsiteltävänä olevan alkion indeksi), kontekstin koosta (lausekkeen osumajoukon koko), lausekkeessa esiintyvien muuttujien arvoista, käytettävissä olevista funktioista ja lausekkeen alan (scope) nimiavaruusmäärittelyistä (O. Nykänen, XML, Docendo, 2001). Lausekkeita voivat olla muuttujaviittaukset, merkkijonot, numerot, funktiokutsut, sijaintipolut, boolean-lausekkeet ja solmujoukot.

Esimerkki: <?xml version= 1.0?> <RecipeCollection> <description> Some of my... </description> <recipes> <recipe> <title>zuppa Inglese</title> <ingredient name="egg yolks" amount="4"/> <ingredient name="milk" amount="2.5" unit="cup"/> <ingredient name="sugar" amount="0.75" unit="cup"/>... <recipe> <title>spoon cokies</title> <ingredient name= raspberry jam amount= 1 unit= table spoon /> <ingredient name= flour amount= 5 unit= cup />... </recipe>... </recipes> </RecipeCollecion> Mietittävää. Mitä valitsee seuraava lauseke: //ingredient[@unit= cup ]/@name? Miten valitsisit reseptikokoelman kaikkien niiden reseptien nimet, joissa jauhoja (flour) tarvitaan vähintään 5 kupillista (cup)?

Core function library For converting and translating data Node set functions e.g., name(node) returns the name of the node String functions typical functions for manipulating strings, e.g. string concat(str1, str2,...), bool starts-with(str, substr), string string(val) e.g., string(123) returns 123 Number functions ceiling(number), floor(number), number(value), round(number), sum(nodeset) e.g., number(value) converts the value argument to a number. Thus, number( 4 ) returns 4 Boolean functions true(), false(), not(),boolean(), lang() boolean() converts the value argument to boolean and returns true or false lang() returns true if the language argument matches the language of the xsl:lang element, otherwise it returns false 79 XPath spesifikaatio määrittelee joukon funktioita, jotka jokaisen XPath implementaation tulee tarjota. Näitä funktioita voidaan käyttää tarkentamaan hakuja ja tiedon konvertoimiseksi. Funktiot on jaettu neljään ryhmään niiden käyttötarkoituksen perusteella: solmujoukkojen käsittelemiseen tarkoitetut funktiot (node set functions) merkkijonofunktiot (string functions) numerofunktiot (number functions) totuusarvofunktiot (boolean functions) Solmujoukkojen manipuloimiseksi on tarjolla seuraavat funktiot: number count(node-set) : palauttaa solmujoukon alkioiden lukumäärän number position() : palauttaa parhaillaan käsiteltävän solmun position solmulistassa number last() : palauttaa solmulistan viimeisen alkion positionumeron node-set id(value) : valitsee elementit niiden yksikäsitteisen tunnisteen perusteella Esim. id("foo")/child::para[position()=5] valitsee sen elementin viidennnen para-alielementin, jonka id on foo string local-name(node) : palauttaa elementin lokaalin nimen ilman sitä mahdollisesti edeltävää prefiksiä ja kaksoispistettä string name(node) : palauttaa solmun nimen uri namespace-uri(node) : palauttaa solmun nimiavaruuden uri-viittauksen

Merkkijonojen manipuloimiseksi XPath-funktiokirjasto tarjoaa useita funktioita. Ne ovat yleisesti käytettyjä merkkijonofunktioita merkkijonojen yhdistämiseksi, alimerkkijonojen muodostamiseksi, merkkijonon pituuden määrittämiseksi, merkkijonon alun testaamiseksi jne.: string concat(val1, val2,...) bool contains(val, substr) string normalize-space(string) bool starts-with(string, substr) string string(val) number string-length(string) string substring(string,start,length) string substring-after(string,substr) string substring-before(string,substr) string translate(value,string1,string2) Lisäksi XPath-funktiokirjasto tarjoaa numerofunktioita (esim. katto/lattia arvot ja numeroarvon pyöristys) ja totuusarvofunktioita.

XPath and XML namespaces Namespaces are widely used in XML documents e.g. elements in SOAP messages (to be covered later) are qualified by namespaces Specifying namespace-qualified elements with XPath in a simple way by fixing the namespace prefixes /SOAP-ENV:Envelope/SOAP-ENV:Header/dsig:Signature tries to select the Signature element qualified by the dsig namespace prefix, Envelope and Header elements are qualified by the SOAP-ENV works only when the document always uses the same namespace prefixes (SOAP-ENV and dsig) not recommended: unflexible and errorprone! without fixing namespace prefixes using the XPath functions provided For example, selecting Signature elements associated with the namespace http://www.w3.org/2000/09/xmldsig#: //*[namespace-uri()= http://www.w3.org/2000/09/xmldsig# and local-name()= Signature ] 80 Nimiavaruuksia käytetään paljon XML-dokumenteissa. Esimerkiksi XML-pohjaisessa SOAP (Simple Object Access Protocol) protokollaan perustuvassa viestinvälityksessä (käsitellään myöhemmin tällä kurssilla) elementit kvalifioidaan nimiavaruusmäärityksillä. Esimerkiksi /SOAP-ENV:Envelope/SOAP-ENV:Header/dsig:Signature viittaa (juuresta lähtien) Signature-elementtiin, joka on juurielementin (Envelope) alla olevan Headerelementin alielementti. Tässä Signature-elementillä on prefiksi dsig, joka on lyhennemerkintä nimiavaruusmääreestä (esim. http://www.w3.org/2000/09/xmldsig#). Vastaavasti elementeillä Envelope ja Header on sama prefiksi SOAP-ENV, joka niinikään on lyhennemerkintä nimiavaruusmääreestä. Itse asiassa http://www.w3.org/2000/09/xmldsig# viittaa XML Signature spesifikaatioon, johon myös palaamme vielä myöhemmin. Edellä annettu tapa viitata Signature-elementtiin ei kuitenkaan ole kovin suositeltava tapa, koska se toimii vain silloin, kun käytetään samoja prefiksejä (SOAP-ENV ja dsig). Sama voidaan toteuttaa myös joustavammin käyttäen hyväksi XPath-kieltä ja sen funktioita: //*[namespace-uri()=http://www.w3.org/2000/09/xmldsig# and local-name()= Signature ]