Please note:
The example code in this directory may not always work with the
current version of the the HaXml libraries. What little time I have
for maintenance goes into the main HaXml facilites, not into testing
these small demonstration exercises. Sorry.
Parse/Pretty-Print example (Canonicalise.hs)
--------------------------
To demonstrate parsing and pretty-printing, I wrote a simple in-out
application:
$ hmake Canonicalise -I../lib
Test it on some XML documents:
$ ./Canonicalise album.xml
You will notice that it changes some parts of the document, for instance in
$ ./Canonicalise subjdb.xml
all parameter entities are replaced with their expansion.
Xml2Haskell example (album.dtd, AlbumDTD.hs, album.xml)
-------------------
In this example, I did the following:
Convert the XML DTD for an album into a Haskell module:
$ DtdToHaskell album.dtd AlbumDtd.hs
Edit the generated file (just to change the module name to match!)
$ vi AlbumDtd.hs
Wrote the test application (App.hs) using AlbumDTD.hs, and compiled it:
$ hmake App -I../lib
Running the test displays some progress messages, and outputs the original
document again, only with the album title changed.
$ ./App album.xml new.xml
And that's it.
Haskell2Xml example (Types.hs, DTypes.hs, Example.hs, subjdb.xml)
-------------------
The file Types.hs defines some data types for a mini-database.
Derive the Haskell2Xml apparatus using DrIFT:
$ DrIFT Types.hs >DTypes.hs
The example program in Example.hs just writes some Haskell data to
an XML file.
$ hmake Example -I../lib
$ ./Example
$ less subjdb.xml
I hope that's reasonably clear.
Bigger DtdToHaskell example
---------------------------
In directory SMIL, do
$ DtdToHaskell SMIL20.dtd DTD_SMIL20.hs
and have a look at the resulting Haskell file. This is a large
multi-part DTD for the Synchronised Multimedia Integration Language,
defined by the W3C. As of 2000-11-16, our XML parser has been extended
to deal with the external subset as fully as possible.
DTDpp
-----
This little program is just a pretty-printer for an XML DTD - it
inlines any included files and expands all PE references. Its main
use is to check that the HaXml parser can read a complicated DTD
without errors.
DebugLex
--------
Another little debugging program to help find errors in HaXml -
this time in the lexer. It prints a stream of lexed tokens (and
their source positions) to stdout, so you can examine whether
some complicated piece of syntax has confused the lexer.
|