dc:Creator SPARQL 中的字符串文字与正则表达式过滤器
dc:Creator string literal vs. regex FILTER in SPARQL
我正在使用 Europeana's Virtuoso SPARQL Endpoint。
我一直在尝试在 SPARQL 中搜索有关特定贡献者的内容。据我了解,这可以通过以下方式进行:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator 'Picasso' .
}
尽管如此,我在 return 中什么也没得到。
或者,我使用 FILTER regex 来搜索文字。
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')
}
这实际上工作得很好并且 return正确地编辑了结果。
我的问题是:是否可以在不使用 FILTER 搜索特定艺术家的作品的情况下生成 SPARQL 查询?
非常感谢。
1) 您的第一个查询具有未连接的三重模式。
2) 我猜,根据 the vocabulary description,dc:creator
需要一个资源,即 URI。使用实体 Picasso 的 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. |
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
最好查看您的数据以确定是否需要对文字进行 FILTER。
我不认为有任何对象 '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')
}
我正在使用 Europeana's Virtuoso SPARQL Endpoint。
我一直在尝试在 SPARQL 中搜索有关特定贡献者的内容。据我了解,这可以通过以下方式进行:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title
WHERE {
?objectInfo dc:title ?title .
?objectInfo dc:creator 'Picasso' .
}
尽管如此,我在 return 中什么也没得到。
或者,我使用 FILTER regex 来搜索文字。
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')
}
这实际上工作得很好并且 return正确地编辑了结果。
我的问题是:是否可以在不使用 FILTER 搜索特定艺术家的作品的情况下生成 SPARQL 查询?
非常感谢。
1) 您的第一个查询具有未连接的三重模式。
2) 我猜,根据 the vocabulary description,dc:creator
需要一个资源,即 URI。使用实体 Picasso 的 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. |
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
最好查看您的数据以确定是否需要对文字进行 FILTER。
我不认为有任何对象 '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')
}