SPARQL-包含56000多个三元组的文件-如何一次性检查条件

SPARQL-包含56000多个三元组的文件-如何一次性检查条件,sparql,rdf,Sparql,Rdf,我是SPARQL的新手。我有一个(对我来说)来自古腾堡项目的巨大RDF/XML文件,我正试图得到一个具有某些特定特性的书籍列表。这本书应该是从“虚构”的体裁和用英语写的 我想使用SPARQL创建这个过滤器。例如,我知道如何进行简单的查询(例如检索书名),但当我必须创建复杂的查询时,我就迷路了 一旦我的查询结束,一旦我知道这是一本虚构的书,我想检索信息,如:作者、语言、标题和ID 这是RDF/XML文件的摘录 包含*所有*书籍的RDF文件的档案可在以下网站下载: http://www.guten

我是SPARQL的新手。我有一个(对我来说)来自古腾堡项目的巨大RDF/XML文件,我正试图得到一个具有某些特定特性的书籍列表。这本书应该是从“虚构”的体裁和用英语写的

我想使用SPARQL创建这个过滤器。例如,我知道如何进行简单的查询(例如检索书名),但当我必须创建复杂的查询时,我就迷路了

一旦我的查询结束,一旦我知道这是一本虚构的书,我想检索信息,如:作者、语言、标题和ID

这是RDF/XML文件的摘录


包含*所有*书籍的RDF文件的档案可在以下网站下载:
http://www.gutenberg.org/wiki/Gutenberg:Feeds#The_Complete_Project_Gutenberg_Catalog
text/html;字符集=iso-8859-1
309310
2012-07-19T10:37:04
科幻小说
正文
2017-10-01T01:21:10.697628
294801
文本/纯文本
EN
美国的公共领域。
地心
透明的
冒险故事
1994-04-01
294829
2012-07-19T10:36:58
文本/纯文本;字符集=美国ascii码
地球(行星)——核心——小说
120042
应用程序/epub+zip
2017-10-01T01:21:11.287607
2017-10-01T01:21:12.665594
应用程序/x-mobipocket-ebook
501780
巴勒斯,埃德加·赖斯
1950
1875
古登堡计划
应用程序/rdf+xml
2018-05-17T05:00:17.585186
12268
附言
应用程序/epub+zip
120040
2017-10-01T01:21:11.093621
幻想小说
应用程序/zip
文本/纯文本;字符集=美国ascii码
2012-07-19T10:37:28
112146
114129
2012-07-19T10:37:28
应用程序/zip
text/html;字符集=iso-8859-1
2017-10-01T01:21:14.044548
501774
应用程序/x-mobipocket-ebook
科幻小说
178
维基百科

要获取
dcterms:subject
标签中所有带有“小说”一词的书籍,您可以执行以下操作:

SELECT DISTINCT ?book
WHERE { 
  ?book dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}
SELECT DISTINCT ?book ?title
WHERE { 
  ?book dcterms:title ?title;
        dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}
此查询获取所有具有
dcterms:subject
值的资源,而该值又具有
rdf:value
属性和值
?g
。然后,
过滤器
条件检查该值
?g
是否包含“虚构”一词

要获取返回书籍的其他属性,只需展开查询即可。例如,要想找回书名,您可以执行以下操作:

SELECT DISTINCT ?book
WHERE { 
  ?book dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}
SELECT DISTINCT ?book ?title
WHERE { 
  ?book dcterms:title ?title;
        dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}

希望这能让您开始,在SPARQL教程和一些肘部润滑脂的帮助下,您应该能够在此基础上进行扩展

要在
dcterms:subject
标签中获取所有带有“小说”一词的书籍,您可以执行以下操作:

SELECT DISTINCT ?book
WHERE { 
  ?book dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}
SELECT DISTINCT ?book ?title
WHERE { 
  ?book dcterms:title ?title;
        dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}
此查询获取所有具有
dcterms:subject
值的资源,而该值又具有
rdf:value
属性和值
?g
。然后,
过滤器
条件检查该值
?g
是否包含“虚构”一词

要获取返回书籍的其他属性,只需展开查询即可。例如,要想找回书名,您可以执行以下操作:

SELECT DISTINCT ?book
WHERE { 
  ?book dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}
SELECT DISTINCT ?book ?title
WHERE { 
  ?book dcterms:title ?title;
        dcterms:subject [ rdf:value ?g ] .
  FILTER(REGEX(STR(?g), "fiction", "i")) 
}

希望这能让您开始,在SPARQL教程和一些肘部润滑脂的帮助下,您应该能够在此基础上进行扩展dcterms:subject
rdf:value
属性中是否足够?顺便说一句,您的RDF图似乎正在使用
RDF:value
就像它是
rdfs:label
@AntoineZimmermann是的,我想检索该属性中包含“虚构”一词的所有书籍。除此之外,这本书应该用英语写。我正在与Fuseki Jena合作,我的目标是,但我不知道是否可能,就是在几个专栏中包含这些信息:作者、标题、语言、图书id、html链接、流派。对于未来,请将您的数据视为N-Triples,而不是RDF/XML-nobo