对多个 RDF 文件的 SPARQL 查询
SPARQL query on multiple RDF files
我有一些编程基础,但我对 RDF 或 Sparql 完全陌生,所以我希望在接下来的内容中能够清楚。
我正在尝试下载 http://data.camera.it/data/en/datasets/ 上可用的一些数据,所有数据都以 rdf-xml 格式组织,格式为 ontology.
我注意到这个网站有一个在线 SPARQL 查询编辑器 (http://dati.camera.it/sparql),并且使用他们的一些示例,我能够使用 Python 检索和转换我需要的一些数据。我使用以下代码和查询,使用 SparqlWrapper
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dati.camera.it/sparql")
sparql.setQuery(
'''
SELECT distinct ?deputatoId ?cognome ?nome ?data ?argomento titoloSeduta ?testo
WHERE {
?dibattito a ocd:dibattito; ocd:rif_leg <http://dati.camera.it/ocd/legislatura.rdf/repubblica_17>.
?dibattito ocd:rif_discussione ?discussione.
?discussione ocd:rif_seduta ?seduta.
?seduta dc:date ?data; dc:title ?titoloSeduta.
?seduta ocd:rif_assemblea ?assemblea.
?discussione rdfs:label ?argomento.
?discussione ocd:rif_intervento ?intervento.
?intervento ocd:rif_deputato ?deputatoId; dc:relation ?testo.
?deputatoId foaf:firstName ?nome; foaf:surname ?cognome .
}
ORDER BY ?data ?cognome ?nome
LIMIT 100
'''
)
sparql.setReturnFormat(JSON)
results_raw = sparql.query().convert()
但是,我遇到了一个问题,因为该网站只允许下载 10,000 个值。据我了解,此限制无法修改。
因此我决定将数据集下载到我的电脑上。我尝试处理所有这些 rdf 文件,但我不知道该怎么做,因为据我所知,SparqlWrapper 不适用于本地文件。
所以我的问题是:
- 如何创建包含所有 RDF 文件的数据集,以便我可以像处理单个对象一样处理它们?
- 如何查询此类对象以检索我需要的信息?这可能吗?
- 这种推理方式是否正确?
如有任何关于如何解决问题的建议,我们将不胜感激。
谢谢!
从他们的下载区下载所有 RDF/XML 文件,比他们现有的 load them into a local instance of Virtuoso (which happens to be the engine they are using for their public SPARQL endpoint). You will have the advantage of running a much more recent version (v7.2.5.1 or later), whether Open Source or Enterprise Edition(开源 v7.1.0,从 2014 年 3 月开始!) .
使用新的本地 SPARQL 端点,默认情况下位于 http://localhost:8890/sparql。您可以将其配置为对结果集大小、查询运行时间或其他方面没有限制。
很有可能。
(P.S。您可能会鼓励 dati.camera.it (assistenza-dati@camera.it) 的人们升级他们的 Virtuoso 实例。有大量的性能和功能增强等待着!)
我有一些编程基础,但我对 RDF 或 Sparql 完全陌生,所以我希望在接下来的内容中能够清楚。 我正在尝试下载 http://data.camera.it/data/en/datasets/ 上可用的一些数据,所有数据都以 rdf-xml 格式组织,格式为 ontology.
我注意到这个网站有一个在线 SPARQL 查询编辑器 (http://dati.camera.it/sparql),并且使用他们的一些示例,我能够使用 Python 检索和转换我需要的一些数据。我使用以下代码和查询,使用 SparqlWrapper
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dati.camera.it/sparql")
sparql.setQuery(
'''
SELECT distinct ?deputatoId ?cognome ?nome ?data ?argomento titoloSeduta ?testo
WHERE {
?dibattito a ocd:dibattito; ocd:rif_leg <http://dati.camera.it/ocd/legislatura.rdf/repubblica_17>.
?dibattito ocd:rif_discussione ?discussione.
?discussione ocd:rif_seduta ?seduta.
?seduta dc:date ?data; dc:title ?titoloSeduta.
?seduta ocd:rif_assemblea ?assemblea.
?discussione rdfs:label ?argomento.
?discussione ocd:rif_intervento ?intervento.
?intervento ocd:rif_deputato ?deputatoId; dc:relation ?testo.
?deputatoId foaf:firstName ?nome; foaf:surname ?cognome .
}
ORDER BY ?data ?cognome ?nome
LIMIT 100
'''
)
sparql.setReturnFormat(JSON)
results_raw = sparql.query().convert()
但是,我遇到了一个问题,因为该网站只允许下载 10,000 个值。据我了解,此限制无法修改。 因此我决定将数据集下载到我的电脑上。我尝试处理所有这些 rdf 文件,但我不知道该怎么做,因为据我所知,SparqlWrapper 不适用于本地文件。
所以我的问题是:
- 如何创建包含所有 RDF 文件的数据集,以便我可以像处理单个对象一样处理它们?
- 如何查询此类对象以检索我需要的信息?这可能吗?
- 这种推理方式是否正确?
如有任何关于如何解决问题的建议,我们将不胜感激。 谢谢!
从他们的下载区下载所有 RDF/XML 文件,比他们现有的 load them into a local instance of Virtuoso (which happens to be the engine they are using for their public SPARQL endpoint). You will have the advantage of running a much more recent version (v7.2.5.1 or later), whether Open Source or Enterprise Edition(开源 v7.1.0,从 2014 年 3 月开始!) .
使用新的本地 SPARQL 端点,默认情况下位于 http://localhost:8890/sparql。您可以将其配置为对结果集大小、查询运行时间或其他方面没有限制。
很有可能。
(P.S。您可能会鼓励 dati.camera.it (assistenza-dati@camera.it) 的人们升级他们的 Virtuoso 实例。有大量的性能和功能增强等待着!)