web-dev-qa-db-ja.com

XSLTと可能な代替

あるXMLファイルを別のXMLファイル(HTMLなど)に変換するためのXSLTを調べました。 XSLT(標準化され、使用されているツール)にはメリットがあることがわかりましたが、いくつかの理由でしぶしぶです

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

ここでXSLTを荒らしたくはありませんが、私がXSLTの嫌いな点を指摘して、私が代替案に何を期待するかを説明したいと思います。

いくつかのLISPの背景があるので、いくつかのLISPに基づいてツリー構造を変換するためのより良い方法があるかどうか疑問に思います。私はDSSSLへの参照を見てきましたが、悲しいことにDSSSLに関するほとんどのリンクは無効になっているため、それを示すコードを確認することはすでに困難です。 DSSSLはまだ使用されていますか? docbookをチェックアウトするときにopenjadeを一度インストールしたことを覚えています。

Jeff Atwoodのブログ投稿 XSLTの代わりにRubyを使用するとヒントが得られるようです。

非XMLプログラミング言語でXSLTと同様のXML変換を行うための健全な方法はありますか?私は入力のために開いています

  • XML変換を容易にするスクリプト言語に役立つライブラリ
  • 特に(ただし、これに限定されない)LISPのような変換言語、またはRubyなど。

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

15
wirrbel

テクノロジーについての深い経験がないと、テクノロジーを評価することは困難ですが、もちろんそれはまさに意思決定をしなければならないときなので、そのジレンマに対する簡単な答えはありません。

あなたは2つの懸念を引用します:パフォーマンスと使いやすさです。以下で両方について説明します。

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

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

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

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

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

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

18
Michael Kay

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

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

XSLTプロセッサは非常に巨大/リソースを大量に消費しているようです

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

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

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

つまり、あるXMLを別のXMLに変換したいが、「XMLは悪い表記法である」ためにXSLTを使用したくないのでしょうか。

XMLを一種のプログラミング言語として使用しているので、非常に不快な場合は、XMLをプログラミングとしてではなく、一連の変換規則として見てください。

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

3

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

私はXSLTを置き換えるために Moustache が使用されたプロジェクトに参加しており、その結果、プロジェクトの作業が1つまたは2つの勇敢な魂に渡されるのではなく、誰もが編集および調整できる非常に単純なベースXMLファイルが得られました、汗のビーズが降り注いで完全に沈黙して座るだろう...

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

1
Michael Shaw

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

0
Michael Shopsin

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

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

AND/OR

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

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

通常、XSLTファイルを使用してXMLドキュメントを変換しても、元のXMLドキュメントはそのまま残り、実際には元のドキュメントを変更するのではなく、実際に新しいドキュメントを作成します。

0
Malachi