【问题标题】:How to update a model with jena API and SPARQL, eg. update value of a node如何使用 jena API 和 SPARQL 更新模型,例如。更新节点的值
【发布时间】:2014-04-16 07:16:03
【问题描述】:

如何使用 jena API 和 SPARQL 更新模型,例如。更新节点的值。 SPARQL 1.1 Update 描述说 SPARQL 1.1 Update 是 RDF 图的更新语言。 INSERT AND DELETE 不能用于更新模型。有没有更新模型的方法,比如更新 RDF 图?

【问题讨论】:

  • AFAIK 您只能通过组合 INSERTDELETE 查询来更新图表。
  • 谢谢,有更新本体模型的查询方法吗?
  • 模型是一个 RDF 图。您可以使用 SPARQL 更新。

标签: model insert sparql jena


【解决方案1】:

您可以将 SPARQL 更新与模型一起使用,而 OntModel 是模型,因此您可以将 SPARQL 更新与 OntModel 一起使用。这是一个简单的例子,它从一个人身上删除所有 rdfs:labels 并添加一个新的:

import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.update.UpdateAction;
import com.hp.hpl.jena.vocabulary.OWL;
import com.hp.hpl.jena.vocabulary.RDFS;

public class OntModelUpdateExample {
    public static void main(String[] args) {
        String ns = "http://stackoverflow.com/q/23102507/1281433/";
        OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_DL_MEM );
        model.setNsPrefix( "", ns );

        Individual i = model.createIndividual( ns+"JDoe", OWL.Thing );
        i.addLabel( "John Doe", "en" );

        model.write( System.out, "TTL" );

        String rename = "" +
                "prefix : <"+ns+">\n" +
                "prefix rdfs: <"+RDFS.getURI()+">\n" +
                "delete { :JDoe rdfs:label ?label }\n" +
                "insert { :JDoe rdfs:label \"Jack Doe\"@en }\n" +
                "where { :JDoe rdfs:label ?label }";

        UpdateAction.parseExecute( rename, model );

        model.write( System.out, "TTL" );
    }
}

前后模型如下:

@prefix :      <http://stackoverflow.com/q/23102507/1281433/> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:JDoe   a           owl:Thing ;
        rdfs:label  "John Doe"@en .
@prefix :      <http://stackoverflow.com/q/23102507/1281433/> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:JDoe   a           owl:Thing ;
        rdfs:label  "Jack Doe"@en .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多