SPARQL 查询的过滤结果
Filtering results of SPARQL queries
我想检索所有 20 世纪意大利小说家的名字。
我写了这个:
SELECT ?label
WHERE{
?novelist a yago:ItalianNovelists.
?novelist rdfs:label ?label.
FILTER (langMatches(lang(?label), "EN"))
}
ORDER BY ?label
如何筛选结果?
语言标签是小写的,所以只需将"EN:
替换为"en"
。此外,我发现以下内容与使用 langMatches
一样有效
FILTER (lang(?label) = "en")
有几个选项。在这里我推荐两个:
- 如果可以依赖该分类,请使用模式
?novelist dct:subject dbc:20th-century_novelists
。
SELECT ?label
WHERE{
?novelist a yago:ItalianNovelists;
rdfs:label ?label;
dct:subject dbc:20th-century_novelists.
FILTER (langMatches(lang(?label), "EN"))
}
ORDER BY ?label
- 定义出生范围或寿命范围。出生范围示例:
SELECT ?label
WHERE{
?novelist a yago:ItalianNovelists;
rdfs:label ?label;
dbo:birthDate ?date.
BIND (YEAR(?date) AS ?year)
FILTER (langMatches(lang(?label), "EN"))
FILTER (?year > 1882 && ?year < 1972)
}
ORDER BY ?label
使用选项 2 您会得到更多结果,但根据范围,它们可能包括 20 世纪未发表过任何作品的小说家。
第三个选项是按出版年份筛选。但是,我不推荐它。首先,它只会为那些当前在 DBpedia 中提供此类信息的人提供结果,并且该子集很可能小于第一个选项的子集。其次,根据您对20世纪小说家的定义,查询结果将省略那些在20世纪写过小说并于21年出版的人。
我想检索所有 20 世纪意大利小说家的名字。 我写了这个:
SELECT ?label
WHERE{
?novelist a yago:ItalianNovelists.
?novelist rdfs:label ?label.
FILTER (langMatches(lang(?label), "EN"))
}
ORDER BY ?label
如何筛选结果?
语言标签是小写的,所以只需将"EN:
替换为"en"
。此外,我发现以下内容与使用 langMatches
FILTER (lang(?label) = "en")
有几个选项。在这里我推荐两个:
- 如果可以依赖该分类,请使用模式
?novelist dct:subject dbc:20th-century_novelists
。
SELECT ?label
WHERE{
?novelist a yago:ItalianNovelists;
rdfs:label ?label;
dct:subject dbc:20th-century_novelists.
FILTER (langMatches(lang(?label), "EN"))
}
ORDER BY ?label
- 定义出生范围或寿命范围。出生范围示例:
SELECT ?label
WHERE{
?novelist a yago:ItalianNovelists;
rdfs:label ?label;
dbo:birthDate ?date.
BIND (YEAR(?date) AS ?year)
FILTER (langMatches(lang(?label), "EN"))
FILTER (?year > 1882 && ?year < 1972)
}
ORDER BY ?label
使用选项 2 您会得到更多结果,但根据范围,它们可能包括 20 世纪未发表过任何作品的小说家。
第三个选项是按出版年份筛选。但是,我不推荐它。首先,它只会为那些当前在 DBpedia 中提供此类信息的人提供结果,并且该子集很可能小于第一个选项的子集。其次,根据您对20世纪小说家的定义,查询结果将省略那些在20世纪写过小说并于21年出版的人。