繁体   English   中英

如何在SPARQL查询中预定义变量

[英]How can you predefine a variable in a SPARQL query

我创建了一个SPARQL查询来检索有关工作流元素的大量信息。 查询与数据库进行通信,并从Python调用。 查询的形式如下:

"""SELECT ?input ?value1 ?value2 ?value3 ....
WHERE {?input rdf:type InputVar.
?input property1 ?value1.
?input property2 ?value2.
?input property3 ?value3.
.... etc....
}"""

然后,此查询将返回与我想要知道的属性对应的所有值。

我现在希望我的查询能够做的是我希望它能够同时查找所有输入变量(就像它现在一样)并且我希望它能够收集ONE,指定输入的信息。 这可能是这样的:

%s property1 ?value1
%s property2 ?value2

在哪里我会让%s,取决于是否有指定的名称,是?input或inputname(指定的名称)。

但是,如果我这样做,我需要很多%s,因为我提取了很多属性。

在SPARQL中,是否可以定义要查找的变量的名称? 那么可以这样做吗?

    """SELECT ?input ?value1 ?value2 ?value3 ....
    WHERE {(?input=inputname)
    ?input rdf:type InputVar.
    ?input property1 ?value1.
    ?input property2 ?value2.
    ?input property3 ?value3.
    .... etc....
    }"""

所以在开头添加类似(?input = inputname)的东西,所以它只查找这个值?

在一般情况下,您可以尝试使用VALUES子句,例如

SELECT *
WHERE 
{
  VALUES ?input { <http://myConstant> }
  ?input rdf:type InputVar.
  ?input property1 ?value1.
  ?input property2 ?value2.
  ?input property3 ?value3.
  # etc.
}

但重要的是要明白,这实际上并不是你想要的。 它在语义上的作用是将常量连接到图形模式的匹配中,从而消除匹配,其中?input与您的常量不匹配。 一些查询引擎可能足够聪明,可以将其简化为替换,但并非所有查询引擎都将这样,并且只适用于相对简单的查询。

听起来你真的在使用大多数SQL API中的某种准备/参数化查询支持?

看看参数化SPARQL查询的最佳方法是什么 ,讨论如何在各种API中执行此操作。

因为你提到Python, 使用 Python的答案可能特别有意义,它基于来自RDFLib文档的准备好的查询的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM