At 2001-05-04 03:00, Jerome Richalot wrote:
> Would anyone have a clue as to what could cause the following error
> message under psgml/emacs
> c:/Mes documents/Mes recherches/test.sgml line 8 col 2
> Illegal character ';' in DTD subset; at: ;;; This fil
> I get it upon [parse DTD]
> the only thing on the page is the following doctype declaration
> <!DOCTYPE teicorpus.2 PUBLIC "-//TEI P3//DTD Main DTD Driver File//EN"[
> <!ENTITY % TEI.prose "INCLUDE">
> <!ENTITY % TEI.analysis "INCLUDE">
> <!ENTITY % TEI.corpus "INCLUDE">
> <!ENTITY % TEI.linking "INCLUDE">
> <!ENTITY % isolat1 PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN">
> Line 8 col 2 is "]"
> thank you to whoever can help.
I suspect that the problem is in the 'external subset' of the DTD --
whether it's the beginning of the external subset or the end I don't
know, but I suspect the beginning. The position of the file, line,
and column pointers is the ']' at the end of the internal DTD subset
because it is when the parser reaches that point that it tries to read
the external DTD.
In this case, it's seeing and objecting to the string ";;; This fil",
which makes it look as if emacs is trying to read a file with
Lisp-style comments at the top, instead of a DTD file.
So the question becomes: what file is emacs reading when it thinks it
has found (or is looking for) "-//TEI P3//DTD Main DTD Driver
File//EN". If you know how to find that out, skip the rest of this
note and do so. When you find out, look at that file for the string
";;; This fil". (If you're impatient, you might try a global search
through the likely directories for this string ...).
To find out what file psgml is unhappy with, you need to find out how
it is resolving the reference to the public identifier "-//TEI P3//DTD
Main DTD Driver File//EN". Unfortunately, this can be a bit tricky.
Here's what I think you want to do.
1 Go to the buffer where you encountered the error you described.
2 Make sure you can recreate the error. (C-c C-p to compile the DTD,
or do it from the DTD menu). If you can't recreate the error
(i.e. the DTD compiles without errors), you indeed have a
mystery, but not one anyone can solve. If you can recreate the
3 using the emacs describe-variable command (C-h v, or Help /
Commands & Keys / Variable ...), check to see what value emacs
has for the following variables:
For comparison: on my system, these have the values:
sgml-local-catalogs = nil
sgml-catalog-files = ("CATALOG" "catalog" "d:/SGML/Public/CATALOG"
sgml-public-map = ("%s" "d:/SGML/Public/%s" "d:/SGML/Public/MLang/%s")
4 One by one, check the files listed in sgml-local-catalogs and
sgml-catalog-files. Each should be a legal SGML Open catalog file.
(If any of them contains, or begins with, the string ";;; This fil"
you may have found your culprit.)
Within each catalog file, look for an entry for the public
identifier "-//TEI P3//DTD Main DTD Driver File//EN" -- it will
look something like this:
PUBLIC '-//TEI P3//DTD Main DTD Driver File//EN'
Check the file whose file name is given in the system identifier
(the part on the second line in the example just given).
5 If you don't have any catalog files, you will need to figure
out how psgml is using your sgml-public-map variable, which is
more complicated than I want to try to explain here. You'll
need to consult the documentation.
If having found the guilty file the problem is not obvious, send
another note to this list describing what you've found out and including
the file in question.