XSLTおよび可能な代替案[終了]


14

1つのXMLファイルを別のXMLファイル(HTMLなど)に変換するためのXSLTを見てきました。XSLT(標準化されて使用されているツールである)には利点があることがわかりましたが、いくつかの理由で消極的です

  • XSLTプロセッサは非常に巨大であると思われる/リソースを大量に消費する
  • XMLはプログラミングにとって悪い表記法であり、それがXSLTのすべてです。

ここでXSLTをトロールしたくないのですが、私はそれについて嫌いなものを指摘したいだけで、私は代替手段に期待することのアイデアをあなたに提供します。

Lispのバックグラウンドがあるので、Lispに基づいたツリー構造変換のより良い方法があるかどうか疑問に思います。DSSSLへの参照を見てきましたが、残念ながらDSSSLに関するほとんどのリンクは死んでいるので、それを説明するコードを見るのはすでに困難です。DSSSLはまだ使用中ですか?docbookをチェックアウトするときに一度openjadeをインストールしたことを覚えています。

Jeff Atwoodのブログ投稿は、XSLTの代わりにRubyを使用することを示唆しているようです。

非XMLプログラミング言語でXSLTに似たXML変換を行うための適切な方法はありますか?私は上の入力のために開いているだろう

  • XML変換を容易にするスクリプト言語に役立つライブラリ
  • 特に(ただし排他的ではない)Lispのような変換言語、またはRubyなど。

これまでに見つけたいくつかのこと:


私はHXTとHaskellを頻繁に使用しますが、とても楽しいです
ダニエル・グラッツァー

5
公平に言って、Rubyを提唱しているのはJeff Atwoodではなく、Rubyを好むMartin Fowlerを引用しています。Fowler氏によるオリジナルのポストはここにある:martinfowler.com/bliki/MovingAwayFromXslt.htmlそして、それは2003年に10年前に書かれた-私は、XSLT 2.0は、2007年に出てきたと考える多くの 2010年の改善、およびXPath 2.0
FrustratedWithFormsDesigner

回答:


17

技術の深い経験がなければ技術を評価することは困難ですが、もちろんそれはまさにあなたが決断を下さなければならないときですので、そのジレンマに対する簡単な答えはありません。

性能と使いやすさの2つの懸念を挙げます。以下の両方に対処しようとします。

まず、パフォーマンス。もちろん、パフォーマンスは言語だけでなく実装にも依存し、ユーザーの専門知識にも依存します。さまざまなXSLTプロセッサーはパフォーマンスが大きく異なる可能性があり、同じプロセッサーは使用方法によって大きく異なる可能性があります(たとえば、Saxonでは、パフォーマンスに問題がある人はDOMで使用することがよくありますが、これは不十分な組み合わせです、代わりにSaxonのネイティブツリーモデルを使用すると、パフォーマンスが10倍に向上します)。したがって、最初のアドバイスは、伝聞でパフォーマンスをとらないで、それを測定することです。2番目のアドバイスは、測定を行う人が愚かな間違いをしないように十分な経験があることを確認することです。言うよりも簡単です。

粗雑なことに、変換ジョブを2つのカテゴリ(単純および複雑)に分けることができます。単純な変換の場合、優れたXSLTプロセッサーを使用すると、解析とシリアル化にすべての時間が費やされ、XSLTの処理時間はほとんどわかりません。他の技術でも同じ解析およびシリアル化コストが発生するため、変換技術を選択しても大きな違いはありません(おそらくストリーミングを使用した非常に低レベルのコーディングを除きますが、多くの人がプログラミングを行う余裕はありません)その実装に必要な時間とスキル)。大きなドキュメントの複雑な変換では、SQLプログラミングと同じ問題が発生し始めます。優れたパフォーマンスを実現するには、プログラマーのスキルと知識、およびオプティマイザーの機能との良好な相互作用が必要です。SQLと同様、このような高水準言語では、プロセッサーが非常に多くの作業を行わなければならないいくつかの簡単なステートメントを非常に簡単に記述できます。しかし、SQLの場合と同様に、自分が何をしているのかを知っているプログラマーは、初心者よりもはるかに優れています。

