SummerWind

Web, Photography, Space Development

PerlでSchematronを処理する方法

先週ぐらいにSchematronを使ってみよーと思うことがあったので、PerlでSchematronを処理する方法を探してみたところ、CPANにXML::Schematronというそのものズバリなモジュールを発見。

さっそく使ってみましたが、簡単にSchematronを処理できて便利です。XML::Schematronは親クラスとなるモジュールなので、実際はインストールすると一緒に入るXML::Schematron::XPathとかXML::Schematron::LibXSLTを使います。使い方はこんな感じ。

use strict;
use warnings;
use utf8;
use XML::Schematron::XPath;

my $processor = XML::Schematron::XPath->new(schema => 'schema.xml');
my @messages = $processor->verify('sample.xml');

for(@messages) {
    print $_, '\n';
}

コンストラクタにSchematronのファイルパスを渡して、verify()メソッドでXMLに適用して結果を得るだけです。実にシンプル。上の例では、XML::Schematron::XPathを使ってますが、XML::Schematron::LibXSLTとかでも使い方は同じです。ちなみに、XPathの方はマシンに処理系がなくても使えますがパフォーマンス的にはけっこう遅めです。LibXSLTの方はマシンに処理系(libxslt)が入ってないと使えませんが、ライブラリに処理させるだけあってXPathよりも高速に動作します。

そんなわけで、Schematronってなかなか便利だなーと思う今日この頃。スキーマを書くのにXPathを使うので、XPathの勉強にも使えたりします。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。