2016-05-25 8 views
1

Diese SPARQL-Anweisung funktioniert:SPARQL Umgang mit DBPedia Stadt leitet

PREFIX s: <http://dbpedia.org/resource/Del_Mar,_California> 
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
    OPTIONAL { s: dbp:officialName ?officialName . } 
    OPTIONAL { s: dbp:name ?foaf_name . } 
    #-- ... [ about 20 more lines like the above ] ... 
} LIMIT 2; 

Aber einige Städte haben umleiten. Zum Beispiel: Pacific_Beach, _California leitet zu Pacific_Beach, _San_Diego um. Wie kann ich damit umgehen?

Ich habe Joshua Taylor's answer zu Retrieving dbpedia-owl:type value of resource with dbpedia-owl:wikiPageRedirect value? gelesen, und ich frage mich, ob meine s: Präfix mich hier oben durcheinander? Ich kann nicht seine Lösung scheinen zu implementieren:

select ?type where { 
    dbpedia:Cupertino dbpedia-owl:wikiPageRedirects*/dbpedia-owl:type ?type 
} 

Einige andere Ressourcen schlagen vor, mit einer Vereinigung:

Lesen des Wikibooks Kapitel, XQuery/DBpedia with SPARQL - Football teams lässt mich noch mehr verwirrt.

Ich versuche, dieses Zeug zu lernen, aber ich habe eine sofortige Notwendigkeit, "es einfach zum Laufen zu bringen". Eine Lösung und einige Links zum Lesen würden uns freuen!

Antwort

4

Pacific Beach, San Diego nicht umleiten zu nichts, aber es ist die Umleitung Ziel einer Reihe von Ressourcen:

dbo ist: wikiPageRedirects von

  • dbr: Pacific_Beach, _CA
  • dbr: Pacific_Beach, _California
  • dbr: Pacific_Beach, _San_Diego, _CA
  • dbr: Pacific_Beach, _San_Diego, _California
  • dbr: Pacific_Beach, _San_Diego_California

Das bedeutet, dass eine modifizierte Version der Abfrage sollte gut funktionieren:

PREFIX s: <http://dbpedia.org/resource/Pacific_Beach,_San_Diego> 
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
    OPTIONAL { s: dbp:officialName ?officialName . } 
    OPTIONAL { s: dbp:name ?foaf_name . } 
    #-- ... [ about 20 more lines like the above ] ... 
} LIMIT 2 

SPARQL results

Beachten Sie, dass die Verwendung von Präfix zum Abkürzen eines einzelnen IRI eine Art von ungewöhnlichen ist. Es wäre üblicher, einen Werte Block zu verwenden, um eine bestimmte Variable zu binden, die Sie in dem Rest Ihrer Abfrage verwenden können. Das heißt, würde ich diese Abfrage schreiben:

PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
    values ?s { <http://dbpedia.org/resource/Pacific_Beach,_San_Diego> } 
    OPTIONAL { ?s dbp:officialName ?officialName . } 
    OPTIONAL { ?s dbp:name ?foaf_name . } 
    #-- ... [ about 20 more lines like the above ] ... 
} LIMIT 2; 

Das hat den Vorteil, dass, wenn Sie Werte für weitere Städte suchen, können Sie sie einfach von Werten zu der Liste hinzufügen. Wenn Sie nun einen Wert hinzufügen möchten, der zu etwas anderem weiterleitet, ist das kein Problem. Sie würden wollen, nur eine nicht optional Muster hinzufügen, die Sie auf die Umleitungsziele folgen hilft:

SELECT * WHERE { 
    values ?x { <http://dbpedia.org/resource/Pacific_Beach,_California> } 
    ?x dbo:wikiPageRedirects* ?s . 
    OPTIONAL { ?s dbp:officialName ?officialName . } 
    OPTIONAL { ?s dbp:name ?foaf_name . } 
    #-- ... [ about 20 more lines like the above ] ... 
} LIMIT 2 

SPARQL results

Als abschließende Bemerkung, seien Sie vorsichtig, wenn Sie kopieren und Einfügen von URIs aus dem Browser, die sicherstellen, dass Sie den richtigen URI in der Abfrage verwenden. Wenn Sie eine DBpedia Ressource besuchen, zum Beispiel http://dbpedia.org/ Ressource/foo im Browser, sind Sie auf den Menschen lesbare Form umgeleitet http://dbpedia.org/ Seite/foo im Browser. Das ist nur eine Eigenart von DBpedia. (Wirklich, sollten sie Inhalt-Typ-Verhandlung verwenden und ein HTML-Dokument für das erstere zurückgeben, wenn ein Web-Browser die Anfrage macht.)

+0

Danke! In Ihrem letzten Beispiel ist die 'Pacific_Beach, _California'-Zeichenfolge eine Variable, die in 90% der Fälle korrekt ist - aber wenn diese zu' Pacific_Beach, _San_Diego 'umleiten muss - wie würde ich schreiben, dass das eingefügt wird, damit ich 100% verarbeiten kann? der Anrufe? Brauche ich die Union? – Ricalsin

+0

@Ricalsin Die '? X dbo: wikiPageRedirects *? S. 'Taschentuch die Umleitung. –

+0

@Ricalsin Die '? X dbo: wikiPageRedirects *? S' behandelt die Weiterleitung. –

4

Ich würde vorschlagen, einen Blick auf "this answer von Joshua Taylor" zu werfen. Einer der Vorschläge besteht darin, SPARQL zum Überprüfen der Daten zu verwenden. Also versuchen Sie diese Abfrage:

SELECT * WHERE { 
    <http://dbpedia.org/resource/Pacific_Beach,_California> ?p ?o 
} 

Diese geben Ihnen alle Daten zur Verfügung für den URI <http://dbpedia.org/resource/Pacific_Beach,_San_Diego>. Beachten Sie, dass in diesem Fall keine dbpedia-owl:wikiPageRedirects Eigenschaft enthalten ist. Es scheint, dass die Umleitung innerhalb des DBPedia-Browsers erfolgt und nicht in den DBPedia-Daten enthalten ist.

Mithilfe der oben genannten Abfrage finden Sie, was tatsächlich in den Daten (in diesem Fall nichts sehr interessant) ist.

Verwandte Themen