introduction to xpath web engineering, ss 2007 tomáš pitner
TRANSCRIPT
![Page 1: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/1.jpg)
Introduction to XPath
Web Engineering, SS 2007
Tomáš Pitner
![Page 2: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/2.jpg)
XPath – Why? Part of the core XML standards family
XML Path Language (XPath) Version 1.0 W3C Recommendation 16 November 1999
Mean to navigate in the document tree
![Page 3: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/3.jpg)
Example of an XML Document<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person></staff>
![Page 4: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/4.jpg)
Navigation in XML documents Similar to file addressing in a FS Selects nodes (not just elements) in the tree Further node processing often takes place:
XSLT, XQuery – both heavily depend on XPath
Works on Logical Structure (XML tree) Example: an XPath expression against the
last document /staff/person[@id=‘wmo’]
XPath – The Goal
![Page 5: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/5.jpg)
XPath Processor/Engine Takes XPath expression Takes context node (position in the doc) Accesses the source XML tree Produces node-set/sequence as result
XPath Processing
XML docXPath Processor/engine
XPath Expression
XML doc
<person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at“ >ÖVP</party>
</person>
/staff/person[@id=‘wmo’]
![Page 6: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/6.jpg)
XPath Expression Consists of steps separated by slash / example – two steps
/staff/person semantics: Select all person elements under staff
(which is the root element).
resembles traversing directories in a FS applicable to both elements and other nodes! may be absolute (starting with /) or relative
i.e. evaluated without or against context nodes
XPath – Anatomy of an Expression
![Page 7: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/7.jpg)
XPath Expression with Predicates each step may contain a predicate
It filters the nodes selected at the step
/staff/person[@id=‘wmo’] Select just the person under staff with id
attribute = ‘wmo’
Predicates may be compound //person[@id=‘wmo’ or @id=‘agu’]
XPath – Predicates
![Page 8: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/8.jpg)
To select non-element nodes comment() text() processing-instruction() …
To compute a value count() … much more
Example – select just the text of the name of the ‘agu’ person:
/staff/person[@id=‘agu’]/name/text()
XPath – Functions
![Page 9: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/9.jpg)
Context nodes and Axes Context nodes
“central point” for evaluating relative expressions
Axes “directions” leading from the context node out node-sets relative to the context node(s)
Steps in the expression mean traversing along axes
XPath Processing – Context, Axes
![Page 10: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/10.jpg)
All against the doc on the first slide… absolute expressions
//name … selects all name elements //person[party] … selects all person elements
having (any) party child element
/staff/person[party[@url=‘xxx’]] selects all person elements having party with
url xxx
/person … does not select anything from this doc
XPath Expression Examples
![Page 11: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/11.jpg)
All against the doc on the first slide… relative expressions
Context node: first person
name … selects this person’s name element ../staff … selects the staff element ../* … selects also the staff element / … also the staff
.//* … selects all descendant elements
staff/name … does not select anything from this doc
XPath Expression Examples
![Page 12: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/12.jpg)
XPath Axes Example (ancestor)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person></staff>
context node
ancestor
parent
ancestor-or-self
![Page 13: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/13.jpg)
XPath Axes Example (descendant)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person></staff>
context node
descendant
child
descendant-or-self
![Page 14: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/14.jpg)
XPath Axis Example (attribute)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person></staff>
context node
attribute
![Page 15: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/15.jpg)
XPath Axis Example (following-sibling)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person><person id="abc">
<name>ABC</name><party url="http://www.abc.at">ABC</party>
</person></staff>
context node
following-sibling
![Page 16: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/16.jpg)
XPath Axis Example (preceding-sibling)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person><person id="abc">
<name>ABC</name><party url="http://www.abc.at">ABC</party>
</person></staff>
context node
preceding-sibling
![Page 17: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/17.jpg)
XPath Axis Example (preceding)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person><person id="abc">
<name>ABC</name><party url="http://www.abc.at">ABC</party>
</person></staff>
context node
preceding
![Page 18: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/18.jpg)
XPath Axis Example (following)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person><person id="abc">
<name>ABC</name><party url="http://www.abc.at">ABC</party>
</person></staff>
context node
following
![Page 19: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/19.jpg)
XPath Axis Example (self)
<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung">
<person id="agu"><name>Alfred Gusenbauer</name><party url="http://www.spoe.at">SPÖ</party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><party url="http://www.oevp.at">ÖVP</party>
</person><person id="abc">
<name>ABC</name><party url="http://www.abc.at">ABC</party>
</person></staff>
context node
self
![Page 20: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/20.jpg)
XPath Axis Example (namespace)<?xml version='1.0' encoding='UTF-8'?><staff organization="Bundesregierung xmlns:breg=“http://www.austria.gv.at/ns/1.0" xmlns="http://generic-ns.org/ns/1.0">
<person id="agu"><name>Alfred Gusenbauer</name><breg:party url="http://www.spoe.at">SPÖ</breg:party>
</person><person id="wmo">
<name>Wilhelm Molterer</name><breg:party url="http://www.oevp.at">ÖVP</breg:party>
</person></staff> NS axis for ‘party’ contains:
http://generic-ns.org/ns/1.0 breg = http://www.austria.gv.at/ns/1.0
![Page 21: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/21.jpg)
ancestor ancestor-or-self attribute child descendant descendant-or-self following following-sibling namespace parent preceding preceding-sibling self
XPath Processing – Summary of axes
![Page 22: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/22.jpg)
The expression /staff/person can be rewritten as
/child::staff/child::person
Similar for other axes there are axes expressible in the long form ONLY Example: preceding-sibling, ancestor-or-self…
XPath – Long Syntax
![Page 23: Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner](https://reader034.vdocuments.net/reader034/viewer/2022042703/56649e4a5503460f94b3deed/html5/thumbnails/23.jpg)
E. R. Harold – XML in a Nutshell Chapter on XPath free on the web:
http://www.oreilly.com/catalog/xmlnut/chapter/ch09.html
XPath (and XSLT) Quick Reference Card http://www.mulberrytech.com/quickref/XSLT_1quickref-v2.p
df
XPath – Resources