Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/src/libraries/HaXml/examples/README

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


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.


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.