Using XPath and XQuery¶
You can use the programs Xpath (note: upper case X) and xquery on the Linux system at Chalmers to experiment with XPath and XQuery expressions. These programs use the Saxon XPath/XQuery processor.
Example XML files¶
These XML examples are used in the lectures:
These XML files have been validated using the W3C validation service.
XPath examples¶
bash$ cat example1.xp
/Courses/*/*
bash$ Xpath courses.xml example1.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<GivenIn period="2" teacher="Niklas Broberg"/>
</result:element>
<result:element>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</result:element>
<result:element>
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</result:element>
</result:sequence>
bash$ cat example2.xp
//*
bash$ Xpath courses.xml example2.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<Courses>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Course>
<Course name="Algorithms" code="TIN090">
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</Course>
</Courses>
</result:element>
<result:element>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Course>
</result:element>
<result:element>
<GivenIn period="2" teacher="Niklas Broberg"/>
</result:element>
<result:element>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</result:element>
<result:element>
<Course name="Algorithms" code="TIN090">
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</Course>
</result:element>
<result:element>
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</result:element>
</result:sequence>
bash$ cat example3.xp
/Courses/Course/.
bash$ Xpath courses.xml example3.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Course>
</result:element>
<result:element>
<Course name="Algorithms" code="TIN090">
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</Course>
</result:element>
</result:sequence>
bash$ cat example4.xp
/Courses/Course
bash$ Xpath courses.xml example4.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Course>
</result:element>
<result:element>
<Course name="Algorithms" code="TIN090">
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</Course>
</result:element>
</result:sequence>
bash$ cat example5.xp
//GivenIn/..
bash$ Xpath courses.xml example5.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Course>
</result:element>
<result:element>
<Course name="Algorithms" code="TIN090">
<GivenIn period="1" teacher="Devdatt Dubhashi"/>
</Course>
</result:element>
</result:sequence>
bash$ cat example6.xp
/Courses/Course/GivenIn[@period=2]
bash$ Xpath courses.xml example6.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<GivenIn period="2" teacher="Niklas Broberg"/>
</result:element>
</result:sequence>
bash$ cat example7.xp
/Courses/Course[GivenIn/@period="2"]
bash$ Xpath courses.xml example7.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:element>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Course>
</result:element>
</result:sequence>
bash$ cat example8.xp
/Courses/Course/@name
bash$ Xpath courses.xml example8.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:attribute name="Databases"/>
<result:attribute name="Algorithms"/>
</result:sequence>
bash$ cat example9.xp
//@name
bash$ Xpath scheduler.xml example9.xp
<?xml version="1.0" encoding="UTF-8"?>
<result:sequence xmlns:result="http://saxon.sf.net/xquery-results" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<result:attribute name="Databases"/>
<result:attribute name="VR"/>
<result:attribute name="HB1"/>
</result:sequence>
XQuery examples¶
bash$ cat example1.xq
let $courses := doc("courses.xml")
for $gc in $courses//GivenIn
where $gc/@period = 2
return <Result>{$gc}</Result>
bash$ xquery example1.xq
<?xml version="1.0" encoding="UTF-8"?>
<Result>
<GivenIn period="2" teacher="Niklas Broberg"/>
</Result>
bash$ cat example2.xq
let $courses := doc("courses.xml")
let $gc := $courses//GivenIn[@period = 2]
return <Result>{$gc}</Result>
bash$ xquery example2.xq
<?xml version="1.0" encoding="UTF-8"?>
<Result>
<GivenIn period="2" teacher="Niklas Broberg"/>
</Result>
bash$ cat example3.xq
let $courses := doc("courses.xml")
for $c in $courses/Courses/Course
let $code := $c/@code
let $given := $c/GivenIn
where $c/GivenIn/@period = 2
return <Result code="{$code}">{$given}</Result>
bash$ xquery example3.xq
<?xml version="1.0" encoding="UTF-8"?>
<Result code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
<GivenIn period="4" teacher="Rogardt Heldal"/>
</Result>
bash$ cat example4.xq
let $courses := doc("courses.xml")
for $c in $courses/Courses/Course
let $code := $c/@code, $name := $c/@name
let $gc := $c/GivenIn[@period = 2]
where not(empty($gc))
return <Course code="{$code}" name="{$name}">{$gc}</Course>
bash$ xquery example4.xq
<?xml version="1.0" encoding="UTF-8"?>
<Course name="Databases" code="TDA357">
<GivenIn period="2" teacher="Niklas Broberg"/>
</Course>
bash$ cat example5.xq
let $courses := doc("courses.xml")
let $ct := (
for $c in $courses/Courses/Course
for $gc in $courses/Courses/Course/GivenIn
return <Info name="{$c/@name}" teacher="{$gc/@teacher}" /> )
return <Result>{$ct}</Result>
bash$ xquery example5.xq
<?xml version="1.0" encoding="UTF-8"?>
<Result>
<Info name="Databases" teacher="Niklas Broberg"/>
<Info name="Databases" teacher="Rogardt Heldal"/>
<Info name="Databases" teacher="Devdatt Dubhashi"/>
<Info name="Algorithms" teacher="Niklas Broberg"/>
<Info name="Algorithms" teacher="Rogardt Heldal"/>
<Info name="Algorithms" teacher="Devdatt Dubhashi"/>
</Result>