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

标签 python sparql

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

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

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

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

%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 中的某种准备/参数化查询支持?

看看What's the best way to parameterise SPARQL queries其中讨论了如何在各种 API 中执行此操作。

自从你提到 Python answer using Python可能特别感兴趣,它基于 prepared queries 的示例来自 RDFLib 文档

关于python - 如何在 SPARQL 查询中预定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217801/

相关文章:

python - 模块未找到错误: No module named 'geopy.geocoders' ; 'geopy' is not a package

python - 使用超线程运行模拟使运行时间加倍

php - 使用 ARC2 PHP 库的 SPARQL INSERT

Java - 使用 Jena APi - 从 RDF 文件获取数据

python - 如何以可读的方式从 rdflib 打印术语文字?

database - 在 Jython 中创建 RDF

python - header 中返回的内容长度,用于使用 nginx、uwsgi 和 Flask 进行分块传输编码

python - 如何将 for 循环中的每个迭代分配给数据库存储的变量

python - 如何从 HttpResponseRedirect django 发送警报消息

algorithm - 允许在一跳中完全绑定(bind)任何 6 元组模式的最小索引集是什么?