web-dev-qa-db-ja.com

XSLTを使用、学習、または推奨する正当な理由はありますか?

私は過去8年間の開発者です。 XSLTを主に使用して、XMLをHTMLに変換しました。また、XMLからXMLへの変換にも使用しました。

しかし、今ではすべての代替品があります。 ASP.Netなどのプログラミング言語を使用して、HTMLを快適に作成できます。 XMLは、標準の高水準言語で読み取って操作できます。 XSLTでのプログラミングは少し複雑なので、誰でも最新のプログラミング言語で作業することを好むでしょう。

今私の質問:XSLTは、すでに開発されたXSLTを維持するという事実を考慮せずに、将来的に重要な選択になるでしょうか?新しいプログラマーにXSLTを学ぶよう勧めることはできますか?

28

XSLTが適切な選択肢となる重要なケースがいくつかあります。

  • ETL( Extract、Transform、Load )ソフトウェアは、場合によってはXSLTを使用できます。たとえば、抽出されたデータとロードするデータの両方がXML形式であり、アプリケーションを再コンパイルせずに変換を変更できる場合に適しています。

  • データをXMLで保存する一部のアプリケーションは、XSLTを使用して、このデータを人が読める形式で表示します¹。たとえば、Windows Live MessengerはメッセージのトレースをXMLとして保存しますが、WLM自体で履歴を開くと、XSLTを介して実際に作成されたHTMLであるきれいなテーブルが表示されます。

  • 一部の開発者指向またはデータ指向のWebサイトでは、プログラムでWebサイトのページを使用する場合は、XMLへのアクセスを許可する場合があります²。特にHTMLコードはいつでも変更できるので、HTMLパーサーを使用するよりも何とか優れています。

  • XSLTをWebサイトで使用すると、HTMLと分離コードを厳密に分離できるため、分離コードの開発者とHTML/CSSの開発者を雇うことができます。 別の質問に対する私の回答 のポイント1を参照してください。

XSLTは将来的に重要な選択肢になるでしょうか?さて、これは今日の重要な選択ではなく、XSLTの使用が時間の経過とともに増えるとは思えません。その理由は無視しますが、多くの開発者はXMLが嫌いで、XSLTが嫌いです。

XSLTを学ぶために新しいプログラマーを推薦できますか?承知しました! XSLTは、他のアプローチが難しい状況で使用できるだけでなく、他の言語にはない非常に特殊なアプローチを持っています。


¹これは、XMLが人間が読める形式ではないことを意味します。IT部門で働いていない人にXMLの読み取りを依頼すると、XMLは恐ろしいものになります。
²Webサービスがあることは知っています。しかし、すべてのページで動的オブジェクトを作成し、それをXMLにシリアル化してから、XSLTを介してHTMLに変換するか、ボットにXMLに直接アクセスさせる方が簡単で簡単な場合もあります。

29

XSLTを使用している愛好家はまだ数人しかいないため、XSLTはかなり死んでいます。ただし、それに対する実際の代替手段はありません。たとえばセマンティックドキュメントからのHTMLページのレンダリングなど、1つのユースケースのみに焦点を当てれば、より優れたツールが見つかります。コード生成テンプレートエンジンを探す場合は、やはり優れたツールがあります。ドキュメント変換についても同様です。

しかし、すべてのプラットフォームでこれらすべてのユースケースを十分にサポートするツールを探す場合、選択肢は非常に限定されます。すでにXMLドキュメントがあり、それをツールを使用できるように何かに変換する必要がある場合は、XSLT(またはXQuery)でデータを処理するだけのほうが良いでしょう。

どちらの方法でも、XSLTを数日、場合によっては数週間で学ぶことができます。それはあなたが直接の体験をすることを傷つけることはありません。試してみてください。この種のパターン(ルールベースの変換)を後で使用するために頭に保存するのは、少なくとも努力する価値があります。これだけでXSLTの学習が正当化されます。

12
Michael

はい

良い例を挙げましょう:継続的インテグレーションにおける単体テストレポート。ほとんどの単体テストおよびコードカバレッジプログラムは、大量の判読できないXMLを出力するだけです。ただし、いくつかの単純なXSLTを使用すると、同じデータから多数の有用なレポートを作成できます。そして、他の人々はそれらのレポートを再利用できます。

これで、CIツールがプラグインに使用する任意の言語でこれらを記述できますが、その言語がわからない場合(たとえば、Jenkinsを使用している.NET開発者であれば)、それを学ぶ必要はありません。すでにXSLTをXMLファイルに適用しているプラ​​グインを使用して、いくつかの有用なXSLTを作成するだけです。

9
pdr

コードからHTMLを作成する高レベルAPIは、「内部」でXSLTを使用するのでしょうか。

XSLTは、XMLを1つのソース形式から他のさまざまな形式に変換するために幅広く使用されています。また、XMLを非XML出力に変換するためにも使用できます。私はこれの多くをしていませんが、PDFおよびPostScriptなど)をターゲットにするために行われたと聞きました。

XSLTは人間が読める形式ではありません。メタ情報(タグ)は、実際の情報(テキスト、xpathリクエスト)よりも場所が多すぎます。適切なコードはドキュメントのように見えるはずですが、これはXSLTの場合とはかなり異なります。これは、マッピングツールに適した永続化フォーマットです。

