
== TypedXML

tyxml is a parser and printer for xml, and a simple library for
building valid XHTML 1.1, HTML5 or SVG tree. The generic printer
allows a HTML compatible mode.

 * Directory {{{lib}}}

   XHTML typing using Thorsten Ohl's XHTML.M library to validate xml
   tree at compile-time, adapted to support HTML5 and SVG.

   The implementation uses a XML module for generating well
   formed---but not necessarily valid with respect to some DTD---XML
   documents.  The elements of type XML.elt and attributes of type
   XML.attrib are then hidden behind polymorphic phantom types type 'a
   elt = XML.elt and type 'a attrib = XML.attrib with 'a set to
   appropriate polymorphic variants.


 * Directory {{{syntax}}}

   A syntax extension to write XHTML or HTML5 inside a caml program.

== Requirements:

 * ocaml and camlp4
 * findlib
 * ocamlnet (for netstring)

 [optionnal]
 * ocamlduce

== Build intructions:

 $ ${EDITOR} Makefile.config
 $ make
 $ make install

== API documentation:

 $ make doc
 $ ${BROWSER} doc/api-html/index.html

== Examples:

 $ ocaml
        Objective Caml version 3.12.1

 # #use "topfind";;
 - : unit = ()
 # #camlp4o;;
	Camlp4 Parsing version 3.12.1

 # #require "tyxml.syntax";;
 # let x = << <a href="url"> Contents </a> >>;;
 val x : [> `A ] HTML5.M.elt = <abstr>
 # HTML5.P.print_list ~output:print_string [x];;
 - : string = "<a href=\"url\"> Contents </a>\n"
 # let x = << <html> <br/> </html> >>;;
 Error: This expression cannot be coerced to type
          ([< HTML5_types.html_content ] as 'a) HTML5.M.elt list;
        it has type ([> HTML5_types.br ] as 'b) HTML5.M.elt list
        but is here used with type 'a HTML5.M.elt list
        Type 'b = [> `Br ] is not compatible with type 'a = [< `Body | `Head ]
        The second variant type does not allow tag(s) `Br
