我想使用我使用Protégé5创建的一个测试模型来执行简单的操作。在我的情况下,我在我的owl文件中以这种方式定义了用户:
<owl:NamedIndividual rdf:about="&user-test-2;u01">
<rdf:type rdf:resource="&user-test-2;user"/>
<user-test-2:email rdf:datatype="&xsd;string">email1@test.net</user-test-2:email>
<user-test-2:hasGender rdf:resource="&user-test-2;male"/>
<user-test-2:isYearsOld rdf:resource="&user-test-2;18-24"/>
</owl:NamedIndividual>
我已经能够正确加载模型并使用SPARQL执行基本搜索以获取男性用户和相关属性,从而获得以下结果:
String fileName = "user-test-2.owl";
Model model = RDFDataMgr.loadModel(fileName);
final String ns = "http://www.semanticweb.org/ontologies/user-test-2#";
String queryString = "PREFIX test: <http://www.semanticweb.org/ontologies/user-test-2#> "
+ "SELECT ?subject "
+ "WHERE { ?subject test:hasGender test:male } ";
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
------------
| subject |
============
| test:u01 |
-----------
现在我想访问owl:NamedIndividual的属性并更新其中一个。例如,要更改用户的电子邮件。
修改
我可以使用以下代码访问属性:
Property emailDp = model.getProperty(ns + "email");
Property isYearsOld = model.getProperty(ns + "isYearsOld");
for ( ; results.hasNext() ; ) {
QuerySolution soln = results.nextSolution() ;
Resource res = soln.getResource("subject");
Resource user = model.getResource( res.getURI());
System.out.println(user.getProperty(emailDp));
System.out.println(user.getProperty(isYearsOld));
}
现在我需要更新其中一个。
目前我还没有找到任何有用的例子来执行这些事情,所以欢迎任何帮助。
提前致谢。
答案 0 :(得分:0)
因此,您要更新给定用户的属性emailDp
或isYearsOld
。
假设用户只有一个电子邮件地址和/或一个年龄,我们可以通过以下方式直接获取该物业:
Statement emailStatement = user.getProperty(emailDp);
Statement ageStatement = user.getProperty(isYearsOld);
然后可以使用以下方式检索用户的年龄或电子邮件:
Resource email = (Resource) emailStatement.getObject();
Resource age = (Resource) ageStatement.getObject();
更新其中任何一项都可以通过以下方式轻松完成:
user.removeProperty(emailDp, email);
user.removeProperty(isYearsOld, age);
user.addProperty(emailDp, newEmail);
user.addProperty(isYearsOld, newAge);
如果一个用户拥有多于一个,则必须设备,如果新的电子邮件地址用user.removeAll(emailDp)
替换所有旧的电子邮件地址,或者按照您的方式迭代列表并执行任何类型的检查,并删除你想要的那个,类似于上面的例子。