不完整的sem:属性路径的sparql结果,当" optimize = 0"

时间:2016-05-30 07:37:39

标签: sparql marklogic marklogic-8 propertypath

考虑以下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"))

2 个答案:

答案 0 :(得分: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"))

答案 1 :(得分:0)

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