優れた変換言語は、変換結果をプレビューし、変換フロー(IF、ELSE、FOR、WHILE)を同時に表示できる必要があります。これは保守性にとって重要です。この点については、XSLTよりも Velocity または GenearateXY の方が優れています。 GenerateXYはプレビューとフローを分離するため、少し優れていますが、Velocityを使用すると、残念ながらプレビューのインデントを解除して読みやすいフローを提供する必要があります。

XSLTの唯一の優れた点は、「xsl:template」要素を使用したり、悪用したりすることで、モジュール性を重視することです。この問題は、データ処理言語(Java、Cなど)には適していますが、プレゼンテーション言語には非常に重要です。

6
abraham

プログラミング言語には常に選択と多様性があり、ある言語が別の言語よりも優先される理由は、機能性、生産性、パフォーマンスなどの客観的な基準と同様に、親しみやすさとファッションに関係しています。誰もファッションを予測できないため、プログラミング言語の将来の傾向を予測することはできません。しかし、XSLTの初期の学習の壁を乗り越えて、非常に多種多様なタスク(おそらく、これまで取り組んできたものよりも多種多様)に対して非常に生産的なツールであることに気付いた人はたくさんいます。

XSLTが使用されている多くのタスク(および私がXSLTを自分で使用しているタスク)について、JavaまたはASPコードでジョブを実行すると、あなたの雇用者の予算のぞっとするような無駄遣いになるかもしれませんが、たぶん、あなたがたまたまJavaを書いてXSLTを書くのが得意ではない場合)。

6
Michael Kay

XSLTの最大の欠点は、(実際の実装では)効率的な処理のために一度にメモリに保持する必要があるドキュメントの量を最小化できないことです。代わりに、ドキュメント全体が何らかの形式のDOM表現に読み込まれ、それに対して処理が行われます。ドキュメントが非常に大きい場合、メモリ要件も大きくなります。しかし、多くのスタイルシートでは、現在のタグと他のいくつかのタグだけが明らかに必要です。いつでもタグの祖先であるため、最小限のメモリと効率的なストリーミングで処理できます。

はい、言語に関しては奇妙ですが、それは参入への障壁にすぎません。 XSLTを知っている場合は、他の方法よりも簡単なことがよくあります。ただし、大きなドキュメント(または大量のドキュメントが一度に処理される)がある場合、XSLTのメモリへの影響は、他の多くの時間のかかる代替手段を強制します。

4
Jess Holle

確かに

何かがXSLTに取って代わる可能性があります。学習して使用するのが少し面倒だからです。ただし、現時点では、その実装において柔軟性があり「純粋」である、利用可能なテンプレート/変換言語​​はありません。

XSL-Tは、いくつかの異なる目的に使用できます。

  • テンプレートを使用して、データからHTML形式のコンテンツを「作成」できます
  • あるXMLフォーマットから別のXMLフォーマットに変換できます
  • Xmlを別の形式に操作できます。おそらくサブセットを表示できます

基本的にこれらはすべて同じですが、あるXMLデータファイルから別のXMLデータファイルへの変換です。次に、XSLTの代わりに使用できるいくつかの異なるツールを見てみましょう。

たとえばXHTMLページのコンテンツを操作したい場合は、regexpを使用できますが、構造式ではregexpが面倒です。文字列を操作するのに最適ですが、何かの目次を作成したり、別のレイアウトで表示したりするのには使用しません。

次はASP.Netです。レイアウトをASPページに配置し、動的パーツの背後にコードを挿入します。別の方法としては、レイアウトパーツを予測して、たとえばデータベースからすべてを生成し、C#を使用して目的の出力を作成する方法があります。

最初のアプローチの問題は、説明的なデータから実際のコンテンツに移動するのが不便であることです。各文字のヘッダーとともに提示したい電話番号を含むデータファイルがある場合は、エントリの合計数などを表示します。レイアウトファイルの一部のレイアウトと、生成するコードの一部を含める必要があります。 。別のオプションは、何らかの形式のWebグリッドを使用することです。これらはかなり厄介であることがわかり、データを指定して特定のHTMLを出力することだけが目的であるときに、急いでグリッドが機能するしくみを学ぶ必要があります。

完全に動的になることは確かにオプションですが、それもかなり不格好です。 LINQのようなものを使用している最良の場合でも、かなり醜い方法でプログラミングコードと出力を混在させる必要があります。また、通常はhtmlである非構造化再帰ドキュメントスタイルのコンテンツを適切に処理するための良い方法はありません。

XSLTを使用すると、特定のタグのテンプレートをそのまま、またはその親のコンテキストで作成することができます。たとえば、他の何かによって親が作成されている場合は、別の方法でレンダリングされます。

かなり長いとりとめのない答えですが、そうです。説明的なテンプレート言語には大きな価値があると思います。XSLTは、これまでのところ最高で最も標準化されたものです。

4
Homde

実際のところ、データの表示には他の言語よりもXSLを使用する方が効率的だと思います。たとえば、XMLをPDFとして提示し、すべてのインチを制御できますが、たとえばRDLC(.NET)で作業する場合、それは非常に難しいことがわかりますあなたが望むものを正確に提示します。

XSLでは各要素に独自のテンプレートがあるため、進化/修正さえも非常に簡単です。 XSLの拡張はXSLTやXSL-FOのようにもっと重要だと思います。そのため、この言語は今後も引き続き使用されます(ただし、この言語がより安定していて複雑さが軽減されることを願っています)。

3
yayaman

私はデータ統合会社で働いており、XMLからHTML/XML/Asciiへの優れたソリューションとして、XSLTと独自のツールを使用しています。

2