Re: [Haskell-cafe] Haskell DB and XML libs: one user's experience

2006-05-18 Thread S. Alexander 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
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe



__
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Haskell DB and XML libs: one user's experience

2006-05-16 Thread Robert Dockins

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
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe