8 个版本

0.4.0-alpha.8 2024 年 8 月 22 日
0.4.0-alpha.72024 年 5 月 22 日
0.4.0-alpha.62024 年 3 月 25 日
0.4.0-alpha.32024 年 1 月 25 日

#310 in 数据库接口

MIT/Apache

2MB
17K SLoC

Oxigraph CLI

Latest Version Crates.io downloads Conda actions status Gitter

Oxigraph CLI 是一个实现 Sparql 标准的图数据库。它作为一个命令行工具打包,允许操作 RDF 文件,使用 Sparql 查询它们... 它还允许在数据库之上启动一个 HTTP 服务器。

Oxigraph 正在积极开发中,Sparql 查询评估尚未优化。

Oxigraph 为 Oxigraph CLI 提供不同的安装方法

它也可以用作 Rust 库 和作为 Python 库

Oxigraph 实现以下规范

提供了一个初步的基准测试

请注意,Oxigraph CLI 在 0.4 版本之前被称为 Oxigraph 服务器。旧版本可在 此名称 下找到。

Packaging status

安装

您需要安装 最新稳定的 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 客户端以使用 RustlsCommon 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 查询进行评估。例如
    curl -X POST -H 'Content-Type:application/sparql-query' \
      --data 'SELECT * WHERE { ?s ?p ?o } LIMIT 10' http://localhost:7878/query
    
    此操作支持内容协商,可能返回 TurtleN-TriplesRDF/XMLSPARQL 查询结果 XML 格式SPARQL 查询结果 JSON 格式
  • /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 协议检索和更改服务器内容。例如
    curl -f -X POST -H 'Content-Type:application/n-triples' \
      -T MY_FILE.nt "http://localhost:7878/store?graph=http://example.com/g"
    
    将 N-Triples 文件 MY_FILE.nt 添加到服务器数据集内的 http://example.com/g 命名图。支持 TurtleN-TriplesRDF/XML。也可以在 /store 端点使用 RDF 数据集格式(TriGN-Quads)对服务器的完整 RDF 数据集进行 POSTPUTGET。例如
    curl -f -X POST -H 'Content-Type:application/n-quads' \
      -T MY_FILE.nq http://localhost:7878/store
    
    将 N-Quads 文件 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.yamlnginx.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 discussionsGitter 聊天 提问或讨论 Oxigraph。错误报告 也非常受欢迎。

如果您需要高级支持或愿意付费以获得一些额外功能,请随时联系 Tpt

许可证

该项目受以下许可证之一许可:

由您选择。

贡献

除非您明确声明,否则您提交给 Oxigraph 的任何贡献(根据 Apache-2.0 许可证定义),都应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~10–25MB
~413K SLoC