java - 如何将修改(创建、更新 OWL 文件)保存到 fuseki 服务器
问题描述
我使用 protege 创建了一个本体模型。,我使用java来填充我的本体(reate user,resources..),然后我将所有修改保存到一个文件中。
现在我需要集成一个 RDF 服务器来保存更改经过一些研究我发现 Fuseki 是我可以使用的最好的服务器之一。经过更多的研究我还发现我需要使用 RDFCONnexion 与 fuseki 服务器通信但是我在集成服务器和操作我的所有 Java 类时遇到了一些困难。
为了请求我的本体,我使用了 RDFconnexion:示例:public static void main(String[] args) {
RDFConnection conn1 =
RDFConnectionFactory.connect("http://localhost:3030/test/") ;
try( QueryExecution qExec = conn1.query("PREFIX ex: <http://example.org/>
SELECT * { ?s ?p ?o }") ) {
ResultSet rs = qExec.execSelect();
ResultSetFormatter.out(rs, qExec.getQuery());
}
}
但我在尝试创建代理(用户)或资源时遇到了问题。在下面你会发现我的 Java 代码的一部分:
private final OntModel onto;
private OntModel inferred;
public test() {
onto = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
OntDocumentManager manager = onto.getDocumentManager();
manager.addAltEntry("http://www-test/1.0.0", "ontologies/test.owl");
}
public String createUri(String prefix, String localName){
String uri = prefix + "#" + localName ;
uri = uri.replaceAll(" ", "_") ;
return uri ;
}
// to create Agent
public Resource createAgent(String uri) throws
AlreadyExistingRdfResourceException {
Resource agent = this.createEntity(uri) ;
if (agent==null) return null ;
Property prop ; Statement s ;
s = ResourceFactory.createStatement(agent, RDF.type,
onto.getIndividual(EngineConstants.CD_Agent)) ;
onto.add(s) ;
this.synchronize();
return agent ;
}
// TO get Agent Activty
public Set<Resource> getAgentActivities(String agentUri){
final String query = "SELECT ?entity WHERE { ?entity CD:hasAgent <"+
agentUri +">}" ;
ResultSet resultSet = this.queryExec(this.getInferred(), query);
return this.getRdfResources(resultSet, "entity") ;
}
我需要知道是否有人可以帮助我,并给我一个如何使用和集成 Fuseki 的示例(修改并请求我的本体)。
谢谢您的帮助
解决方案
请注意,您可能首先想使用以下fetch()
方法检索图形 - http://jena.apache.org/documentation/javadoc/rdfconnection/org/apache/jena/rdfconnection/RDFDatasetAccessConnection.html#fetch-java.lang.String- -这将比现在查询它更有效,例如
Model model = connection.fetch("http://your-graph-name");
如果您只是使用默认图表,您可以connection.fetch()
检索它。
获得本地副本后,根据需要使用 Jena API 对其进行修改。
然后,您可以使用该put()
方法更新图形 - http://jena.apache.org/documentation/javadoc/rdfconnection/org/apache/jena/rdfconnection/RDFConnection.html#put-java.lang.String-org.apache .jena.rdf.model.Model- - 与您的本地更改,例如
connection.put("http://your-graph-name", model);
这将用 的当前内容覆盖现有图形model
。同样,如果您只是使用默认图表,您可以这样做connection.put(model)
。
推荐阅读
- botframework - 我可以设置一个使用 MS Health BOT 服务默认启动的场景吗?
- python-3.x - 添加垂直边框
- java - 为什么使用自定义单元格渲染器时 JList 的高度会发生变化?
- php - 使用 PHP 类更改 HTML 的颜色和字体大小
- python - 如何在函数的积分下绘制面积?参数多边形给出参数错误
- docker - Google Cloud Run 在 Healthcheck 正常之前启动容器
- ruby-on-rails - Rails Action Cable 不传输广播
- javascript - CSS 和纯 JS 自定义光标在悬停时展开
- java - Java 存储过程 DB2 问题
- docker - 无法使用fabric8 maven插件构建我自己的docker镜像