XQuery used on countries XML data.
import module namespace http = "http://expath.org/ns/http-client"; declare %an:sequential function local:doc($href as xs:string) { http:send-request(<http:request href="{$href}" method="GET" />)[2] }; let $doc := local:doc("http://prod-c2g.s3.amazonaws.com/db/Winter2013/files/countries.xml") let $bigCountries := $doc/countries/country[@population > 100000000 and exists(language)] return <html> <head> <title>Visualization of languages for countries with population greater than 100 million</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </meta> <style type="text/css"> table {{ border-collapse: collapse; }} caption {{ background-color: #ADAEAF; text-align: left; }} .header {{ background-color: #E6F1F3; }} td, th {{ border: 1px dotted #B3D4DB; padding: 2px; vertical-align: top; text-align: left; }} </style> <script type="text/javascript" src="https://www.google.com/jsapi"> </script> <script type="text/javascript"> // Load the Visualization API and the piechart package. google.load('visualization', '1.0', {{'packages':['corechart']}}); // Set a callback to run when the Google Visualization API is loaded. google.setOnLoadCallback(drawCharts); function drawChart(percentages, countryName) {{ // Create the data table. var data = new google.visualization.DataTable(); data.addColumn('string', 'Country'); data.addColumn('number', 'percentage'); data.addRows(percentages); // Set chart options var options = {{'title':'Languages', 'width':400, 'height':300}}; // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.PieChart(document.getElementById(countryName)); chart.draw(data, options); }} function drawCharts() {{ { for $country in $bigCountries let $data := string-join(for $lang in $country/language return concat('["', data($lang), '",', data($lang/@percentage), ']'), ',') return concat('drawChart([', $data, '], "', data($country/@name),'"); ') } }} </script> </head> <body> <table> <caption>Countries with population greater than 100 million</caption> <thead> <tr class="header"> <th>Name</th> <th>Population</th> <th>Area</th> <th>Languages</th> </tr> </thead> <tbody> { for $country in $bigCountries order by count($country/language) descending return <tr> <td>{data($country/@name)}</td> <td>{data($country/@population)}</td> <td>{data($country/@area)}</td> <td><div id="{data($country/@name)}"></div></td> </tr> } </tbody> </table> </body> </html>
Result from executing XQuery on Zorba
<html> <head> <title>Visualization of languages for countries with population greater than 100 million</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <style type="text/css"> table { border-collapse: collapse; } caption { background-color: #ADAEAF; text-align: left; } .header { background-color: #E6F1F3; } td, th { border: 1px dotted #B3D4DB; padding: 2px; vertical-align: top; text-align: left; } </style> <script type="text/javascript" src="https://www.google.com/jsapi"> </script> <script type="text/javascript"> // Load the Visualization API and the piechart package. google.load('visualization', '1.0', {'packages':['corechart']}); // Set a callback to run when the Google Visualization API is loaded. google.setOnLoadCallback(drawCharts); function drawChart(percentages, countryName) { // Create the data table. var data = new google.visualization.DataTable(); data.addColumn('string', 'Country'); data.addColumn('number', 'percentage'); data.addRows(percentages); // Set chart options var options = {'title':'Languages', 'width':400, 'height':300}; // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.PieChart(document.getElementById(countryName)); chart.draw(data, options); } function drawCharts() { drawChart([["Hindi",30]], "India"); drawChart([["Japanese",100]], "Japan"); drawChart([["Pashtu",8],["Urdu",8],["Punjabi",48],["Sindhi",12],["Balochi",3],["Hindko",2],["Brahui",1],["Siraiki",10]], "Pakistan"); drawChart([["Russian",100]], "Russia"); } </script> </head> <body> <table> <caption>Countries with population greater than 100 million</caption> <thead> <tr class="header"> <th>Name</th> <th>Population</th> <th>Area</th> <th>Languages</th> </tr> </thead> <tbody> <tr> <td>Pakistan</td> <td>129275664</td> <td>803940</td> <td> <div id="Pakistan"/> </td> </tr> <tr> <td>India</td> <td>952107712</td> <td>3287590</td> <td> <div id="India"/> </td> </tr> <tr> <td>Japan</td> <td>125449704</td> <td>377835</td> <td> <div id="Japan"/> </td> </tr> <tr> <td>Russia</td> <td>148178480</td> <td>17075200</td> <td> <div id="Russia"/> </td> </tr> </tbody> </table> </body> </html>
So what does this page look like in a browser?