从结果集中过滤掉字符串
Filter out string from result set
我有这个用于维基数据的 SPARQL 脚本:
SELECT
?game
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {?game wdt:P136 ?genre}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
}
} GROUP BY $game
ORDER BY ASC (?gameLabel)
您可以在此处测试代码:
目前,我正在过滤 一个名为 "role-playing video game" 的流派。但是,我不希望这个字符串出现在结果集中。如何过滤掉这个字符串而不是实际记录?谢谢
SPARQL 非常简单,只需将 FILTER
添加到 OPTIONAL
子句:
SELECT
?game
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889 ;
wdt:P136 wd:Q744038.
OPTIONAL {?game wdt:P136 ?genre . FILTER(?genre != wd:Q744038)}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
}
} GROUP BY ?game
ORDER BY ASC (?gameLabel)
请注意,这不会过滤掉类型 "action role-playing game"。如果你也想省略这个(因为它看起来像一个子流派)你必须将它作为第二个条件添加到 FILTER
:
FILTER(?genre != wd:Q744038 && ?genre != wd:Q1422746)
或者如果你有更多的资源,它会比
更紧凑
FILTER(?genre NOT IN (wd:Q744038, wd:Q1422746))
我有这个用于维基数据的 SPARQL 脚本:
SELECT
?game
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {?game wdt:P136 ?genre}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
}
} GROUP BY $game
ORDER BY ASC (?gameLabel)
您可以在此处测试代码:
目前,我正在过滤 一个名为 "role-playing video game" 的流派。但是,我不希望这个字符串出现在结果集中。如何过滤掉这个字符串而不是实际记录?谢谢
SPARQL 非常简单,只需将 FILTER
添加到 OPTIONAL
子句:
SELECT
?game
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889 ;
wdt:P136 wd:Q744038.
OPTIONAL {?game wdt:P136 ?genre . FILTER(?genre != wd:Q744038)}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
}
} GROUP BY ?game
ORDER BY ASC (?gameLabel)
请注意,这不会过滤掉类型 "action role-playing game"。如果你也想省略这个(因为它看起来像一个子流派)你必须将它作为第二个条件添加到 FILTER
:
FILTER(?genre != wd:Q744038 && ?genre != wd:Q1422746)
或者如果你有更多的资源,它会比
更紧凑FILTER(?genre NOT IN (wd:Q744038, wd:Q1422746))