2013-04-04 50 views
-1
public partial class Index : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 
{ 
    try 
    { 
     String st = ""; 
     String qry = ""; 
     String uri_V; 
     String dguri_V; 

     // uri_V = "http://dbpedia.org/sparql"; 
     // dguri_V = "http://dbpedia.org"; 

     uri_V = "http://dblp.l3s.de/d2r/sparql"; 

     // Modify if need...... 
     //String ns = "\""+TextBox1.Text.ToString()+"\""; 
     // String qry = "SELECT DISTINCT ?name WHERE { ?person foaf:name ?name.FILTER regex(str(?name),"+ns+").}"; 

     qry = "SELECT ?x WHERE { ?x dcterms:issued ?year} LIMIT 20"; 
     // qry = "SELECT ?name WHERE { ?x dcterms:issued ?year. FILTER (?year>2011). ?x dc:creator ?author. ?author foaf:name ?name. } LIMIT 20"; 
     /* if (radiosrch.SelectedIndex == 0) 
     { 
      qry = "SELECT DISTINCT ?Concept WHERE {[] a ?Concept} LIMIT 5"; 
     } 
     else// if (radiosrch.SelectedIndex == 1) 
     { 
      // qry= "query for publisher." 
      qry = "SELECT DISTINCT ?Concept WHERE {[] a ?Concept} LIMIT 5"; 
     } 
     */ 

     //Common 
     SparqlRemoteEndpoint endpoint = new SparqlRemoteEndpoint(new Uri(uri_V));//, dguri_V); 
     SparqlResultSet results = endpoint.QueryWithResultSet(qry); 
     foreach (SparqlResult result in results) 
     { 
      Console.WriteLine(result.ToString()); 
      st = st + result.ToString() + "\n"; 
     } 
     TextBox3.Text = st.ToString(); 
    } 
    catch (Exception ex) 
    { 
     Label1.Visible = true; 
     Label1.Text = ex.ToString(); 
    } 

} 

} 

我得到以下錯誤:
VDS.RDF.Query.RdfQueryException: A HTTP Error occurred while trying to make the SPARQL Query, see inner exception for details ---> System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() at VDS.RDF.Query.SparqlRemoteEndpoint.ExecuteQuery(Uri target, String postData, String accept) at VDS.RDF.Query.SparqlRemoteEndpoint.QueryInternal(String sparqlQuery, String acceptHeader) at VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(ISparqlResultsHandler handler, String sparqlQuery) --- End of inner exception stack trace --- at VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(ISparqlResultsHandler handler, String sparqlQuery) at VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(String sparqlQuery) at Index.ImageButton1_Click(Object sender, ImageClickEventArgs e) in d:\SPARQL\Index.aspx.cs:line 53.NET RDF DBLP查詢

但是,當我在http://dblp.l3s.de/d2r/snorql端點運行此查詢,我完全沒有錯誤。 PLZ幫助我出去!

回答

1

我相信你的問題是你沒有在你的SPARQL查詢中定義任何PREFIX聲明,但是你在查詢中使用了URI的前綴名縮寫。

因此,遠程服務器完全有權返回400 Bad Request,因爲它不知道你在問什麼。

如果你不知道它已經嘗試使用在線SPARQL Query Validator,它可以提供一個有用的健全性檢查您的查詢。 1

行,列22:未解決的前綴名稱:DCTERMS:發行

您的查詢應該是以下是有效的:

輸入的時候有書面查詢提供了以下錯誤
String qry = @"PREFIX dcterms: <http://purl.org/dc/terms/> 
SELECT ?x WHERE { ?x dcterms:issued ?year} LIMIT 20"; 

也可能想看看在Querying with SPARQL文檔這在代表查詢部分包括使用SparqlParameterizedString類,而不是建立與預定義前綴E中的查詢的示例。 G。

SparqlParameterizedString queryString = new SparqlParameterizedString(); 
queryString.Namespaces.AddNamespace("dcterms", new Uri("http://purl.org/dc/terms/")); 
queryString.CommandText = "SELECT ?x WHERE { ?x dcterms:issued ?year} LIMIT 20"; 

然後你只需要調用ToString()queryString當你準備將它傳遞給遠程端點。

+0

謝謝你,一位救主,我的項目終於開始了! :) – 2013-04-04 17:55:29