Author: ~blee Unknown User (blee)
Introduction
nXML Mode is a major mode for GNU Emacs which provides guided editing of XML documents based on an associated schema. Like other major modes (e.g. c-mode, etc.) it also provides features like syntax highlighting and automatic indentation.
Installation
Setup (Central Unix)
The unix-admin folks have kindly made nxml-mode nXML mode is not available in the centralized Emacs Central Unix site-lisp configuration at the moment, so you'll need to install it into your home directory. Once it's a part of Central Unix, we'll update these instructions so you can use the managed installation.library. Use the following procedure to set up nxml-mode on your Central Unix account:
- Add the statement
'alias emacs emacs-21.4'
to your.cshrc
file. On Linux nodes, the default emacs installation is in /usr/bin, and is local to the individual machine. This alias will ensure that you use the site-wide Emacs installation.
- Add the following lines to your
.emacs
file:
No Format |
---|
;; make sure that nxml-mode can auto-load
(load "rng-auto.el")
;; load nxml-mode for files ending in .xml, .xsl, .xsd, .rng, .xhtml
(setq auto-mode-alist
(cons '("\\.\\(xml\\|xsl\\|xsd\\|rng\\|xhtml\\)\\'" . nxml-mode)
auto-mode-alist))
|
Setup (Local)
Install the software
Use the following procedure if you want to set up nxml-mode locally (e.g. on a machine you use that's not part of Central Unix):
- Download the distribution. Windows users can retrieve nxml-mode-20041004.zip, which already includes the pipeline schema.Download the distribution.
- Unpack the tarball to a convenient directory, such as the one where you keep your other Emacs extensions. In these instructions, we'll use ~/site-lisp as the installation path.
- For ease of upgrading, symlink the version-specific directory name to the generic name 'nxml'
- Add the following lines to your
.emacs
file:
No Format |
---|
;; Add the nxml files to the search path for loading (setq load-path (append load-path '("~/site-lisp/nxml/"))) ;; make sure that nxml-mode can auto-load (load "~/site-lisp/nxml/rng-auto.el") ;; load nxml-mode for files ending in .xml, .xsl, .xsd, .rng, .xhtml (setq auto-mode-alist (cons '("\\.\\(xml\\|xsl\\|xsd\\|rng\\|xhtml\\)\\'" . nxml-mode) auto-mode-alist)) |
Configure the Pipeline Schema
nXML mode requires that the schema associated with a document instance be expressed in the Relax NG Compact Syntax. Relax NG is a schema language for XML that is in the final stages of ISO standardization. I've transformed the XSD-notation pipeline schema into Relax NG Compact notation ; and attached it looks like this:
No Format |
---|
default namespace = "http://glast-ground.slac.stanford.edu/pipeline"
namespace xsi = "http://www.w3.org/2001/XMLSchema-instance"
start = pipeline
pipeline = element pipeline {
attribute xsi:schemaLocation { xsd:string },
name,
type,
dataset-base-path,
run-log-path,
executable+,
batch-job-configuration+,
file*,
foreign-input-file*,
processing-step+
}
name = element name {
xsd:string { minLength="1" maxLength="30" }
}
type = element type {
xsd:NMTOKEN "SimReconDigi" |
xsd:NMTOKEN "test" |
xsd:NMTOKEN "Analysis" |
xsd:NMTOKEN "Reconstruction" |
xsd:NMTOKEN "Digitization" |
xsd:NMTOKEN "Report" |
xsd:NMTOKEN "SystemTest" |
xsd:NMTOKEN "Simulation" |
xsd:NMTOKEN "Reprocessing" |
xsd:NMTOKEN "Conversion"
}
dataset-base-path = element dataset-base-path {
xsd:string { minLength = "0" maxLength = "200" }
}
run-log-path = element run-log-path {
xsd:string { minLength = "1" maxLength = "200" }
}
executable = element executable {
xsd:string { minLength = "1" maxLength = "200" } ,
attribute name { xsd:string { minLength = "1" maxLength = "20" } },
attribute version { xsd:string { minLength = "1" maxLength = "20" } }
}
batch-job-configuration = element batch-job-configuration {
element working-directory { xsd:string { minLength = "0" maxLength = "200" } },
element log-file-path { xsd:string { minLength = "1" maxLength = "200" } },
attribute name { xsd:string },
attribute queue {
xsd:NMTOKEN "long" |
xsd:NMTOKEN "short" |
xsd:NMTOKEN "xlong" |
xsd:NMTOKEN "medium" |
xsd:NMTOKEN "xxl" |
xsd:NMTOKEN "express"
},
attribute group {
xsd:NMTOKEN "none" |
xsd:NMTOKEN "glastgrp" |
xsd:NMTOKEN "glastdata"
}
}
file = element file {
xsd:string,
attribute name { xsd:string { minLength = "1" maxLength = "30" } },
attribute type {
xsd:NMTOKEN "MC" |
xsd:NMTOKEN "Analysis" |
xsd:NMTOKEN "text" |
xsd:NMTOKEN "LDF" |
xsd:NMTOKEN "DIGI" |
xsd:NMTOKEN "RAW" |
xsd:NMTOKEN "rcReport" |
xsd:NMTOKEN "merit" |
xsd:NMTOKEN "svac" |
xsd:NMTOKEN "histogram" |
xsd:NMTOKEN "script" |
xsd:NMTOKEN "log" |
xsd:NMTOKEN "ntuple" |
xsd:NMTOKEN "tree" |
xsd:NMTOKEN "RECON"
},
attribute file-type {
xsd:NMTOKEN "jobOpt" |
xsd:NMTOKEN "root" |
xsd:NMTOKEN "txt" |
xsd:NMTOKEN "fits" |
xsd:NMTOKEN "pl" |
xsd:NMTOKEN "csh" |
xsd:NMTOKEN "tgz" |
xsd:NMTOKEN "xml" |
xsd:NMTOKEN "sh" |
xsd:NMTOKEN "tar" |
xsd:NMTOKEN "gz" |
xsd:NMTOKEN "tar.gz" |
xsd:NMTOKEN "pdf" |
xsd:NMTOKEN "ps" |
xsd:NMTOKEN "html" |
xsd:NMTOKEN "tex"
}
}
foreign-input-file = element foreign-input-file {
xsd:string,
attribute name { xsd:string { minLength = "1" maxLength = "30" } },
attribute pipeline { xsd:string { minLength = "1" maxLength = "30" } },
attribute file { xsd:string { minLength = "1" maxLength = "30" } }
}
processing-step = element processing-step {
element input-file { attribute name { xsd:string } }*,
element output-file { attribute name { xsd:string } }*,
attribute name { xsd:string },
attribute executable { xsd:string },
attribute batch-job-configuration { xsd:string }
}
|
...
to this page. The following procedure will allow nXML mode to associate the pipeline schema with your pipeline configuration files:
- Place this pipeline.rnc file in the directory ~/site-lisp/nxml/schema
...
- .
- Replace ~/site-lisp/nxml/schema/schemas.xml with this modified schemas.xml.
Usage
nXML mode continuously validates your document against the schema as you type, highlighting portions of the document that are invalid. Use the 'C-Enter' or 'M-Tab' keystrokes to complete the current element or attribute you are typing. If more than one possible completion is available, you will be presented with a list. This site provides more detailed documentation the modified version also attached to this page.