2017-04-19 11 views
0

Ich habe eine SPARQL-Abfrage auf meine eigene Ontologie geschrieben, die für diese Vervielfältigung von Datensätzen gibt, habe ich auch verwendet Group_concat, meine AnfrageAggregieren von SPARQL Ergebnis

SELECT ?Movie (str(?y) as ?Rating) (group_concat (?z;separator=",") as ?Director) 
{ ?Movie :rating ?y; 
     :directedBy ?z 
FILTER regex(str(?Movie),'Fantastic_Four') } 
    GROUP BY ?y ?Movie 

Diese Abfrage gibt mir das gewünschte Ergebnis, aber die Ausgabe für Direktor kommt in folgenden Weise:

http://www.semanticweb.org/administrator/ontologies/2017/2/Ontology-Schema_Movie#Josh_Trank,http://www.semanticweb.org/administrator/ontologies/2017/2/Ontology-Schema_Movie#Joshua_Trank 

ich frage mich, warum diese ganze URI kommt, wie diese zu entfernen und nur Josh_Trank, Joshua_Trank in meinem Ergebnis drucken?

+0

1. Übrigens ist 'group_concat (distinct? Z; ...)' eine ziemlich legale Konstruktion. 2. Obwohl Variante 2 von AKSW Antwort ist natürlich vorzuziehen, könnten Sie interessiert sein, "afn: localname" [alternative Definition] (https://jena.apache.org/documentation/query/library-function.html#addtional -functions-arq-zur Verfügung gestellt (oder in afn: localname selbst). –

Antwort

1

RDF-Ressourcen werden durch URIs identifiziert, deshalb wird eine Liste von URIs verkettet. Wenn Sie einen lesbaren Namen benötigen

  1. Sie könnten einige String-Funktionen verwenden. REGEX auf der URI (siehe a similar question)
PREFIX : <http://www.semanticweb.org/administrator/ontologies/2017/2/Ontology-Schema_Movie#>     
    SELECT ?Movie (str(?y) as ?Rating) 
      (group_concat (?director_name;separator=",") as ?Director) { 
     ?Movie :rating ?y; 
      :directedBy ?z 
     FILTER regex(str(?Movie),'Fantastic_Four') 
     BIND(strafter(str(?z),str(:)) as ?director_name) 
    } 
    GROUP BY ?y ?Movie 
  1. ich wirklich zu schlagen Gebrauch die rdfs:label (oder so ähnlich), wenn für die Menschen lesbaren Namen eines
  2. URI existiert