在 Marklogic 中向 XML 文档添加额外数据

Adding extra data to XML documents in Marklogic

我在 Marklogic 中有一大组 XML 文档,其中包含一个所谓的“智能数字”(例如,前 2 个字符代表部门,后 3 个字符代表项目等)。从数字中解析所需信息非常复杂,需要查询数据库等。我们有一个处理解析的 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>

我不确定是否有“更好”的方法,使用语义似乎是可能的:为文档中的每个智能数字创建一个三元组,将文档链接到智能数字。然后为每个智能数字创建一组定义智能数字各个部分的三元组。但我对使用语义非常不熟悉,所以我不知道这种方法是否值得采用。欢迎任何 ideas/suggestions。

我认为您的方向是正确的。如果您想要快速的分面搜索,那么对数据进行非规范化是迄今为止最简单的方法。但是,与其将代码转换为名称(如果我理解正确的话,这需要复杂的查找),您还可以考虑将智能数字拆分为单独的标识符,如部门 ID、项目 ID。您随时可以随时将 id 转换为名称。

使用语义可能会很有趣,但如果您想 link 到其他 linked 数据源,想要使用 SPARQL,或者想推断关系,那将是最有趣的..

HTH!

我也认为你的方向是对的。

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

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

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

您也可以使用graph-name while inserting triples in case you want to partition data by any parameter. If you are using graphs, you might need to set graph permissions

PS:图是 XML 等价于三元组的集合

希望对您有所帮助!