Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to XQuery and eXist Week 21 DSA. DSA - XQuery2 Refresher on XPath XML databases XQuery Applications –Whiskies (again) –A simple blog The.

Similar presentations


Presentation on theme: "Introduction to XQuery and eXist Week 21 DSA. DSA - XQuery2 Refresher on XPath XML databases XQuery Applications –Whiskies (again) –A simple blog The."— Presentation transcript:

1 Introduction to XQuery and eXist Week 21 DSA

2 DSA - XQuery2 Refresher on XPath XML databases XQuery Applications –Whiskies (again) –A simple blog The XQuery Wikibook

3 DSA - XQuery3 XPath (1) Hierarchical file systems have been navigable with path expression since Unix –/abc/cde/../../efg i.e. ? Problem –Only child, parent and root can be accessed in one step –Only one node addressable

4 DSA - XQuery4 XPath (2) Solution – extend the path language –select multiple items /abc/cde/../../efg/* - all children of the node /efg //x - all x nodes anywhere in the tree –select a subset of items by appending predicate (filter) – nodes selected if predicate evaluates to true //x[@size>1000] –functions in predicate //x[ends-with(@name,’.jpeg’)] –multiple filters //x[@owner=‘fred’]//images[ends-with(@name,’.jpeg’)] –select items by position /abc[2] short for /abc[position() = 2]

5 DSA - XQuery5 XPath (3) Core data type in XPath 2.0 is a sequence of items –Items are atomic values or XML elements –Sequence is flat deep-equal('fred',('fred')) is true deep-equal((‘fred’, ‘fred’), (‘fred’)) is false deep-equal(('fred', ('bill','joe')),('fred', 'bill','joe')) is true –() is the empty sequence count((‘fred’,() )) is 1 Equality between sequences defined as non-empty intersection (‘fred’,’joe’) = ‘joe’ is true (‘fred’,’joe’) = (‘joe’,’bill’) is true (‘fred’,’joe’) eq ‘joe’ is false

6 DSA - XQuery6 XQuery. Problem –Need to be able to construct a tree as well as select nodes in an existing tree –Need for more complex searches a la SQL Solution 1 – XML addition to existing languages –PHP + Simple XML –XML structures not compatible with language Solution 2 – XSLT –Push (declarative, pattern-matching) or pull processing –XML- based –Two versions 1.0 most common, in Browsers, Xalan 2.0 e.g. Saxon Solution 2 – XQuery –Functional –Pull only –Non XML XQuery 1.0 and XSLT 2.0 share the same XPath 2.0 data model and function library

7 DSA - XQuery7 eXist Native XML Database Open source Wolfgang Meier is the chief architect Written in Java Deployable in different ways –Embedded in a Java application –Part of a Cocoon pipeline –As web application in Apache/Tomcat –With embedded Jetty HTTPserver (as on stocks) Multiple Interfaces –REST – to Java servlet –SOAP –XML:RPC

8 DSA - XQuery8 Native XML database Well-formed XML documents can be added to the database They are stored in an efficient, searchable B+ tree structure Documents (files) are organised into collections in a filestore Non-XML resources (XQuery, CSS, JPEG..), etc can be stored as binary

9 DSA - XQuery9 Whisky example A base XML filebase XML file Some XQuery Scripts Simple list Another simple list Select Whiskies Select with a Form Generate a kml map

10 DSA - XQuery10 Simple Xquery – list1.xqllist1.xql for $d in //Distillery return {$d/Name} {$d/WhiskyDescription}

11 DSA - XQuery11 Executing an XQuery eXist DB a.xql XQuery Engine parameters html Client Browser eXist: Server Get a.xql parameters servlet fetch a.xql render User clicks link

12 DSA - XQuery12 Simple XQuery – list2.xqllist2.xql declare option exist:serialize "method=xhtml media-type=text/html"; Name Address {for $w in //Distillery return {data($w/Name)} {data($w/Address)} }

13 DSA - XQuery13 declare option exist:serialize "method=xhtml media-type=text/html"; Name Address { for $w in //Distillery return {data($w/Name)} {data($w/Address)} } XQuery explained XQuery ‘variable’ Setting the output mime type XPath expression to select nodes XQuery inside XML Another XPath expression Function to get the text

14 DSA - XQuery14 XQuery.. Nesting XML and XQuery –XML to XQuery { … } –XQuery to XML … Must be well-formed XML – single root - and handy Constructed structures – XML element or element Position { attribute latitude ’51’, attribute longitude ‘2.5’ } –Sequence ('fred',, 5)

15 DSA - XQuery15 XQuery.. control constructs are expressions and hence composable –if (cond) then exp else exp –for..let.. where.. order by.. return – FLWOR –function call –variable value ($d) ‘Atomisation’ sometimes needed in output –Element to characters –$d/Name Glenfiddich –data($d/Name) Glenfiddich

16 DSA - XQuery16 XQuery … Functions and Modules –Typed arguments and return –Recursion –XPath functions –eXist functions Database management HTTP interface.. Functional language –let $x := 5 binds the value 5 to the variable $x –Can’t write iterative code – what’s the output? let $y := 1 return for $x in (1 to 5) let $y := $y * 2 return $y

17 DSA - XQuery17 XQuery FLWOR expression FLWOR for $x in sequence let $a := expression, $b := expression where condition order by $var return expression –Returns a Sequence of nodes Compare with SQL select columns from tables where condition order by –Returns a Relation (table)

18 DSA - XQuery18 Search Query Enter a name or part name Match against the Distillery name List the matches

19 DSA - XQuery19 List 3 let $name := request:request-parameter("name","") return Name Address {for $d in //Distillery[contains(Name,$name)] return {data($d/Name)} {data($d/Address)} } eXist function F L WO R expression

20 DSA - XQuery20 An XQuery sticky form The script here has several shifts between XML to XQuery Whole interface in one script –Equivalent to PHP + MySQL.

21 DSA - XQuery21 let $name := request:request-parameter("name","") return Enter Name or part of Name Name Address { for $d in //Distillery[contains(Name,$name)] return {data($d/Name)} {data($d/Address)} } list4.xql

22 DSA - XQuery22 Generate a kml overlay Output is kml Need to specify the mime type so that the browser will link to Google Earth (if set up correctly) Or create a Google Map link: http://maps.google.com/maps?q=http://www.cems. uwe.ac.uk/xmlwiki/whisky/map.xqlhttp://maps.google.com/maps?q=http://www.cems. uwe.ac.uk/xmlwiki/whisky/map.xql

23 DSA - XQuery23 Kml declare option exist:serialize "method=xhtml indent=yes media-type=application/vnd.google-earth.kml+xml"; Distilleries of Scotland 2 {for $d in //Distillery return {data($d/Name)} {data($d/WhiskyDescription)} {data($d/Position/@longitude)}, {data($d/Position/@latitude)},0 } distkml.xql

24 Reading an API Brooklyn Museum APIAPI Simple search –Returning XMLReturning XML –Returning HTMLReturning HTML DSA - XQuery24

25 Source DSA - XQuery25 let $uri := "http://www.brooklynmuseum.org/opencollection/api/" let $apikey := "yPbZKsKZLC" let $keyword:= request:get-parameter("keyword","Anubis") let $request := concat($uri,"?api_key=",$apikey,"&version=1&include_it em_caption=true&require_image=true&method=collectio n.search&keyword=",$keyword) return doc($request)

26 Uploading DSA CW2 metadata upload.xql DSA - XQuery26

27 FOLD and StudentsOnline StudentsOnline DSA - XQuery27

28 DSA - XQuery28 XQuery Wikibook A large number of worked examples –http://en.wikibooks.org/wiki/XQueryhttp://en.wikibooks.org/wiki/XQuery

29 DSA - XQuery29 Trying eXist Demo site –http://exist-db.org/http://exist-db.org/ Local installation –Simple install from the exist-db site –Use the Java client to load files move, copy, rename files edit files in situ (but no Save-as) execute queries backup

30 Other Native XML databases MarkLogic –MarkMail Sedna Berkleydb Many Relational databases include partial support for XML DSA - XQuery30


Download ppt "Introduction to XQuery and eXist Week 21 DSA. DSA - XQuery2 Refresher on XPath XML databases XQuery Applications –Whiskies (again) –A simple blog The."

Similar presentations


Ads by Google