【问题标题】:Incomplete sem:sparql results for Property Paths when "optimize=0"“optimize=0”时属性路径的不完整 sem:sparql 结果
【发布时间】:2016-05-30 07:37:38
【问题描述】:

考虑以下 subClassOf 关系:

m1
|_ m1_1
   |_ m1_1_1

以下查询正确返回 m1_1 和 m1_1_1:

sem:sparql('
SELECT * 
WHERE { 
 ?s <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ <http://example.org/people#m1> .
}', (), 
("optimize=1"))

但是,下面的查询只返回 m1_1:

sem:sparql('
SELECT * 
WHERE { 
 ?s <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ <http://example.org/people#m1> .
}', (), 
("optimize=0"))

*也是如此。

升级到 MarkLogic 8.0-5.2 后,之前的 sem:sparql 查询返回正确的结果,但在对象是参数时返回正确结果。例如。以下查询不返回任何内容:

sem:sparql('
SELECT * 
WHERE {
?s <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?item . 
}',
(map:new ((map:entry ("item", sem:iri("http://example.org/people#m1"))))), 
("optimize=0"))

【问题讨论】:

  • 在没有看到您的数据的情况下,我们无法重现这一点。例如,它可能是 IRI 类中的一个拼写错误。 (我怀疑是这样,但这不是任何人都可以用来测试的完整示例。)
  • 您使用的是什么版本的 MarkLogic?在 8.0-5.2 上,我得到相同的结果,将 optimize 设置为 1 或 0。
  • @scotthenninger:感谢测试,我在 8.0-3.2。
  • @JoshuaTaylor:我的数据和我描述的一样简单,三个URI之间只有两个子类关系。
  • 我尝试了一个包含 15M 三元组的非常复杂的层次结构。是否可以升级?在 8.0-4.0 左右有一些重要的语义工作。

标签: sparql marklogic marklogic-8 propertypath


【解决方案1】:

以下是一些可能的解决方法:

sem:sparql('
SELECT * 
WHERE {
BIND (?param AS ?item) .
?s <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?item . 
}',
(map:new ((map:entry ("param", sem:iri("http://example.org/people#m1"))))), 
("optimize=0"))

或者

sem:sparql('
SELECT * 
WHERE {
?s <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?item . 
FILTER (?item = ?param) .
}',
(map:new ((map:entry ("param", sem:iri("http://example.org/people#m1"))))), 
("optimize=0"))

【讨论】:

  • 当参数包含一系列 IRI 时,过滤器方法也很有效..
【解决方案2】:

使用 MarkLogic 8.0-5.2 检查一个相当复杂的 RDFS 本​​体,这似乎工作正常。是否可以升级?在 8.0-4.0 左右有一些重要的语义工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2020-09-27
    • 1970-01-01
    • 2011-04-13
    • 2017-03-16
    • 2018-02-09
    相关资源
    最近更新 更多