[英]dc:Creator string literal vs. regex FILTER in SPARQL
我正在使用Europeana的Virtuoso SPARQL端點 。
我一直在嘗試在SPARQL中搜索有關特定貢獻者的內容。 據我了解,這可以通過以下方式進行:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator 'Picasso' .
}
盡管如此,我卻一無所獲。
另外,我使用FILTER正則表達式搜索文字。
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title ?creator
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator ?creator .
FILTER regex(?creator, 'Picasso')
}
這實際上效果很好,並正確返回了結果。
我的問題是:是否可以在不使用FILTER來搜索特定藝術家的作品的情況下產生SPARQL查詢?
非常感謝。
我認為實際上沒有任何對象帶有“ Picasso”。 因此,正則表達式過濾器是一個不錯的選擇,但速度較慢。
這是查找正則表達式匹配的字符串的方法:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?creator, (count(?creator) as ?ccount)
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator ?creator .
FILTER regex(?creator, 'Picasso')
}
group by ?creator
order by ?ccount
如果您已經在select語句中顯示了所有變量,則可能更容易看到:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT *
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator ?creator .
FILTER regex(?creator, 'Picasso')
}
如果您不想使用正則表達式過濾器,則可以枚舉您要查找的所有Picasso變體:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT *
WHERE {
values ?creator { "Picasso, Pablo" "Pablo Picasso" } .
?objectInfo dc:title ?title .
?objectInfo dc:creator ?creator
}
bif:contains可在此端點上運行,並且速度非常快:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT *
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator ?creator .
?creator bif:contains 'Picasso'
#FILTER regex(?creator, 'Picasso')
}
1)您的第一個查詢具有未連接的三重模式。
2)我猜並根據詞匯描述 , dc:creator
需要一個資源,即URI。 使用實體畢加索的URI不起作用?
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Term Name: creator | |
| URI: | http://purl.org/dc/elements/1.1/creator |
| Label: | Creator |
| Definition: | An entity primarily responsible for making the resource. |
| Comment: | Examples of a Creator include a person, an organization, or a service. Typically, the name of a Creator should be used to indicate the entity. |
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
最好查看您的數據,以便確定是否需要使用文字過濾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.