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