xml.coverpages.org

The Cover Pages: XT and Emacs/psgml: incompatible SYSTEM identifiers

  • ️Robin Cover
  • ️Invalid Date

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.