-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

但是当我在http://dblp.l3s.de/d2r/snorql端点上运行这个查询时,我绝对没有错误。请帮帮我!!

4

1 回答 1

1

我相信您的问题是您未能PREFIX在 SPARQL 查询中定义任何声明,但您在查询中使用了前缀名称缩写作为 URI。

因此,远程服务器完全有权返回 a 400 Bad Request,因为它不知道您在问什么。

如果您不知道它已经尝试使用在线SPARQL 查询验证器,它可以为您的查询提供有用的健全性检查。您所写的查询在此处输入时会出现以下错误:

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

您的查询应该如下是有效的:

String qry = @"PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT ?x WHERE { ?x dcterms:issued ?year} LIMIT 20";

您可能还想查看Querying with SPARQL文档,该文档在 Representing Queries 部分包括使用SparqlParameterizedString类而不是使用预定义前缀构建查询的示例,例如

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准备好将其传递给远程端点时调用。

于 2013-04-04T16:30:42.080 回答