Powered by SmartDoc

xml-mode簡易ガイド

2.092 - Wed, 04 Oct 2006 22:31:52 +0900
Shinichi Sugiyama
http://chez-sugi.net/

目次

概要

xyzzyでXMLファイルを編集するためのモードです。YMTZさんのhtml+-modeをベースにXMLには不要と思われる機能を削除し、XMLに最低限必要な機能を追加しました。

追加した機能は以下の通りです。

空エレメント対応
<... />という形のタグに対応して、インデントや、状況判断を行います。
CDATA対応
<![CDATA[...]]>のなかはインデントや各種処理対象からはずします('や"の扱いにバグがあります)。
ドキュメントタイプによるキーワードの切り替え
ネームスペース対応
各ドキュメントタイプのキーワードをネームスペースを指定して複数読み込むことができます。
スタイルシートの適用
MSXSLまたはXTコマンドによりXML文書にスタイルシートを適用し、結果を別バッファに返します。
コマンド実行
ファイルの種類ごとに定められたコマンドを実行。デフォルトはブラウザで表示。

ダウンロード

NetInstallerを使うか手作業でインストールする方法のどちらかを選んでください。

インストール

NetInstallerでインストールする方法はそちらのドキュメントを参照してください。ここでは手動による方法を説明します。

  1. 解凍したファイルをそのままのディレクトリ構成でxyzzyをインストールしたディレクトリにコピーまたは移動します。
  2. ~/.xyzzyやsiteinit.lに以下のコードを追加します。
    ~/.xyzzyに追加する場合
    (require "xml/xml-mode")
    (use-package 'xml)
    	  
    
  3. 各ドキュメントタイプごとのキーワード色づけ、補完、コマンド実行などの機能を利用するには、さらにそれら用のファイルをrequireしてください。
  4. 上記の設定を反映させるために、xyzzyを再起動します。

起動

M-x xml-modeと手動で実行すればカレントバッファがxml-modeになります。

また.xmlという拡張子のファイルを開くと自動でxml-modeになります。各ドキュメントタイプごとのファイルをロードすれば、それらの所定の拡張子のファイルを開くと、自動でxml-modeになります(2.08より*auto-mode-alist*の設定は不要になりました)。

さらに、文書中に<!-- -*- xml -*- -->というコメントを挿入しておくことにより、拡張子に関係なくopen時にxml-modeにすることもできます(xyzzyの機能)。このコメントはxml-insert-something(C-x C-i)コマンドにより挿入することができます。

ドキュメントタイプ

xml-modeでは各ドキュメントタイプごとにキーワードの色づけ・補完をしたり、そのドキュメントタイプ固有のコマンドを実行したりすることができます。これらの機能を利用するには、各ドキュメントタイプごとのファイルをロードする必要があります。現状サポートしているドキュメントタイプは以下の通りです。

ドキュメントタイプ ファイル
xhtml xml/xhtml.l
SVG xml/svg.l
XSLT xml/xslt.l
XSL-FO xml/xsl-fo.l
MathML xml/mathml.l
XLink xml/xlink.l
RELAX NG xml/relaxng.l
SmartDoc xml/smartdoc.l
xyzzy reference xml/xyzref.l
Xi xml/xi.l
XTemplate xml/xtemplate.l

必要なものだけ選んでロードしてください。

(require "xml/xhtml")	    
(require "xml/svg")	    
(require "xml/xslt")	    
(require "xml/xsl-fo")	    
(require "xml/mathml")	 	    
(require "xml/xlink")  	    	    
(require "xml/relaxng")
(require "xml/smartdoc")	    
(require "xml/xyzref")	    	    
(require "xml/xi")
(require "xml/xtemplate")
	  

キーバインド

RET 改行+インデント付け
TAB インデント付け+補完
/ 閉じタグの自動補完
ESC C-, 以前に出現したタグの複写
C-. いろいろと自動補完(閉じタグ、括弧、パス、引用符, CDATA)
C-, 今の状況にあわせてタグをいい感じに推測して挿入。
C-: タグの対応のチェック
C-; エレメント階層をコメントアウト/イン
C-x C-j 相対/絶対パスの挿入
C-d delete-char-or-selectionのタグ・文字列削除版。*xml-delete-tag*または*xml-delete-string*をnon nilにしたときのみ有効
C-h backward-delete-char-untabify-or-selectionのタグ・文字列削除版。*xml-delete-tag*または*xml-delete-string*をnon nilにしたときのみ有効
ESC C-h 直前のタグの削除
ESC C-d 直後のタグの削除
C-x C-i いろいろと挿入(xml-decl、doctype, namespace, cdata, stylesheet, pi, mode-comment)
C-c t スタイルシート適用
C-c x xml-run
C-c c xml-runで起動するコマンドを指定
C-c d デフォルトネームスペースの指定
C-c a プレフィックスを指定してネームスペースに追加
C-c r プレフィックス付のネームスペースを削除
= タグの中では=""または=''を自動で挿入する。*xml-attrbute-quote-char*の値によりどちらか選択可能
C-c s リージョンの中の",',&,<,>&...;という形式に変換する。C-uをつけて実行すると、変換する文字を絞り込める。
ESC C-e バッファ全体のJIS文字以外の文字を&#uuuu;という文字実体参照の形に変換する。uuuuは文字のUnicodeを十進の数値に変換したもの。M-x xml-character-to-entity-regionでリージョン内の文字のみ変換する。
ESC C-c バッファ全体の&#uuuu;という文字実体参照を対応する文字に変換する。uuuuは文字のUnicodeを十進の数値に変換したもの。M-x xml-entity-to-character-regionでリージョン内の文字のみ変換する。

ToDo

履歴

2.092 - Wed, 04 Oct 2006 22:31:52 +0900
2.091 - Fri, 30 Sep 2005 01:30:26 +0900
2.09 - Thu, 29 Sep 2005 03:12:45 +0900
2.08 - Sun, 09 Nov 2003 03:27:06 +0900
2.07 - Fri, 24 Oct 2003 04:01:27 +0900
2.06 - Thu, 23 Oct 2003 03:03:43 +0900
2.05 - Thu, 29 May 2003 02:54:42 +0900
2.04a - Sun, 02 Mar 2003 14:10:05 +0900
2.04 - Mon, 24 Feb 2003 04:28:06 +0900
2.03 - Thu, 20 Feb 2003 01:23:15 +0900
2.02 - Fri, 14 Feb 2003 01:44:19 +0900
2.01 - Tue, 11 Feb 2003 01:29:37 +0900
2.00 - Fri, 31 Jan 2003 00:40:56 +0900
2.00RC4 - Thu, 30 Jan 2003 01:29:10 +0900
2.00RC3 - Wed, 29 Jan 2003 02:04:58 +0900
2.00RC2 - Tue, 28 Jan 2003 00:22:49 +0900
2.00RC1 - Mon, 27 Jan 2003 02:24:51 +0900
1.13 - Sun, 22 Dec 2002 04:30:42 +0900
Sat, 16 Feb 2002 21:54:27 +0900
Sat, 16 Feb 2002 04:18:17 +0900
Fri, 08 Feb 2002 01:22:42 +0900
Sun, 03 Feb 2002 02:15:08 +0900
Thu, 31 Jan 2002 01:41:06 +0900
Tue, 29 Jan 2002 22:53:46 +0900
Mon, 28 Jan 2002 23:09:18 +0900
Fri, 25 Jan 2002 01:22:04 +0900
Tue, 22 Jan 2002 03:36:07 +0900
Tue, 22 Jan 2002 01:07:33 +0900
Wed, 16 Jan 2002 22:24:52 +0900
Wed, 16 Jan 2002 00:33:34 +0900
Mon, 14 Jan 2002 21:35:36 +0900

詳細

コマンド実行

カレントバッファのXML文書の種別に応じて、コマンドを起動する機能です。たとえば*.foではfop.batが起動され、*.xiではxi.exeが起動されます。

オプションは標準では各コマンドごとに変数の値が参照されます。たとえば、fop.batならば*fop-options*xi.exeなら*xi-options*msxsl.exeなら*msxsl-options*xt.exeなら*xt-options*です。ただし、C-u C-c xというようにprefix引数付で起動すると、これらの変数ではなくミニバッファから読み込んだ値が使用されるようになります。下記のスタイルシート適用機能も同様です。

特にこれらのコマンドが指定されない場合、ブラウザでxmlファイルを表示しようとします。表示するためにはs.oowadaさんのbrowser.dll(必須)とohkuboさんのbrowserex(旧browser-wrap)(推奨)を組み込んでください。また、*xml-navigate-function*という変数に、自前で定義してたブラウザ起動の関数を設定することもできます。

起動するコマンドはC-c cで手動で切り替えることもできます。

スタイルシート適用機能について

現在のバッファのXMLファイルに指定したスタイルシートを適用して変換し、結果を"*XML Command output*"というバッファに出力します。なお、この機能を利用するにはmsxsl.exeまたはxt.exeが必要です。

標準ではmsxsl.exeが利用されます。以下の式を評価すると、xt.exeが利用されるようになります。msxsl.exeに戻すには*xsl-xt*の代わりに*xsl-msxsl*を指定してください。

(setq *xsl-transform-command* *xsl-xt*)
	

msxsl.exeは標準ではインストールされていません。同様にMicrosoftのページからダウンロードしてc:\windows\system32等PATHの通ったディレクトリにおいてください。

http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/MSDN-FILES/027/001/485/msdncompositedoc.xml

msxsl.exeを利用するにはMSXML3.0が必要です。MSXML3.0はIE6以降であれば標準でインストールされていますが、それ以前のバージョンをお使いの場合、以下のMicrosoftのページからダウンロードしてsetupを行ってください。

http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/772/msdncompositedoc.xml

xt.exeは以下のページからダウンロードできます。PATHの通ったディレクトリに置いてください。

http://www.jclark.com/xml/xt.html

ネームスペースについて

ちょっとわかりにくいので簡単な説明を書きます。

まずC-c dキーに割り当てているxml-set-default-namespaceですが、これでDOCTYPEを指定すると、そのDOCTYPEのキーワードがprefixなしで利用できるようになります。たとえばXHTML1.1を指定すると"h1"というタグが補完できたり、色付けされます。ただし、指定できるDOCTYPEは1つだけです。

次にC-c aキーに割り当てているxml-add-namespaceですが、こちらはprefixつきで指定したDOCTYPEのキーワードが追加されます。たとえばXHTML1.1を"html"というprefixで追加すると、"html:h1"というタグが補完できたり、色付けすることができます。複数のDOCTYPEを追加できます。

C-a rキーに割り当てているxml-remove-namespaceはxml-add-namespaceで追加したDOCTYPEを削除します。

ドキュメントタイプの定義

新しいタイプを定義するには以下のようにします。

DOCTYPEの定義(必須)

*xml-doctypes*に以下のようにリストを追加します。

(pushnew
 '("名前"
   "ルートエレメント"
   "PUBLIC識別子"
   "DTDのURL"
   "ネームスペースプレフィックスのデフォルト"
   "ネームスペースのURL"
   キーワード定義
   推測リスト
   )
 *xml-doctypes* :test #'equal)
	    

キーワード定義には2つの方法があります。

拡張子ごとにDOCTYPEを自動的にセットする(任意)

*xml-auto-doctype-alist*に以下のようにリストを追加

(pushnew '("ファイル名の正規表現" コマンド実行のタグ "DOCTYPEの名前")
	 *xml-auto-doctype-alist* :test #'equal)
	    

コマンド定義(任意)

*xml-command-alist*に以下のリストを追加

(push '(コマンド実行のタグ
	"テンプレート"
	引数1
	引数2
	...)
      *xml-command-alist*)
	    

テンプレートと各引数は評価されて(format nil ...)の引数として渡され、その結果が実行するコマンド行になります。

具体的な例はsite-lisp/xmlディレクトリの下の各ドキュメントタイプ定義ファイルを参照してください。

制限事項・問題点

このドキュメントの最新

http://chez-sugi.net/xyzzy/xml-mode.html