running XQuery online

[Mon, 09 Nov 2009 01:26:54 +0000]
A while ago, I posted about my first experience with XQuery [] and how I'd used the .NET version of the Saxon [] processor on my local Windows machine. Obviously, I want to extend that experience to running XQueries online. So far, I know this can easily be done with a native XML database server like eXist []. That is to say, when I installed eXist on my local machine and made it go live: bam! - instant XML server with built-in XQuery functionality, accessible from anywhere. Another way is to use one of the more popular web-scripting languages to execute XQuery syntax. I nearly killed myself this weekend trying to install the Zorba PHP binding for XQuery [] (i.e. run XQuery natively from within a PHP script). I just couldn't get all the dependencies successfully installed on my virtual install of Ubuntu Netbook Remix [] (BTW: I use Sun's VirtualBox [] for virtualization). Perhaps I'll be able to make it work another time. Now, even though it makes all the sense in the world to stick with a native XML server like eXist if I want to make a large collection of searchable XML documents online (and I do), I'm feeling non-sensical. What I decided to try was to run my computer as a more traditional server using the X-Apache-MySql-PHP model, specifically WampServer []. From there, I placed my sample document, "books.xml []" and my "test.xquery" file from last time: <ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{data($x)}</li> } </ul> in WAMP's "www" directory - i.e. the directory which is accessible from the browser, the place where one would put all their HTML files, etc. for the world to see. Of course, I was still missing the actual XQuery processor at this point. What I tried is to put the relevant executables for Saxon in the "www" directory as well. ... Now, I'm sure this is totally unsafe or something, but I was just testing and I only make my computer "go live" as a server for short periods of time. Anyway, from there I used PHP to call the Saxon processor and to display the results in the browser. It actually worked! Here's the code: <?php echo "Hi. I'm going to use XQuery to list the books alphabetically."; exec("query.exe test.xquery !indent=yes", $results); foreach ($results as $value) { echo "$value"; } ?> You can see that the PHP "exec" command called the Saxon executable named "query.exe" and executes the "test.xquery" file. It saves the results in a variable called "results" and then prints each value of the results in the browser. For now, I'm OK with this, but I need to eventually do the same thing with the Java version of Saxon, I suppose, if I'm ever going to run this on a Linux server. It shouldn't present any new hurdles, but I need to try it to make sure, of course. If anyone out there has any thoughts or recommendations on a more elegant method to achieve these results - and what the security risks of the approach I've outlined presents (since I didn't use a CGI-bin), please speak up. I'm all ears. :) ... Update, November, 2009: No problems with using the Java version of Saxon. I did place it in a "bin" directory on my local server so that the Java file wouldn't reside in the directory that users have direct access to.


  1. nitin [2009-11-15 20:03:29]

    Hey Dana, The problem is me. :D I had all kinds of problems trying to install Xerces, which is I think where the whole thing fell apart. It looks like you guys have added some documention here: Perhaps I simply didn't see it before. But I'll give it another shot soon. I'm actually interested in the Python API, not just the PHP, since I know Python a little better. Thanks for a great XQuery processor!

  2. dana florescu [2009-11-11 16:19:34]

    Hi, please let us know what problems did you encounter with Zorba and PhP. That would be very useful for us, and maybe we can help you too. Thanks, best regards Dana