RE: [xml] DTDs
- From: "Daniel Gehriger" <bulk linkcad com>
- To: <xml gnome org>
- Subject: RE: [xml] DTDs
- Date: Tue, 27 Aug 2002 09:50:45 +0200
Thanks a lot for your answer ! I have some minor questions left :
This is how I handle it now: I require an external DTD
declaration in
the XML file. I also register an external entity loader
with libxml2,
which checks for the specifiy id/url, and provides the DTD from
memory. Once loaded, I check the parse tree to make sure
that indeed
this external DTD declaration has been specified, and with
the correct
URL / id. Finally I have libxml2 validate the XML file.
Any comments on this procedure ?
Fine, very close to catalogs. Another possibility is to not
switch DTD parsing and have a (set of) preparsed DTD(s) and use
xmlValidateDtd() to check the documents against the DTD(s)
after parsing.
Catalogs ? You mean the external entity load part ? I tried using
catalogs for this, but I could not find a way to build an in-memory
catalog. It always seems to require some file to start with. If I could
create an in-memory catalog, then I would map the DTD ID/URL to
something like "jar:...." or "res:..." (I already wrote the
corresponding protocol handlers).
How would I preparse a DTD ? Looking through the API, I can't find
anything that would allow me to (a) create an "struct xmlDtd" from a
DTD, or better yet, load it from a serialized "struct xmlDtd".
Something else: I install my external entity loader using
xmlSetExternalEntityLoader(). Before calling this function, I remember
the previous loader using xmlGetExternalEntityLoader(), which I continue
to use in my loader if I don't handler the entity. The problem is that
this requires a global variable. I could not find a way to pass the
previous loader's function pointer as private (context) information to
my loader. The "context" argument to my the loader function only seems
to contain a pointer to the xmlDoc being created. Is there a way to
split xmlParseFile() in two steps ? Step 1: create an empty document,
and set some context information (how ?); Step 2: parse the file, and
make use of this context data in the entity loader ?
- Daniel
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]