【问题标题】:MarkLogic collections create redundant RDF triplesMarkLogic 集合创建冗余 RDF 三元组
【发布时间】:2018-10-23 22:16:33
【问题描述】:

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

<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)集合,相应的命名图包含一组(自动生成的)三元组,因此如果文档属于“collection_1”和“collection_2” ,执行XQuery如:

xquery version "1.0-ml"; 
import module namespace sem = "http://marklogic.com/semantics" 
  at "/MarkLogic/semantics.xqy";

sem:graph(sem:iri("collection_1"))

=>
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xs: <http://www.w3.org/2001/XMLSchema#> .

<abc> a dcterms:BibliographicResource ,
dcterms:BibliographicResource ;
<http://www.w3.org/2000/01/rdf-schema#label> "abc"^^xs:string ,
"abc"^^xs:string .

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

【问题讨论】:

    标签: marklogic


    【解决方案1】:

    不完全清楚你是如何准确存储三元组的,所以让我解释一下这两种情况..

    使用托管三元组(使用 SPARQL 更新或 sem:rdf-insert 插入的三元组),它们将存储在所谓的 &lt;sem:triples&gt; 文档中,其中只有一个与图 iri 匹配的集合。如果您在多个图中插入相同的三元组,则每个最终都将出现在不同的 sem:triples 文档中,其中包含与每个图 iris 匹配的集合。

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

    所以,是的,这是预期的行为,我个人认为这不会有害。我认为存储是干净的,并且三元组将只参与 SPARQL 中的多个图表。我会称之为方便而不是多余的......

    HTH!

    【讨论】:

    • 非常感谢,这确实有助于澄清正在发生的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多