2

背景:プログラミング ツールキットの一部としての XSLT の実用的な日常使用をあきらめたので、XSLT について欠けている (唯一の) 2 つの点を他の言語で実装できるかどうか疑問に思っていました。

  • xpath を介して「パス」スタイルのステートメントを使用してデータ構造をトラバースする機能
  • 反復または「ループ」アプローチを介する代わりに、apply-templates を使用してテンプレート変換をトラバースする機能。

Google によると、Javascript に「xpath スタイル」のサポートを追加する取り組みがいくつか行われていますが、あまり普及していないようです。これまでのところ、誰かが別の言語で「apply-templates」アプローチを使用しているものは見つかりませんでした

質問: XSLT からこれら 2 つの優れたアイデアを盗んだり、別の方法を使用して同じまたは類似の概念を適用したりするプログラミング言語 (できれば主流の言語) を知っている人はいますか?

4

5 に答える 5

4

xpath を介して「パス」スタイルのステートメントを使用してデータ構造をトラバースする機能

XPath を組み込んだ他の言語については知りませんが、LINQ to XML はいくぶん似ています。特にVB 構文糖衣の化身です。ただし、それを Common Lisp マクロまたは D テンプレートで実装することはできます。

反復または「ループ」アプローチを介する代わりに、apply-templates を使用してテンプレート変換をトラバースする機能。

私が知っている主流言語はありません。実際、この機能がおそらく XSLT を使用する主な理由です (密接に関連する言語を見ると、XQuery などではありません)。

これは、任意の条件でのレシーバーでの効果的に拡張可能な動的ディスパッチです。そのため、おそらく Common Lisp (具体的には CLOS) で実行できると思います。私の記憶が正しければ、そのマルチメソッドは任意の条件に一致する可能性があるため、XPath がある場合CLOS のマルチメソッドは複数の引数でディスパッチするのに対し、パターン エバリュエーターを使用すると、エミュレートapply-templatesしたり、さらに多くのことをエミュレートしたりできます。apply-templates

于 2009-07-17T20:28:59.013 に答える
2

XPath は、XSLT を機能させるために不可欠ですが、XPath とは独立しています。libxml のようなライブラリは無料で提供します。あなたが説明するテンプレート アプリケーションのスタイルは少しトリッキーです。これが通常 XSLT を使用する目的です。

これを行うプログラミング言語はすべて機能する必要があります。独自の、あまり冗長でない XSLT ダイアレクトを作成してみることができます。Perl はまた、この機能を納得のいくようにエミュレートするのに十分なロープを提供するかもしれません (ただし、パフォーマンスへの影響は不明です)。

ただし、難しい答えは、既存の言語のライブラリを除いて、これは実際には存在しないということです。

于 2009-07-17T20:27:57.983 に答える
1

XPathの場合、間違いなく。C にはXalan-C++、Java にはjavax.xml.xpath (複数の実装) があり、C# にはXPathNavigatorSelectNodesがあります。オブジェクト階層に XPath を使用する場合は、JXPathを参照してください。

テンプレートの変換については、C# のLINQを参照してください (まだ参照していない場合)。まったく同じではありませんが、明示的なループなしでオブジェクトを処理できます。

于 2009-07-17T20:28:59.403 に答える
1

そのようなものは何も見つかりませんでした。しかし、なぜ XML を変換するために他のものを使用するのでしょうか? ソリューションを開発する非手続き型の方法を理解すれば、XSLT は完璧な仕事をします。私たちのアプリケーションは主に XSLT ベースであり、非常に強力なツールです。

于 2009-07-17T20:36:41.257 に答える
1

最初の要件に関するコメント:

  • xpath を介して「パス」スタイルのステートメントを使用してデータ構造をトラバースする機能

XPath は、データ構造に関して多くの仮定を行います。それを使用する場合は、構造を XML に変換することもできます。XPath サブセットを厳しく制限しない限り、XPath に似た言語を介してトラバース可能にすると、いずれにせよそのように見えるからです。

また、XPath とテンプレート処理という "2 つのことだけ" が不足していることに注意してください。これは、実際には Xslt を構成するものの大きな部分を占めています。ツールベルトから外すことにした理由が気になります。

Xslt の代替案が必要だったという事実にもかかわらず、特に Xslt と Xslt 2.0 をお勧めします。unparsed-textanalyze-stringを追加すると、強力なテキスト処理言語が得られます。たとえば、CSV から XML へのスタイルシートを見てみましょう。JSON は規則的ではありませんが、再帰的なテンプレートを使用して単純な JSON から XML へのトランスレーターを作成し、結果を自由に変換することはできます。

于 2009-07-20T15:15:56.463 に答える