将个人插入file.owl

时间:2011-06-07 08:01:00

标签: sparql jena

我正在尝试使用Sparql update 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#>\r\n" +
    "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");
}

当我运行我的程序时,我收到一条消息,告诉我一切正常但是当我打开我的本体时,我没有找到插入的元素。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

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

基本上有四种方法可以解决这个问题:

  • 您有一个特定于RDF的数据服务器,例如Fuseki,而不是普通的Web服务器(如Tomcat或Jetty)。然后,正确配置后,它将能够直接响应SPARQL更新请求 - 因此,不是将文档复制到本地图形中,而是更新图形 in-situ

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

  • 您可以改为访问文件系统上的文件,而不是从Web URL访问本体。但是,一旦完成更新,您将不得不将更新的图形的内容保存回文件系统。

  • 您可以将其加载到TDB等持久性存储中,而不是从Web URL访问本体。通过这种方法,您可以打开直接连接到商店的Jena Dataset,并针对该运行运行SPARQL查询和更新。无需单独保存任何内容:所有更新都将直接进入TDB实例。

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