model - 如何使用 jena API 和 SPARQL 更新模型,例如。更新节点值

标签 model insert sparql jena

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

最佳答案

您可以将 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 .

关于model - 如何使用 jena API 和 SPARQL 更新模型,例如。更新节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23102507/

相关文章:

model - 什么是贫血模型?

ruby-on-rails - Rails -- 如何设置可以属于 3 个不同模型中的任何一个的模型

MySQL 错误 1406 (22001) : Data too long for column

php - 使用 PHP 将图像 blob 从 mysql 数据行插入 mysql 数据库

php - 向Mysql数据库中插入数据时出错

validation - 我们如何在 Yii 模型中为输入添加规则必须大于 0

model - 从头开始生成3D模型的文件格式?

limit - SPARQL 中的括号是什么?为什么链接的电影数据库限制为 2500 条记录?

sparql - protege 5.2中sparql查询结果导出到excel应该怎么做?

regex - SPARQL REPLACE 反向引用语法 $ 或反斜杠?