我使用以下两个查询查询一个Mulgara三重存储,试图返回与某些值不匹配的主题。我只限于Mulgara实现的SPARQL 1.0的任何部分,我很好奇这两个查询是否实际上是相同的,还是在我的结果中看不到行为上的差异。
提前感谢您的时间和帮助。
查询1:
PREFIX fedora-model: <info:fedora/fedora-system:def/model#>
PREFIX fedora-rels-ext: <info:fedora/fedora-system:def/relations-external#>
SELECT ?pids
FROM <#ri>
WHERE {
{ ?pids fedora-model:hasModel <info:fedora/islandora:sp_large_image_cmodel> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:bookCModel> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:collectionCModel> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:compoundCModel> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:sp-audioCModel> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:sp_videoCModel> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:sp_basic_image> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:sp_pdf> }
UNION
{ ?pids fedora-model:hasModel <info:fedora/islandora:oralhistoriesCModel> }
}和查询2:
PREFIX fedora-model: <info:fedora/fedora-system:def/model#>
PREFIX fedora-rels-ext: <info:fedora/fedora-system:def/relations-external#>
SELECT ?pids
FROM <#ri>
WHERE {
?pids fedora-model:hasModel ?models .
FILTER (!regex(str(?models), "pageCModel") &&
!regex(str(?models), "FedoraObject-3.0") &&
!regex(str(?models), "transformCModel") &&
!regex(str(?models), "ContentModel-3.0")) .
}发布于 2020-06-18 17:16:36
一般情况下,不,这些都不是等价物。其中一些原因包括:
正如上面已经提到的,REGEX的使用可能也会对查询性能产生重大影响。
发布于 2020-06-19 02:41:37
确定查询是否等价的唯一方法是运行“探索性”查询。
下面是一个查询,可以找到所有的模型:
SELECT distinct ?models FROM <#ri> WHERE
{ ?pids fedora-model:hasModel ?models}有了这个,你就有了所有的模特。然后,您可以找出是否缺少指定任何其他模型。
使用'=‘的另一个替代方法是使用sameTerm函数。sameTerm函数在IRIs上工作,而'=‘则同时比较字符串和文本。使用sameTerm会有更好的响应时间。
PREFIX fedora-model: <info:fedora/fedora-system:def/model#>
PREFIX fedora-rels-ext: <info:fedora/fedora-system:def/relations-external#>
SELECT ?pids
FROM <#ri>
WHERE {
?pids fedora-model:hasModel ?models .
FILTER (!sameTerm(?models, <info:fedora/islandora:pageCModel> ) &&
!sameTerm(?models, <info:fedora/islandora:pageCModel> ))
}https://stackoverflow.com/questions/62452140
复制相似问题