Re: [xml] DTDs
- From: Daniel Veillard <veillard redhat com>
- To: Daniel Gehriger <bulk linkcad com>
- Cc: xml gnome org
- Subject: Re: [xml] DTDs
- Date: Tue, 27 Aug 2002 03:58:06 -0400
On Tue, Aug 27, 2002 at 09:50:45AM +0200, Daniel Gehriger wrote:
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
yes, I just commented on the similarities of the approaches.
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).
Hum, that would require a new API. Also the problem is that
catalogs make heavy use of URI-Reference, and when using
a document coming from memory (and hence without base) it becomes
really fragile, I'm afraid ...
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".
include/libxml/parser.h
xmlDtdPtr xmlParseDTD (const xmlChar *ExternalID,
const xmlChar *SystemID);
is that so hard to find ? Just doing a grep ^xmlDtdPtr include/libxml/*.h ???
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 ?
Yes entity reference resolution is not context sensitive, changing
it would be quite complex at this point, sorry it's an application
wide mechanism ...
Daniel
--
Daniel Veillard | Red Hat Network https://rhn.redhat.com/
veillard redhat com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]