Apache Jena

返回图数据库

Apache 基金会维护的 Java 语义 Web 框架,提供 RDF 数据处理、SPARQL 查询、OWL 推理和三元组存储(TDB)能力。常用于构建知识图谱应用的后端服务。


核心组件

组件说明
Model APIRDF 图的 Java 操作接口
ARQSPARQL 1.1 查询引擎
TDB / TDB2本地磁盘三元组存储,TDB2 为推荐版本
FusekiSPARQL HTTP 服务器,提供 REST 端点
Inference API内置 RDFS / OWL 推理引擎
RDF Connection远程 SPARQL 端点客户端

依赖

<dependency>
    <groupId>org.apache.jena</groupId>
    <artifactId>apache-jena-libs</artifactId>
    <type>pom</type>
    <version>4.10.0</version>
</dependency>
<!-- Fuseki 服务器(可选) -->
<dependency>
    <groupId>org.apache.jena</groupId>
    <artifactId>jena-fuseki-main</artifactId>
    <version>4.10.0</version>
</dependency>

RDF Model 操作

// 创建内存模型
Model model = ModelFactory.createDefaultModel();
 
// 添加三元组
String ns = "http://example.org/";
Resource alice = model.createResource(ns + "Alice");
Property knows = model.createProperty(ns + "knows");
Resource bob = model.createResource(ns + "Bob");
alice.addProperty(knows, bob);
alice.addProperty(FOAF.name, "Alice");
 
// 读取 Turtle 文件
model.read("data.ttl", "TURTLE");
 
// 写出为 Turtle
model.write(System.out, "TURTLE");

SPARQL 查询(ARQ)

String sparql = """
    PREFIX ex: <http://example.org/>
    SELECT ?name
    WHERE {
      ?person ex:knows ex:Bob .
      ?person <http://xmlns.com/foaf/0.1/name> ?name .
    }
    """;
 
Query query = QueryFactory.create(sparql);
try (QueryExecution qe = QueryExecutionFactory.create(query, model)) {
    ResultSet results = qe.execSelect();
    while (results.hasNext()) {
        QuerySolution sol = results.nextSolution();
        System.out.println(sol.getLiteral("name").getString());
    }
}

TDB2 持久化存储

// 创建或打开 TDB2 数据集
Dataset dataset = TDB2Factory.connectDataset("./tdb2-store");
 
// 写入事务
dataset.begin(ReadWrite.WRITE);
try {
    Model model = dataset.getDefaultModel();
    model.add(...);
    dataset.commit();
} finally {
    dataset.end();
}
 
// 查询事务
dataset.begin(ReadWrite.READ);
try (QueryExecution qe = QueryExecutionFactory.create(query, dataset)) {
    ResultSet rs = qe.execSelect();
    // ...
} finally {
    dataset.end();
}

Fuseki SPARQL 服务器

// 嵌入式启动
FusekiServer server = FusekiServer.create()
    .add("/ds", dataset)
    .port(3030)
    .build();
server.start();
// SPARQL 端点:http://localhost:3030/ds/query
//             http://localhost:3030/ds/update
# 独立部署
./fuseki-server --tdb2 --loc=./tdb2-store /ds

推理

// RDFS 推理
Model schema = ModelFactory.createDefaultModel();
schema.read("ontology.ttl", "TURTLE");
 
Reasoner reasoner = ReasonerRegistry.getRDFSReasoner();
reasoner = reasoner.bindSchema(schema);
 
InfModel infModel = ModelFactory.createInfModel(reasoner, data);
// infModel 自动包含推断出的三元组

与 GraphDB 对比

维度Jena + TDB2GraphDB
类型开发框架 + 嵌入式存储独立数据库服务
部署嵌入 Java 应用独立服务器
推理基础 RDFS/OWL完整 OWL 2 RL
扩展性单机支持集群
适用场景Java 应用集成、快速原型生产级知识图谱服务

相关文档