【发布时间】:2020-06-19 10:41:37
【问题描述】:
我正在使用以下两个查询查询 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")) .
}
【问题讨论】:
-
你所说的“等效”是什么意思?我的意思是,两个查询可能返回相同的结果集,但显然我们确实不知道数据,因此,我们无法判断您的基于
regex的排除是否排除了所有其他模型。此外,我不明白您为什么使用regex而不是使用URI,即FILTER (?models != <info:fedora/pageCModel> && ... )- 为什么您决定在这里的URI 上使用regex?关于性能,第二个查询进行全面扫描,而第一个查询将能够使用pos索引(如果存在,我根本不知道 Mulgara 三重存储) -
@UninformedUser - 很好,非常感谢您的回复。我应该包含数据,但我认为您指出了一个更大的问题:我没有意识到我可以在
?models和 URI 上使用=或!=。感谢您的帮助!
标签: sparql