首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了XML之外,SPARQLWrapper无法使构造查询返回

除了XML之外,SPARQLWrapper无法使构造查询返回
EN

Stack Overflow用户
提问于 2020-11-02 13:47:52
回答 1查看 403关注 0票数 1

我使用SPARQLWrapper查询本地SPARQL端点(使用apache fuseki),我的一些查询是构造查询。

查询将在基于web的SPARQL接口上给出有效的结果,例如yasgui。使用SPARQLWrapper时,默认查询方法将给出以下错误:

代码语言:javascript
复制
Response:
b'Error 400: Failed to write output in RDF/XML: Only well-formed absolute URIrefs can be included in RDF/XML output: <arcp://uuid,00000000-0000-0000-0000-000000000000/> Code: 28/NOT_DNS_NAME in HOST: The host component did not meet the restrictions on DNS names.\n'

(我已将UUID替换为0。)

我找到了这个职位。不幸的是,源数据超出了我的控制范围,所以我不能轻松地更改它的内容--它是control,它的标准告诉它使用这种表示形式。因此,我需要使用其他返回格式。我在yasgui上尝试了和Turtle格式,它们在那里工作。

但是,当在SPARQLWrapper上设置返回格式时,会出现问题。如果我将其设置为SPARQLWrapper.XML以外的任何内容,它将返回此错误(以N3为例):

代码语言:javascript
复制
Response:
b"Error 400: Can't determine output content type: n3\n"

(构造查询不支持JSON。)

如果我使用的是给定字符串以外的自定义字符串,它将自动回退到XML (如其文档中所述)。

这个错误是由fuseki产生的,所以我相信我可能做错了什么。有没有人经历过这种情况,如何解决?

我用来执行查询的代码片段:

代码语言:javascript
复制
import SPARQLWrapper

sparql = SPARQLWrapper.SPARQLWrapper('http://localhost:3030/prov')
#query = '' # The CONSTRUCT query here
sparql.setQuery(query)
sparql.setReturnFormat(SPARQLWrapper.N3)
return sparql.query().convert()

正如@AndyS建议的那样,我用Turtle替换了N3,但是错误仍然发生。使用-v运行fuseki,下面是我得到的信息:

代码语言:javascript
复制
[2020-11-04 17:02:22] Fuseki     INFO  [1]   => User-Agent:          sparqlwrapper 1.8.5 (rdflib.github.io/sparqlwrapper)
[2020-11-04 17:02:22] Fuseki     INFO  [1]   => Connection:          close
[2020-11-04 17:02:22] Fuseki     INFO  [1]   => Host:                127.0.0.1:3030
[2020-11-04 17:02:22] Fuseki     INFO  [1]   => Accept-Encoding:     identity
[2020-11-04 17:02:22] Fuseki     INFO  [1]   => Accept:              application/turtle,text/turtle
[2020-11-04 17:02:22] Fuseki     WARN  SPARQL Query: Unrecognize request parameter (ignored): results
[2020-11-04 17:02:22] Fuseki     INFO  [1] Query = 

MY-ORIGINAL-QUERY-OMITTED

[2020-11-04 17:02:22] Fuseki     INFO  [1]   <= Vary:                Accept,Accept-Encoding,Accept-Charset
[2020-11-04 17:02:22] Fuseki     INFO  [1] 400 Can't determine output content type: turtle (165 ms)

我复制了打印的查询,它在YASGUI上工作。还有一些关于URI/IRI方案违反的错误,我在这里省略了这些错误。

我在查询URL的末尾看到了这些额外的查询参数:

代码语言:javascript
复制
&format=turtle&output=turtle&results=turtle

也许它们与错误有关?但是为什么fuseki不抱怨formatoutput (比如results),也不打印它们(比如query)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-05 17:35:28

SPARQLWrapper默认添加

&format=turtle&output=turtle&results=turtle

为了请求。

SPARQLWrapper有一个方法setOnlyConneg,它关闭附加查询字符串部件的添加。

  1. 之所以会出现WARN SPARQL Query: Unrecognize request parameter (ignored): results,是因为Fuseki确实理解results并记录了关于它的警告。这只是一个警告。
  2. format是一种覆盖适当HTTP内容协商机制的机制,因为在某些情况下很难设置headers。这不适用于SPARQLWrapper,它确实正确地设置了Accept:
  3. format=turtle不在构造查询的名称列表中。ttl是。(“为完整起见,可将海龟添加到未来版本的Fuseki中)。

最好的方法是不使用setOnlyConneg的非标准查询字符串参数。SPARQLWrapper在请求中正确地设置了"Accept:“报头,而Fuseki有内容协商,并将与该标头一起工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64646788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档