Emacs nxml-mode and parent documents (and their entity declaration)

22 Views Asked by At

I'm using the nxml-parent-document-set function in Emacs nxml-mode. It doesn't do what I expect (namely pull in internal entities such as &date; or &version; which are defined in the parent document), and I'm not sure whether I should be expecting that, or if there's a better way to achieve what I want.

I'm working with a custom (RNC) schema, in which the files containing ‘chapters’, can be processed either as part of a ‘book’ (ie, included as external entities), or standalone (where they are the complete document). The problem is that internal entities declared in the ‘book’ file are not visible in the ‘chapter’ file, so rnc-validate flags them as an error when visiting that file.

It appears that nxml-parent-document-set should resolve this, since it's documented as

Set `nxml-parent-document' and inherit the DTD &c.

However the comment attached to the function is

;; FIXME: this does not work.
;;  the idea is that by inheriting some variables from the parent,
;;  `rng-validate-mode' will validate entities declared in the parent.
;;  alas, the most interesting variables (`rng-compile-table' et al)
;;  are circular and cannot be printed even with `print-circle'.

I'm not sure whether the ‘alas’ there is telling me this doesn't in fact work (and it appears not to), or whether this is a side-remark about printing other ‘interesting variables’.

That is: is this a bug, or am I using this incorrectly?

I see that I can make the validation errors go away by extending the definition of xmltok-predefined-entity-alist (defined in xmltok.el) to include dummy values for the entities I want to refer to, but... that seems like a bit of a hack!

For reference, I see

I'm using Emacs 29.1, and a version of nxml-mode.el which is dated 2022.


An alternative strategy is to include the <!DOCTYPE declarations in the ‘chapter’ files, but somehow strip those out with some sort of cunning manoeuvre during processing (unappealing). Another alternative is to include the relevant information as, eg, @DATE@, and sed-substitute those in with a different manoeuvre (unappealing for different reasons).

Or is there a better place to ask? The nxml-mode list seems to be defunct, and the help-gnu-emacs list sounds too generic.

0

There are 0 best solutions below