2

MarkLogic 6 で同じマークアップを 2 つの別々のドキュメント (1 つは XML、もう 1 つは JSON) に保存する場合、MarkLogic は自動的に相当する JSON を XML に変換し、その点でインデックスを作成しますか、それとも両方ともそれぞれの形式で保存されますか?

私が理解しているのは、MarkLogic は、関係なく、すべてのドキュメントを XML として保存し、クエリが実行されたときに JSON 変換を JSON ドキュメントに単純に適用するということですか?

ドキュメントがネイティブ形式で保存されている場合、パフォーマンスの観点から、ドキュメントを XML ではなく JSON で保存する利点はありますか?

以下は、コード スニペットの例です。

if($outputFormat="json") then (: result in json format :)       
    let $custom-config :=
        let $config := json:config("custom")
        return (map:put($config, "array-element-names",(xs:QName("lp:lesson_plan"), 
                                                        xs:QName("lp:instructional_segment"),
                                                        xs:QName("lp:strand_type"),                                                             
                                                        xs:QName("lp:resource"),
                                                        xs:QName("lp:level"),
                                                        xs:QName("lp:discipline"),
                                                        xs:QName("lp:language"),
                                                        xs:QName("lp:program"),
                                                        xs:QName("lp:grade"),
                                                        xs:QName("res:strand_type"),
                                                        xs:QName("res:resource"),
                                                        xs:QName("res:ISBN"),
                                                        xs:QName("res:level"),
                                                        xs:QName("res:standard"),
                                                        xs:QName("res:secondaryURL"),
                                                        xs:QName("res:grade"),
                                                        xs:QName("res:keyword"))), 
                map:put($config, "whitespace","ignore"),
                map:put($config, "text-value","value"),
                $config) 
    return json:transform-to-json($finalResult, $custom-config)
else (: finalResult in xml format :)        
    $finalResult
4

4 に答える 4

4

MarkLogic は XML ネイティブであり、JSON を XML に変換してデータベースに保存する必要があります。変換を実行するための高レベルの JSON ライブラリがあります。主な機能はjson:transform-to-jsonjson:transform-from-jsonであり、正しく構成されている場合はロスレス変換を提供する必要があります。

あなたの例との主な違いは、独自のプロセスを使用して XML に変換するか、MarkLogic のツールキットを使用するかです。

詳細については、MarkLogic のドキュメントを参照してください: http://docs.marklogic.com/guide/app-dev/json

于 2013-07-15T16:30:24.447 に答える
2

MarkLogic は、階層ツリーと対応するインデックスを表す高度に圧縮された C++ データ構造をディスクに保存します。(わかりました、これは単純化しすぎていますが、それでも例証です。) 開発者として通常これらのデータ構造を操作する場所が 2 つあります。データ・モデル。現在、MarkLogic は後者に XML データ モデル (XDM) を使用し、それに対応して前者に XQuery、XPath、および XSLT を使用しています。このスタックを選択した理由はいくつかあります。XML はテキスト マークアップとデータ構造の両方を表現するのに優れており、XML に関するツールは成熟しており、広く普及しています。

そうは言っても、JSON は、階層データ構造 (AJAX の「X」) の一般的なシリアル化として登場しました。現在、JSON と MarkLogic の内部データ モデルとの間に同じ完全な抽象化はありませんが、JSON と XML データ モデルの間で効率的かつロスレスに変換できる一連のツールを提供しています。さらに、当社の REST および Java API を使用すると、この変換ステップについて考える必要なく、JSON として作成されたツリー構造を保存、取得、さらには照会することができます。API は配管でこれを処理します。

パフォーマンスに関しては、JSON 表現と XDM 表現の間の変換で少しオーバーヘッドが発生します。ただし、ほとんどのアプリケーションでは無視できると思います。XML の真の利点は、データを操作する際の XQuery、XPath、および XSLT の表現力にあります。今日の JSON の世界には、これらに相当するものは広くありません。

于 2013-07-17T18:23:57.830 に答える
2

1 つの脚注: REST API (および REST API の Java API ラッパー) は、XML への JSON 変換のファサードを提供します。つまり、API が XML への変換を行います。

通常、変換された要素に対して範囲インデックスと地理空間インデックスを作成する場合を除いて、変換について考える必要はありません。

クライアントで JSON ドキュメントをサポートする必要がある場合は、ファサードが便利です。

一方、JSON として構造を表現することは、データベース操作には利点がなく、いくつかの制限があります。(たとえば、XML には、標準ベースのベイクされたアトミック データ型、スキーマ検証、および XQuery または XSLT によるサーバー処理があります。) したがって、データ構造を完全に制御できる場合は、次のようにサーバーに書き込むことをお勧めします。 XML。

于 2013-07-15T17:48:59.487 に答える
1

MarkLogic 8 (2015 年 2 月) の時点で、JSONは XML と同様にネイティブのデータ型になりました。これにより、JSON のみで動作するアプリケーションの翻訳層が不要になります。さらに、データベース自体に最上級の言語としてJavaScriptを追加しました (Google の V8 エンジンを使用)。これは、データの近くでデータベース内で実行される JavaScript を使用して、ストアド プロシージャ、トリガー、さらには完全な HTTP アプリケーションを作成できることを意味します。

于 2015-09-08T16:57:13.560 に答える