如何对我的 stain/jena-fuseki Docker 图像实施 openllet reasoner

How can I implement openllet reasoner to my stain/jena-fuseki Docker image

我在实现内置 jena-fuseki 推理器时遇到了一些问题,我可以让它工作,但它不会阻止我添加不正确的三元组。所以我想将 Openllet reasoner 添加到我的 jena-fuseki 服务器。

但我不知道如何将 openllet jar 添加到我的 Docker 图像并使其工作,我 运行 遇到许多 java 依赖问题。 要添加上下文,我的 docker-compose 看起来像这样:

  jena-fuseki-server:
    hostname: jena-fuseki

    build:
      context: .
      dockerfile: server.Dockerfile
    restart: always
    ports:
      - 3030:3030
    environment:
      - ADMIN_PASSWORD=admin
      - FUSEKI_DATASET_1=ds

我的 server.Dockerfile 看起来像那样,我正在做的是将我的 config/ontologies 文件复制到我的图像以及我的 openllet jar,我'我然后尝试执行它会产生此问题: jena-fuseki-server_1 | /bin/sh: 1: [java,: not found

FROM stain/jena-fuseki:4.0.0

#This is made to stop Issue with JVM locks

RUN apt-get update; \
    apt-get install -y --no-install-recommends procps

RUN mkdir -p /fuseki/ontologies/
RUN mkdir -p /fuseki/configuration/
RUN mkdir -p /fuseki/inference/

RUN mkdir -p /fuseki
WORKDIR /fuseki


COPY server/openllet inference
COPY server/configuration configuration
COPY server/test ontologies

CMD ["java", "-jar", inference/openllet-distribution-2.6.5-sources.jar]

我的 配置文件 调用的灵感来自 没有 tdb 因为我现在只是测试,她看起来像这样并为 OWLMini + Generic

@prefix tdb:   <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .

<#service1> rdf:type fuseki:Service ;
    fuseki:name                       "ds" ;       # http://host:port/ds
    fuseki:serviceQuery               "sparql" ;   # SPARQL query service
    fuseki:serviceQuery               "query" ;    # SPARQL query service (alt name)
    fuseki:serviceUpdate              "update" ;   # SPARQL update service
    fuseki:serviceUpload              "upload" ;   # Non-SPARQL upload service
    fuseki:serviceReadWriteGraphStore "data" ;     # SPARQL Graph store protocol (read and write)
    # A separate read-only graph store endpoint:
    fuseki:serviceReadGraphStore      "get" ;      # SPARQL Graph store protocol (read only)
    fuseki:dataset                   <#dataset> ;
    .

<#dataset> rdf:type ja:RDFDataset ;
    ja:defaultGraph <#modelInf> ;
    .


<#modelInf> rdf:type ja:InfModel ;
    ja:content [ja:externalContent <file:/fuseki/ontologies/server_famille.ttl> ; ] ;
    ja:reasoner   [
        ja:reasonerClass    "openllet.jena.PelletReasonerFactory" ; ]
  .  

我正在使用家庭 ontology 进行测试,

What else have you tried ?

我一直在尝试下面链接中描述的事情,其中​​大部分已经解决并导致我遇到其他问题,这让我不得不另想办法:

我也运行很关注这个问题

ERROR Exception in initialization: the class 'openllet.jena.PelletReasonerFactory' required by the object 34064d96e625bd1f4718dc614ac47d38 [ja:reasoner of file:///fuseki/configuration/db_tdb.ttl#modelInf] could not be loaded

人们通常将 Openllet 用于 Maven 或与 Java 项目结合使用,但我只使用配置文件和后端 API 进行调用,一切都按照我所展示的进行配置你.
由于我对 docker 和 jena-fuseki 还是个新手,这可能是我正在尝试做的事情的概念问题,所以如果您知道我应该在哪里寻求更多信息,我将非常感激.

我在 google 中找不到任何内容,但我在 github 上找到了这个:The answer

我按照他的步骤将 jar 下载到我的 server/openllet 中并提取了文件,这样我就可以将它们与所有依赖项一起复制到新的额外文件夹中

这是我的 Dockerfile :

FROM stain/jena-fuseki:4.0.0

#This is made to stop Issue with JVM locks

RUN apt-get update; \
    apt-get install -y --no-install-recommends procps

RUN mkdir -p /fuseki/ontologies/
RUN mkdir -p /fuseki/configuration/
RUN mkdir -p /fuseki/extra/

RUN mkdir -p /fuseki
WORKDIR /fuseki

COPY server/openllet/jar_files extra
COPY server/configuration configuration
COPY server/test ontologies

我仍然可以验证 SWRL 推理。无需使用内置的 GenericRuleReasoner + OWLMiniReasoner