1

我试图将参数化查询传递给 dotNetRDF 中的 ExecuteQery() 函数

我的代码是

   preference =  (d1.send()); // d1.send(); method returns a string value


   SparqlParameterizedString queryString = new SparqlParameterizedString();
   queryString.CommandText = @"
   PREFIX my: <http://www.codeproject.com/KB/recipes/n3_notation#>
   SELECT ?name WHERE { [ a my:spec; my:preferedby my:@variable;  my:name ?name].  }";

   queryString.SetVariable("variable", preference );

我不能preference在函数的第二个参数中设置变量,SetVariable因为它说它是一个无效的参数。我在文档中读到,参数必须是一个INode值,我尝试使用获取变量的 INodepreference

INode value = preference.Value("var");

但它无法完成,因为它显示错误“String does not contain a definition for value"

有人可以帮我获取此字符串变量的 INode 值或如何SetVariable正确调用此方法

4

1 回答 1

1

首先,您的查询模板看起来很糟糕,my:@variable无论您注入什么值,它只会导致无效查询。Also@variable是一个参数,必须通过SetParameter(),SetUri()SetLiteral()方法之一注入。

看起来您实际上想要注入的是 URI ,您的方法返回的字符串<http://www.codeproject.com/KB/recipes/n3_notation#foo>在哪里。并且您正在尝试将其压缩为使用声明。food1.send()my:fooPREFIX

所以如果你想注入一个URI,那么你可以SetUri()直接使用例如

// Start a new query string
SparqlParameterizedString queryString = new SparqlParameterizedString();

// Set the desired prefix declarations
queryString.Namespaces.AddNamespace("my", new Uri("http://www.codeproject.com/KB/recipes/n3_notation#"));

// Set the command template
queryString.CommandText = @"SELECT ?name WHERE 
{ 
  [ a my:spec ; 
    my:preferedby @variable ;  
    my:name ?name ].  
}";

// Set your parameter
queryString.SetUri("variable", new Uri("http://www.codeproject.com/KB/recipes/n3_notation#" + preference));
于 2015-06-02T08:34:09.957 回答