/// <summary>
/// Applies the query to the given SPARQL endpoint
/// </summary>
public RDFConstructQueryResult ApplyToSPARQLEndpoint(RDFSPARQLEndpoint sparqlEndpoint)
{
RDFConstructQueryResult constructResult = new RDFConstructQueryResult(this.ToString());
if (sparqlEndpoint != null)
{
RDFQueryEvents.RaiseCONSTRUCTQueryEvaluation(String.Format("Evaluating CONSTRUCT query on SPARQL endpoint '{0}'...", sparqlEndpoint));
//Establish a connection to the given SPARQL endpoint
using (WebClient webClient = new WebClient())
{
//Insert reserved "query" parameter
webClient.QueryString.Add("query", HttpUtility.UrlEncode(this.ToString()));
//Insert user-provided parameters
webClient.QueryString.Add(sparqlEndpoint.QueryParams);
//Insert request headers
webClient.Headers.Add(HttpRequestHeader.Accept, "application/turtle");
webClient.Headers.Add(HttpRequestHeader.Accept, "text/turtle");
//Send querystring to SPARQL endpoint
var sparqlResponse = webClient.DownloadData(sparqlEndpoint.BaseAddress);
//Parse response from SPARQL endpoint
if (sparqlResponse != null)
{
using (var sStream = new MemoryStream(sparqlResponse))
{
constructResult = RDFConstructQueryResult.FromRDFGraph(RDFGraph.FromStream(RDFModelEnums.RDFFormats.Turtle, sStream));
}
constructResult.ConstructResults.TableName = this.ToString();
}
}
//Eventually adjust column names (should start with "?")
Int32 columnsCount = constructResult.ConstructResults.Columns.Count;
for (Int32 i = 0; i < columnsCount; i++)
{
if (!constructResult.ConstructResults.Columns[i].ColumnName.StartsWith("?"))
{
constructResult.ConstructResults.Columns[i].ColumnName = "?" + constructResult.ConstructResults.Columns[i].ColumnName;
}
}
RDFQueryEvents.RaiseCONSTRUCTQueryEvaluation(String.Format("Evaluated CONSTRUCT query on SPARQL endpoint '{0}': Found '{1}' results.", sparqlEndpoint, constructResult.ConstructResultsCount));
}
return(constructResult);
}