Jena Virtuoso负载模型

时间:2019-02-12 11:14:49

标签: rdf jena virtuoso

我阅读了不同的教程,它们解释了如何使用Java Apache Jena(例如https://jena.apache.org/documentation/rdfconnection/)将模型加载到Virtuoso SPARQL端点,但是我做不到。

我尝试了此功能:

public void uploader(){ 
String myVirtuosoEndpoint = "http://10.1.22.17:8890/"; //my Virtuoso endpoint IP

Model model = ModelFactory.createDefaultModel() ; //the Model I want to upload
model.createResource("https://example.org").addProperty(RDF.type, "http://myType");
try (RDFConnection conn = RDFConnectionFactory.connect(myVirtuosoEndpoint)) {
                conn.begin(ReadWrite.WRITE);
                conn.load("http://myGraph", model);
                conn.commit();
                conn.end();
        }
}

我还利用耶拿(Jena)的Txn库(https://jena.apache.org/documentation/txn/txn.html)尝试了其他功能。

try (RDFConnection conn = RDFConnectionFactory.connect(myVirtuosoEndpoint)) {
        Txn.executeWrite(conn, ()-> {
             conn.load(targetGraph, model);
        }) ;
}

我正在使用OpenLink Virtuoso服务器版本07.20.3217。至于Jena依赖项,我使用以下内容:

    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>apache-jena-libs</artifactId>
        <type>pom</type>
        <version>3.1.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.jena/jena-rdfconnection -->
    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>jena-rdfconnection</artifactId>
        <version>3.10.0</version>
    </dependency>

似乎代码可以正常工作,因为我没有收到任何错误,但是我要上传模型的图形没有改变。我通过在执行代码后仅对Graph执行SPARQL查询来对其进行验证。

有人遇到同样的问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我正在尝试另一种新方法来更新Virtuoso中RDF图的内容。

代码:

//Connect to Virtuoso
VirtModel virtualModel = VirtModel.openDatabaseModel(GRAPH_NAME, endpoint, USERNAME, PASSWORD);
long modelInitialSize = virtualModel.size();

//Add model
virtualModel.add(model);
long modelNewSize = virtualModel.size();

virtualModel.close();

端点类似于jdbc:virtuoso://10.1.22.xxx:1111

我正在pom.xml中使用这些依赖项:

    <!-- https://mvnrepository.com/artifact/org.apache.jena/jena-tdb -->
    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>jena-tdb</artifactId>
        <version>3.9.0</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.apache.jena/apache-jena-libs -->
    <dependency>
        <groupId>org.apache.jena</groupId>
        <artifactId>apache-jena-libs</artifactId>
        <version>3.9.0</version>
        <type>pom</type>
    </dependency>

此外,我正在使用Virtuoso webapge

中的 virt_jena3.jar virtjdbc4.jar 依赖项

现在,当尝试使用命令long modelNewSize = virtualModel.size();获取VirtModel的大小时,出现以下错误:

org.apache.jena.shared.JenaException: virtuoso.jdbc4.VirtuosoException: Problem during serialization : Software caused connection abort: socket write error

此外,一旦出现此错误,看来Virtuoso服务器已关闭,我需要重新启动虚拟机来修复它。

棘手的部分是,在here有可用依赖项的情况下,相同的代码可以完美运行...