.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";