XT and Emacs/psgml: incompatible SYSTEM identifiers
From: David Megginson <david@megginson.com> Subject: Re: XT and Emacs/psgml: incompatible SYSTEM identifiers Date: 14 Oct 1999 17:36:33 -0400
Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Grossjohann) writes: > I'm trying to edit XML files with the psgml Emacs mode, and I'm trying > to convert these XML files to HTML using James Clark's XT > implementation of XSLT. > > Psgml expects the SYSTEM identifier to be a file name, to be searched > for in a list of directories. > > XT expects the SYSTEM identifier to be a URL, which, if relative, is > relative to the directory where the XML file is. > > Apparently, every XML document must have a SYSTEM identifier. I tried > giving both a SYSTEM and a PUBLIC identifier, but that didn't work at > all: psgml didn't seem to find it, and XT emits a syntax error.
[Megginson] This is a significant problem with PSGML -- it should be possible to rewrite it to use the URL support already in Emacs, but in the meantime, I simply add the following to my ~/.emacs -- actually, to ~/.psgml, which ~/.emacs loads:
(defvar sgml-sysid-alist '() "Association list of system IDs and actual file paths.") (defun sgml-insert-mapped-sysid (sysid) (let ((mapping (assoc sysid sgml-sysid-alist))) (cond (mapping (insert-file (cadr mapping)) t) (t nil)))) (setq sgml-sysid-resolve-functions (cons (function sgml-insert-mapped-sysid) (and (boundp 'sgml-sysid-resolve-functions) sgml-sysid-resolve-functions))) (setq sgml-sysid-alist '(("http://www.w3.org/TR/xhtml1/DTD/frameset.dtd" "/home/david/sgml/system/XHTML/frameset.dtd") ("http://www.w3.org/TR/xhtml1/DTD/strict.dtd" "/home/david/sgml/system/XHTML/strict.dtd") ("http://www.w3.org/TR/xhtml1/DTD/transitional.dtd" "/home/david/sgml/system/XHTML/transitional.dtd") ("http://www.w3.org/TR/xhtml1/DTD/HTMLlat1x.ent" "/home/david/sgml/system/XHTML/HTMLlat1x.ent") ("http://www.w3.org/TR/xhtml1/DTD/HTMLsymbolx.ent" "/home/david/sgml/system/XHTML/HTMLsymbolx.ent") ("http://www.w3.org/TR/xhtml1/DTD/HTMLspecialx.ent" "/home/david/sgml/system/XHTML/HTMLspecialx.ent") ("http://www.w3.org/1999/05/06-xmlschema-1/structures.dtd" "/home/david/sgml/system/structures.dtd") ("http://www.w3.org/1999/05/06-xmlschema-2/datatypes.dtd" "/home/david/sgml/system/datatypes.dtd") ("http://www.xmlnews.org/dtds/xmlnews-story.dtd" "/home/david/projects/XMLNews/dtds/xmlnews-story.dtd") ("http://www.xmlnews.org/dtds/xmlnews-meta.dtd" "/home/david/projects/XMLNews/dtds/xmlnews-meta.dtd")))
To map other URLs to actual files, just add the mappings to the alist. Of course, a cleaner and more robust solution would be nice, but I manage to live with this for now.
All the best,
David
David Megginson david@megginson.com http://www.megginson.com/
Prepared by Robin Cover for the The SGML/XML Web Page archive.