.net RDF DBLP查询

.net RDF DBLP查询,rdf,Rdf,我得到以下错误: VDS.RDF.Query.RdfQueryException:尝试进行SPARQL查询时发生HTTP错误,有关详细信息,请参阅内部异常--->System.Net.WebException:远程服务器返回错误:(400)错误请求。位于VDS.RDF.Query.SparqlRemoteEndpoint.ExecuteQuery(Uri目标、字符串postData、字符串accept)的System.Net.HttpWebRequest.GetResponse(),位于VDS.

我得到以下错误:
VDS.RDF.Query.RdfQueryException:尝试进行SPARQL查询时发生HTTP错误,有关详细信息,请参阅内部异常--->System.Net.WebException:远程服务器返回错误:(400)错误请求。位于VDS.RDF.Query.SparqlRemoteEndpoint.ExecuteQuery(Uri目标、字符串postData、字符串accept)的System.Net.HttpWebRequest.GetResponse(),位于VDS.RDF.Query.SparqlRemoteEndpoint.QueryInternal(字符串sparqlQuery、字符串acceptHeader),位于VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(ISparqlResultsHandler,字符串sparqlQuery)---内部异常堆栈跟踪的结尾---在VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(ISparqlResultsHandler,字符串sparqlQuery)处的VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(字符串sparqlQuery)处的索引。ImageButton1\u单击d:\SPARQL\Index.aspx.cs:第53行中的(对象发送者,ImageClickEventArgs)按钮

但当我在端点上运行这个查询时,我绝对不会得到任何错误。
请帮帮我

我认为您的问题在于,您未能在SPARQL查询中定义任何
前缀
声明,但您在查询中为URI使用了前缀名称缩写

因此,远程服务器完全有权返回
400错误请求
,因为它不知道您在请求什么

如果您还没有意识到这一点,请尝试使用联机,它可以为您的查询提供有用的健全性检查。您的书面查询在此处输入时出现以下错误:

第1行第22列:未解析的前缀名称:dcterms:issued

您的查询应符合以下条件才能有效:

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();
    }

}

}

然后,您只需在
queryString
上调用
ToString()
,就可以将其传递到远程端点。

Thanx a tong先生,您是救世主,我的项目终于开始运行了!!:)
String qry = @"PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT ?x WHERE { ?x dcterms:issued ?year} LIMIT 20";
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";