第二に、使いやすさ。XSLTのXMLベースの構文は、この言語を初めて目にする多くの人にとって非常に不快です。しかし、この方法で行うには正当な理由と真の利点があります。「テンプレート」引数があり、多くのコードは結果ドキュメントに書き込まれるXMLで構成され、XMLを記述する最良の方法はXMLであるということです。また、「リフレクション」引数があります。大規模で複雑なシステムでは、スタイルシートを生成するスタイルシートを見つけることは非常に一般的です。次に、「ツール」引数があります。XMLショップにいる場合は、構文指向のエディターなど、多くのXMLツールを使用している可能性があります。同じツールを使用してプログラムとデータを処理できると便利です。欠点は、比較するとかなり見た目が良いことがわかります。s編集に関係するキーストロークの数(優れた編集ツールで簡単に修正できます)、およびコードの冗長性(読みやすさの低下)があります。XSLT 2.0では、正規表現やスタイルシート関数などの機能の導入により、冗長性が大幅に削減されています。多くのスタイルシートは、XSLT 2.0を最大限に活用するとサイズが半分または3分の1に縮小されます。

DSSSLについてのあなたの言及は、私に苦笑を与えます。DSSSLを使用したことはありませんが、聞いた話では、構文が不可解で、データの構文(SGML)とは無関係であるため、成功しなかったという話でした。XSLTのXML構文の使用は、DSSSLの経験によって強く動機付けられました。

XSLTを愛する人もいれば、嫌いな人もいます。当然のことながら、それを頻繁に使用する人は、最初のカテゴリに分類される傾向があります。嫌いな人は、一般に「XSLTの方法を考える」ことを学んでいない人です。あなたはプログラミング言語があなたの考え方に影響を与えるべきではないと主張することができますが、それは影響します。ルールベースの言語で書くことは命令型言語で書くこととは異なる考え方を取ります。多くのプログラマーの最初の反応は、彼らがコントロールにあまり感じないということです(ステップバイステップで何をするかをコンピューターに伝えるのではなく、問題を説明します)。これは、人々が最初にSQLを導入したときの反応に非常によく似ています。最近では、人々はキャリアの早い段階でSQLを学習するため、必要な精神的な再調整が少なくなります。

最終的には、愛/憎悪の反応ではなく、客観的な測定可能な基準に基づいてテクノロジーを選択する必要があります。これらの測定を行うことは困難です。しかし、XSLTを非常に集中的かつ非常にうまく使用している人が大勢いるので、それができることは間違いありません。


2
「ルールベースの言語」のより一般的な用語は、宣言型言語です。
ダニエル・グラッツァー

@Michael Kay-わかりました。個人的にはXSLTが大好きで、C#で使用しています。さらに、XSL-FOとともに使用してPDF文書を作成します。XSLTは強力で非常に強力なため、大量のデータをHTML、XSL-FO、XML、またはテキストにすばやく変換できます。
PhillyNJ

3

コンテキストに関する追加情報がなければ、答えることは困難です。

それでも、なぜXSLTを使用したくないのか理解できません。これは仕事に適したツールであり、強力なツールです。1つのXMLを別のXMLに変換するために特別に行われます。

XSLTプロセッサは非常に巨大であると思われる/リソースを大量に消費する

それをサポートするためのハードデータはありますか?XSLTを使用してソリューションを実装し、XSLT パフォーマンスに関連するすべての非機能要件を満たしながら製品を提供することを不可能にするボトルネックであることを発見しましたか?

統計データとプロファイリングがなければ、特定のソリューションが機能しないと合理的に主張することはできません。非機能要件は十分に妥当ですか?たとえば、XSLTを別の代替物に置き換えて、数百ミリ秒を獲得するために10日間の開発者の作業を無駄にしたいですか?それは価値がありますか?

XMLはプログラミングにとって悪い表記法であり、それがXSLTのすべてです。

したがって、あるXMLを別のXMLに変換したいのですが、「XMLは悪い表記法です」という理由でXSLTを使用したくありませんか?

XMLを一種のプログラミング言語として使用しているのが気に入らないという事実であれば、プログラミングではなく、一連の変換ルールと見なしてください。

XSLTを手で書く必要さえありません。1つのXMLを他のXMLにグラフィカルにマッピングできるETLエディターがたくさんあります。プログラミングは一切必要ありません。それらのいくつかは、出力としてXSLTを使用します。


XSLTベースのシートでリソースの問題が発生しました。それらはグラフィカルツールで作成されましたが、大きなファイルの処理は停止しました。
ウィルベル

1
その後、おそらくあなたとそこに発行されてXSLT fileいないXSLT Transformations自分自身
マラキ

