TDTDを使う

バージョン 0.7.1
オリジナルサイト http://www.mulberrytech.com/tdtd/
環境 Windows 2000/XP, Cygwin, Meadow 1.14 (Emacs 20)
前提
  • Cygwinルート: C:/cygwin
  • Emacs: /usr/local/bin/emacs
  • 作業シェル: Cygwin上のbash
  • インストール先: /usr/local/share/emacs/site-lisp/tdtd
  • ソース展開先: C:/usr1/pub/tdtd-0.7.1

インストール

  1. 配布パッケージを展開します。
    cd c:/usr1/pub
    mkdir tdtd-0.7.1
    cd tdtd-0.7.1
    unzip c:/usr1/home/ftp/pub/lang/sgml/tdtd.zip
    
  2. .elをバイトコンパイルします。
    cat >C:/tmp/build.el <<EOF
    (setq load-path (cons "." load-path))
    (defun tdtd-build ()
     (mapcar
      (function
       (lambda (x) (byte-compile-file x)))
      (list `ls -1 *.el | sed 's/.*/\"&\"/g'`)))
    EOF
    
    /usr/local/bin/emacs -batch -q -no-site-file -l C:/tmp/build.el -f tdtd-build
    
  3. .elと.elcをelispディレクトリにコピーします。
    mkdir /usr/local/share/emacs/site-lisp/tdtd
    install -c -m 644 *.el* /usr/local/share/emacs/site-lisp/tdtd
    
  4. .emacsを編集します。
    ;;
    ;; DTD
    ;;
    
    ;; DTD mode
    (setq load-path
          (cons "c:/cygwin/usr/local/share/emacs/site-lisp/tdtd/" load-path))
    (autoload 'dtd-mode "tdtd" "Major mode for SGML and XML DTDs." t)
    (autoload 'dtd-etags "tdtd"
      "Execute etags on FILESPEC and match on DTD-specific regular expressions."
      t)
    (autoload 'dtd-grep "tdtd" "Grep for PATTERN in files matching FILESPEC." t)
    
    ;; Turn on font lock when in DTD mode
    (add-hook 'dtd-mode-hooks
              'turn-on-font-lock)
    
    (setq auto-mode-alist
          (append
           (list
            '("\\.dcl$" . dtd-mode)
            '("\\.dec$" . dtd-mode)
            '("\\.dtd$" . dtd-mode)
            '("\\.ele$" . dtd-mode)
            '("\\.ent$" . dtd-mode)
            '("\\.mod$" . dtd-mode))
           auto-mode-alist))
    

使い方

以下では、例としてURLリストを保持するXML DTDを作成します。 このDTDは以下のような文書(sample.xml)を処理します。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE URLList SYSTEM "URLList.dtd">
<URLList>
  <URLItem name="Meadow Home" url="http://www.mulberrytech.com/tdtd/"/>
  <URLDirectory name="Emacs Library"/>
    <URLItem name="PSGML Home" url="http://db-www.aist-nara.ac.jp/xml/psgml/"/>
    <URLItem name="TDTD Home" url="http://www.mulberrytech.com/tdtd/"/>
  </URLDirectory>
</URLList>

  1. XML宣言を記述します。
    <?xml version="1.0"?>
    
  2. タイトルコメントを入力します。
    C-uC-cC-c
    [Comment:] URL List DTD
    
    この操作により以下の行が挿入されます。
    <!-- ============================================================= -->
    <!--                    URL List DTD                               -->
    <!-- ============================================================= -->
    
  3. URList要素を定義します。
    C-cC-e
    [Element tag: ] URLList
    [Descriptive name: ] URLList
    [Comment: ] URLList
    [Content spec: ] (URLDirectory | URLItem)*
    
  4. URLDirectory要素を定義します。
    C-cC-e
    [Element tag: ] URLDirectory
    [Descriptive name: ] URLDirectory
    [Comment: ] URLDirectory
    [Content spec: ] (URLDirectory | URLItem)*
    
  5. URLDirectory要素の属性を定義します。
    C-cC-a
    [Element type: ] URLDirectory
    [Attribute tag: ] name
    [Comment: ] Name
    [Type or enumeration: ] CDATA
    [Default: ] #REQUIRED
    
  6. URItem要素を定義します。
    C-cC-e
    [Element tag: ] URLItem
    [Descriptive name: ] URLItem
    [Comment: ] URLItem
    [Content spec: ] EMPTY
    
  7. URLItem要素の属性を定義します。
    C-cC-a
    [Element type: ] URLItem
    [Attribute tag: ] name
    [Comment: ] Name
    [Type or enumeration: ] CDATA
    [Default: ] #REQUIRED
    C-cC-a
    [Attribute tag: ] url
    [Comment: ] URL
    [Type or enumeration: ] CDATA
    [Default: ] #REQUIRED
    
  8. 目的のXML(sample.xml)を表現しているか確認します。 以下のようにプロログのパージングおよび文書処理がともに成功すれば、 基本的にはokです。
    C-xC-f
    [Find file: ] sample.xml
    C-cC-p
    [Parsing prolog...done]
    C-cC-o
    [Ok]
    

リファレンス

> dtd-electric-mdc  
C-c> dtd-insert-mdc  
C-cC-a dtd-declare-attribute  
C-cC-n dtd-declare-notation  
C-cM-C-% dtd-declare-external-entity  
C-cC-% dtd-declare-parameter-entity  
C-cC-e dtd-declare-element  
C-cC-c dtd-comment  
C-cC-v sgml-validate  
M-gM-f font-lock-fontify-buffer  
M-gM-C-g
M-C-g
M-C-i complete-tag  

YUTANI Miki <yuta@kt.rim.or.jp>
Copyright © 2003 by YUTANI Miki.
All rights reserved.
$LastUpdated: Sun Jan 05 17:14:29 2003 $