4

在过去一年左右的时间里,我一直在使用一堆自定义代码来处理与多个SPARQL端点的交互。我宁愿不用维护它,所以我一直在学习如何使用dotnetrdf. 我遇到的问题是我遇到了无法工作的端点。这是一个示例:端点http://id.ndl.go.jp/auth/ndla SPARQL Query::

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?subj WHERE { 
{?subj rdfs:label ?heading} UNION
{?subj xl:altLabel [ xl:literalForm ?heading]}
filter (?heading = "軍事基地.")
}

如果您将此查询作为GET请求运行,它会起作用:SPARQL QUERY

我遇到的问题dotnetref是当我尝试以下操作时:

SparqlRemoteEndpoint endpoint = new SparqlRemoteEndpoint(new Uri(@"http://id.ndl.go.jp/auth/ndla"));
endpoint.HttpMode = "GET";               
SparqlResultSet results = endpoint.QueryWithResultSet(textBox1.Text);                

请求始终作为POST请求传递——即使我另有说明,我总是返回HTML结果页面。如果我尝试直接访问该页面,我会得到数据:

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(@"http://id.ndl.go.jp/auth/ndla?query=PREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%20%0APREFIX%20xl%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2008%2F05%2Fskos-xl%23%3E%0ASELECT%20%3Fsubj%20WHERE%20%7B%20%0A%20%7B%3Fsubj%20rdfs%3Alabel%20%3Fheading%7D%20UNION%0A%20%7B%3Fsubj%20xl%3AaltLabel%20%5B%20xl%3AliteralForm%20%3Fheading%5D%7D%0A%20filter%20(%3Fheading%20%3D%20%22%E8%BB%8D%E4%BA%8B%E5%9F%BA%E5%9C%B0%22)%0A%20%7D");

System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();           
System.IO.Stream s = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(s);
string _s = reader.ReadToEnd();
reader.Close();
s.Close();

这让我得到了 raw sparql xml,我可以用它做一些事情,但我仍然想利用dotnetrdf's 解析器。所以,我想我有两个问题。

  1. 我无法弄清楚为什么上述端点不起作用。使用 FullHTTPDebugging is how I can see that theHTTPMode` 没有做任何事情——所有数据都作为帖子发送。有没有办法强制使用该方法(我正在使用 2.0 prerelease 8 进行此特定测试)
  2. 假设我不能使这个端点工作,有没有办法将 SPARQL xml通过该方法检索到的响应HttpWebResponse反馈到库中以创建一个SparqlResultSet.

我认为以上任何一个都可以解决我的问题,因为我可以假设如果初始查询失败,我应该退回到直接请求,然后将其推sparql xml回库中以生成resultset.

4

0 回答 0