我阅读了不同的教程,解释如何使用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查询来验证它。
有谁有同样的问题吗?
谢谢
发布于 2019-03-06 01:29:12
我正在尝试另一种新方法来更新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的情况下,相同的代码可以完美地工作。
https://stackoverflow.com/questions/54648859
复制相似问题