JSONiq クエリ言語が XM の処理もサポートしているという記述を見たことがありますが、私が見つけた唯一の例は、JSONiq ウィキペディアの記事にあります。XML処理は「XQueryのJSONiq拡張機能」でしかできないようですが、これはJSONiqと同じではありませんね。JSONiq仕様には XML 構文が含まれていないため、禁止する必要がありますか?
1 に答える
コアの JSONiq 言語は JSON のみをサポートし、コアの XQuery 言語は XML のみをサポートします。ただし、同じプログラムで XML と JSON の両方をクエリしたい、たとえば一方を他方に変換したいという人がたくさんいます。これが、拡張機能がある理由です (双方向)。禁止されているというよりは、オプションである (実際に推奨されている) と言えます。
データが JSON と XML の混合である場合は、「XQuery への JSONiq 拡張機能」または「JSONiq への XQuery 拡張機能」のいずれかを使用できます。違いはわずかで、利便性を中心に展開しています。機能的には、どちらも同等です。
正確な違いはここに包括的に文書化されています
JSONiq を使用した完全な文法、XQuery 拡張機能、さらには更新とスクリプトもここで入手できます。
大量の JSON と少しの XML がある場合は、「「JSONiq への XQuery 拡張機能」がより適切です。ドットを使用して JSON をクエリでき、文字列のエスケープはバックスラッシュで行われ、 、 、 などのリテラルnull
はtrue
認識false
されますが、 XML 名に対する XPath 名のクエリに./foo
は、単にfoo
)ではなく ./ をプレフィックスとして付ける必要があります。
XML が多く、JSON が少しある場合は、「XQuery への JSONiq 拡張機能」が適しています。これは逆です。正確な W3C 準拠の XPath 構文がサポートされており、アンパサンドを使用した文字列エスケープがサポートされていますが、たとえばブール値と null は、XPath に干渉しないようtrue()
に , false()
,と記述する必要があります。null()
Zorbaエンジンは両方のバリアントをサポートしており、クエリのヘッダーで または を使用して切り替えることができますxquery version "3.0"
。jsoniq version "1.0"
追加の構成は必要ありません。JSONiq を使用する場合、XQuery 拡張機能も常に使用できます。常に利用可能です。
ヘッダーが存在しない場合は、使用されている言語を推測するために拡張子.xq
or.jq
が使用されます。
JSONiq プロセッサが XQuery 拡張機能をサポートするかどうかは、ソフトウェア プロバイダーの決定です。一般に、リソースがある場合は、JSONiq エンジンの実装者が XQuery 拡張機能をサポートすることをお勧めします。非常に軽量なエンジンを維持したいプロバイダーは、コア JSONiq に固執します。
逆に言えば、既存の XQuery エンジンを JSONiq 拡張機能で拡張するのは非常に簡単です。JSON のサポートを開始したときに Zorba でこれを行った場合、JSON データ モデルが非常に単純であるため、数日しかかかりませんでした。Youtubeで、このトピックに関する経験を共有するジョナサン・ロビーによるトークがあります。