簡體   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