今、私はXMLを非難していません。実際、データ表現(特にマークアップ)に適していると思います。「プログラミング言語」として-およびXSLTはドメイン固有のプログラミング言語であり-不便です。<xsl:whatever>クエリ属性のタグ、メタ言語(xpath、$表記など)、XMLにマッピングされていないものはすべて属性引用符で囲まれています。XMLのs式表現の印象については、blog.getprismatic.com / blog / 2013/1/22 / で、XMLとproglangは見かけ上動作しません
wirrbel

1

XSLTを使用して生のXSLTとXSLTエンジンに渡すパラメータに基づいてXMLを生成する場合、テンプレートXMLアプローチを使用すると、理解と保守がはるかに簡単になります。

私はMustacheを使用してXSLTを置き換えたプロジェクトに参加しており、その結果、プロジェクトの作業は完全に沈黙する1人または2人の勇敢な魂に渡されるのではなく、誰もが編集および調整できるはるかにシンプルなベースXMLファイルになりました汗の玉が降り注ぐ...

テンプレートアプローチは、ベースXML自体も有効なデータであり、そのXSLTが代替表現またはソースXMLからの抽出を提供するために使用されている場合の使用には適していません。


それが何をするのか、そして尋ねられた質問に答えるのになぜそれをお勧めするのか、もっと説明していただけますか Stack Linkでは「リンクのみの回答」は歓迎されません
-gnat

1
あなたのフィードバックとインラインの回答をレビュー
マイケルショー

0

XMLはプログラミング言語ではありません

XMLは、データを転送/転送する方法です。
XSLT命令が行うことは、Xpathを使用して特定の方法でデータを照会し、それを別のデータトランスポートオブジェクト/ドキュメントに入れることです。

および/または

XSLTはXMLをHTMLに変換できます。これは、XMLドキュメントに含まれるデータを表示/転送する別の方法です。

XMLを変更する場合、またはXMLドキュメントを作成する場合は、C#、VB、Rubyなどの任意の数の言語を使用できます。

通常、XSLTファイルを使用してXMLドキュメントを変換するとき、元のXMLドキュメントが残っている場合、実際には元のドキュメントを変更せず、実際に新しいドキュメントを作成します。


1
ウィキペディアによると、「XSLTはチューリング完全言語です。つまり、コンピューターで実行できる計算を指定できます。」XML自体がプログラミング言語であるとは言いませんでした。
ウィルベル

私が使用したプログラミング言語では、「XMLはプログラミングにとって悪い表記法です」と言っていましたが、XMLファイルからデータをかなり簡単に引き出すことができます。XSLTは、多くの計算を実行し、そのデータを別のデータトランスポートオブジェクト/ドキュメントに吐き出すことができるようになったため、基盤を固めています。SQLからSQL Serverのように多くの機能を実行できますが、ほとんどはフロントエンドではなくバックエンドです。XSLTのようなSQLは、それが特定の方法でデータを照会していますが、レポートとしてそのクエリの結果を与えたいことはありません、あなたはレポートビルダーに情報を送信したい
マラキ

2
XSLTはデータを照会せず、XPATHは照会を行います。XSLTは、解析されたxmlの指示を定義する宣言型言語ではありませんか?
PhillyNJ

XSLTは、Xpathを使用できるパターンに基づいて変換ルールを定義します。すなわちxsl:for-each xsl:apply-templatesxsl:if xsl:call-template xsl:value-of変換ルールを定義するために、などの高レベルのプログラミング構造を持つことができます。
ウィルベル

1
@PhilVallone同意します。私はそこで間違っていました。XMLドキュメントをXSLT / XSLを使用する別のXMLドキュメントに変換する場合、XSLT / XSLとは何であるかについては議論しません。
マラキ

0

私は、XSLTが得意ではない部分のために、XSLTライブラリーをJavaまたはC ++と組み合わせる複数のXML処理システムに取り組んできました。20 MBのXMLファイルでも非常に優れたXSLTパフォーマンスを得るライブラリがありますが、XSLTにはコンテキスト、変数、非常に複雑な文字列パターンに関する制限があります。コンテキストが重要であるか、いくつかの複雑な正規表現が助けたため、私が取り組んだ各システムにはJava / C ++でいくつかのことが行われました。私の要点は、XSLTと選択した言語のいくつかの追加コードがXMLを変換する良い方法であるということです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.