2009年1月28日水曜日

XMLを扱う (その6) [Atom]


Atomを扱えるようにするワークフロー
----------------------------------

nxml-modeの配布にatomのrncが含まれているか確認。
含まれていない。

rfc4287からコピペで作成。
これは確立されたschemaなので、~/local/lib/schema/に置くことにする。
nxml-modeのschemaディレクトリには入れない。入れるとnxml-modeの更新
時の作業がややこしくなる。

rnc作成モードもあるようだが、今は使わない。将来やる。

コピペ完了。

中身をみるとSchematronを名前空間で参照している。
Schematronのrncは存在するのか?

http://xml.ascc.net/schematron/

には存在しない。

念のため上記URIから
Schematron schema
XML Schema schema
DTD schema

を取得する。とやってたら、

http://www.schematron.com/spec.html

を発見。

RELAX NG Comapact Syntax schema for ISO Schematron

だって。あるじゃん。

iso-schematron.rnc

を入手。~/local/lib/schema/に設置。

さて、rfcのrncのnamespaceが、

namespace atom = "http://www.w3.org/2005/Atom"

を含んでいるのがわからない。自分のことじゃないの??

http://relaxng.org/compact-tutorial-20030326.html

を確認する。

わかった。自分のことなのだ。

atom.rncにてelementを定義しているところはすべてatom:hogeになってい
る。で、atom:が付いていないシンボル?は、グラマーなどの名前につか
われている。感覚的に言うと、namespace atomの名前たちはexternalであ
り、namespace localの名前達はinternalという感じ。

もちろん、XML側での名前空間の利用時は、

<feed xmlns="http://www.w3.org/2005/Atom">

などとxmlnsをprefixなしで指定するから、atom:は不要である。

これで、rncは揃った。nxml-modeへの登録だ。

変数 rng-schema-locating-filesに
locating-filesに~/local/lib/schema/schemas.xmlを登録する。

(push "~/local/lib/schema/schemas.xml" rng-schema-locating-files)

そして、schemas.xmlはこんな感じ。

----
<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
<uri pattern="*.atom" typeId="ATOM"/>
<uri pattern="*.sch" typeId="SCHEMATRON"/>

<namespace ns="http://www.w3.org/2005/Atom" typeId="ATOM"/>
<namespace ns="http://www.ascc.net/xml/schematron" typeId="SCHEMATRON"/>

<typeId id="ATOM" uri="atom.rnc"/>
<typeId id="SCHEMATRON" uri="iso-schematron.rnc"/>
</locatingRules>
----

これで、*.atomを開くと、、、お、自動的にSchemaが選択された。


道程は長い。こつこつ。

0 件のコメント: