[英]Jena - Access elements in model from a QuerySolution and update them
我想使用通過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));
}
現在,我需要更新其中之一。
目前,我還沒有找到任何有用的示例來執行此類操作,因此歡迎您提供任何幫助。
提前致謝。
因此,您想更新給定用戶的屬性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)
一個,則您將必須用新的電子郵件地址將所有舊的電子郵件地址替換為user.removeAll(emailDp)
或在執行操作並執行任何形式的檢查時遍歷列表,然后才能進行設備安裝;以及刪除您想要的那個,類似於上面的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.