如果我将相同的标记存储在2个单独的文档中,一个XML,另一个JSON,在MarkLogic 6中,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
答案 0 :(得分:4)
MarkLogic是XML原生的,需要将JSON转换为XML以将其存储在数据库中。有一个高级JSON库来执行转换。主要功能是json:transform-to-json
和json:transform-from-json
,如果配置正确,则应提供无损转换。
我认为与您的示例的主要区别在于您是要使用自己的流程转换为XML还是使用MarkLogic的工具包。
有关更多详细信息,请参阅MarkLogic的文档: http://docs.marklogic.com/guide/app-dev/json
答案 1 :(得分:2)
一个脚注:REST API(以及围绕REST API的Java API包装器)为JSON转换为XML提供了一个外观 - 也就是说,API会为您转换为XML。
通常,您不需要考虑转换,除非您在转换后的元素上创建范围和地理空间索引。
如果您需要在客户端支持JSON文档,那么外观很方便。
另一方面,将结构表示为JSON对数据库操作和某些限制没有任何好处。 (例如,XML具有基于标准的烘焙原子数据类型,模式验证以及使用XQuery或XSLT进行的服务器处理。)因此,如果您完全控制数据结构,则可能需要将其写入服务器XML。
答案 2 :(得分: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世界中没有广泛的等价物。
答案 3 :(得分:1)
从MarkLogic 8(2015年2月)开始,JSON现在是本机数据类型,就像XML一样。这消除了对想要专门使用JSON的应用程序的转换层的需求。此外,我们在数据库本身中添加了JavaScript作为一流语言(使用Google的V8引擎)。这意味着您可以使用在数据库中运行且靠近数据的JavaScript编写存储过程,触发器甚至完整的HTTP应用程序。