Apache Jena Fuseki是一个SPARQL服务器。它可以作为操作系统服务运行,也可以作为Java web应用程序(WAR文件)运行,也可以作为独立的服务器运行。
Fuseki有两种形式,一种是单一的系统“webapp”,结合了一个用于管理和查询的UI,另一种是“main”,一个适合作为大型部署的一部分运行的服务器,包括Docker或嵌入式服务器。两种表单使用相同的核心协议引擎和相同的配置文件格式。
Fuseki与TDB紧密集成,以提供健壮的事务性持久存储层,并集成了Jena文本查询。
Fuseki文件系统布局:
FUSEKI_HOME
fuseki | Fuseki Service (Linux) |
---|---|
fuseki-server | Fuseki standalone command |
fuseki-server.bat | Fuseki standalone command |
fuseki-server.jar | The Fuseki Server binary |
fuseki.war | The Fuseki Server as a WAR file |
bin/ | Helper scripts |
webapp/ | The webapp for the UI |
FUSEKI_BASE
config.ttl | 服务器配置 |
---|---|
shiro.ini | Apache Shiro configuration |
databases/ | TDB Databases |
backups/ | 活动备份的写区域 |
configuration/ | 汇编程序文件 |
logs/ | 日志文件区域 |
system/ | 系统配置数据库 |
system_files/ | 上传的数据服务描述(副本) |
templates/ | 内置配置的模板 |
system_files/保存上传到配置服务器的任何汇编程序的副本。主副本保存在系统数据库中。
重置
要重置服务器,请停止服务器,并删除system/中的系统数据库、system_files/和任何其他不需要的部署文件,然后重新启动服务器。
Fuseki/UI可以以多种方式运行:
①作为独立服务器
②例如,作为由操作系统运行的服务,在计算机启动时启动
③作为容器中的Web应用程序,如Apache Tomcat或Jetty。
Fuseki也被打包为一个普通的服务器“Fuseki Main”,它没有UI,可以用作可配置的SPARQL服务器,可以作为Docker容器构建,也可以作为部署和开发的独立服务器。它支持独立服务器使用的参数。
TDB2 database:
fuseki-server [--loc=DIR] [[--update] /NAME]
loc目录是TDB1或TDB2数据库。目录DIR必须存在。如果DIR中的数据库不存在,则创建一个新数据库。默认情况下,这是一个TDB2数据库,除非给出了参数-tdb1。
内存中的非持久性数据库(总是可更新的)是:
fuseki-server --mem /NAME
在启动时加载文件并将其设置为只读:
fuseki-server --file=MyData.ttl /NAME
Fuseki可以作为操作系统服务运行,在服务器启动时启动。fuseki脚本是一个Linux init。D和常见的次要参数start和stop。
进程参数从/etc/default/fuseki读取,包括FUSEKI_HOME和FUSEKI_BASE。FUSEKI_HOME应该是解压缩发行版的目录。
Fuseki可以从WAR文件中运行。
war文件可以从项目下载页面下载。然后应该将其重命名为web应用程序名称“ROOT”。war”(这意味着URL中没有名称)或“fusek.war”(有一个名字/fuseki/)或其他选择的名称。
FUSEKI_HOME不适用。
FUSEKI_BASE默认为/etc/fuseki,必须是一个可写目录。它在Fuseki第一次运行时初始化,包括一个Apache Shiro安全文件,但这只是作为一个起点。它将管理UI的使用限制在本地机器上。
当部署为web应用程序时,一个功能更全面的管理API是可用的,并在Fuseki服务器协议(REST API)页面上进行了描述。
当从webapp容器(如Apache Tomcat)中的WAR文件运行时,日志配置来自文件log4j2。解包war文件根目录中的属性,例如/var/lib/tomcat9/webapps/fuseki/log4j2.properties。
文件名取自web.xml:
log4jConfiguration log4j2.properties
这只适用于在webapp容器中运行时。当从命令行运行时,服务器查找log4j2。属性,如果未找到,则使用内置配置。
该日志记录进入标准输出。
Fuseki main是将Fuseki包装为一个三重存储,没有用于管理的UI。
Fuseki可以由应用程序作为嵌入式服务器在后台运行。应用程序可以直接从java安全地使用数据集,同时让Fuseki通过HTTP提供SPARQL访问。嵌入式服务器对于添加围绕三重存储的功能以及开发和测试非常有用。
主服务器不依赖于磁盘上的任何文件(除了应用程序提供的数据库),也不提供Fuseki UI或管理函数来通过HTTP创建数据集。
org.apache。Jena: Jena -fuseki-server是从命令行运行的“主”服务器的打包。与UI Fuseki服务器不同,它仅从命令行进行配置,并且在磁盘上没有持久的工作区。
java -jar jena-fuseki-server-$VER.jar --help
入口点是org.apache.jena.fuseki.main.cmds.FusekiMainCmd,所以服务器也可以运行为:
java -cp jena-fuseki-server-$VER.jar:...OtherJars... \ org.apache.jena.fuseki.main.cmds.FusekiMainCmd ARGS
Fuseki可以在Java应用程序内部运行,为应用程序数据提供SPARQL服务。应用程序可以继续访问和更新服务器提供的数据集。
构建并启动服务器:
Dataset ds = ... FusekiServer server = FusekiServer.create() .add("/dataset", ds) .build() ; server.start() ;
Fuseki可以在较大的JVM应用程序中作为嵌入式三重存储运行。
应用程序可以安全地访问和修改服务器发布的数据,如果它在事务中使用适当的存储选择这样做的话。DatasetFactory.createTxnMem()是内存中使用的一个很好的选择;对于持久数据库来说,TDB是一个很好的选择。
构建并启动服务器:
Dataset ds = ... FusekiServer server = FusekiServer.create() .add("/rdf", ds) .build() ; server.start() ;
然后应用程序可以修改数据集:
// Add some data while live. // Write transaction. Txn.execWrite(dsg, ()->RDFDataMgr.read(dsg, "D.trig")) ;
或者读取数据集并查看远程系统所做的任何更新:
// Query data while live // Read transaction. Txn.execRead(dsg, ()->{ Dataset ds = DatasetFactory.wrap(dsg) ; try (QueryExecution qExec = QueryExecution.create("SELECT * { ?s ?o}", ds) ) { ResultSet rs = qExec.execSelect() ; ResultSetFormatter.out(rs) ; } }) ;
要在应用程序中包含嵌入式Fuseki服务器:
<dependency> <groupId>org.apache.jena</groupId> <artifactId>jena-fuseki-main</artifactId> <version>3.x.y</version> <!-- Set the version --> </dependency>
如果应用程序希望使用带有文本索引的数据集,那么应用程序还需要在其依赖项中包含jena-text。
应用程序必须设置为slf4j提供的日志记录。Apache Jena提供帮助Apache Log4j v2。
对于Apache Log4j2,调用:
FusekiLogging.setLogging();
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.13.1</version> <!-- Many versions work --> </dependency>
要在Java中关闭日志记录,请尝试:
LogCtl.setLevel(Fuseki.serverLogName, "WARN"); LogCtl.setLevel(Fuseki.actionLogName, "WARN"); LogCtl.setLevel(Fuseki.requestLogName, "WARN"); LogCtl.setLevel(Fuseki.adminLogName, "WARN"); LogCtl.setLevel("org.eclipse.jetty", "WARN");
FusekiServer是通过创建配置、构建服务器,然后运行它来构建的。应用程序需要启动服务器。
Fuseki嵌入式服务器的默认端口是3330。这对于Fuseki作为独立服务器运行或作为web应用程序运行的默认端口是不同的。