Q. about XML support

Graham Klyne GK@ninebynine.org
Thu, 20 Feb 2003 11:26:37 +0000


At 08:52 AM 2/19/03 -0800, Joe English wrote:

>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?

Hi, thanks for responding.  My desiderata:

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.

>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 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.

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

-------------------
Graham Klyne
<GK@NineByNine.org>