在 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 等价于三元组的集合
希望对您有所帮助!
我在 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 等价于三元组的集合
希望对您有所帮助!