2009-04-29 9 views
23

現在のプロジェクトでは、XMLとXSL変換を使用してHTMLを生成するか、HTMLテンプレートを直接使用するかを決定する必要があります。なぜXSL変換を選択するのですか?

私はXSLアプローチの議論に興味があります。さまざまなレイアウトをサポートする必要がある場合、XSLソリューションには多くの利点がありますが、1つのターゲットレイアウトのみをサポートする必要がある場合は、なぜそれを選択するのでしょうか?

編集:ここではJavaについて説明しています。

+0

あなたは実際に、私はVimは本当に良い見つける – yegor256

答えて

5

XSLを使用すると、アプリケーションの将来性が保証されます。つまり、レイアウトを変えてテンプレートを追加することを将来決定すれば、その利点を生かすことができます。私の現在のプロジェクトでは、(XMLTypeまたはCLOBで)使用されるXMLを保存し、他のアプリケーションがデータおよびXSLテンプレートにアクセスしてWebサービス経由でドキュメントを生成できるようにします。これは、XML/XSLの使用を決定したために実装が簡単だったオリジナルのデザインを考えた後です。

1

HTMLとは対照的に、どのような方法でもテンプレートの解析と処理が必要な場合は、多くのXMLツールが利用できます。 XMLのためにツールとライブラリを使用する利点を得るには、XMLを選択する必要があります。

しかし、XHTMLは、現代のWebブラウザで正しく処理されている通常のHTMLでありながら、XMLツールやライブラリを完全にサポートしているので、あなたのニーズに合ったものかもしれません。後の処理を後で行う必要がある場合でも、XSLTをXHTMLデータに適用できます。

4

ウェブフロントエンドにXML/XSLTを使用しないでください。私はこのようなプロジェクトに参加していて、恐ろしいことです。多くの場合、オブジェクトやそれに類するものからXMLを生成する必要がありますが、これは意味をなさないものです。もう一つのポイントは、そこに多くの良いHTMLエディタが無料であることですが、私はXSLTには何も見つかりませんでした。複雑なXSLTを編集するのは楽しいことではありません。 HTMLテンプレートと共通のテンプレートエンジンを使うことをお勧めします。

+2

