MarkLogic集合创建冗余的RDF三元组

时间:2018-10-23 22:16:33

标签: marklogic

我有一组用MarkLogic 9.06管理的XML文档。每个文档都包含(非托管)sem:triple元素,它们声明“ rdf:type”三元组和“ rdfs:label”三元组:

pip2 install --user neovim

我注意到,对于每个(MarkLogic)集合,都包含一个包含三元组的文档,相应的“命名图”包含一组(自动生成的)三元组,因此,如果文档属于“ collection_1”和“ collection_2” ,执行XQuery,例如:

<sem:triple xmlns:sem="http://marklogic.com/semantics">
  <sem:subject>abc</sem:subject>
  <sem:predicate>http://www.w3.org/1999/02/22-rdf-syntax-ns#type
  </sem:predicate>
  <sem:object>http://purl.org/dc/terms/BibliographicResource
  </sem:object>
</sem:triple>
<sem:triple xmlns:sem="http://marklogic.com/semantics">
  <sem:subject>abc</sem:subject>
  <sem:predicate>http://www.w3.org/2000/01/rdf-schema#label
  </sem:predicate>
  <sem:object datatype="http://www.w3.org/2001/XMLSchema#string">abc
  </sem:object>
</sem:triple>

就回答命名图查询而言,冗余语句似乎无害(?),但这是正常的MarkLogic行为,还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

尚不清楚您如何准确地存储三元组,所以让我解释一下这两种情况。

使用托管三元组(那些插入了SPARQL Update或sem:rdf-insert的三元组),它们将被存储在所谓的<sem:triples>文档中,其中只有一个与图形iri匹配的集合。如果在多个图形中插入相同的三元组,则每个图形都将以不同的sem:triples文档结尾,该文档具有与每个图形虹膜相匹配的集合。

对于非托管(或我称为嵌入式三元组)的情况则略有不同。嵌入三元组的文档可以在任意数量的集合中。文档集合名称也可以用作图形虹膜,因此,如果某个文档只有一个三元组,但它本身在多个集合中,则该三元组将显示为SPARQL中多个图形的一部分。

所以,是的,这是预期的行为,就我个人而言,这不会造成危害。我认为存储是干净的,并且三元组将仅参与SPARQL中的多个图形。我会说方便而不是多余。

HTH!