在Marklogic

时间:2016-06-29 18:50:28

标签: marklogic marklogic-8

我在Marklogic中有一大堆XML文档,其中包含一个所谓的“智能号码”(例如,前两个字符代表部门,第二个字符代表项目等)。从数字中解析所需信息非常复杂,需要数据库查找等。我们有一个处理解析的java进程。每个文档可以包含其中的几个数字,我希望能够根据智能数字的属性查询XML集。例如,给定部门计费了多少小时,或者分解了给定项目的小时数(这些数据可以分布在许多文档中)。这让我觉得我需要以某种方式将解析后的数据附加到XML文档。

我是Marklogic的新手,我想知道在这种情况下最佳做法是什么。我能想到的一件事是编辑每个XML文件并将解析后的数据添加到XML中:

所以这个:

<ELEMENT>
    <SMART_NUMBER>Blah, Blah, Blah</SMART_NUMBER>
</ELEMENT>
<ELEMENT>
    <SMART_NUMBER>Blah2, Blah2, Blah2</SMART_NUMBER>
</ELEMENT>

成为这个:

<ELEMENT>
    <SMART_NUMBER>Blah, Blah, Blah</SMART_NUMBER>
    <PARSED_DATA>
        <DEPARTMENT>BLAH BLAH</DEPARTMENT>
        <PROJECT>BLAH BLAH</PROJECT>
        …
    </ PARSED_DATA>
</ELEMENT>
<ELEMENT>
    <SMART_NUMBER>Blah2, Blah2, Blah2</SMART_NUMBER>
    <PARSED_DATA>
        <DEPARTMENT>BLAH2 BLAH2</DEPARTMENT>
        <PROJECT>BLAH2 BLAH2</PROJECT>
        …
    </ PARSED_DATA>
</ELEMENT>

我不确定是否存在“更好”的方式,使用语义似乎是可能的:对于文档中的每个智能数字,创建一个将文档链接到智能数字的三元组。然后,为每个智能号码创建一组三元组,用于定义智能号码的各个部分。但是我对使用语义非常不熟悉所以我不知道这种方法是否值得追求。任何想法/建议都会受到欢迎。

2 个答案:

答案 0 :(得分:0)

我认为你走在正确的轨道上。如果您想要快速分面搜索,那么对数据进行非规范化是迄今为止最简单的方法。但是,不是将代码转换为名称(如果我理解正确,则需要复杂的查找),您还可以考虑将智能编号拆分为单独的标识符,例如department-id,project-id。您随时可以随时将ID转换为名称。

使用语义可能很有趣,但如果你想链接到其他链接数据源,想要使用SPARQL,或者想要推断关系,那么它们会非常有趣。

HTH!

答案 1 :(得分:0)

我也认为你走在正确的轨道上。

如果您想使用三元组来存储数据,那将是一个有趣的想法。对于三元组,正如您正确指出的那样,您可以将智能号码的各个部分与智能号码保存在一起,三元组可能看起来像这样 -

  

<smart-number-1> <predicate\department> <department-1>

     

<smart-number-1> <predicate\project> <project-1>

如果要通过任何参数对数据进行分区,也可以在插入三元组时使用graph-name。如果您使用的是图表,则可能需要set graph permissions

PS:图表是与Triples相同的XML集合

希望这有帮助!