我如何编写代码来处理 MarkLogic 7 和 8 中的 JSON API 差异?
How can I write code that works with the JSON API differences in MarkLogic 7 and 8?
MarkLogic 8 在许多方面改进了 JSON 支持,但某些 MarkLogic 7 JSON 函数现在具有不同的签名或做不同的事情。如何编写适用于这两个版本的 XQuery 代码?
到目前为止,我 运行 所做的主要更改是 xdmp:from-json
、xdmp:to-json
和 json:transfrom-to-json
。如果您有大量来自 MarkLogic 7 的 JSON 相关代码,这些更改可能会破坏现有代码。
不是直接调用那些 xdmp
和 json
函数,而是导入这个库模块并调用 c:from-json
,等等。这允许为 MarkLogic 7 编写的代码在两个版本中工作。
module namespace c="http://blakeley.com/marklogic/json/compatibility";
import module namespace json="http://marklogic.com/xdmp/json"
at "/MarkLogic/json/json.xqy";
(: No prefix for the fn:* functions :)
declare default function namespace "http://www.w3.org/2005/xpath-functions";
declare variable $VERSION := xs:integer(
substring-before(xdmp:version(), ".")) ;
declare function c:from-json(
$arg as xs:string)
as item()*
{
xdmp:from-json(
if ($VERSION ge 8) then xdmp:unquote($arg, (), "format-json")
else $arg)
};
declare function c:to-json(
$item as item()*)
as xs:string*
{
if ($VERSION ge 8) then xdmp:quote($item)
else xdmp:to-json($item)
};
declare function c:transform-to-json(
$node as node(),
$config as map:map?)
as xs:string
{
json:transform-to-json($node, $config) ! (
if ($VERSION ge 8) then xdmp:quote(.)
else .)
};
declare function c:transform-to-json(
$node as node())
as xs:string
{
c:transform-to-json($node, ())
};
我会在 运行 进行其他更改或了解它们时将其扩展。如果它变得太长,我会将其移至要点或 github 项目。
MarkLogic 8 在许多方面改进了 JSON 支持,但某些 MarkLogic 7 JSON 函数现在具有不同的签名或做不同的事情。如何编写适用于这两个版本的 XQuery 代码?
到目前为止,我 运行 所做的主要更改是 xdmp:from-json
、xdmp:to-json
和 json:transfrom-to-json
。如果您有大量来自 MarkLogic 7 的 JSON 相关代码,这些更改可能会破坏现有代码。
不是直接调用那些 xdmp
和 json
函数,而是导入这个库模块并调用 c:from-json
,等等。这允许为 MarkLogic 7 编写的代码在两个版本中工作。
module namespace c="http://blakeley.com/marklogic/json/compatibility";
import module namespace json="http://marklogic.com/xdmp/json"
at "/MarkLogic/json/json.xqy";
(: No prefix for the fn:* functions :)
declare default function namespace "http://www.w3.org/2005/xpath-functions";
declare variable $VERSION := xs:integer(
substring-before(xdmp:version(), ".")) ;
declare function c:from-json(
$arg as xs:string)
as item()*
{
xdmp:from-json(
if ($VERSION ge 8) then xdmp:unquote($arg, (), "format-json")
else $arg)
};
declare function c:to-json(
$item as item()*)
as xs:string*
{
if ($VERSION ge 8) then xdmp:quote($item)
else xdmp:to-json($item)
};
declare function c:transform-to-json(
$node as node(),
$config as map:map?)
as xs:string
{
json:transform-to-json($node, $config) ! (
if ($VERSION ge 8) then xdmp:quote(.)
else .)
};
declare function c:transform-to-json(
$node as node())
as xs:string
{
c:transform-to-json($node, ())
};
我会在 运行 进行其他更改或了解它们时将其扩展。如果它变得太长,我会将其移至要点或 github 项目。