SPARQL查询的筛选结果

SPARQL查询的筛选结果,sparql,Sparql,我想找回所有20世纪意大利小说家的名字。 我写了这样一篇文章: SELECT?标签 在哪里{ 小说家雅戈:意大利小说家。 小说家rdfs:标签?标签。 过滤器(langMatches(lang(?标签),“EN”)) } 订购人?标签 如何过滤结果?语言标记是小写的,因此只需将“EN:替换为“EN”。此外,我发现以下内容与使用语言匹配同样有效 FILTER (lang(?label) = "en") 有几种选择。这里我建议两种: 如果您可以依赖该分类,请使用模式?小说家dct:subject

我想找回所有20世纪意大利小说家的名字。 我写了这样一篇文章:

SELECT?标签
在哪里{
小说家雅戈:意大利小说家。
小说家rdfs:标签?标签。
过滤器(langMatches(lang(?标签),“EN”))
}
订购人?标签


如何过滤结果?

语言标记是小写的,因此只需将
“EN:
替换为
“EN”
。此外,我发现以下内容与使用
语言匹配同样有效

 FILTER (lang(?label) = "en")

有几种选择。这里我建议两种:

  • 如果您可以依赖该分类,请使用模式
    ?小说家dct:subject dbc:20世纪小说家
  • SELECT?标签
    在哪里{
    小说家a雅戈:意大利小说家;
    rdfs:标签?标签;
    主题:20世纪小说家。
    过滤器(langMatches(lang(?标签),“EN”))
    }   
    按标签订购
    
  • 定义出生范围或寿命范围。出生范围示例:
  • SELECT?标签
    在哪里{
    小说家a雅戈:意大利小说家;
    rdfs:标签?标签;
    出生日期?日期。
    绑定(年(?日期)为?年)
    过滤器(langMatches(lang(?标签),“EN”))
    过滤器(?年份>1882年&?年份<1972年)
    }
    按标签订购
    
    有了选项2,你会得到更多的结果,但根据范围的不同,他们可能包括20世纪没有发表过任何作品的小说家


    第三种选择是按出版年份进行筛选。但是,我不推荐使用。首先,它只会为DBpedia中当前可获得此类信息的人提供结果,并且该子集很可能比第一种选择的子集小。第二,取决于你如何定义一个20世纪的小说家,查询结果将省略那些在20世纪写过小说并于21世纪出版的人。

    是什么让他们成为“20世纪小说家”"? 如果是他们的著名作品发表的那一年,你只能得到那些有这些信息的作品。也许在小说家出生时进行筛选会更安全。langMatches进行了一些相当复杂的匹配。例如,langMatches(“en-us”,“en”)是正确的。直接相等匹配无法捕捉到这一点。