JAXB、およびJAX-RS、XSLを統合したJavaフレームワーク[ReXSL](http://www.rexsl.com)の口コミを書いて興味がある可能性がありXMLの編集でまた、Visual Studio 2008はXML/XSLT(デバッグを含む)に最適です! –

+2

SingStarで作業しているときに、(http://www.oxygenxml.com/)が素晴らしいXMLおよびXSLTエディタであることがわかりました。左側に入力xml、右側にXSLT変換、右側に出力を持つ3つのパネルが表示されます。左側または右側のパネルの行をクリックすると、対応する行がすべて他のパネルで強調表示されます(この行を生成したXSLTとソースXMLを参照)。 –

4

XSLTは、他のドキュメントタイプ(つまりpdf)でも出力を生成できるという利点があり、現在はpdf出力が非常に一般的です。 XML/XSLTはビューからデータを分離します。

+0

+1ありがとうございます。 PDFのFOPは良い例です。 –

+0

すべての正直なところ、非XMLを生成することはできますが、めったに行われません。おそらくPDFを除いて。 私はそれをPDF以外の重要な要素とは考えていません。 私はまた、ソースデータ自体が自然にxmlでない場合は、データ/ビューの別々のものが全体として大変だとは思わない。そうであれば、すでに分離がある可能性があります(プレゼンテーション用の入力データ - >テンプレート) – StaxMan

2

あなたのデータが既にXMLの場合、XSLのアプローチがどのように役立つかを見ています。
しかし、通常そうではありません。それはデータベースのどこかにあり、その場で生成する必要があります。
このソースからXMLを作成し、そのXMLからHTMLを作成できるようにすることは、私の意見では役に立たない。私は(X)のHTMLテンプレートに固執します。

+1

完全に個人的なレベルでは、XSLはすべてのXMLのアイデア全体の子です。それに直面すると、XMLはすべてのソリューションのための良いデータフォーマットではありません。 –

+0

私は絶対に同意します - ソースデータがxmlであれば、xsltは意味があります。そうでなければ、ほとんど意味がないでしょう。 – StaxMan

2

その後、XSLTを経由してXHTMLに変換されたXML層はまた、あなたがXML層に簡単にWebサービスを記述することができ、meens持つ、アプリケーションによっては - あなたの顧客があなたのサイトのデータを消費することができます...

XMLを変換リンク(正確な構文を忘れてしまった...)でブラウザーに送ると、XSLTファイルも同じままで、必要な帯域幅は少なくなります。元のXMLを渡すだけです)

+0

私はクライアントで変身する可能性について言及しています。 –

21

XSLTは関数型プログラミング言語であり、どのテンプレートシステムと同様に豊富なフロントエンドを作成することができます。しかし、あなたとあなたのチームは狂気にならないはずはありません。

両方のオプションは、オブジェクトを論理形式で表現形式に変換する機会を提供します。XSLTは、より多くのXMLを作成するのに最適です。これは、XHTMLを作成するのに最適な候補だと信じさせるかもしれません。ただし、XHTMLを作成することは主な目標ではありません。のユーザーエクスペリエンスを作成することはです。 メディアには関心がありません。

XSLTの2つの重大な欠点は、構文に関係します。テンプレートとそれに含まれるテンプレート、それらのテンプレートに含まれるテンプレートはすべて巨大で冗長です。第2に、多くの関数型プログラミングを行う必要があります。経験の少ないエンジニアは、単純なforループの代わりに累積関数パラメータを持つ再帰型テンプレートに遭遇すると、混乱し恐れがあります。

論理的に構築された有効なXMLエンティティを変換することの美しさに魅了されている場合は、代わりに代わりに型変換可能なテンプレートシステムを検討してください。 Google XML Pagesをチェックし、論理的に組織化されたタイプセーフなテンプレートを作成してください。これは将来のエンジニアが簡単に取り上げて拡張することができます。

+0

リンクされたGoogle XMLページは、2015年8月24日以降のGoogleコードの読み取り専用ページに基づいて、まだベータ0.2になっています。 – surfmuggle

4

これまでXSLTを行っていたとき、私たちの製品を拡張することができました。出力は変わらず、プレゼンテーション層だけを変更する必要がありました。これにより、UIを「カスタマイズ」したいクライアントがあったときに、XSLTファイルを置き換えるだけで済むので、柔軟性が大幅に向上しました。こうした種類の変更をたくさんする必要があることがわかったら、XSLTがあなたの答えかもしれません。

ただし、前述のように、XSLTの構文と機能プログラミングの考え方によって、効果的にテンプレートを作成することが困難になる可能性があります。私たちは、私たちが学んだ技を守りたいと思っていました。私たちがすでに知っていたこと以外のクライアント要求を受けたときは、誰もそのボランティアをしたくありませんでした。通常、誰かが最終的にどのようにタスクを実行するかを把握し、「トリックオブバッグ」は大きくなっていますが、新しいことを理解することはしばしば非常に面倒です。

UIの変更が予想されない場合、または少なくともそれほど多くない場合、XSLTは余計な努力をする価値はないかもしれません。

0

私たちはコンテンツ管理システムでHTMLを生成するためにXSLTを使用しています。うまく動作します。

いくつかのヒント:1つの大きなヘアリーXMLからすべてのページを一度に生成しようとしないと、あなたは狂ってしまうでしょう。埋め込まれたマーカー(例えば、<! - MENU->、<! - CONTENT->)を持つHTMLテンプレート(スタイル、デコレーション、基本マークアップを含むプレーンテキスト/ htmlファイル)を使用し、マーカーをxslt-transformation適切なデータの

私はあなたが本当に1つのレイアウトしか持たないなら、あなたは本当にxsltが必要なのか疑問に思っています。

2

私はあなたのデータの出所を調べる必要があると思います。 Boris Callensが以前に述べたように、データベースから取り出す場合は、最初にXMLに変換してから変換を適用する必要があります。データソースがRSSなどである場合、XSLTは当然の選択です。

XPATHとXSLTは高い学習曲線を持ち、機能プログラミングはあなたの腕を掴むのに大変なことがあります。タイムクランチでは、これは正しい選択ではないかもしれません。

フロントエンドの作業JSONは軽量のペイロードを持ち、jQueryやその他のJavascriptライブラリで容易にサポートされています。 jQueryライブラリは開発者がはるかにアクセスしやすく、フレームワークによる生産性の時間は、XSLT、組み込みのJavascriptタグ、ひどい構文、それに付随する他のすべての細目よりはるかに少ないため、JSONをデータプロトコルと見なすことができますフロントエンドのXML/XPATH/XSLT

1

私は以前のプロジェクト、金融ウェブサイトでXML & XSLTを使用しました、そして、それは私たちのためにうまく働いたが、:私たちは、私たちが持っていた出力の数を変化させ 複数の顧客を、持っていた

  1. 。 XSLTスタイルシートの代わりに を使用しました。これにより、サイトの変更点が になりました。
  2. チームには専門のWebエディタがありました。我々は彼らにXMLの例を与えました&彼らは直接スタイルシートを編集することができました
  3. 昨日ウェブサイトに行く必要があった(それは銀行だった、これは驚くほど頻繁に起きました)、新しいXSLTをサイト全体を再展開します。
  4. 複数の異なる出力形式が必要でした。私たちは、技術の同じ種類に基づいてPDFに変換するためにFOPを使用するので、私たちが理解するのは、複数持っている場合、私はXSLTを使用するための参照主な理由がある

:-)あまりにもハードではなかったですサイトはすべて同じXMLに基づいていますが、異なるHTML出力が必要です。

