2012-04-02 12 views
1

先日の返信でDimitreはXSLT 1の質問に対してXSLT 2の回答を与えたことを正しく指摘しました。xsl:stylesheetタグのversion属性の意味

しかし、彼はまた、テストされていない回答を投稿するために私を強要しました。私は実際にそれをテストしていましたが、version属性が "1.0"に設定されていても、エラーや警告が発生したときにXSLT 2置換関数を使用しました。

これにより、言語を特定のバージョンに限定しない場合、バージョン属性はどういう意味ですか?

私はw3仕様を読もうとしましたが、私の目は滲むようになりました。

FWIW:私もXSLT 1.0と2.0の両方の開発のための酸素を使用して、私は酸素を使用し、サクソン9.3 EE

+0

マイケルケイが良い答えを出しました。私は将来、このような混乱を避けるために、oXygenに個別のXSLT 1.0シナリオを作成し、Saxon 6.5.xを指定することができます。 –

+0

私は全面的に同意します。それ以上に、バージョン= "1.0"のXSLT 2コードと "後方互換モード"が予期せぬ微妙な動作につながる可能性があるので、私の生産コードを確認してください。 Dave Pawsonはもう少し詳しく説明しています:http://www.dpawson.co.uk/xsl/rev2/datatypes.html – Kevan

答えて

3

XSLT仕様では、XSLTプロセッサがversion属性をどのように解釈するのかを示していますが、XSLTプロセッサ以外のソフトウェアではXSLTプロセッサがどのように扱うのかは制限されていません。たとえば、IDE(XML Spyなど)はバージョン属性を調べて、XSLT 1.0またはXSLT 2.0プロセッサを起動するかどうかを判断することがあります。 XSLT 1.0または2.0プロセッサが起動されると、その動作は関連する仕様によって制御されます。

version属性でXSLT 1.0プロセッサが行うことは、XSLT 1.0仕様で定義されています。 2.0プロセッサはXSLT 2.0仕様で定義されています。

XSLT 1.0仕様では、バージョンが1.0でない場合、プロセッサは転送互換モードで動作します。これは基本的に、1.0仕様で定義されていない構文を無視するのが最善であることを意味します。したがって、あなたのスタイルシートがversion = "2.0"と表示され、1.0プロセッサでそれを実行すると、xsl:sort/@ collat​​ionのような2.0で新しく追加された属性は無視されます。認識されない命令は、実際に実行され、1.0プロセッサのフォールバック動作を与えるxsl:fallback子命令がない場合にのみ、失敗を引き起こします。設計の原則は、2.0の構成を使用しても1.0のプロセッサが失敗してはならないということです。可能であれば、それはある種のフォールバック・ビヘイビアで実行する必要があります。

2.0プロセッサの動作を制御するXSLT 2.0仕様では、バージョン< 2.0、バージョン2.0、およびバージョン2.0を区別しています。バージョン<が2.0の場合、プロセッサは「下位互換モード」で動作します。これは、2.0の構成が拒否されたことを意味するものではありません。むしろ、1.0仕様で定義されているものに可能な限り近いセマンティクスで1.0構文が実行されることを意味します。たとえば、オペランドが小数であっても、すべての算術演算は倍精度浮動小数点として実行されます。バージョン> 2.0の場合、プロセッサは転送互換モードで動作します。これは、1.0仕様の転送互換モードと非常によく似ています。つまり、XSLT 3.0構造を使用すると、プロセッサは無視したりフォールバック命令を実行します。

+0

マイケルに感謝します - 最も役立ちます。だからこそ私はこのサイトを愛している - 本当の専門家からの明確な説明。私は75歳の時にトリニティにいたのですが、その後はICLで短い時間を過ごしました – Kevan

0

。 1.0のバージョン番号を持つスタイルシートでXSLT 2.0関数を使用しようとすると、oXygenは私に警告します。

あなたの酸素設定をチェックして、1.0プロセッサーでXSLT 1.0を検証していることを確認してください:私はXalanのと1.0を検証しています

enter image description here

注意してください。

また、私は常に1.0プロセッサで1.0の答えをテストします。通常はSaxon 6.5.5とXalanの両方を使用します。

+0

ありがとうございました。私のために働いてくれてありがとうございました。シナリオのTransformer設定も変更しなければなりませんでした。これでも私の質問には答えられません。バージョン属性にはどんな影響がありますか? – Kevan

関連する問題