1

Schematron と Perl に関するこの記事に沿って進めようとしています。

http://www.xml.com/pub/a/2002/01/23/perl-schematron.html?page=2

私の目標は、Docbook 5 ドキュメントを検証するために、RelaxNG と共に Schematron を使用することです。

ただし、この基本的な例を機能させることができないようです。O'Reilly の記事からコピーした Perl スクリプトを次に示します。

#!/usr/bin/perl -w
use strict;
use XML::Schematron::LibXSLT;


my $schema_file = $ARGV[0];
my $xml_file    = $ARGV[1];

die "Usage: perl schematron.pl schemafile XMLfile.\n"
    unless defined $schema_file and defined $xml_file;

my $tron = XML::Schematron::LibXSLT->new();

$tron->schema($schema_file);
my $ret = $tron->verify($xml_file);

print $ret . "\n";

スクリプトを次のように呼び出します。

perl schematron.pl docbook.sch へのパス xml ファイルへのパス

名前空間「db」に関係するエラーが返されます。

xsltCompileStepPattern : no namespace bound to prefix db
compilation error: file unknown-101d82900 element template
xsltCompilePattern : failed to compile 'db:sidebar'
error
...

私の docbook.sch ファイルは次のように始まります。これは、Docbook 5 ディストリビューションに付属する docbook.sch スキーマ ファイルです。

<?xml version="1.0" encoding="utf-8"?>
<s:schema xmlns:s="http://www.ascc.net/xml/schematron" xmlns:db="http://docbook.org/ns/docbook">
  <s:ns prefix="db" uri="http://docbook.org/ns/docbook"/>
  <s:pattern name="Element exclusion">
    <s:rule context="db:sidebar">

Perl モジュールが名前空間を認識しないバージョンの Schematron を使用している可能性はありますか? それとも、docbook.sch が間違っているのでしょうか? Docbook ディストリビューションに付属しているので、これは奇妙です。

私は Schematron を初めて使用するため、何か基本的なことが欠けている可能性があります。

4

1 に答える 1