どうも、サーバーワークスでプログラマさせてもらっている川口です。
みなさん、シェルスクリプト書いてますか?コマンドラインの延長みたいなものなので欲張って色んな動作をさせようとすると非常に面倒なんですが、一度書いておけば様々な作業が一気に楽にそして正確に行えるようになるので重宝します。
今回紹介するのはコマンドライン上で動作するオープンソースのXMLツール xmlstarletです。コマンドラインでXMLをいじれるのでシェルスクリプトとも相性バッチリ。インストールも簡単、かつ対応形式も主要なのは押さえており機能面でも通常使用なら問題ないレベルなので是非試して見て下さい。
xmlstarletとは?
コマンドラインからXMLの書式化、変換、修正、および編集を行う事ができる様になるツールキットです。シェルスクリプト作成時にコマンドラインからXML文法チェックやパースの必要がある場合に、PHPやperlでわざわざコードを書かなくても対応できるようになります。
ちなみに使用にはlibxml2およびlibxsltライブラリーが必要です。
MacPortsで検索
% sudo port search xmlstarlet
xmlstarlet @1.0.1 (textproc)
xml command line utilities
インストール
特に注意する点は有りません。MacPortsコマンドでそのままインストールしてください。
(今回のインストール環境)
- Mac OS X 10.5.6
- MacPorts 1.700 % sudo port install xmlstarlet
確認
% port contents xmlstarlet
Port xmlstarlet contains:
/opt/local/bin/xmlstarlet
/opt/local/share/man/man1/xmlstarlet.1.gz
使用方法
今回は簡単な文法チェックが目的でしたのでバリデートのwell-formed形式で試してみます。その他のパリデート定義形式は以下のような形式(スキーマ言語)。(もしかしたらオプションで表示されないだけでもっと多いかも・・・)
- DTD
- 元々SGMLのスキーマ言語として開発された文書構造(文書型)定義スキーマ言語
- RELAX NG
- RELAX NG 技術委員会が策定したスキーマ言語
- XSD
- W3Cが開発・標準化にあたっているスキーマ言語
- well-formed
- W3Cが定めた整形XML文書形式
正常なXMLデータの場合
% xmlstarlet val -w test.xml
ptest.xml - valid
1. 「homepage」 -> 「homepega」等のタイプミス
(test.xml)
株式会社サーバーワークス
<address>東京都文京区音羽1丁目26-11 大和出版ビル2F, 3F</address>
03-5940-3282
03-5940-3548
http://www.serverworks.co.jp
sales@serverworks.co.jp
(実行結果)
% xmlstarlet val -w test.xml
test.xml:8: parser error : Opening and ending tag mismatch: homepega line 8 and homepage
2363
^
test.xml - invalid
2. ‘’ 等のタグ閉じ忘れ
(test2.xml)
株式会社サーバーワークス
<address>東京都文京区音羽1丁目26-11 大和出版ビル2F, 3F</address>
03-5940-3282
03-5940-3548
http://www.serverworks.co.jp
sales@serverworks.co.jp
</company
(実行結果)
% xmlstarlet val -w test2.xml test.xml:11: parser error : expected '>'
^ test2.xml - invalid