2

如果我将相同的标记存储在 2 个单独的文档中,一个 XML,另一个 JSON,在 MarkLogic 6 中,MarkLogic 是否会自动将 JSON 转换为 XML,并在这方面对其进行索引,或者都以各自的格式存储?

我得到的是,MarkLogic 是否将所有文档都存储为 XML,不管怎样,并且在查询时简单地将 JSON 转换应用于 JSON 文档?

如果文档以本机格式存储,那么在性能方面,以 JSON 格式存储文档而不是 XML 格式有什么优势吗?

下面是一个示例代码片段:

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,如果配置正确,应该提供无损转换。

我认为与您的示例的主要区别在于您是要使用自己的流程还是使用 MarkLogic 的工具包转换为 XML。

有关更多详细信息,请参阅 MarkLogic 的文档: http ://docs.marklogic.com/guide/app-dev/json

于 2013-07-15T16:30:24.447 回答
2

一个脚注:REST API(以及围绕 REST API 的 Java API 包装器)为 JSON 转换为 XML 提供了一种外观——也就是说,API 为您完成了到 XML 的转换。

通常,您不需要考虑转换,除非您在转换后的元素上创建范围和地理空间索引。

如果您需要在客户端中支持 JSON 文档,那么外观很方便。

另一方面,将结构表示为 JSON 对数据库操作没有优势,并且存在一些限制。(例如,XML 具有基于标准的烘焙原子数据类型、模式验证以及使用 XQuery 或 XSLT 进行服务器处理。)因此,如果您可以完全控制数据结构,您可能希望将其写入服务器XML。

于 2013-07-15T17:48:59.487 回答
2

在磁盘上,MarkLogic 存储表示分层树和相应索引的高度压缩的 C++ 数据结构。(好吧,这是一种过度简化,但仍然是说明性的。)作为开发人员,您通常会在两个地方与这些数据结构进行交互:1)构建查询和应用程序逻辑 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 回答
1

从 MarkLogic 8(2015 年 2 月)开始,JSON现在是一种原生数据类型,就像 XML 一样。这消除了希望仅在 JSON 中工作的应用程序对翻译层的需求。此外,我们在数据库本身中添加了JavaScript作为一流语言(使用 Google 的 V8 引擎)。这意味着您可以使用在数据库中运行的 JavaScript 编写存储过程、触发器,甚至是完整的 HTTP 应用程序,靠近数据。

于 2015-09-08T16:57:13.560 回答