第143章 Schematron
Schematron コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.14 から利用可能
Schematron は XML インスタンスドキュメントを検証する XML ベースの言語です。これは、XML ドキュメントのデータに関するアサーションを作成するために使用され、運用ルールとビジネスルールの表現にも使用されます。Schematron は ISO Standard です。schematron コンポーネントは、ISO schematron の主要な 実装 を使用します。これは XSLT ベースの実装です。schematron ルールは 4 つの XSLT パイプライン で実行されます。これは、XML ドキュメントに対してアサーションを実行するためのベースとして使用される最終的な XSLT を生成します。コンポーネントは、エンドポイントの開始時に Schematron ルールが読み込まれるように記述されます(一度のみ)。これは、ルールを表す Java テンプレートオブジェクトをインスタンス化するオーバーヘッドを最小限に抑えることです。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
schematron://path?[options]
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
|
名前
|
デフォルト値
|
説明
|
|
path
|
必須
|
schematron ルールファイルへのパス。ファイルシステムのクラスパスまたは場所のいずれかになります。
|
|
強制終了
|
false
|
ルートを中止し、スキーマ検証例外を出力するフラグ。
|
Headers リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
|
名前
|
説明
|
タイプ
|
In/Out
|
|
CamelSchematronValidationStatus
|
schematron 検証ステータス:SUCCESS / FAILED
|
文字列
|
IN
|
|
CamelSchematronValidationReport
|
XML 形式のスキーマレポートボディー。以下の例を参照してください。
|
文字列
|
IN
|
URI およびパス構文 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、Java DSL で schematron プロセッサーを呼び出す方法を示しています。schematron ルールファイルはクラスパスから取得されます。
from("direct:start").to("schematron://sch/schematron.sch").to("mock:result")
以下の例は、XML DSL で schematron プロセッサーを呼び出す方法を示しています。スキーマルールファイルは、ファイルシステムから取得されます。
<route>
<from uri="direct:start" />
<to uri="schematron:///usr/local/sch/schematron.sch" />
<log message="Schematron validation status: ${in.header.CamelSchematronValidationStatus}" />
<choice>
<when>
<simple>${in.header.CamelSchematronValidationStatus} == 'SUCCESS'</simple>
<to uri="mock:success" />
</when>
<otherwise>
<log message="Failed schematron validation" />
<setBody>
<header>CamelSchematronValidationReport</header>
</setBody>
<to uri="mock:failure" />
</otherwise>
</choice>
</route>
schematron ルールの保存先
Schematron ルールはビジネス要件で変更できるため、これらのルールをファイルシステムのどこかに保存することが推奨されます。schematron コンポーネントのエンドポイントが起動すると、ルールは Java Templates Object として XSLT にコンパイルされます。これは、Java テンプレートオブジェクトのインスタンス化のオーバーヘッドを最小限にするために 1 回のみ実行されます。これは、大規模なルールセットのコストのかかる操作であり、プロセスが XSLT 変換 の 4 つのパイプラインを通過することです。したがって、更新をファイルシステムに保存する場合は、ルートまたはコンポーネントを再起動する必要があります。ただし、これらのルールをクラスパスに保存するには害はありませんが、変更を取得するにはコンポーネントをビルドし、デプロイする必要があります。
Schematron ルールおよびレポートサンプル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
schematron ルールの例を以下に示します。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
<title>Check Sections 12/07</title>
<pattern id="section-check">
<rule context="section">
<assert test="title">This section has no title</assert>
<assert test="para">This section has no paragraphs</assert>
</rule>
</pattern>
</schema>
以下は、schematron レポートの例です。
<?xml version="1.0" encoding="UTF-8"?>
<svrl:schematron-output xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
xmlns:iso="http://purl.oclc.org/dsdl/schematron"
xmlns:saxon="http://saxon.sf.net/"
xmlns:schold="http://www.ascc.net/xml/schematron"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" schemaVersion="" title="">
<svrl:active-pattern document="" />
<svrl:fired-rule context="chapter" />
<svrl:failed-assert test="title" location="/doc[1]/chapter[1]">
<svrl:text>A chapter should have a title</svrl:text>
</svrl:failed-assert>
<svrl:fired-rule context="chapter" />
<svrl:failed-assert test="title" location="/doc[1]/chapter[2]">
<svrl:text>A chapter should have a title</svrl:text>
</svrl:failed-assert>
<svrl:fired-rule context="chapter" />
</svrl:schematron-output>
関連リンクおよびリソース
- Mulleberry テクノロジー による Schematron の概要Schematron を使い始めるための優れたドキュメントです。
- Schematron の公式サイトこれには他のリソースへのリンクが含まれます。