当前位置: 首页 > 面试题库 >

通过Java代码插入一些数据时Sparql查询不会更新

隗和裕
2023-03-14
问题内容

我正在尝试通过Java代码将数据插入到已加载到Fuseki服务器的owl文件中。更新查询不给出任何错误消息。但是猫头鹰文件没有更新。我正在使用耶拿库并使用Java代码实现。我的代码有什么问题?

    public boolean addLecturerTriples(String fName, String lName,
    String id, String module) {
    try{
    ArrayList<String> subject = new ArrayList<String>();
    ArrayList<String> predicate = new ArrayList<String>();
    ArrayList<String> object = new ArrayList<String>();

    subject.add("<http://people.brunel.ac.uk/~csstnns/university.owl#"+fName+">");
    predicate.add("<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>");
    object.add("<http://people.brunel.ac.uk/~csstnns/university.owl#Lecturer>");

    for(int i = 0; i < subject.size(); i++){
        String qry = "INSERT DATA"+
                "{"+
                subject.get(i)+"\n"+
                predicate.get(i)+"\n"+
                object.get(i)+"\n"+
                "}";

        UpdateRequest update  = UpdateFactory.create(qry);
        UpdateProcessor qexec = UpdateExecutionFactory.createRemote(update, "http://localhost:3030/ds/update");
        qexec.execute();
    }
    }catch(Exception e){
        return false;
    }
    return true;
}

问题答案:

如果您提供了一个最小的完整示例,那就很有帮助,例如,您包括了Fuseki配置以及有关如何将OWL文件加载到Fuseki中的详细信息。

但是,我假设您没有使用任何特定的配置,而是像这样启动Fuseki:

java -jar fuseki-server-VER.jar --update --loc /path/to/db /ds

因此,您要做的是启动Fuseki,启用更新并使用该位置/path/to/db作为磁盘上的TDB数据库位置和/ds数据集的URL 。

您打开浏览器并单击Control Panel > /ds,然后使用上载文件功能上载OWL文件。上传文件时,该文件将被读入Fuseki中并复制到数据集中,在本示例中,您的数据集是磁盘上的TDB数据库,位于/path/to/db

重要的是要理解,因为Fuseki只是 将* 数据从文件 复制 到数据集,所以 不保留对原始文件的引用*

然后,您可以使用SPARQL
Update表单添加一些数据(或者,您可以通过Java代码执行此操作)。在此示例中,更新适用于要重复的数据集,该数据集是磁盘TDB数据库,/path/to/db该数据库上
没有 引用原始文件。因此,您的原始文件不会更改。

使用SPARQL Update更新原始文件

如果Fuseki不是必需的,那么您可以将文件加载到本地内存中,然后在该内存中运行更新:

Model m = ModelFactory.createDefaultModel();
m.read("example.owl", "RDF/XML");

// Prepare your update...

// Create an UpdateExecution on the local model
UpdateProcessor processor = UpdateExecutionFactory.create(update, GraphStoreFactory.create(m));
processor.execute();

// Save the updated model 
updated.write(new FileOutputStream("example.owl"), "RDF/XML");

但是,如果您想/必须使用Fuseki,则可以通过从Fuseki检索修改后的图形并将其写回到文件中来更新原始文件,例如

DatasetAccessor accessor = DatasetAccessorFactory.createHTTP("http://localhost:3030/ds/data");

// Download the updated model
Model updated = accessor.getModel();

// Save the updated model over the original file
updated.write(new FileOutputStream("example.owl"), "RDF/XML");

本示例假定您已将OWL文件加载到默认图形中(如果未使用getModel("http://graph")重载来加载相关的命名图形)



 类似资料:
  • 我使用GraphDB存储库,希望通过Java使用SPARQLRepository执行一些查询。当我阅读这些问题时,它工作得很好。但当我有一个查询“creategraph:example”或一个insert-and-delete查询时,它就不起作用了。当我通过GraphDB UI执行查询时,它运行良好。SPARQLRepository的doku说,我需要第二个endpoint,根据GraphDB d

  • 问题内容: 我需要用一个查询插入多行(行数不是常数),所以我需要像这样执行查询: 我知道的唯一方法是 但我想要一些更简单的方法。 问题答案: 我构建了一个程序,该程序将多行插入到位于另一个城市的服务器上。 我发现使用此方法的速度大约是的10倍。就我而言,tup是一个包含约2000行的元组。使用此方法大约花了10秒钟: 使用此方法需要2分钟:

  • 我试图使用下面的MySQL语句

  • 我试图从下层超级输出区域(LSOAs)和英国邮政编码数据集中获取一些信息。

  • 问题内容: 我有一个数据类型: 另外,数据库字段类型是 现在我正在这样做: 如何才能做到这一点。 问题答案: 使用

  • 为什么我在这里收到ORA-00918错误?在INSERT WHEN...THEN INTO...SELECT模式中可以选择的列数是否有限制? 注意:我使用的是Oracle 11.2.0.1.0,我试图在生产中执行的实际查询更加复杂,并且引用了其他表(使用“values”是不够的)。这只是简化的情况...