考虑以下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"))
答案 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左右。