下面的代碼是大項目的一部分,有幾個記錄像hasName,hasAge,hasPlace,我試圖在java中構建sparql查詢以獲取記錄。該查詢適用於名稱之間沒有空格的名稱。例如:Alice,Bob。但是對於名字空間不起作用的人喜歡:Joy Mik,Ervin pol。如何構建Sparql查詢以獲取具有空間的字符串
SELECT ?statement ?name ?age ?place
WHERE
{ ?statement recordNS:hasName <http://example/base/name>
?statement recordNS:hasAge ?age
?statement recordNS:hasPlace ?place
}
的實際查詢:
public static getAllStatementsForPerson(String PersonName) {
String queryString =
"PREFIX defaultNS: <" + defaultNS + "> " +
"SELECT ?statement ?age ?place "
+ "WHERE "
+ "{ ?statement defaultNS:hasname <" + defaultNS + PersonName + "> . "
+ "?statement defaultNS:hasAge ?age "
+ "?statement defaultNS:hasPlace ?place }";
System.out.println("queryString is: " + queryString);
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, som); // "som" is an ontology model
try {
ResultSet results = qexec.execSelect();
while (results.hasNext()) {
ResultSetFormatter.out(System.out, results, query);
}
}
catch(Exception e){ e.printStackTrace();}
finally {qexec.close();}
return statements;
}
請人幫助我,這是我第一次問對該網站解決方案...如果我做了任何錯誤,請正確我。
聽到的是與幾個記錄樣本RDF文件....
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:defaultNS="http://Example/Base/Record_#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Class rdf:about="http://Example/Base/Record_#Name"/>
<owl:Class rdf:about="http://Example/Base/Record_#Age"/>
<owl:Class rdf:about="http://Example/Base/Record_#Place"/>
<rdf:Property rdf:about="http://Example/Base/Record_#hasName"/>
<rdf:Property rdf:about="http://Example/Base/Record_#hasAge"/>
<rdf:Property rdf:about="http://Example/Base/Record_#hasPlace"/>
<defaultNS:RecordStatement rdf:about="http://Example/Base/Record_#statement001">
<defaultNS:hasName>
<defaultNS:Name rdf:about="http://Example/Base/Record_#Alice"/>
</defaultNS:hasName>
<defaultNS:hasAge>
<defaultNS:Age rdf:about="http://Example/Base/Record_#26"/>
</defaultNS:hasAge>
<defaultNS:hasPlace>
<defaultNS:Place rdf:about="http://Example/Base/Record_#Europe"/>
</defaultNS:hasPlace>
</defaultNS:RecordStatement>
<defaultNS:RecordStatement rdf:about="http://Example/Base/Record_#statement002">
<defaultNS:hasName>
<defaultNS:Name rdf:about="http://Example/Base/Record_#Bob"/>
</defaultNS:hasName>
<defaultNS:hasAge>
<defaultNS:Age rdf:about="http://Example/Base/Record_#30"/>
</defaultNS:hasAge>
<defaultNS:hasPlace>
<defaultNS:Place rdf:about="http://Example/Base/Record_#Rome"/>
</defaultNS:hasPlace>
</defaultNS:RecordStatement>
<defaultNS:RecordStatement rdf:about="http://Example/Base/Record_#statement003">
<defaultNS:hasName>
<defaultNS:Name rdf:about="http://Example/Base/Record_#JoyMik"/>
</defaultNS:hasName>
<defaultNS:hasAge>
<defaultNS:Age rdf:about="http://Example/Base/Record_#24"/>
</defaultNS:hasAge>
<defaultNS:hasPlace>
<defaultNS:Place rdf:about="http://Example/Base/Record_#Paris"/>
</defaultNS:hasPlace>
</defaultNS:RecordStatement>
<defaultNS:RecordStatement rdf:about="http://Example/Base/Record_#statement002">
<defaultNS:hasName>
<defaultNS:Name rdf:about="http://Example/Base/Record_#ErvinPol"/>
</defaultNS:hasName>
<defaultNS:hasAge>
<defaultNS:Age rdf:about="http://Example/Base/Record_#36"/>
</defaultNS:hasAge>
<defaultNS:hasPlace>
<defaultNS:Place rdf:about="http://Example/Base/Record_#StPetersburg"/>
</defaultNS:hasPlace>
</defaultNS:RecordStatement>
</rdf:RDF>
但我的任務就是改變這些名字:「JoyMik」,「ErvinPol」到「歡樂Mik的」,「歐文波爾」 ...所以我建立一個查詢SPARQL中擺脫RDF文件中的記錄...
PREFIX defaultNS: <http://Example/Base/Record_#>
SELECT ?statement ?name ?age ?place
WHERE {
?statement defaultNS:hasName <http://Example/Base/Record_#JoyMik> .
?statement defaultNS:hasAge ?age .
?statement defaultNS:hasPlace ?place
}
---------------------------------------
| Statement | name | age | place |
=======================================
| statement003 | JoyMik | 24 | Rome |
---------------------------------------
但是我要改名字「JoyMik」到「歡樂Mik的」它給人以錯誤上面的「queryString」...我想我需要添加一些東西,它接受空白s .....
你在的地方是什麼意思? URI中不能有空格。檢查數據並查看它是如何編碼的:常用的方法是用_替換或使用%20。 – AndyS 2014-09-30 08:38:20
請顯示您正在查詢的一些數據。正如Andy所說,URI中不允許有空格,所以不應該有像<'這樣的東西。如果您顯示的是您正在查詢的數據(以及它是否合法),我們可以告訴您如何調整您的查詢。 –
2014-09-30 11:41:33
[Alice 26 Europe] [Bob 30 Rome] [「Joy Mik」29 Paris] [「Ervin pol」36「St. Petersburg」]通過這種方式記錄如何存在。 – raj2103 2014-09-30 15:41:35