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