36个版本
0.3.22 | 2023年12月1日 |
---|---|
0.3.21 | 2023年11月29日 |
0.3.20 | 2023年10月23日 |
0.3.18 | 2023年6月13日 |
0.1.1 | 2020年8月14日 |
#1686 在 数据库接口
每月34 次下载
1MB
21K SLoC
Oxigraph服务器
Oxigraph服务器是一个独立的HTTP服务器,提供实现了SPARQL标准的图数据库。
其目标是提供一个符合标准、安全、快速基于RocksDB键值存储的图数据库。它使用Rust编写。它还提供了一系列用于读取、写入和处理RDF文件的实用函数。
Oxigraph正在积极开发中,SPARQL查询评估尚未优化。
Oxigraph为Oxigraph服务器提供了不同的安装方法
Oxigraph实现了以下规范
- SPARQL 1.1 查询、SPARQL 1.1 更新和SPARQL 1.1 联邦查询。
- Turtle、TriG、N-Triples、N-Quads和RDF XML RDF序列化格式,用于数据摄取和检索,使用Rio库。
- SPARQL查询结果XML格式、SPARQL 1.1查询结果JSON格式和SPARQL 1.1查询结果CSV和TSV格式。
- SPARQL 1.1 协议 和 SPARQL 1.1 图存储 HTTP 协议。
提供了一个初步的基准测试 。
安装
您需要安装最新的稳定版本的 Rust 和 Cargo。
要下载、构建和安装最新发布的版本,请运行 cargo install oxigraph_server
。无需克隆 Git 仓库。
要从源代码编译服务器,克隆此 Git 仓库及其子模块(git clone --recursive https://github.com/oxigraph/oxigraph.git
),然后在 server
目录中执行 cargo build --release
以在下载其依赖项后编译完整的服务器。它将在 target/release/oxigraph_server
中创建一个胖二进制文件。
用法
运行 oxigraph_server --location my_data_storage_directory serve
以启动服务器,其中 my_data_storage_directory
是您希望 Oxigraph 数据存储的目录。它默认监听在 localhost:7878
。
服务器提供了一个基于 YASGUI 的 HTML UI,其中包含一个用于执行 SPARQL 请求的表单。
它提供了以下 REST 动作
/query
允许根据 SPARQL 1.1 协议 评估服务器仓库中的 SPARQL 查询。例如
此操作支持内容协商,并可以返回 Turtle、N-Triples、RDF XML、SPARQL 查询结果 XML 格式 和 SPARQL 查询结果 JSON 格式。curl -X POST -H 'Content-Type:application/sparql-query' \ --data 'SELECT * WHERE { ?s ?p ?o } LIMIT 10' https://127.0.0.1:7878/query
/update
允许根据 SPARQL 1.1 协议 执行 SPARQL 更新。例如curl -X POST -H 'Content-Type: application/sparql-update' \ --data 'DELETE WHERE { <http://example.com/s> ?p ?o }' https://127.0.0.1:7878/update
/store
允许使用 SPARQL 1.1 图存储 HTTP 协议检索和更改服务器内容。例如
将 N-Triples 文件curl -f -X POST -H 'Content-Type:application/n-triples' \ -T MY_FILE.nt "https://127.0.0.1:7878/store?graph=http://example.com/g"
MY_FILE.nt
添加到http://example.com/g
命名图中的服务器数据集中。支持 Turtle、N-Triples 和 RDF XML。还可以使用 RDF 数据集格式(TriG 和 N-Quads)通过/store
端点对服务器上的完整 RDF 数据集进行POST
、PUT
和GET
操作。例如
将 N-Quads 文件curl -f -X POST -H 'Content-Type:application/n-quads' \ -T MY_FILE.nq https://127.0.0.1:7878/store
MY_FILE.nq
添加到服务器数据集中。
使用 oxigraph_server --help
查看启动服务器时的可能选项。
还可以使用批量加载在线下加载 RDF 数据: oxigraph_server --location my_data_storage_directory load --file my_file.nq
使用 Docker 镜像
显示帮助菜单
docker run --rm ghcr.io/oxigraph/oxigraph --help
运行 Web 服务器
在主机机的端口7878
上暴露服务器,并将数据保存在本地./data
文件夹中
docker run --rm -v $PWD/data:/data -p 7878:7878 ghcr.io/oxigraph/oxigraph --location /data serve --bind 0.0.0.0:7878
然后您可以从您的机器上通过端口7878
访问它
# Open the GUI in a browser
firefox https://127.0.0.1:7878
# Post some data
curl https://127.0.0.1:7878/store?default -H 'Content-Type: text/turtle' -T ./data.ttl
# Make a query
curl -X POST -H 'Accept: application/sparql-results+json' -H 'Content-Type: application/sparql-query' --data 'SELECT * WHERE { ?s ?p ?o } LIMIT 10' https://127.0.0.1:7878/query
# Make an UPDATE
curl -X POST -H 'Content-Type: application/sparql-update' --data 'DELETE WHERE { <http://example.com/s> ?p ?o }' https://127.0.0.1:7878/update
使用基本认证运行Web服务器
将Oxigraph SPARQL端点公开,并在/update
上设置一层认证,以便能够添加数据,这可能很有用。
您可以通过使用包含docker-compose
的额外docker容器中的nginx基本认证来实现这一点。首先创建一个nginx.conf
文件
daemon off;
events {
worker_connections 1024;
}
http {
server {
server_name localhost;
listen 7878;
rewrite ^/(.*) /$1 break;
proxy_ignore_client_abort on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Access-Control-Allow-Origin "*";
location ~ ^(/|/query)$ {
proxy_pass http://oxigraph:7878;
proxy_pass_request_headers on;
}
location ~ ^(/update|/store)$ {
auth_basic "Oxigraph Administrator's Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://oxigraph:7878;
proxy_pass_request_headers on;
}
}
}
然后在同一文件夹中创建一个docker-compose.yml
文件,您可以在environment
部分更改默认用户和密码
version: "3"
services:
oxigraph:
image: ghcr.io/oxigraph/oxigraph:latest
## To build from local source code:
# build:
# context: .
# dockerfile: server/Dockerfile
volumes:
- ./data:/data
nginx-auth:
image: nginx:1.21.4
environment:
- OXIGRAPH_USER=oxigraph
- OXIGRAPH_PASSWORD=oxigraphy
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
## For multiple users: uncomment this line to mount a pre-generated .htpasswd
# - ./.htpasswd:/etc/nginx/.htpasswd
ports:
- "7878:7878"
entrypoint: "bash -c 'echo -n $OXIGRAPH_USER: >> /etc/nginx/.htpasswd && echo $OXIGRAPH_PASSWORD | openssl passwd -stdin -apr1 >> /etc/nginx/.htpasswd && /docker-entrypoint.sh nginx'"
一旦准备就绪docker-compose.yaml
和nginx.conf
,启动Oxigraph服务器和nginx代理进行认证,访问https://127.0.0.1:7878
docker-compose up
然后可以使用基本认证机制更新图。例如,使用curl
:更改$OXIGRAPH_USER
和$OXIGRAPH_PASSWORD
,或将它们设置为环境变量,然后运行此命令来插入一个简单的三元组
curl -X POST -u $OXIGRAPH_USER:$OXIGRAPH_PASSWORD -H 'Content-Type: application/sparql-update' --data 'INSERT DATA { <http://example.com/s> <http://example.com/p> <http://example.com/o> }' https://127.0.0.1:7878/update
如果您想有多个用户,可以在docker-compose.yml
文件中注释entrypoint:
行,取消注释.htpasswd
卷,然后在.htpasswd
文件中使用此命令生成每个用户
htpasswd -Bbn $OXIGRAPH_USER $OXIGRAPH_PASSWORD >> .htpasswd
构建镜像
您可以通过使用带有子模块的此存储库并进入根文件夹来轻松构建自己的Docker镜像
git clone --recursive https://github.com/oxigraph/oxigraph.git
cd oxigraph
然后运行此命令以在本地构建镜像
docker build -t ghcr.io/oxigraph/oxigraph -f server/Dockerfile .
Homebrew
Oxigraph在一个自定义tap中维护一个Homebrew公式。
要使用Homebrew安装Oxigraph服务器,请执行以下操作
brew tap oxigraph/oxigraph
brew install oxigraph
它安装了oxigraph_server
二进制文件。请参阅使用文档以了解如何使用它。
Systemd
您可以使用systemd在后台运行Oxigraph。
为此,您可以使用以下oxigraph_server.service
文件(它可能已插入到/etc/systemd/system/
或$HOME/.config/systemd/user
中)
[Unit]
Description=Oxigraph database server
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/PATH/TO/oxigraph_server serve --location /PATH/TO/OXIGRAPH/DATA
[Install]
WantedBy=multi-user.target
迁移指南
从0.2到0.3
- cli API已经完全重写。要启动服务器,请运行
oxigraph_server serve --location MY_STORAGE
而不是oxigraph_server --file MY_STORAGE
。 - 不支持使用
oxigraph_server load --location MY_STORAGE --file MY_FILE
进行快速大量数据加载。文件格式根据扩展名猜测(例如.nt
,.ttl
,.nq
等)。 - RDF-star现已实现。
- 所有操作现在都使用“可重复读”隔离级别进行事务处理:存储库只暴露已被“提交”的更改(即没有部分写入),并且暴露的状态在读取操作(例如SPARQL查询)或读写操作(例如SPARQL更新)的整个过程中不会改变。
帮助
请随时使用GitHub discussions或Gitter聊天提问或讨论Oxigraph。错误报告也非常受欢迎。
如果您需要高级支持或愿意付费以获得额外功能,请随时联系Tpt。
许可证
本项目可使用以下任何一种许可证:
- Apache许可证2.0版,(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示,否则您提交给Oxigraph的任何有意包含的贡献,如Apache-2.0许可证中定义的,应按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~9–21MB
~345K SLoC