4

schematronを使用したXML の検証に問題があります。

私のコードでは、XML と XSL を DOMDocument オブジェクトとして読み込み、変換を試みます。

$domSche = new DOMDocument();
$domSche->loadXML($message);

$domXSLSche = new DOMDocument();
$domXSLSche->load("CI-SIS_StructurationCommuneCDAr2.xsl");

$xsltsche = new XSLTProcessor();
$xsltsche->importStylesheet($domXSLSche);

$XSLValid = $xsltsche->transformToXml($domSche);

しかし、関数は次のエラーを返します。

XSLTProcessor::transformToXml(): このオブジェクトに関連付けられたスタイルシートがありません

技術的に理解できませんが、importStylesheet が私の XSL を XML に関連付けますね。

誰かがより多くのソースを見たい場合、ファイルは次の場所にあります:

4

1 に答える 1

1

使用する Schematron バージョンは XSL 2.0 を必要としませんが、所有するファイルは XSL 2.0 機能を使用します。

XSLTProcessorPHP では XSL 1.0 のみをサポートします。そのため、そのファイルで使用されている機能の一部が利用できず、インポートが失敗します。

スタイルシートをインポートできなかったため、変換を実行できません。


エラーメッセージ

警告: XSLTProcessor::transformToXml(): このオブジェクトにスタイルシートが関連付けられていません

スタイルシートが欠落していることを意味します。ディスク上やメモリ内ではなく、変換用です。

これは、エラーがあり、最終的にコンパイルできなかったためです。

あなたの場合、あなたが持っている XSL ファイルはバージョン 2.0 ですが、PHP は 1.0 の機能しかサポートしていません。また、設定されていない (定義されていない) 変数を使用します。サンプルデータをロードすると、次のエラーが発生します。

警告: XSLTProcessor::importStylesheet(): コンパイル エラー: ファイル CI-SIS_StructurationCommuneCDAr2.xsl 13 行目の要素スタイルシート

それは次のとおりです。

            version="2.0">

次の警告で説明されています。

警告: XSLTProcessor::importStylesheet(): xsl:version: 1.0 の機能のみがサポートされています

次は未定義の変数です。

警告: XSLTProcessor::importStylesheet(): 未定義の変数

警告: XSLTProcessor::importStylesheet(): コンパイル エラー: ファイル CI-SIS_StructurationCommuneCDAr2.xsl 行 4974 要素テンプレート

これは

    <!--RULE -->
    <xsl:template match="*[cda:templateId/@root = $templateObservationMedia]" priority="1000"
                  mode="M62">

これは$templateObservationMedia変数であり、

警告: XSLTProcessor::importStylesheet(): 述語のコンパイルに失敗しました

これを機能させるには、少なくともこれらの問題を修正する必要があります。一致パターン内での変数の使用は XSLT 1.0 ではないため、少なくとも回避する必要があります。変数/一致の問題に関する詳細な説明については、XSLTProcessor::importStylesheet() での複数の PHP 警告を参照してください。

于 2013-03-05T16:06:38.530 に答える