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

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

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

Alternative DEA Models

XSL-muunnokset. 9 XSL-muunnokset

The CCR Model and Production Correspondence

ELEC-C1220 Automaatio 2 - XML

XQuery tietokannan kyselykielenä

Apuja ohjelmointiin» Yleisiä virheitä

Ohjelmointi 1 C#, kevät 2013,

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

Web-teknologiat. XML-datan kysely Topi Sarkkinen

812336A C++ -kielen perusteet,

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

Hohde Consulting 2004

Bootstrap / HTDP2 / Realm of Racket. Vertailu

Other approaches to restrict multipliers

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

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

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

Valuation of Asian Quanto- Basket Options

Ensimmäiset XPath-lausekkeet

Extensible Stylesheet Language (XSL)

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

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

RINNAKKAINEN OHJELMOINTI A,

SIMULINK S-funktiot. SIMULINK S-funktiot

kieltenoppimiskertomukseni My Language Biography

Salasanan vaihto uuteen / How to change password

Bounds on non-surjective cellular automata

16. Allocation Models

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

Ohjelmoinnin peruskurssien laaja oppimäärä

PIC-koodin luominen URF-tietokantaan Participant Portal

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

Choose Finland-Helsinki Valitse Finland-Helsinki

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

A TIETORAKENTEET JA ALGORITMIT

Travel Getting Around

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

8 XSLT-muunnoskieli XSLT-muunnoskieli

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

Telecommunication Software

CSE-A1200 Tietokannat

Capacity utilization

Basic Flute Technique

Luento 3: Tietorakenteiden esittäminen

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

Julkishallinnon XML-skeemat v0.5 JHS-suositus

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

MUSEOT KULTTUURIPALVELUINA

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

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

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

Tietorakenteet ja algoritmit

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

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

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

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

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

XML rakenteen suunnittelu. Jaana Holvikivi

Operatioanalyysi 2011, Harjoitus 2, viikko 38

4x4cup Rastikuvien tulkinta

Osoittimet ja taulukot

Ohjelmoinnin peruskurssien laaja oppimäärä

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Hotel Pikku-Syöte: accommodation options and booking

Luento 7: XML-ohjelmointirajapinnat

Ohjelmoinnin perusteet Y Python

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

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

2017/S Contract notice. Supplies

Olet vastuussa osaamisestasi

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

Rekisteröiminen - FAQ

XSL-muunnokset. 9 XSL-muunnokset

Ohjelmoinnin peruskurssien laaja oppimäärä

Metsälamminkankaan tuulivoimapuiston osayleiskaava

è è è XSL-muunnokset 9 XSL-muunnokset

National Building Code of Finland, Part D1, Building Water Supply and Sewerage Systems, Regulations and guidelines 2007

Integration of Finnish web services in WebLicht Presentation in Freudenstadt by Jussi Piitulainen

Curriculum. Gym card

Efficiency change over time

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

Digitaalilaitteen signaalit

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

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

Attribuuttipohjainen käyttövaltuuksien hallinta Case Dreamspark Premium

Transkriptio:

XPath 33

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 34 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.

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 35 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 36 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 type-attribuutin 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 37 Villiä merkkiä * voidaan käyttää (kuten yleensäkin) korvaamaan tuntemattomia elementtejä. Esim. 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? */Para //* //cd[@country] //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 38 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 39 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)

Solujoukkojen 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 ] 40 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 ]