High Performance XQueryProcessing in PHP with Zorba                               Vikram Vaswani                          ...
Vikram VaswaniFounder, Melonfire●   Product design and implementation with open source technologies●   20+ products launch...
XML Support in PHP●   XML processing: SimpleXML and XMLReader●   XML transformation: XSLT and XML-DAS●   Event-based parsi...
Whats Missing?
Introducing Zorba●   General purpose XQuery processor for PHP 5.3+●   Supports XQuery v1.0 and related specifications●   A...
Supported XML Technologies●   XPath●   XQuery v1.0 and v3.0●   XQuery Scripting●   Xquery Data Definition●   XPath Full-Te...
PHP Installation●   Linux and MacOS X    ●   Libxml2: http://xmlsoft.org/    ●   Iconv: http://www.gnu.org/software/libico...
PHP Installation●   Linux and MacOS X    ●   Libxml2: http://xmlsoft.org/    ●   Iconv: http://www.gnu.org/software/libico...
Basic Usage<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();try {    $queryStr = <<<END    let $...
Basic Usage
Usage Examples
Arithmetic Operators<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END  declare...
Sequences<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END let $dolls := (Echo...
String Functions<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END  let $dolls ...
Math Functions<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END let $set := (1...
Data Filtering(XML source)<?xml version="1.0"?><data>  <record>    <code>ABW</code>    <name>Aruba</name>    <continent>No...
Data Filtering (Simple)<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$dm = $zorba->getXmlData...
Data Filtering (Complex)<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();dm = $zorba->getXmlData...
Node Manipulation(XML source, before)<?xml version=1.0?><heroes> <hero>   <name>Spiderman</name>   <alterego>Peter Parker<...
Node Manipulation<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$dm = $zorba->getXmlDataManage...
Node Manipulation(XML source, after)<?xml version="1.0" encoding="UTF-8"?><heroes> <hero>    <name>Spiderman</name>    <al...
REST Parser<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<< END  import module n...
REST Parser(After)<?xml version="1.0" encoding="UTF-8"?><result> <href>http://www.everythingphpmysql.com/</href> <descript...
JSON Parser(JSON source){    "books": [{     "title":"Phantom Prey",     "author":"John Sandford",     "price":"7.99"    }...
JSON Parser<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<< END import module na...
JSON Parser<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<< END import module na...
Performance
Scenario●   Data    ●   1 day of forecast data in XML format: 727MB●   Workflow    ●   Process data for a specific site   ...
SimpleXML<?php$siteId = 3;$forecasts = simplexml_load_file(forecasts.xml);$forecasts = $forecasts->xpath(    "/forecast-li...
Zorba<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END  for $forecast inz:pars...
Results                            10000                                      9000                            9000        ...
AWS Libraries                10000                9000    8589                8000                7000Lines of Code       ...
Resources●   Usage docs: zorba-xquery.com/html/documentation●   Live demo: zorba-xquery.com/html/demo●   Source code: code...
Questions?
Contact InformationEmail:●   vikram-vaswani.in/contactWeb:●   www.melonfire.com●   vikram-vaswani.inSocial networks:●   pl...
Upcoming SlideShare
Loading in …5
×

High Performance XQuery Processing in PHP with Zorba by Vikram Vaswani

3,857 views

Published on

Discusses PHP's Zorba extension and explains how it can be used to add advanced XQuery processing to a PHP application.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,857
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

High Performance XQuery Processing in PHP with Zorba by Vikram Vaswani

  1. 1. High Performance XQueryProcessing in PHP with Zorba Vikram Vaswani November 2012
  2. 2. Vikram VaswaniFounder, Melonfire● Product design and implementation with open source technologies● 20+ products launched for customers worldwideAuthor and active PHP community participant● 7 books for McGraw-Hill USA● 250+ tutorials for IBM dW, Zend Developer Zone and othersMore information at http://vikram-vaswani.in
  3. 3. XML Support in PHP● XML processing: SimpleXML and XMLReader● XML transformation: XSLT and XML-DAS● Event-based parsing: SAX● Tree-based parsing: DOM● Serialization: WDDX● Dynamic documents: XMLWriter
  4. 4. Whats Missing?
  5. 5. Introducing Zorba● General purpose XQuery processor for PHP 5.3+● Supports XQuery v1.0 and related specifications● Available for Windows, Linux, and Mac OS X● Open source; Apache 2.0 License● Project supported by FLWOR Foundation and Oracle.
  6. 6. Supported XML Technologies● XPath● XQuery v1.0 and v3.0● XQuery Scripting● Xquery Data Definition● XPath Full-Text 1.0● XSLT 1.0● XqueryX (limited)
  7. 7. PHP Installation● Linux and MacOS X ● Libxml2: http://xmlsoft.org/ ● Iconv: http://www.gnu.org/software/libiconv/ ● libUUID: http://linux.die.net/man/3/libuuid ● ICU (C version): http://www.icu-project.org/ ● Xerces (C version): http://xerces.apache.org/xerces-c/ ● GCC and related make/cmake utilities● Windows ● https://launchpad.net/zorba/+download● API Wrapper ● http://zorba.s3.amazonaws.com/ZorbaPHP.zip
  8. 8. PHP Installation● Linux and MacOS X ● Libxml2: http://xmlsoft.org/ ● Iconv: http://www.gnu.org/software/libiconv/ ● libUUID: http://linux.die.net/man/3/libuuid ● ICU (C version): http://www.icu-project.org/ ● Xerces (C version): http://xerces.apache.org/xerces-c/ ● GCC and related make/cmake utilities● Windows ● https://launchpad.net/zorba/+download● API Wrapper ● http://zorba.s3.amazonaws.com/ZorbaPHP.zip
  9. 9. Basic Usage<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();try { $queryStr = <<<END let $message := She sells sea shells by the sea shore return <result>{$message}</result>END; $query = $zorba->importQuery($queryStr); $result = $zorba->execute(); echo $result;} catch (Exception $e) { die(ERROR: . $e->getMessage());} Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  10. 10. Basic Usage
  11. 11. Usage Examples
  12. 12. Arithmetic Operators<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END declare variable $x := 30; declare variable $y := 12; let $r := $x + $y return <result> {$r} </result>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  13. 13. Sequences<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END let $dolls := (Echo, Victor, Sierra, November, Alpha) return <results> { for $doll in $dolls return <name>{$doll}</name> } </results>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  14. 14. String Functions<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END let $dolls := (Echo, Victor, Sierra, November, Alpha) return <results> {string-join($dolls, , )} </results>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  15. 15. Math Functions<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END let $set := (1 to 20) return <results> { for $i in $set where ($i mod 2 eq 0) return <value> {$i} </value> } </results>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  16. 16. Data Filtering(XML source)<?xml version="1.0"?><data> <record> <code>ABW</code> <name>Aruba</name> <continent>North America</continent> <year></year> <population>103000</population> <gnp>828.00</gnp> <capital> <name>Oranjestad</name> <population>29034</population> </capital> </record> ...</data> Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  17. 17. Data Filtering (Simple)<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$dm = $zorba->getXmlDataManager();$dm->loadDocument(data.xml, file_get_contents(data.xml));$queryStr = <<< END for $record in doc(data.xml)//record let $name := $record/name/text() let $code := $record/code/text() return <name code="{$code}">{$name}</name>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  18. 18. Data Filtering (Complex)<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();dm = $zorba->getXmlDataManager();$dm->loadDocument(data.xml, file_get_contents(data.xml));$queryStr = <<< END for $record in doc(data.xml)//record let $name := $record/name/text() let $code := $record/code/text() let $population := $record/population/text() where contains($record/continent/text(), Europe) where (xs:integer($population) gt 1000000) order by $population descending return <name code="{$code}" population="{$population}">{$name}</name>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  19. 19. Node Manipulation(XML source, before)<?xml version=1.0?><heroes> <hero> <name>Spiderman</name> <alterego>Peter Parker</alterego> </hero> <hero> <name>Superman</name> <alterego>Clark Kent</alterego> </hero> <hero> <name>The Flash</name> <alterego>Wally West</alterego> </hero></heroes> Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  20. 20. Node Manipulation<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$dm = $zorba->getXmlDataManager();$dm->loadDocument(heroes.xml, file_get_contents(heroes.xml));$queryStr = <<< END delete node doc(heroes.xml)//heroes/hero[last()], replace node doc(heroes.xml)//heroes/hero[last()] with <hero> <name>The Incredible Hulk</name> <alterego>Bruce Banner</alterego> </hero>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  21. 21. Node Manipulation(XML source, after)<?xml version="1.0" encoding="UTF-8"?><heroes> <hero> <name>Spiderman</name> <alterego>Peter Parker</alterego> </hero> <hero> <name>Superman</name> <alterego>Clark Kent</alterego> </hero> <hero> <name>The Incredible Hulk</name> <alterego>Bruce Banner</alterego> </hero></heroes> Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  22. 22. REST Parser<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<< END import module namespace zorba-rest = "http://www.zorba-xquery.com/zorba/rest-functions"; for $post in zorba-rest:get("http://user:pass@api.del.icio.us/v1/posts/recent")//posts/post where contains($post/@tag, book) return <result> <href> {string($post/@href)} </href> <description> {string($post/@description)} </description> <tags> {string($post/@tag)} </tags> </result>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  23. 23. REST Parser(After)<?xml version="1.0" encoding="UTF-8"?><result> <href>http://www.everythingphpmysql.com/</href> <description>How to do Everything with PHP & MySQL - Vikram Vaswani</description> <tags>book development php mysql web beginner</tags></result><result> <href>http://www.mysql-tcr.com/</href> <description>MySQL: The Complete Reference - Vikram Vaswani</description> <tags>mysql php book</tags></result>
  24. 24. JSON Parser(JSON source){ "books": [{ "title":"Phantom Prey", "author":"John Sandford", "price":"7.99" }, { "title":"A Most Wanted Man", "author":"John le Carre", "price":"8.99" },{ "title":"Beach Babylon", "author":"Imogen Edward-Jones", "price":"12.99" }]} Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  25. 25. JSON Parser<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<< END import module namespace json = "http://www.zorba-xquery.com/zorba/json-functions"; let $x := json:parse({$json}) for $i in $x//item where (xs:decimal($i/pair[@name=price]/text()) lt 10.00) return <result> {$i/pair[@name=title]/text()} </result>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  26. 26. JSON Parser<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<< END import module namespace json = "http://www.zorba-xquery.com/zorba/json-functions"; let $x := json:parse({$json}) for $i in $x//item where (xs:decimal($i/pair[@name=price]/text()) lt 10.00) return <result> {$i/pair[@name=title]/text()} </result>END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: Vikram Vaswani, " Building XQue ry-po we re d applicatio ns with PHP and Zo rba" http: //www. ibm. co m/de ve lo pe rwo rks/library/x-zo rba/inde x. html
  27. 27. Performance
  28. 28. Scenario● Data ● 1 day of forecast data in XML format: 727MB● Workflow ● Process data for a specific site ● Send selected temperatures to clients ● Display chart Cre dit: W illiam Candillo n, " Cutting Edg e Data Pro ce ssing with PHP & XQue ry" http: //www. slide share . ne t/wcandillo n/cutting -e dg e -data-pro ce ssing -with-php-xque ry
  29. 29. SimpleXML<?php$siteId = 3;$forecasts = simplexml_load_file(forecasts.xml);$forecasts = $forecasts->xpath( "/forecast-list/forecast[@site-id=$siteId]");foreach($forecasts as$forecast) { $time = $forecast->xpath("@time-step"); $value = $forecast->xpath( "//weather-elements/weather-element" ."[@name = ScreenTemperature]/text()"); echo "<temperature time=" . $time[0] ."value=" = . $value[0] . " />n";}?> Cre dit: W illiam Candillo n, " Cutting Edg e Data Pro ce ssing with PHP & XQue ry" http: //www. slide share . ne t/wcandillo n/cutting -e dg e -data-pro ce ssing -with-php-xque ry
  30. 30. Zorba<?phprequire_once Zorba/XQueryProcessor.php;$zorba = new XQueryProcessor();$queryStr = <<<END for $forecast inz:parse-xml(file:read-text("forecasts.xml"), <opt:options> <opt:parseExternalParsedEntity opt:skipRootNodes="1"/> </opt:options>) where $forecast/@site-id = "3" let $time:= string($forecast/@time-step) let $value:= $forecast/weather-elements/weather-element [@name = ScreenTemperature]/text() return <temperaturetime="{$time}" value="{$value}" />END;$query = $zorba->importQuery($queryStr);echo $zorba->execute(); Cre dit: W illiam Candillo n, " Cutting Edg e Data Pro ce ssing with PHP & XQue ry" http: //www. slide share . ne t/wcandillo n/cutting -e dg e -data-pro ce ssing -with-php-xque ry
  31. 31. Results 10000 9000 9000 8000 Memory Consumption (MB) 7000 6000 5000 4000 3000 2000 1000 19 0 SimpleXML Zorba PHP Extension Cre dit: W illiam Candillo n, " Cutting Edg e Data Pro ce ssing with PHP & XQue ry" http: //www. slide share . ne t/wcandillo n/cutting -e dg e -data-pro ce ssing -with-php-xque ry
  32. 32. AWS Libraries 10000 9000 8589 8000 7000Lines of Code 6000 5000 Java 4000 XQuery 2905 3000 2309 2000 1469 1000 572 455 0 S3 SimpleDB SNS AWS Libraries Cre dit: W illiam Candillo n, " Cutting Edg e Data Pro ce ssing with PHP & XQue ry" http: //www. slide share . ne t/wcandillo n/cutting -e dg e -data-pro ce ssing -with-php-xque ry
  33. 33. Resources● Usage docs: zorba-xquery.com/html/documentation● Live demo: zorba-xquery.com/html/demo● Source code: code.launchpad.net/~zorba- coders/zorba/trunk● Modules: zorba-xquery.com/html/modules● Toolkit: xqdt.org● Forums: zorba-users [at] googlegroups [dot] com● News: zorba-xquery.com/html/blog● Twitter: @wcandillon
  34. 34. Questions?
  35. 35. Contact InformationEmail:● vikram-vaswani.in/contactWeb:● www.melonfire.com● vikram-vaswani.inSocial networks:● plus.google.com/100028886433648406825● twitter.com/melonfire

×