2

我正在尝试指定一个在dotNetRDF中设置 SPARQL 端点的配置文件。在将其集成到应用程序中之前,我正在测试配置文件,方法是加载它以在rdfServer GUI工具中运行本地服务器,然后尝试从商店管理器工具访问该服务器,两者都来自dotNetRDF 工具(尽管这不应该与问题相关)。

我通过使用最少的配置代码来设置 SPARQL 处理程序来遵循手册:

@prefix dnr: <http://www.dotnetrdf.org/configuration#> .

<dotnetrdf:/sparql> a dnr:HttpHandler ;
  dnr:type "VDS.RDF.Web.QueryHandler" ;
  dnr:queryProcessor _:proc .

_:proc a dnr:SparqlQueryProcessor ;
  dnr:type "VDS.RDF.Query.LeviathanQueryProcessor" ;
  dnr:usingStore _:store .

_:store a dnr:TripleStore ;
  dnr:type "VDS.RDF.TripleStore" .

文档说:

/sparql这指定了 Handler 的配置,该 Handler通过提供 SPARQL 查询端点来响应 URI 上的请求。

我加载此配置并在localhost:1987. 但是,当尝试按照描述访问它时,通过发送一个简单的查询 ( SELECT * WHERE { ?a ?b ?c . } LIMIT 10) 到http://localhost:1987/sparql没有默认图形,服务器的日志输出总是包含以下注释:

错误没有注册可以处理此请求的处理程序


我还尝试通过从本地文件加载图表来构建提供的示例,同时考虑有关如何从相应的手册页定义图表的信息(为了测试,通过加载披萨本体,我与配置文件放在同一目录中的文件):

@prefix dnr: <http://www.dotnetrdf.org/configuration#> .

<dotnetrdf:/graph> a dnr:HttpHandler ;
  dnr:type "VDS.RDF.Web.QueryHandler" ;
  dnr:queryProcessor _:proc .

_:proc a dnr:SparqlQueryProcessor ;
  dnr:type "VDS.RDF.Query.LeviathanQueryProcessor" ;
  dnr:usingStore _:store .

_:store a dnr:TripleStore ;
  dnr:type "VDS.RDF.TripleStore" ;
  dnr:usingGraph <http://example.org/graph> .

<http://example.org/graph> a dnr:Graph ;
  dnr:type "VDS.RDF.Graph" ;
  dnr:fromFile "pizza.owl" .

我尝试了以下发送上述简单查询的变体:

  1. http://localhost:1987/graph(因为这似乎是基于配置说法的合乎逻辑的选择<dotnetrdf:/graph>
  2. http://localhost:1987/graph/sparql(以防在sparql配置的 URL 后自动添加后缀)
  3. http://localhost:1987/sparql(如果sparql后缀由于某种原因实际上替换了特定于图形的 URL)

我在没有默认图表的情况下尝试了所有这些,并使用http://example.org/graph了默认图表。

对于 2) 和 3),我得到了与上面相同的结果:

错误没有注册可以处理此请求的处理程序

另一方面,对于 1),服务器说:

错误来自处理程序 VDS.RDF.Utilities.Server.SparqlServerHandler 的意外错误

1) 以某种方式产生不同消息的事实使我看起来好像在正确的轨道上找到那里的 URL,但它仍然没有为我提供有关如何正确设置配置文件的任何提示。


如何为从本地文件加载的图形配置简单的 SPARQL 端点?

某处是否有某种最小的配置示例?

4

1 回答 1

1

所以问题的原因部分是文档失败,部分是 rdfServer 中的错误。

rdfServer 比我们的 ASP.Net 集成受限得多,并且只支持配置SPARQL 服务器。但是,它无法通知您这一点,并尝试为您的配置文件中定义的任何 HTTP 处理程序配置 SPARQL 服务器。这会导致您在尝试访问处理程序时看到的失败,因为 SPARQL 服务器对它们的访问方式做出了一些假设。

主要假设是它们被映射到通配符路径,因此您需要将表单的 URI<dotnetrdf:/path/*>作为您的 HTTP 处理程序声明的主题,如下所示:

@prefix dnr: <http://www.dotnetrdf.org/configuration#> .

<dotnetrdf:/sparql/*> a dnr:HttpHandler ;
  dnr:type "VDS.RDF.Web.SparqlServer" ;
  dnr:queryProcessor _:proc .

_:proc a dnr:SparqlQueryProcessor ;
  dnr:type "VDS.RDF.Query.LeviathanQueryProcessor" ;
  dnr:usingStore _:store .

_:store a dnr:TripleStore ;
  dnr:type "VDS.RDF.TripleStore" .

如果您更改配置来执行此操作,它将允许您访问 和 的/sparql/query端点/sparql/update。请注意,rdfServer 不支持 SPARQL 图形存储协议。

我们将确保 rdfServer 的未来版本更清楚地执行这些限制,并在尝试使用不受支持的配置时给出适当的错误消息。

于 2015-06-01T10:49:06.673 回答