+0

ポイント1 + 3はテンプレートシステムによって容易に満足されます –

+0

これは本当です。しかし、当時はあまり多くはなかった。 –

2

簡単にしてください。それは、人がますます高く評価されるという原則です。

VelocityまたはFreemarkerは信じられないほど柔軟で多用途です。あなたのコードベースは明確で分かりやすく、Xモンスターよりもずっと速く動くでしょう。

19

約5年前にエンタープライズ製品のXML/XSLT駆動UIを作成しました。我々はまだそれを使用している、と私は今、私の経験を振り返ると、多くの長所と短所を見ることができます:

長所:、

  • XSLは、経験豊富な開発者のための強力な宣言型言語、便利&楽しいですし、 XSLはXMLで使用するように設計されているため、データがすでにXMLの場合は、多くの意味があります。
  • 分離の問題(レンダリングとデータ)は次のようになります。多くのテンプレート言語よりも良い
  • XSLベースのレンダリングは簡単に「サブクラス化」できます。つまり、データクラスAに関連するテンプレートA.xsltがあるとします。 Aから派生したクラスBの場合、小さな違いだけでB.xsltを簡単に作成でき、継承された動作にはA.xsltが含まれます。これは、A.xsltの変更に起因する破損を避けることができます。
  • 上記の点も、上書きを行う権限を与えます。関連するA.xsltを持つクラスAに対して、関連するテンプレートを簡単にA-custom.xsltに切り替えることができます。これは、少し変更してA.xsltを継承したものです。現場でこれをやり直すことができますが、A-custom.xsltは元のA.xsltの修正コピー全体ではなく、ほんの数行にすぎないという利点があります。フットプリントが小さいため、A.xsltの複数のバージョンで動作する可能性が高くなります。
  • .NET 2.0では、XSLTがコンパイルされ、非常に高速になります。 Javaにも同様の技術があるかもしれません。
  • .NETでは、オブジェクトオブジェクトをXMLオブジェクトに変換せずにデータオブジェクトを変換できる「オブジェクトXPathナビゲータ」を作成することができます。

    • XSLは、強力な宣言型言語であるに混乱:再びJavaで同様の技術があるかもしれません
    • XSLTはエスケープ&ハンドル、ホワイトスペースの問題なども

    短所HTMLについてスマートです新しいプログラマ - そして、より少ない人がXSLTをよく知っている。

  • XSLは冗長です。 XMLはしばしば冗長です。
  • XSL変換はおそらく "ネイティブ"テンプレートよりも遅いでしょう。コンパイルされていても、ほとんどのテンプレート言語よりもXSLにはさらに多くの状態のオーバーヘッドがあります。
  • XSLにパラメータを渡すのは難しいので、データに合わせて送るか(余分なXMLを作成する必要があります)
  • ObjectXPathNavigatorなどがない場合は、データオブジェクトを変換用のXMLに変換する際にかなりのオーバーヘッドが発生します。
  • トランスの機能によっては、文字列バッファに変換してその文字列を出力デバイスに送信するときにバッファリングのオーバーヘッドが発生する可能性があります。
  • XSLTの使用法が高度であればあるほど、それは私が、私はより多くの問題を考えるように更新しようとするでしょう

