使用 Apache Jena 查询维基百科 RDF 文件(Turtle 格式)

Querying against a Wikipedia RDF file (Turtle format) with Apache Jena

我正在寻找一种查询以 Turtle 语法格式化的 RDF 文件的方法。 RDF文件实际上是整个维基百科类别层次结构,由维基数据提供。

这是文件 enwiki categories.ttl 内容的摘录,显示了数据的全局结构:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix mediawiki: <https://www.mediawiki.org/ontology#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix schema: <http://schema.org/> .
@prefix cc: <http://creativecommons.org/ns#> .

<https://en.wikipedia.org/wiki/Category:1148_establishments_in_France> a mediawiki:Category ;
    rdfs:label "1148 establishments in France" ;
    mediawiki:pages "2"^^xsd:integer ;
    mediawiki:subcategories "0"^^xsd:integer .

<https://en.wikipedia.org/wiki/Category:1148_establishments_in_France> mediawiki:isInCategory <https://en.wikipedia.org/wiki/Category:1140s_establishments_in_France>,
        <https://en.wikipedia.org/wiki/Category:1148_establishments_by_country>,
        <https://en.wikipedia.org/wiki/Category:1148_establishments_in_Europe>,
        <https://en.wikipedia.org/wiki/Category:1148_in_France>,
        <https://en.wikipedia.org/wiki/Category:Establishments_in_France_by_year> .

我的最终目标是能够通过查询 RDF Turtle 文件检索维基百科类别的所有父类别。 这是一个非常简短的 Java 代码示例,显示了我的问题:

LogCtl.setCmdLogging();
Model model = ModelFactory.createDefaultModel();
model.read("enwiki-categories.ttl");

RDF Turtle 文件超过 850 MB,使用前面显示的代码加载模型会导致内存不足错误。 我需要一种查询 RDF 文件的方法,而无需在内存中加载完整的 RDF 数据库。

--

有没有办法使用 Apache Jena 或其他库来做到这一点?

如果没有,是否有更快的方法使用本地数据从维基百科中的给定类别检索所有父类别?

是的,您可以使用 Jena 进行查询。这正是 Jena 的设计目标。但是,我建议您将文件导入 RDF 数据存储,然后使用 Jena 对 RDF 数据存储执行 SPARQL 查询。

您可能希望在 SO 上查看我对 的回答,其中我提供了一些 RDF 数据存储的参考。

你打算做的事情叫做"Broader Concept"。

它在 SKOS (skos:broader) 中正式化。这是文档的 link:SKOS

SKOS 的定义是:

Simple Knowledge Organization System (SKOS) is a common data model for sharing and linking knowledge organization systems via the Web.

例如,树的广义概念是植物。而树是松树或橡树的更广泛的概念......它在 SKOS (skos:broader) 中被形式化。