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の勉強にも使えたりします。