8 个版本
新 0.4.0-alpha.8 | 2024 年 8 月 22 日 |
---|---|
0.4.0-alpha.7 | 2024 年 5 月 22 日 |
0.4.0-alpha.6 | 2024 年 3 月 25 日 |
0.4.0-alpha.3 | 2024 年 1 月 25 日 |
#310 in 数据库接口
2MB
17K SLoC
Oxigraph CLI
Oxigraph CLI 是一个实现 Sparql 标准的图数据库。它作为一个命令行工具打包,允许操作 RDF 文件,使用 Sparql 查询它们... 它还允许在数据库之上启动一个 HTTP 服务器。
Oxigraph 正在积极开发中,Sparql 查询评估尚未优化。
Oxigraph 为 Oxigraph CLI 提供不同的安装方法
Oxigraph 实现以下规范
- Sparql 1.1 查询,Sparql 1.1 更新 和 Sparql 1.1 联邦查询。
- Turtle,TriG,N-Triples,N-Quads 和 Rdf/XML RDF 序列化格式,用于数据摄取和检索。
- Sparql 查询结果 XML 格式,Sparql 1.1 查询结果 JSON 格式 和 Sparql 1.1 查询结果 CSV 和 TSV 格式。
- Sparql 1.1 协议 和 Sparql 1.1 图存储 HTTP 协议。
提供了一个初步的基准测试 。
请注意,Oxigraph CLI 在 0.4 版本之前被称为 Oxigraph 服务器。旧版本可在 此名称 下找到。
安装
您需要安装 最新稳定的 Rust 和 Cargo 版本。
要下载、构建和安装最新发布的版本,请运行 cargo install oxigraph-cli
。无需克隆 git 仓库。
要从源代码编译命令行工具,请克隆包括其子模块在内的此 git 仓库(git clone --recursive https://github.com/oxigraph/oxigraph.git
),然后在 cli
目录中执行 cargo build --release
,以在下载其依赖项后编译完整的二进制文件。它将在 target/release/oxigraph
创建一个胖二进制文件。
一些构建选项(cargo 功能)可用
rocksdb-pkg-config
:使用 pkg-config 找到的已编译 rocksdb 共享库链接。native-tls
:启用 Oxigraph HTTP 客户端以使用宿主 OS TLS 堆栈进行查询联邦(默认启用)。rustls-native
启用 Oxigraph HTTP 客户端以使用 Rustls 和本地证书进行查询联邦。rustls-webpki
启用 Oxigraph HTTP 客户端以使用 Rustls 和 Common CA Database 证书进行查询联邦。
使用方法
运行 oxigraph serve --location my_data_storage_directory
以启动服务器,其中 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' http://localhost: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 }' http://localhost:7878/update
/store
允许使用 SPARQL 1.1 图存储 HTTP 协议检索和更改服务器内容。例如
将 N-Triples 文件curl -f -X POST -H 'Content-Type:application/n-triples' \ -T MY_FILE.nt "http://localhost:7878/store?graph=http://example.com/g"
MY_FILE.nt
添加到服务器数据集内的http://example.com/g
命名图。支持 Turtle、N-Triples 和 RDF/XML。也可以在/store
端点使用 RDF 数据集格式(TriG 和 N-Quads)对服务器的完整 RDF 数据集进行POST
、PUT
和GET
。例如
将 N-Quads 文件curl -f -X POST -H 'Content-Type:application/n-quads' \ -T MY_FILE.nq http://localhost:7878/store
MY_FILE.nq
添加到服务器数据集。
使用 oxigraph --help
命令来查看启动服务器时的可能选项。
您还可以使用批量加载功能离线加载 RDF 数据:oxigraph load --location my_data_storage_directory --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 serve --location /data --bind 0.0.0.0:7878
然后您可以从机器上通过端口 7878
访问它
# Open the GUI in a browser
firefox http://localhost:7878
# Post some data
curl http://localhost: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' http://localhost:7878/query
# Make an UPDATE
curl -X POST -H 'Content-Type: application/sparql-update' --data 'DELETE WHERE { <http://example.com/s> ?p ?o }' http://localhost: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 代理以在 http://localhost: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> }' http://localhost: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 在 Homebrew 中的 自定义 tap 中维护了一个公式。
要使用 Homebrew 安装 Oxigraph 服务器,请执行以下操作
brew tap oxigraph/oxigraph
brew install oxigraph
它安装了 oxigraph
二进制文件。有关如何使用它的说明,请参阅使用文档。
Systemd
您可以使用 systemd 在后台运行 Oxigraph。
为此,您可以使用以下 oxigraph.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 serve --location /PATH/TO/OXIGRAPH/DATA
[Install]
WantedBy=multi-user.target
手册页和自动补全
各种壳的自动完成功能在构建时生成在 target/{debug,release}/build/oxigraph-cli-<hash>/out/complete
目录。同样,man 页面也生成在 target/{debug,release}/build/oxigraph-cli-<hash>/out/man
目录。
迁移指南
从 0.2 到 0.3
- cli API 已被完全重写。要启动服务器,运行
oxigraph serve --location MY_STORAGE
而不是oxigraph --file MY_STORAGE
。 - 不支持使用
oxigraph load --location MY_STORAGE --file MY_FILE
进行快速大量数据加载。文件格式从扩展名中猜测(例如.nt
,.ttl
,.nq
等)。 - 现在已实现 RDF-star。
- 所有操作现在都使用 "可重复读" 隔离级别进行事务处理:存储库只暴露已被 "提交" 的更改(即没有部分写入),并且在读操作(例如 SPARQL 查询)或读/写操作(例如 SPARQL 更新)的整个过程中暴露的状态不会改变。
帮助
请随时使用 GitHub discussions 或 Gitter 聊天 提问或讨论 Oxigraph。错误报告 也非常受欢迎。
如果您需要高级支持或愿意付费以获得一些额外功能,请随时联系 Tpt。
许可证
该项目受以下许可证之一许可:
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您提交给 Oxigraph 的任何贡献(根据 Apache-2.0 许可证定义),都应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~10–25MB
~413K SLoC