(あなたがXMLデータを渡すために含むか、またはより高速な方法を使用することを開始し、具体的として)あなたのツールがあなたをサポートすることで、Y。私は今戻って考えると、私の評決は共通のテンプレート言語に固執することでしょう。かつてXML/XSLTを選択したときに大きな問題になったのは、主要なテンプレートエンジンのより新しい、より成熟したリビジョンによって解決されました。ほとんどのテンプレートエンジンでうまく行かないものである.xsltファイルを継承する機能は、依然として大きなメリットをもたらします。しかし、最終的には、例を提供する多くの開発者を抱えることの価値は、はるかに大きいです(ASP.NETの回答とStackOverflowのXSLTの回答を比較してください)。

希望に役立ちます!

1

XML + XSLTは本当にクールです。将来、多くのタイプのターゲット・フォーマットを出力することができます。 しかし、XMLに埋め込まれたHTMLを認識していません。 Firefox XSLTは "disable-output-escaping"をサポートしていません。 Bugzillaを参照してください。

18

私はXSLTを使用して大幅な開発を行いました。これは、2つの異なるサイトで非常に成功し、完全に失敗しました。

結論の前にいくつかの考え:

  • 私は、誰もがXSLTは、はるかに強力なテンプレート解析エンジンよりも、それは関数型言語だと主張するだろうとは思いません。

  • ほとんどの手続き型言語ほど広く採用されているわけではありませんが、それは実際のプロジェクトで使用されている現実の言語ですが、XSLTの知識を持って人を雇うことができます。

  • XSLTも今のところ実装が成熟していますが、これは(Velocityのような)長時間実行されているテンプレートエンジンのケースだと確信していますが、新しいエンジンの方が堅牢性が低い可能性があります。

  • あなたが決めたテンプレート言語は、XSLTとしてもよく書かれているとは思えません。マイケル・ケイ・プログラマーのリファレンス・シリーズを参照して、素晴らしい参考書の作成方法の例を確認してください。

  • ツールのサポートは一般的に非常に良いです...予算がある場合は、 XMLSpyとスタイラススタジオは、私にとってこれまでずっと便利でした。

  • XSLTはハードだけでなく、もっと重要なことに、異なるものです。ほとんどの人は、コンピュータ科学の卒業生が正式に機能プログラミングを習得したわけではありません。プログラマの大部分は、XSLTを手続き型スタイルで記述します。このスタイルは言語の力を利用せず、メンテナンスの頭痛を与えます。

  • XSLT変換が遅くなり、大量のメモリが必要になる可能性があります。大規模なXML入力があるスタイルシートを使用していると問題が発生することがあります。

私はXSLTを愛していますが、それを使用する必要があるかどうかは、いくつかのポイントにダウンしています:

は、あなたがXSLTにコミットしていますか?あなたは、XSLTに深い社内専門知識を持っていますか?あなたはいくつかを用意する準備ができていますか?

あなたのデータはXMLですか?それはXMLで理にかなっていますか?社内の誰かが十分に構造化されていることを確認するのに十分なデータを愛し、常に適切なスキーマがある人はいますか?

これらの質問に対する答えが「はい」で、複雑なレンダリングプロセスを必要とする複雑なデータがない限り、XSLTの使用は検討しません。特にチームに経験がない場合は特にそうです。悪いXSLTは、悪いテンプレートよりはるかに悪いです。

しかし、今日のテンプレートエンジンの多くを使用することは不可能な、維持可能な方法で複雑なデータをレンダリングすることができます。

関連する問題