Marklogic - 获取Marklogic数据库

时间:2016-10-27 03:40:48

标签: xpath xquery marklogic

我想获得一个包含Marklogic数据库中所有不同文档结构的列表。

e.g。包含这3个文档的数据库:

1)< document>< name> Robert< / name>< / document>
2)< document>< name>标记< / name>< / document>
3)< document>< fname> Robert< / fname>< lname> Smith< / lname>< / document>

将返回数据库中有两个唯一的文档结构,一个由2个文档使用,另一个由1个文档使用。

我正在使用这个xquery并且正确地返回了唯一元素序列列表:

for $i in distinct-values(for $document in doc()
return <div>{distinct-values(
for $element in $document//*/*/name() return   <div>{$element}</div>)}   </div>)
return $i

我很欣赏这段代码不会处理重复的元素名称,但现在还可以。

我的问题是:

1)有更好/更有效的方法吗?我假设是的。
2)有没有办法获得足够的细节,以便我可以建立每个独特结构的xml树? 3)返回每个不同结构的计数的最佳方法是什么,例如2和1以及上面的例子

4 个答案:

答案 0 :(得分:1)

如果你有一个有限的元素列表,你需要考虑共同出现或其他类似的解决方案:https://docs.marklogic.com/cts:value-co-occurrences

这需要对每个元素进行范围索引。

尽可能使用MarkLogic最好使用索引。我能想到的另一个解决方案是,您实际上为每个有问题的文档创建目标内容值的哈希/校验和,并将其与文档一起存储(如果您恰好拥有语义许可,则存储在三元组中)。然后你就已经拥有了一把钥匙  独特的组合。

答案 1 :(得分:0)

  

1)有更好/更有效的方法吗?我假设是的。

如果由我决定,我会以一致的方式创建文档(就像您正在做的那样),然后对其进行哈希处理,并将哈希作为集合附加到每个文档。然后我可以统计每个集合中的文档。我没有看到任何有效的方法(使用索引)来获取计数而没有先写入文档内容或元数据(集合是一种元数据),然后查询索引。

  

2)有没有办法获得足够的细节,以便我可以构建每个独特结构的xml树?

获得每个集合的计数后,您可以从每个集合中检索一个文档并遍历它以构建一个空的XML结构。如果你已经知道XSLT,XSLT可能是一个很好的方法。

  

3)返回每个不同结构的计数的最佳方法是什么? 2和1以及上面的例子

打开数据库上的收集词典。然后执行以下操作:

for cts中的$ collection:collections() return($ collection,cts:frequency($ collection))

答案 2 :(得分:0)

我不确定我是否完全遵循您的追求,但我想知道这是否更符合您的要求 - functx:distinct-element-paths($doc)

http://www.xqueryfunctions.com/xq/functx_distinct-element-paths.html

这是一个简单的例子:

xquery version "1.0-ml";
import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";

let $doc := <document><fname>Robert</fname><lname>Smith</lname></document>

return 
    functx:distinct-element-paths($doc)

输出以下字符串(当然可以解析):

document
document/fname
document/lname

答案 3 :(得分:0)

根据数据的大小和所需的覆盖范围(需要100%采样),存在可以使用的第三方工具。 搜索“从XML生成模式”- 这样的工具将查看样本集并推断出模式(xsd,dtd,rng等)。 他们做的很准确,但并不总是像人类那样。 如果他们没有本机ML集成,则需要公开服务或删除数据进行分析。

一旦拥有了架构,就将其加载到MarkLogic中,就可以在ML中以编程方式直接查询该架构(以及由其验证的元素) 如果您找到在XSLT,XQuery或JavaScript中实现的“生成架构”工具,则可以在服务器中导入并执行该工具。