SPARQLWrapper can';t使构造查询返回非XML

SPARQLWrapper can';t使构造查询返回非XML,sparql,fuseki,sparqlwrapper,Sparql,Fuseki,Sparqlwrapper,我使用SPARQLWrapper查询本地SPARQL端点(使用ApacheJena fuseki),我的一些查询是构造查询 该查询将在基于web的SPARQL界面(例如yasgui)上为我提供有效的结果。 使用SPARQLWrapper时,默认的查询方法将显示以下错误: Response: b'Error 400: Failed to write output in RDF/XML: Only well-formed absolute URIrefs can be included in RDF

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

该查询将在基于web的SPARQL界面(例如yasgui)上为我提供有效的结果。 使用SPARQLWrapper时,默认的查询方法将显示以下错误:

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'
(构造查询不支持JSON。)

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

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


我用于执行查询的代码段:

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,我得到的结果如下:

[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)

也许它们与错误有关?但是为什么fuseki不抱怨
格式
输出
(如
结果
),也不打印它们(如
查询
)?

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

根据请求

SPARQLWrapper有一个方法
setonlyconnect
,该方法关闭添加额外的查询字符串部分

  • WARN SPARQL查询:Unrecognize请求参数(已忽略):results
    之所以发生,是因为Fuseki确实理解了
    results
    并记录了有关它的警告。这只是一个警告

  • format
    是一种覆盖适当的HTTP内容协商机制的机制,因为在某些情况下很难设置HTTP头。这不适用于SPARQLWrapper,它正确设置了
    Accept:

  • format=turtle
    不在构造查询的名称列表中<代码>ttl为。(`为了完整起见,可以将海龟添加到Fuseki的未来版本中)


  • 最好的方法是不要将非标准查询字符串参数设置为
    setonlyconnect
    。SPARQLWrapper在请求中正确设置了“Accept:”标头,Fuseki进行了内容协商,并将使用该标头。

    我很困惑-您已将数据加载到本地Fuseki三重存储中,对吗?如果有,哪个版本?如果是这样的话,为什么不能通过标准SPARQL支持的响应类型获得任何响应?(1)使用“-v”运行Fuseki以查看实际发送的HTTP头是什么。(2) 要海龟,不要N3。获取RDF/XML表明它不是Fuseki支持的MIME类型(它提供了N3所支持的标准类型和数据,就像Turtle一样,尽管SPARQLWrapper似乎确实为N3提供了Turtle,至少在我看到的版本中是如此)。@UninformedUser Yes。我正在使用fueski 3.13.1,它是从AUR(archlinux的)安装的。Fuseki似乎工作正常,我可以使用YASGUI或Fuseki的内置web界面获得响应。当我使用SPARQLWrapper时,问题就出现了——我的系统是用Python编写的。选择查询不会出现这种情况——我正在使用一些构造查询。@AndyS感谢您的建议。我重新运行代码,错误仍然存在。我更新了描述并在最后添加了新信息。真正的问题是“海龟”不是“输出”(或“格式”)的合法名称。“ttl”是。这并不是这个机制的真正目的,理想的情况是sparqlwrapper使用“Accept:”而不是替代的、非标准的“?格式”。SPARQLWrapper具有
    setOnlyConnect
    ,因此请尝试将其设置为true。不应添加then result/output/format查询参数。或者错误的样式:
    Wrapper.\u returnFormatSetting=()
    或修复数据,因为“arcp://”表示下一部分是主机名,“uuid,00000000-0000-0000-0000-000000000000”不是合法的主机名(逗号不正确)
    [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)
    
    &format=turtle&output=turtle&results=turtle