繁体   English   中英

如何使用 Apache Jena Java API 创建 Fuseki SPARQL 服务器?

[英]How do you create a Fuseki SPARQL server using the Apache Jena Java API?

我正在尝试在我的机器上创建一个 Fuseki SPARQL 服务器。 Jena 网站上的文档描述了如何从命令行创建这样的服务器,此处为: http://jena.apache.org/documentation/serving_data/ 我正在寻找一种仅使用 Jena Java API 来创建和初始化此类服务器的方法。 我查看了 Jena API,但在确定如何进行方面没有任何进展。 有没有人这样做过?

如果你使用

<dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>apache-jena-libs</artifactId>
  <type>pom</type>
  <version>2.11.2-SNAPSHOT</version>
</dependency>

<dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena-fuseki</artifactId>
  <version>1.0.2-SNAPSHOT</version>
</dependency>

您可以启动嵌入式服务器。

Dataset dataset = TDBFactory.createDataset(MagicStrings.TDBLocation);
dataset.begin(ReadWrite.WRITE);
Model tdb = dataset.getDefaultModel();
EmbeddedFusekiServer server = EmbeddedFusekiServer.
create(3030,getDataset().asDatasetGraph(), "comp");

是的,这是可能的,但这不是 Fuseki 的设计方式,因此您需要自担风险。

您需要通过 maven 将 Fuseki 作为依赖项引入,如下所示:

<dependency>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena-fuseki</artifactId>
  <version>0.2.7</version>
</dependency>

然后,您可以使用SPARQLServer class 创建服务器并调用start()来实际运行服务器,完成后调用stop() (这位于org.apache.jena.fuseki.server包中)

重要的是要注意,如果您这样做,则服务器嵌入在您启动它的 JVM 中,当 JVM 关闭时,服务器将关闭。 这可能是您的意图,但可能不是。

顺便说一句,您的问题不清楚您为什么要这样做? 如果您进一步解释您的目标,可能有其他方法可以在不嵌入 Fuseki 的情况下实现您的目标

这里的答案已经很老了,我担心他们会在更新版本的耶拿 API 中产生结果。

//Creating a persistent triple store (Jena TDB)
String directory = "C:\\Users\\..."; // Directory where you want to create the triplestore
Dataset dataset = TDBFactory.createDataset(directory);

//Loading an ontology stored on the disk
String ontPath = "C:\\Users... ...product.owl"; //Directory of your RDF/OWL file
Model KB = RDFDataMgr.loadModel(ontPath);
KB.write(System.out, "RDF/XML"); // (optional) checking what you have loaded in the console
dataset.addNamedModel("https://joedavid91.github.io/ontologies/camo/product",KB);

// Starting the fuseki server
FusekiServer fusekiServer = FusekiServer.create()
            .port(3001)
            .add("/ds", dataset, true)
            .build();

fusekiServer.start();

现在让我们尝试使用 REST 客户端(例如 POSTMAN)获取一些结果,看看这是否有效。 你可以看到确实如此。 确保您遵循 REST 请求的SPARQL 协议

Jena Fuseki 通过 POSTMAN 获得的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM