module Pxp_marshal:Marshalling of XML treessig
..end
The subtree is converted into a sequence of reconstruction_cmd
values
which can be marshaled using the standard implementation.
While the tree is written or read it is possible to change the character
encoding. Furthermore, the namespace prefixes can be changed to other
conventions.
type
reconstruction_cmd
reconstrucion_cmd
tokens.
These tokens can be subsequently translated into byte strings using
the standard Marshal
module.val subtree_to_cmd_sequence : ?omit_positions:bool ->
?enc:Netconversion.encoding ->
(reconstruction_cmd -> unit) ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.node ->
unit
subtree_to_cmd_sequence f n
:
The passed node n
is the root of the subtree to be marshaled. The function
f
is called several times with the sequence of reconstruction_cmd
values
that contain the contents of the subtree.
If the subtree has a namespace manager, the information contained in this object is marshaled, too. The namespace scope objects are also represented in the command sequence.
omit_positions
: If true, the position strings of the nodes which contain
line numbers are omitted. Default: false
enc
: if passed, the character encoding is changed to this type. If
omitted, the written sequence is encoded in the same manner as the
node tree.
val subtree_to_channel : ?omit_positions:bool ->
?enc:Netconversion.encoding ->
Pervasives.out_channel ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.node ->
unit
subtree_to_channel ch n
:
The node n
is the root of the subtree to be marshaled; the external
representation is written to ch
(which must have been opened
in binary mode).
(Info about namespaces: see subtree_to_cmd_sequence.)
omit_positions
: If true, the position strings of the nodes which contain
line numbers are omitted. Default: false
enc
: if passed, the character encoding is changed to this type. If
omitted, the written sequence is encoded in the same manner as the
node tree.
val document_to_cmd_sequence : ?omit_positions:bool ->
?enc:Netconversion.encoding ->
(reconstruction_cmd -> unit) ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.document ->
unit
val document_to_channel : ?omit_positions:bool ->
?enc:Netconversion.encoding ->
Pervasives.out_channel ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.document ->
unit
val subtree_from_cmd_sequence : (unit -> reconstruction_cmd) ->
Pxp_dtd.dtd ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.spec ->
'a Pxp_document.node
reconstruction_cmd
values.
The passed function is called repeatedly to get the stream of
reconstruction_cmd
.
If the DTD contains a namespace_manager: You must pass a namespace_manager to enable the namespace code. Note that the normprefixes found in the input stream are remapped to unique normprefixes, if this is necessary. This means that the namespace_manager should be filled with (normprefix, uri) pairs if you want to ensure that certain normprefixes are used. If you pass an empty namespace_manager, it is guaranteed that such remapping is not necessary, so the normprefixes are the same as in the original document. The namespace scope objects are retained, and thus the display prefixes are the same as in the original tree.
The character encoding of the node tree is set to the encoding of the
DTD. If necessary, the read strings are recoded.
val subtree_from_channel : Pervasives.in_channel ->
Pxp_dtd.dtd ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.spec ->
'a Pxp_document.node
in_channel
.val document_from_cmd_sequence : (unit -> reconstruction_cmd) ->
Pxp_yacc.config ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.spec ->
'a Pxp_document.document
val document_from_channel : Pervasives.in_channel ->
Pxp_yacc.config ->
('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.spec ->
'a Pxp_document.document
The character encoding of the node tree is set to the encoding of the
configuration. If necessary, the read strings are recoded.
The following functions avoid expensive reparsing, but take the shortcut
of decomposing the original tree into reconstruction_cmd
sequences and
recombining them afterwards to create the copy.
val relocate_subtree : ('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.node ->
Pxp_dtd.dtd ->
('b Pxp_document.node #Pxp_document.extension as 'b) Pxp_document.spec ->
'b Pxp_document.node
This function is optimized, and works block by block in order to avoid large temporary values.
See also relocate_documents
for known problems of relocation.
val relocate_document : ('a Pxp_document.node #Pxp_document.extension as 'a) Pxp_document.document ->
Pxp_yacc.config ->
('b Pxp_document.node #Pxp_document.extension as 'b) Pxp_document.spec ->
'b Pxp_document.document
Known problems. Although it is tried to keep as much information
as possible, there are unfortunately a few losses. Especially the
entities are not copied. They are missing in the copied DTD object,
and also the entity ID's in the nodes are only fake ID's that are
not connected with real entities.