At 08:52 AM 2/19/03 -0800, Joe English wrote:
Hi, thanks for responding. My desiderata:Graham Klyne wrote: > > Which leads me to a question: starting from the haskell.org web page, I > have identified three XML parsers in Haskell (HaXml, hXML, Haskell XML > Toolbox), none of which seem to support XML namespaces and only one of > which claims to be tested on both HUGS and GHC. > > Can anyone offer any recommendations, or maybe pointers to other work?What are you looking for in an XML toolkit?
1. Works with HUGS and GHC (I'm currently developing with HUGS, but anticipate using GHC for "production" code).
2. Namespaces, though I'm prepared to roll-my-own on top of an existing XML parser.
3. Well-formedness checking would be nice; i.e return a useful error indication if tags are mismatched, that sort of thing.
4. Validation is not required for my application.
I was looking at HXML yesterday, and it has the great advantage that I feel I can understand it well enough to tinker. And the code looks clean to my Haskell-inexperienced eye. The main drawback is the lack of well-formedness checking, but think I could live with that, at least for prototyping purposes.As far as HXML goes, I have a rough sketch of an implementation of XML namespace support, not yet finished or released. (This is a somewhat thorny problem; implementing XMLNS is not hard, but implementing it in a sane way requires some ingenuity.)
I think your presentation of an XML parse as a tree of XMLNodes closely matches what I want to do. Would it make sense to add a new node constructor indicating a syntax error?
I also thought briefly about adding namespace support, and contemplated replacing your
type Name = String -- from memory, maybe not exactly right?
with something like
data Name = QName String String
where the two strings would be namespace URI and local name respectively. I haven't yet figured what the cascading effects of such a change might be. Better, maybe, I define a new XMLnode type that uses QName instead of Name, and write a function to translate a (Tree XMLNode) to a (Tree XMLQNode)? That keeps things cleanly separated.
BTW, do you have a test suite for your parser? (I've found the HUnit library to be very useful, and easily transferred my previous experience with JUnit.)
#g
_______________________________________________
Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
------------------- Graham Klyne <[EMAIL PROTECTED]> _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell