0

我被迫将外部推理器 Pellet 包含在我的 Fuseki 服务器中。到目前为止,一切都很好,尽管我无法删除包含诸如字符串或整数之类的文字的三元组。我的设置:配置了 Pellet 2.3.1 作为推理器的 Fuseki 0.2.6。
最小示例配置:

@prefix :        <#> .
@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

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

[] rdf:type fuseki:Server ;
   fuseki:services (
     <#mem>
   ) .  

## ---------------------------------------------------------------
## Updatable in-memory dataset.

<#mem> rdf:type fuseki:Service ;
    # URI of the dataset -- http://host:port/mem
    fuseki:name                        "mem" ; 
    fuseki:serviceQuery                "sparql" ;
    fuseki:serviceQuery                "query" ;
    fuseki:serviceUpdate               "update" ;
    fuseki:serviceUpload               "upload" ;
    fuseki:serviceReadWriteGraphStore  "data" ;     
    fuseki:serviceReadGraphStore       "get" ;
    fuseki:dataset                     <#emptyDataset> ;
    .

## In-memory, initially empty.
<#emptyDataset> rdf:type ja:RDFDataset ;
                ja:defaultGraph       <#model_inf1> ;
 .

<#model_inf1> rdfs:label "Inf-model" ;
 ja:reasoner
 [ ja:reasonerClass 
 "org.mindswap.pellet.jena.PelletReasonerFactory";]
 . 

内存中加载的最小 owl 文件:

<?xml version="1.0"?>


<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
    <!ENTITY test "http://www.semanticweb.org/ontologies/2014/9/test.owl#" >
]>


<rdf:RDF xmlns="http://www.semanticweb.org/ontologies/2014/9/test.owl#"
     xml:base="http://www.semanticweb.org/ontologies/2014/9/test.owl"
     xmlns:test="http://www.semanticweb.org/ontologies/2014/9/test.owl#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
    <owl:Ontology rdf:about="http://www.semanticweb.org/ontologies/2014/9/test.owl"/>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Data properties
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/ontologies/2014/9/test.owl#hasAge -->

    <owl:DatatypeProperty rdf:about="&test;hasAge">
        <rdfs:domain rdf:resource="&test;human"/>
        <rdfs:range rdf:resource="&xsd;integer"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/2014/9/test.owl#hasName -->

    <owl:DatatypeProperty rdf:about="&test;hasName">
        <rdfs:domain rdf:resource="&test;human"/>
        <rdfs:range rdf:resource="&xsd;string"/>
    </owl:DatatypeProperty>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Classes
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/ontologies/2014/9/test.owl#human -->

    <owl:Class rdf:about="&test;human"/>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Individuals
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/ontologies/2014/9/test.owl#Alfred -->

    <owl:NamedIndividual rdf:about="&test;Alfred">
        <rdf:type rdf:resource="&test;human"/>
    </owl:NamedIndividual>
</rdf:RDF>

我在本地主机上使用“--update”标志运行服务器,将“test.owl”上方加载到默认图形中,然后插入两个文字:

insert data {test:Alfred test:hasName "Alfred"^^xsd:string;
                         test:hasAge "43"^^xsd:integer .}

查询与“Alfred”链接的所有三元组显示,插入成功:

PREFIX test: <http://www.semanticweb.org/ontologies/2014/9/test.owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

Select *
Where{test:Alfred ?p ?o}

--------------------------------------------------------------------------------------------
| p                                      | o                                               |
============================================================================================
| rdfs:type                              | test:human                                      |
| rdfs:type                              | <http://www.w3.org/2002/07/owl#Thing>           |
| <http://www.w3.org/2002/07/owl#sameAs> | test:Alfred                                     |
| test:hasAge                            | 43                                              |
| test:hasName                           | "Alfred"^^xsd:string                            |
| rdfs:type                              | <http://www.w3.org/2002/07/owl#NamedIndividual> |
-------------------------------------------------------------------------------------------

然后我尝试删除 Alfred 的年龄和姓名:

delete data {test:Alfred test:hasAge "43"^^xsd:integer}
delete data {test:Alfred test:hasName "Alfred"^^xsd:string}

但无论我尝试哪种删除模式,都无法删除文字。我检查了 SPARQL 更新语法没有错误。可以毫无问题地插入和删除不包含任何文字的三元组。我认为颗粒插件可能会引发这种行为,因为所有删除操作都使用 fuseki 服务器使用其默认的 jena 推理器。升级到 Fuseki 1.1.1 不是一种选择,因为这似乎会导致颗粒显示错误的兼容性/可见性问题:

Error 500: tried to access field com.hp.hpl.jena.reasoner.BaseInfGraph.isPrepared from class org.mindswap.pellet.jena.PelletInfGraph
Fuseki - version 1.1.1 (Build date: 2014-10-02T16:36:17+0100)

我还尝试使用 TDB 数据库进行此操作,结果与我无法删除任何带有文字的三元组的结果相同。任何人都可以重现这种行为吗?有人知道解决方案或解决方法吗?我错过了什么吗?我会很感激任何提示。感谢您的支持和努力 - 迈克尔

4

0 回答 0