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
- ...an emacs wiki note about ‘Multi-File Documents’ which suggests asking on the (now apparently defunct) nxml-mode mailing list.
- ...a 14-year old query on the
help-gnu-emacslist which seems to have gone unanswered.
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.