【问题标题】:Sesame repository not being updated using INSERT despite no error尽管没有错误,但没有使用 INSERT 更新芝麻存储库
【发布时间】:2015-07-05 19:43:24
【问题描述】:

我正在尝试使用来自 dbpedia 的数据更新 Sesame 存储库。我有以下查询:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

INSERT{?s ?p ?o}

WHERE {
 SERVICE <http://dbpedia.org/sparql>{

{:Rotavirus_vaccine ?p ?o.
}
UNION
{
?s ?p :Rotavirus_vaccine.
}
}
}

此查询未显示任何错误不会更新存储库。另一方面,将 UNION 拆分为两个单独的查询,然后一个一个地更新存储库。为什么查询是孤立的,而不是联合的?单个查询的代码是:

INSERT{:Rotavirus_vaccine ?p ?o}        
WHERE {
SERVICE <http://dbpedia.org/sparql>{
{:Rotavirus_vaccine ?p ?o.
}
}
}

【问题讨论】:

    标签: sparql semantic-web sesame linked-data


    【解决方案1】:

    ?s ?p ?o 必须全部在一行中定义,模板才有意义。任何时候未绑定变量,都不会进行更新。

    在 UNION 的一个分支中,定义了 ?s ?p 并在另一个 ?p ?o 中定义。所以这 3 个都不是在同一行中定义的。

    为第一部分添加 BIND 或 FILTER:

    {:Rotavirus_vaccine ?p ?o. BIND(:Rotavirus_vaccine AS ?s) }
    
    {?s ?p ?o. FILTER(?s = :Rotavirus_vaccine }
    

    或者使用这个

    INSERT{:Rotavirus_vaccine ?p ?o.
           ?s ?p :Rotavirus_vaccine.
    }
    

    因为每个案例都定义了其中一个。

    【讨论】:

    • 安迪,您能发布完整的查询吗?如果使用您在 INSERT 中提到的三元组,那么在 WHERE 部分下包含什么?
    【解决方案2】:

    我已经能够通过对 UNION 的两个子句使用 BIND 来执行功能查询。代码是:

    INSERT{?s ?p ?o} 
    WHERE 
    { 
    SERVICE <dbpedia.org/sparql>
    { 
    {:Rotavirus_vaccine ?p ?o. BIND(:Rotavirus_vaccine AS ?s)} 
    UNION {?s ?p :Rotavirus_vaccine. BIND(:Rotavirus_vaccine AS ?o) } 
    } 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 2012-07-09
      • 2019-11-26
      • 2012-03-19
      相关资源
      最近更新 更多