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 次下载

MIT/Apache

1MB
21K SLoC

Oxigraph服务器

Latest Version Crates.io downloads Conda actions status Gitter

Oxigraph服务器是一个独立的HTTP服务器,提供实现了SPARQL标准的图数据库。

其目标是提供一个符合标准、安全、快速基于RocksDB键值存储的图数据库。它使用Rust编写。它还提供了一系列用于读取、写入和处理RDF文件的实用函数。

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

Oxigraph为Oxigraph服务器提供了不同的安装方法

它还可以作为Rust库和作为Python库使用。

Oxigraph实现了以下规范

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

安装

您需要安装最新的稳定版本的 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 查询。例如
    curl -X POST -H 'Content-Type:application/sparql-query' \
      --data 'SELECT * WHERE { ?s ?p ?o } LIMIT 10' https://127.0.0.1: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 }' https://127.0.0.1:7878/update
    
  • /store 允许使用 SPARQL 1.1 图存储 HTTP 协议检索和更改服务器内容。例如
    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"
    
    将 N-Triples 文件 MY_FILE.nt 添加到 http://example.com/g 命名图中的服务器数据集中。支持 TurtleN-TriplesRDF XML。还可以使用 RDF 数据集格式(TriGN-Quads)通过 /store 端点对服务器上的完整 RDF 数据集进行 POSTPUTGET 操作。例如
    curl -f -X POST -H 'Content-Type:application/n-quads' \
      -T MY_FILE.nq https://127.0.0.1:7878/store
    
    将 N-Quads 文件 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.yamlnginx.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 discussionsGitter聊天提问或讨论Oxigraph。错误报告也非常受欢迎。

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

许可证

本项目可使用以下任何一种许可证:

任选其一。

贡献

除非您明确表示,否则您提交给Oxigraph的任何有意包含的贡献,如Apache-2.0许可证中定义的,应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~9–21MB
~345K SLoC