2016-12-20 3 views
0

Ich habe eine Eule Datei Klassen und Einzelpersonen sind in der gleichen Datei. Beschwerde und Benutzer (Klassen). Ich erstelle Benutzer Beschwerden als Einzelpersonen. Eine Reklamationsklasse hat dataProperties (ID, Anzahl der gelesenen, Titel, Tags, Inhalt usw.) Ich schrieb eine Sparql-Abfrage mit jena auf Eclipse Swing-Projekt;Mehrere Personen aus Sparql Abfrage

String queryRetrieveAll = "SELECT * WHERE \n { " 
+ "?Complaint skyt:numOfRead ?Num . " 
+ " FILTER (?Num >= 1) " 
+ ".}\n"; 

und retrive alle Beschwerden in meiner Eulen-Datei. beispielsweise;

------------------------------- 
| Complaint   | Num | 
=============================== 
| skyt:apple   | 484 | 
| skyt:toshiba   | 202 | 
| skyt:niluferturizm | 43 | 
| skyt:kamilkoc  | 42 | 
| skyt:eceElektronik | 254 | 
| skyt:celebi   | 112 | 

DAS ist OKAY aber. Ich möchte auch den Besitzer der Beschwerde aus der Abfrage abrufen. und ich füge oben eine Zeilenabfrage hinzu.

String queryRetrieveAll = "SELECT * WHERE \n { " 
+ "?Complaint skyt:numOfRead ?Num . " 
+ " FILTER (?Num >= 1) " 
+ "?Complaint skyt:Owner ?owner . "// or "?Complaint skyt:sId ?ID . " 
+ ".}\n"; 

Die Ergebnisse dieser Abfrage werden Individuen wiederholt abgerufen,

----------------------------------------------- 
| Complaint   | Num | Owner 
=============================================== 
| skyt:apple   | 484 | skyt:huseyinG | 
| skyt:apple   | 484 | skyt:kaanY | 
| skyt:apple   | 484 | skyt:ramazanÇ | 
| skyt:apple   | 484 | skyt:mertM | 
| skyt:apple   | 484 | skyt:burakÇ | 
| skyt:apple   | 484 | skyt:merveE | 
| skyt:apple   | 484 | skyt:ertuncE | 
| skyt:toshiba   | 202 | skyt:sahinT | 
| skyt:niluferturizm | 43 | skyt:yasinT | 
| skyt:kamilkoc  | 42 | skyt:hanifeC | 
| skyt:kamilkoc  | 42 | skyt:HasanH | 
| skyt:kamilkoc  | 42 | skyt:semihA | 
| skyt:eceElektronik | 254 | skyt:sonerD | 
| skyt:celebi   | 112 | skyt:gayeB | 
| skyt:polypadSarj  | 265 | skyt:serefG | 
| skyt:polypadSarj  | 265 | skyt:metinY | 
| skyt:polypadSarj  | 265 | skyt:simayS 
| skyt:apple   | 871 | skyt:huseyinG | 
| skyt:apple   | 871 | skyt:kaanY | 
| skyt:apple   | 871 | skyt:ramazanÇ | 
| skyt:apple   | 871 | skyt:mertM | 
| skyt:apple   | 871 | skyt:burakÇ | 
| skyt:apple   | 871 | skyt:merveE | 
| skyt:apple   | 871 | skyt:ertuncE | 

Wie ich es beheben? Ich möchte alle Beschwerden mit Besitzer, ID, numOfread, vs

+0

Da eine Beschwerde mehr Eigentümer hat, können Sie nur dann so etwas wie eine durch Kommata getrennte Liste der Besitzer bekommen von SPARQL 1.1 'GROUP_CONCAT' Funktion verklagt, siehe https://www.w3.org/ TR/sparql11-query/# Aggregate – AKSW

Antwort

0

Ich löse das Problem. In Eulen-Datei sind einige der einzelnen durch meinen Fehler gleichen Namen. Zum Beispiel Beschwerde über Apfel, ich habe diesen individuellen Namen als "Apfel" gegeben. Aus diesem Grund erhalten sie manchmal mehrere. Ich gebe eindeutigen Namen für alle Personen und ändere meine Abfrage unten. Dann funktioniert es. :)

String queryExtractAll = 
"SELECT DISTINCT ?Num ?Owner ?Title ?Content WHERE \n { " 
+ "?Complaint skyt:numofRead ?Num;" 
+ "skyt:owner ?Owner;" 
+ "skyt:title ?Title;" 
+ "skyt:content ?Content" 
+ " FILTER (?Num >= 1) " + ".}\n" 
+ " ORDER BY DESC (?Num) ";