Haskell DB and XML libs: one user's experience

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Haskell DB and XML libs: one user's experience

Bugzilla from robdockins@fastmail.fm
Hello all,


I recently found myself needing to do some data manipulation; I  
needed to take some data from a database and generate a series of XML  
files from it.  In the past I've done most of this sort of work in  
Java, but this time I decided I'd take the opportunity to explore the  
state of the art of Haskell DB and XML libraries.


As to DB, I tried using HDBC first.  I was actually a little  
surprised how straightforward it was.  My database (PostgreSQL) is  
directly supported, and the compile/install went smoothly.  My first  
test connection program that typechecked worked as expected (!) and I  
was soon executing queries doing useful work with the results.  I'd  
just like to take a moment to congratulate John Goerzen for creating  
a product with a low barrier of entry for using databases in  
Haskell.  As I didn't really do anything beyond simple queries, can't  
comment on more advanced features.


For XML, I wavered between HaXml and HXT (the Haskell XML Tookbox).  
I initially decided to use HXT because it has support for xml  
namespaces, which I was going to need, and because it just seems to  
be the most complete and advanced package available.  The HXT install  
suffers a little bit from transitive-closureitis, but, overall wasn't  
too bad.  However, I had a really hard time using it!  The API is  
_really_ intimidating, and I couldn't find any basic tutorial-style  
documentation.  The API docs are a little hard to use because related  
definitions are spread out over a bunch of modules, and the links  
don't always work.  Also, the theses are nice, but they read like  
theses ;-)  That's not what I want when I have a job to complete.  
Long story made short; I couldn't figure out how to create and XML  
document and serialize it to disk.  I was reasonably motivated and  
I'm a pretty experienced Haskell programmer, but I had to call it  
quits after about 3 hours of struggling with it.  Most of my programs  
would mysteriously fail to produce output OR errors!  It was really  
frustrating.


I ended up using HaXml instead and shoehorning in the namespaces by  
using attributes named "xmlns:xyz" etc. on the document root element  
(which is OK, but not ideal).  The HaXml API was also tough to work  
with but was less mystifying than HXT's, and I eventually got it to  
work.  I was a little disappointed by the results, because the pretty  
printer does some fairly bizarre things to ensure that it doesn't  
introduce extra whitespace into the DOM.  I also had to do some  
futzing to make HaXml correctly escape literal text.  Finally, the  
using the HaXml API to generate XML results in verbose code that's  
hard to read.  I was hoping that I'd get results comparable to using  
xmlenc (http://xmlenc.sourceforge.net/) in Java, but I was  
disappointed by fairly low signal-to-noise ratio (although in all  
fairness, its probably comparable to using the DOM or SAX Java  
APIs).  Overall, HaXml works, but feels a bit awkward, at least for  
this use case.


Now taking a slightly closer look at HXML, I see that it may be the  
best choice for what I was attempting to do (although it also doesn't  
support namespaces).  The simplified representation looks  
particularly nice for building XML from scratch.  I may try rewriting  
with HXML and see how that goes.


So that's it.  I don't have any deep conclusions, but I thought I'd  
share my experiences in the hopes that they will be helpful to somebody.



Rob Dockins

Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
           -- TMBG

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: Haskell DB and XML libs: one user's experience

Alex Jacobson
It sort of depends on whether you are a client, a server, or an
intermediary.

HAppS has a wrapper around HaXML designed to make it really easy to
generate XML.  My HAppS apps use it to generate XML and then rely on
external XSLT processors to transform that XML to HTML or MIME as
needed.  You can check out the http://pass.net source code for an
example of how that works (darcs get http://pass.net/s/repo).

Client side XML is the big mystery for me right now.  In particular, I
am looking for a nice way to talk to SOAP servers (in particular
PayPal) and am looking at using HAIFA for that, but have not had the
time to explore enough to make a recommendation.  Note: HAIFA is
intended to operate SOAP servers so this is an area for exploration.

-ALex-



On Tue, 16 May 2006, Robert Dockins wrote:

> Hello all,
>
>
> I recently found myself needing to do some data manipulation; I needed to
> take some data from a database and generate a series of XML files from it.
> In the past I've done most of this sort of work in Java, but this time I
> decided I'd take the opportunity to explore the state of the art of Haskell
> DB and XML libraries.
>
>
> As to DB, I tried using HDBC first.  I was actually a little surprised how
> straightforward it was.  My database (PostgreSQL) is directly supported, and
> the compile/install went smoothly.  My first test connection program that
> typechecked worked as expected (!) and I was soon executing queries doing
> useful work with the results.  I'd just like to take a moment to congratulate
> John Goerzen for creating a product with a low barrier of entry for using
> databases in Haskell.  As I didn't really do anything beyond simple queries,
> can't comment on more advanced features.
>
>
> For XML, I wavered between HaXml and HXT (the Haskell XML Tookbox).  I
> initially decided to use HXT because it has support for xml namespaces, which
> I was going to need, and because it just seems to be the most complete and
> advanced package available.  The HXT install suffers a little bit from
> transitive-closureitis, but, overall wasn't too bad.  However, I had a really
> hard time using it!  The API is _really_ intimidating, and I couldn't find
> any basic tutorial-style documentation.  The API docs are a little hard to
> use because related definitions are spread out over a bunch of modules, and
> the links don't always work.  Also, the theses are nice, but they read like
> theses ;-)  That's not what I want when I have a job to complete.  Long story
> made short; I couldn't figure out how to create and XML document and
> serialize it to disk.  I was reasonably motivated and I'm a pretty
> experienced Haskell programmer, but I had to call it quits after about 3
> hours of struggling with it.  Most of my programs would mysteriously fail to
> produce output OR errors!  It was really frustrating.
>
>
> I ended up using HaXml instead and shoehorning in the namespaces by using
> attributes named "xmlns:xyz" etc. on the document root element (which is OK,
> but not ideal).  The HaXml API was also tough to work with but was less
> mystifying than HXT's, and I eventually got it to work.  I was a little
> disappointed by the results, because the pretty printer does some fairly
> bizarre things to ensure that it doesn't introduce extra whitespace into the
> DOM.  I also had to do some futzing to make HaXml correctly escape literal
> text.  Finally, the using the HaXml API to generate XML results in verbose
> code that's hard to read.  I was hoping that I'd get results comparable to
> using xmlenc (http://xmlenc.sourceforge.net/) in Java, but I was disappointed
> by fairly low signal-to-noise ratio (although in all fairness, its probably
> comparable to using the DOM or SAX Java APIs).  Overall, HaXml works, but
> feels a bit awkward, at least for this use case.
>
>
> Now taking a slightly closer look at HXML, I see that it may be the best
> choice for what I was attempting to do (although it also doesn't support
> namespaces).  The simplified representation looks particularly nice for
> building XML from scratch.  I may try rewriting with HXML and see how that
> goes.
>
>
> So that's it.  I don't have any deep conclusions, but I thought I'd share my
> experiences in the hopes that they will be helpful to somebody.
>
>
>
> Rob Dockins
>
> Speak softly and drive a Sherman tank.
> Laugh hard; it's a long way to the bank.
>          -- TMBG
>
> _______________________________________________
> Haskell-Cafe mailing list
> [hidden email]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>

______________________________________________________________
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe