2008-04-18

nXML modeで使うスキーマを追加する

例として、EmacsnXML modeのスキーマにAtom Syndication Formatを追加する。

nXML modeでは、要素の補完や検証にRELAX NGのスキーマを使うため、まず、RELAX NGで書かれたAtom Syndication Formatのスキーマを手に入れる必要がある。幸い、Atom Syndication Formatを定義しているRFC 4287のAppendix Bに、RELAX NG Compact Syntaxで書かれたスキーマがあるので、これを使う。

次に、どういった場合に、どのスキーマを使うかを定義している、schemas.xmlを編集する。これは、nXML modeがインストールされているディレクトリの中の、schemaというディレクトリにある。locatingRules要素の下に、

<namespace ns="http://www.w3.org/2005/Atom" typeId="Atom"/>
<documentElement localName="feed" typeId="Atom"/>
<documentElement localName="entry" typeId="Atom"/>
<typeId id="Atom" uri="atom.rnc"/>

を追加する。こうすると、名前空間とルート要素に基づいて、自動的にスキーマが決定されるようになる。

以上。詳しくはnXML modeのinfoを参照すること。

2008-04-10

cutで記述量を減らす

SRFI-26で定義されているcutを使うと、記述量を減らせて楽。簡単な例を挙げると、

(cond ((#/post-(.+)$/ "tag:blogger.com,1999:blog-blogID.post-postID") =>
       (lambda (m) (m 1))))

というのが、

(cond ((#/post-(.+)$/ "tag:blogger.com,1999:blog-blogID.post-postID") =>
       (cut <> 1)))

と書けたりする。些細な違いかもしれないけど、lambdaなんていくらでも使うものだし、塵が積もって山になる……かもしれない。