如何在SPARQL查询中实现两个特定值的过滤筛选
SPARQL双条件过滤查询解决方案
样例数据集中文说明
你给出的RDF数据里的单条书籍实体对应信息如下,该书籍出版年份为2012年,不会匹配你要的2010年查询条件:
- 实体ID:
DL_lib:Book_3,类型为书籍、OWL命名个体 - 内容描述:介绍了软件工程师的职责定义、软件工程原则在软件开发全生命周期的应用、软件配置管理规则、软件版本管理等内容
- 作者:
DL_lib:Ivan_Marsic - ISBN编号:978-0-672-32990-6
- 页数:335
- 书名:《Software Engineering》(软件工程)
- 所属分类:计算机科学与通识类、计算机编程与数据类
- 馆藏位置:HEC
- 出版年份:2012
- 出版社:培生教育(
DL_lib:Pearson_Education)
完整查询代码
以下查询可直接匹配「书名对应软件工程、2010年出版」两个过滤条件:
# 声明和你数据集匹配的命名空间前缀 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX DL_lib: <http://www.semanticweb.org/aungyekyaw/ontologies/2020/8/DL_lib#> # 可自定义要返回的字段 SELECT ?book ?title ?author ?isbn ?pages ?location WHERE { # 匹配实体类型为书籍 ?book rdf:type DL_lib:Book . # 过滤条件1:书名完全匹配软件工程(英文数据集匹配英文标题,中文数据集可替换为中文关键词) ?book DL_lib:hasTitle "Software Engineering" . # 过滤条件2:出版年份完全匹配2010 ?book DL_lib:published 2010 . # 绑定其他要返回的属性 ?book DL_lib:hasAuthor ?author . ?book DL_lib:hasISBN ?isbn . ?book DL_lib:hasPages ?pages . ?book DL_lib:locatedIn ?location . }
灵活调整规则
- 如果需要模糊匹配书名中包含「软件工程」的书籍,不需要完全一致,可替换书名匹配行为:删除
?book DL_lib:hasTitle "Software Engineering" .行,新增FILTER(CONTAINS(LCASE(?title), "software engineering"))即可,中文数据集直接替换为中文关键词。 - 如果是要匹配分类为软件工程的书籍,不是匹配书名,可将书名匹配的条件替换为
?book DL_lib:isInCategory 【软件工程分类对应的URI】 .即可。
内容的提问来源于stack exchange,提问作者Ye Kyaw
相关产品推荐
相关产品推荐

