SPARQL 查询返回空结果集

Posted

技术标签:

【中文标题】SPARQL 查询返回空结果集【英文标题】:SPARQL Query returns empty result set 【发布时间】:2021-09-04 16:12:33 【问题描述】:

我正在通过 SPARQL 查询海洋数据。我使用 CodeMirror、RDFLib 和 SPARQLWrapper 开发了一个 SPARQL 控制台,以便在我的网站中显示一些预定义的查询和结果。在控制台中,查询:

prefix geo: <https://www.w3.org/2003/01/geo/wgs84_pos#> 
prefix owl: <http://www.w3.org/2002/07/owl#> 
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix ssn: <http://www.w3.org/ns/ssn/> 
prefix xml: <http://www.w3.org/XML/1998/namespace> 
prefix xsd: <http://www.w3.org/2001/XMLSchema#> 
prefix argo: <http://www.argodatamgt.org/argo-ontology#> 
prefix foaf: <http://xmlns.com/foaf/0.1/> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix sosa: <http://www.w3.org/ns/sosa/>
prefix nerc: <http://vocab.nerc.ac.uk/collection/>
prefix dct: <http://purl.org/dc/terms/>
prefix prov: <https://www.w3.org/TR/prov-o/>

# stations/date of each cycle
SELECT distinct ?wmo ?lat ?lon ?date where
 ?float argo:cycle ?cycle;
        argo:wmoCode ?wmo.
 ?cycle geo:latitude ?lat;
        geo:longitude ?lon;
        argo:startDate ?date.

什么都不返回。我使用查询编辑器 https://www.orpha.net/sparql 对其进行了交叉检查,结果是相同的 - 空结果集。 但是,当我在研究基础设施的 SPARQL 端点 https://www.ifremer.fr/co/argo-linked-data/html/Argo-HTML-SPARQL/ 中尝试完全相同的查询时,它可以完美运行。

我尝试过非常通用的查询,例如:

SELECT DISTINCT * WHERE 
  ?s ?p ?o

LIMIT 10

select distinct ?p ?label 
where  
    ?s ?p ?o . 
    OPTIONAL  ?p rdfs:label ?label  

它们会在我的控制台和我之前提到的通用 SPARQL 编辑器中返回非空结果。

执行 CURL 请求,通过第一个提到的“每个周期的站点/日期”修改模板查询,我能够获取数据:

curl -X POST "https://sparql.ifremer.fr/argo/query" --data-urlencode "query=select ?s ?o ?p where?s ?o ?p. limit 10" 

这让我觉得他们这边过时的 Virtuoso 服务器可能是罪魁祸首,但是,我在 SPARQL 和语义学方面非常陌生,我会很感激任何线索。

【问题讨论】:

您是如何认为他们运行的是“过时的 Virtuoso 服务器”?这当然是可能的,但他们已经将 Virtuoso 的 /sparql 端点放在 Apache 代理后面,该代理会过滤掉许多查询,包括 what I typically use to check versions - 他们提供的 curl 目标位于(或假装)Microsoft-IIS/8.0 后面!最重要的是,我认为您必须与他们联系——他们很活跃!注意the file dates! 请注意,它们的实际 SPARQL 端点既不是 https://www.ifremer.fr/co/argo-linked-data/html/Argo-HTML-SPARQL/ 也不是 https://sparql.ifremer.fr/argo/query!这两个都是代理服务器。 最后——你是如何确定他们正在运行任何 Virtuoso 的? https://sparql.ifremer.fr/argo/query 实际上建议 Fuseki 使用这个 HTTP 响应头 -- Fuseki-Request-ID: 嗨@TallTed 感谢您的意见。我找到了罪魁祸首,这是我这边的一个错误。我正在使用 SPARQLWrapper 并且在我的代码的某个地方我有一个来自另一个研究基础设施的固定 SPARQL 端点,我完全错过了。他们很活跃,是的,我与他们保持着密切联系:)他们确实在使用 Fuseki! 【参考方案1】:

正如 OP 在评论中所说——

我找到了罪魁祸首,这是我这边的一个错误。我正在使用 SPARQLWrapper 并且在我的代码中的某个地方我有一个来自另一个研究基础设施的固定 SPARQL 端点,我完全错过了。

【讨论】:

以上是关于SPARQL 查询返回空结果集的主要内容,如果未能解决你的问题,请参考以下文章

Amazon athena 无法读取 S3 Access 日志文件,Athena 选择查询为每一列返回空结果集

如何迭代引用虚拟图的 SPARQL 查询?

从带有 HAVING 子句的 MySQL 视图中选择返回空结果集

使用 ORM Django 过滤新更新的查询集返回空查询集

空结果集,使用 JDBC 和 MSSQL

简单检查 SELECT 查询空结果