web-dev-qa-db-ja.com

XSLT 1.0からXSLT 2.0へのアップグレード

XSLT 1.0から2.0へのアップグレードには何が関係しますか?
1-アップグレードの考えられる理由は何ですか?
2-アップグレードしない理由として考えられるものは何ですか?
3-最後に、アップグレードの手順を教えてください。

私はエグゼクティブサマリー-ショートバージョンを期待しています:)

57
Witman

XSLT 1.0から2.0へのアップグレードには何が関係しますか?

1-アップグレードの考えられる理由は何ですか?

XSLTプログラマーであれば、より便利で表現力豊かなXSLT 2.0言語+ XPath 2.0および新しいXDM(XPath Data Model)の恩恵を受けることができます。

XSLT 2.0のパワーをしっかりと体系的に理解するために、これをご覧ください XSLT 2.0 Pluralsightコース.

あなたが持っている:

  • 強力なタイピングと利用可能なすべてのXSDタイプ。

  • 独自の(スキーマ)タイプを定義する機能。

  • xPath 1.0に対応するものがない(単に欠落している)XPath 2.0シーケンスタイプ。

  • 純粋なXSLTで functions を定義および記述する機能-_xsl:function_命令。

  • XPath式の範囲変数(for句)。

  • はるかに優れた強力な文字列処理-XPath 2.0は、tokenize()matches()、およびreplace()関数で正規表現をサポートします。

  • はるかに優れた強力な文字列処理-正規表現のXSLT 2.0サポート-_xsl:analyze-string_、_xsl:matching-substring_、および_xsl:non-matching-substring_の新しいXSLT命令。

  • より便利で強力で表現力豊かなグループ化:_xsl:for-each-group_命令。

  • いくつか例を挙げると、日付、時刻、および期間に関する関数など、非常に強力な新しいXPath 2.0関数が多数あります。

  • 新しいXPath演算子intersectexceptis、_>>_、_<<_、someevery 、_instance of_、_castable as_、...など.

  • 一般的なXPath演算子_>_、_<_などは、(XPath 1.0のように数値だけでなく)順序付けられた値型で機能するようになりました。

  • より安全な新しい値比較演算子:ltleeqgtgene

  • XPath 2.0 to演算子。_xsl:for-each select="1 to $N"_を持つことができます

これらおよびその他の多くの改善/新機能により、XSLTプログラマの生産性が大幅に向上し、XSLT 1.0で同じモジュールを開発するのに必要な時間のほんの一部でXSLT 2.0の開発を完了できます。

強い型付けにより、コンパイル時に多くのエラーをキャッチし、すぐに修正できます。私にとって、この強力な型安全性はXSLT 2.0を使用する最大の利点です。

2-アップグレードしない理由として考えられるものは何ですか?

  • XSLTを使用して new アプリケーションのみを開発すると同時に、既存のレガシーXSLT 1.0アプリケーションをそのまま残し、XSLT 1.0で引き続き使用することが可能で、合理的で費用効率が高い2.0。

  • あなたの管理+その他の技術的でない理由。

  • 貧弱なスタイルで書かれた多くのレガシーXSLT 1.0アプリケーションを持っている(たとえば、DOEまたは拡張機能を使用して、現在は書き直し、コードをリファクタリングする必要がある)。

  • XSLT 2.0プロセッサが利用できない。

3-そして最後に、アップグレードする手順は何ですか?

  • _xsl:stylesheet_または_xsl:transform_要素のversion属性を_"1.0"_から_"2.0"_に変更します。

  • xxx:node-set()関数を削除します。

  • DOEを削除します。

  • _xsl:value-of_が最初の出力だけでなく、シーケンスの all 項目を出力するようになったという驚きに備えてください。

  • 新しい_xsl:sequence_命令をできるだけ使用するようにしてください。_xsl:copy-of_命令を置き換えるために使用してください。出力のタイプが文字列またはテキストノードでない場合は、_xsl:value-of_の代わりに使用してください。

  • 広範囲にテストします。

  • コードが期待どおりに機能することをテストで確認したら、リファクタリングを開始します(必要と思われる場合)。変数、パラメーター、テンプレート、および関数の型を宣言することをお勧めします。そうすることで、新しい隠れたエラーが明らかになり、それらを修正することでコードの品質が向上します。

  • オプションで、_xsl:function_として書き換える名前付きテンプレートを決定します。

  • 古いバージョンで使用されている拡張機能がまだ必要かどうか、またはXSLTの新しい強力な機能を使用して簡単に書き換えることができるかどうかを判断します。

最終コメント:上記の手順のすべてが必要というわけではなく、バグテストの結果がゼロの場合、移行を停止して成功したと宣言できます。 new プロジェクトですべてのXSLT 2.0/XPath 2.0機能の使用を開始する方がはるかにクリーンです。

109

Dimitreの答えは非常に包括的で、100%正確です(いつものように)が、追加したい点が1つあります。 2.0プロセッサーにアップグレードする場合、バージョン属性を「1.0」のままにして「後方互換モード」で実行するか、バージョン属性を「2.0」に変更するかを選択できます。多くの場合、どのアプローチが推奨されるかを尋ねられます。

私のアドバイスは、スタイルシートに適切なテストセットがある場合は、思い切って実行してください。setversion = "2.0"を実行し、テストを実行し、問題がある場合は修正してください。通常、問題は、そもそもまったく正しくなく、偶然にしか機能しなかったコードです。ただし、適切なテストセットがなく、ワークロードの信頼性が心配な場合は、version = "1.0"のままにしておくと、リスクが低くなります。プロセッサは、XSLT 1.0のすべての癖をエミュレートします。 xsl:value-of最初の項目以外をすべて無視し、数字と文字列を比較するための奇妙なルール。

28
Michael Kay