在file.owl中插入Induvidual



我试图用Sparql更新1.1将一个人插入到我的文件owl中,但它不起作用。如果有人举个例子,请毫不犹豫地给我一个答案。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String ont="http://localhost:8080/webdav/elearning";
    OntModel model=ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC);
    model.read(ont+".owl");
    String requete="PREFIX table: <http://www.owl-ontologies.com/Ontology1239120737.owl#>rn" +
    "INSERT DATA { table:etud1 :APourNom 'Saleh' ." +
    " table:etud1 :APourLogin 'saleh' ." +
    " table:etud1 :APourPWD 'saleh' . }";
    GraphStore graphstore=GraphStoreFactory.create();
    graphstore.setDefaultGraph(model.getGraph());
    UpdateRequest updaterequest=UpdateFactory.create(requete);
    updaterequest.exec(graphstore);
    System.out.println("OK");
}

当我运行程序时,我得到一条消息,告诉我一切都好,但当我打开本体时,我找不到插入的元素。请帮我解决这个问题。

您在这里所做的是更新一个内存中的图对象,该对象包含您最初从http://localhost:8080/webdav/elearning获取的本体内容的副本。该副本与位于8080端口上的应用程序服务器托管的文档不同,因此在原始应用程序服务器承载的文档中看不到更改也就不足为奇了。

基本上有四种方法可以做到这一点:

  • 您使用的不是普通的web服务器(如Tomcat或Jetty),而是RDF特定的数据服务器,如Fuseki。然后,如果配置正确,它将能够直接响应SPARQL更新请求——因此,您不必将文档复制到本地图中,而是可以原位更新图

  • 您可以像现在这样做,然后在完成图形更新后,可以安排将更新后的图形HTTP POST回8080端口上的应用程序服务器。这将需要您为更新设置一个路由(例如http://localhost:8080/webdav/elearning/update)和一个合适的处理程序,但这是非常可行的。

  • 您可以访问文件系统上的文件,而不是从web URL访问本体。不过,一旦完成更新,就必须将更新后的图形的内容保存回文件系统。

  • 您可以将本体加载到TDB等持久存储中,而不是从web URL访问本体。使用这种方法,您可以打开一个直接连接到存储的Jena Dataset,并根据它运行SPARQL查询和更新。不需要单独保存任何内容:所有更新都将直接进入TDB实例。

您的原始样本使用Pellet作为推理引擎。如果这对您的应用程序很重要,那么为了提高效率,您确实需要在内存中复制数据。因此,上述第二和第三解决方案将比其他解决方案更适合。

最新更新