2016-09-09 4 views
0

Ich habe eine Frage, wie Sie verschiedene Eigenschaften für Instanzen finden, die eine Klasse in DBpedia teilen. Ich denke, es ist mehr wie SPARQL. Ich habe versucht, diese Abfrage hier ansehen:In DBpedia finden Sie Eigenschaften, die einer Klasse gemeinsam sind

SELECT DISTINCT ?p WHERE { 
     ?s a <http://dbpedia.org/ontology/Film> . 
     ?s ?p ?o. 
} 

Allerdings habe ich erkannt, dass diese Abfrage gibt Ihnen alle unterschiedliche Eigenschaften, die von allen Instanzen verwendet werden, im Wesentlichen während die unterschiedlichen Eigenschaften für die Instanz einer Klasse könnte bleiben nur die gleichen dh in LUBM zum Beispiel, in einem echten Wikipedia-basierten Extraktionssatz wie DBpedia, haben Sie das nicht. Eine Zählung auf der obigen Abfrage würde mir 1767 distinct properties geben. Aber wie finden Sie alle Eigenschaften, die der Instanz einer Klasse in SPARQL gemeinsam sind? Wie in einer Gruppe von Eigenschaften, die für die Instanz einer Klasse auftreten und für einen gesamten Satz gelten. Dies sollte ein kleinerer Satz als der 1767 rechts sein? Für LUBM führt die obige Abfrage das aus und scheint so zu sein, als ob alle Instanzen denselben Satz unterschiedlicher Eigenschaften gemeinsam haben. Ich denke für DBpedia wäre das nicht der Fall. Ich weiß auch, dass dies zum Beispiel in Java gemacht werden kann. Ich könnte einfach durch alle Eigenschaften für alle Instanzen der Klasse iterieren und nur diejenigen speichern, die in allen erscheinen. Ich denke, das ist zu teuer und hat sich gefragt, ob das in SPARQL möglich ist.

PS: Jemand hat eine ähnliche Frage gestellt here, aber wie ich hier geschrieben habe, bin ich nicht sicher, ob das tatsächlich die gemeinsamen Eigenschaften für alle Klassen erfasst.

+0

Bitte bestätigen - Sie möchten eine Liste aller Eigenschaften erhalten, für die jede Instanz einer Klasse einen Wert im DBpedia-Datensatz hat? Wenn also eine 'dbo: Film'-Beschreibung keinen' dbo: costumeDesigner' enthält (egal, ob es einen solchen hatte), soll diese Eigenschaft nicht enthalten sein? – TallTed

+0

Also sagen wir mal, ich müsste einen Film beschreiben, nur mit DBpedia, meine erste Möglichkeit wäre, alle Instanzen eines Films anzusehen. Dann würde ich sagen, oh!Alle Instanzen des Films haben 'n' Eigenschaften. Meine erste Ahnung war, dass alle Instanzen die gleichen Eigenschaften haben. In der Praxis und auch in der Theorie kann dies jedoch nicht der Fall sein. Eine Instanz könnte andere Eigenschaften haben und so weiter. Daher lautet die Frage "Welche Eigenschaften von Instanzen einer Klasse sind unter allen Instanzen der Klasse üblich", wie in welchen Eigenschaften tatsächlich ein Wert (Datentyp oder Objekttyp) für alle Instanzen der Klasse vorhanden ist. – N00bsie

+0

Ich glaube nicht, dass dein Ziel klar ist ... Eine Filmbeschreibung * von * DBpedia (die von Wikipedia abgeleitet ist) zu erhalten, ist nicht das Gleiche wie eine Filmbeschreibung * für * DBpedia zu erstellen (was durch eine Beschreibung geschehen sollte) Wikipedia) ... – TallTed

Antwort

3

Wenn Sie nach Eigenschaften, wie die Suche, dass jeder Film einen Wert für diese Eigenschaften hat, dann könnten Sie, dass bei einer Abfrage wie auszudrücken:

select distinct ?p { 
    #-- Find all the distinct properties 
    #-- of some reference Film. It shouldn't 
    #-- matter which Film we get. 
    { select distinct ?p { 
    { select ?ex { ?ex a dbo:Film } limit 1 } 

    ?ex ?p ?o 
    } 
    } 

    #-- Now exclude any of those properties 
    #-- if there is a Film that doesn't have 
    #-- a value for them. 
    filter not exists { 
    ?f a dbo:Film . 
    filter not exists { ?f ?p ?o } 
    } 
} 

SPARQL results

Diese Abfrage findet ein einzelner Film und erhält dann alle seine verschiedenen Eigenschaften. Da wir nach Eigenschaften suchen, die alle Filme haben, ist es egal, welchen Film wir als den einen wählen. Dann filtern wir einige dieser Eigenschaften aus, wo einige Film nicht eine Eigenschaft für sie haben. Was übrig bleibt, sind genau die Eigenschaften, die jeder Film hat.

Leider scheint es wie die einzige Eigenschaft, die jeden Film in den DBpedia Daten hat, ist rdf: type.

+0

Vielen Dank @JoshuaTaylor! Das ist ziemlich überraschend, um ehrlich zu sein. Aber ich muss damit arbeiten. Natürlich müsste ich die Abfrage erneut bearbeiten, um die Eigenschaften zu sehen, die am häufigsten von allen Instanzen geteilt werden. Ich nehme an, dass das nicht für alle RDF-Daten stimmt, oder? Man sollte theoretisch eine Menge haben, die> 1 (sicher) ist, oder? – N00bsie

+1

@ N00bsie Da die Abfrage strukturiert ist (nach Dingen, die einen bestimmten Wert für die ** rdf: type ** -Eigenschaft haben), haben Sie garantiert alle Eigenschaften gemeinsam: ** rdf :Art**.Abgesehen davon weiß ich von keinem a priori Grund, zu erwarten, dass ein beliebiger Satz von Ressourcen einen größeren Satz gemeinsamer Eigenschaften hat. –

+0

@ N00bsie Ich war eigentlich überrascht von den DBpedia Ergebnissen. Ich hätte zwar gedacht, dass es auf allen Filmen ein rdfs: -Label geben würde, aber es stellt sich heraus, dass einige der Filme nicht den Wikipedia-Artikeln entsprechen. Z. B. versuche ** auszuwählen? F wobei {? F a dbo: Filmfilter nicht existiert {? F rdfs: label? Label}} **. –

2

den Film URI dereferenzieren wird Ihnen sagen, alles, was Sie über die Filmklasse wissen müssen, in DBpedia:

Die HTML-Ressource:

http://mappings.dbpedia.org/server/ontology/classes/Film

Die RDF-Ressource:

http://dbpedia.org/data3/Film.ttl

Die SPARQL-Abfrage für Domänen- und Bereichseigenschaften des Films:

SELECT ?predicate 
WHERE { 
?predicate rdfs:domain|rdfs:range <http://dbpedia.org/ontology/Film> 
} 
+1

Dies könnte nicht die Antwort liefern, die OP ist Auf der Suche nach. Dadurch werden Eigenschaften zurückgegeben, die explizit die Domäne oder den Bereich Film aufweisen, aber nicht notwendigerweise Eigenschaften, deren Domäne oder Bereich * Unterklassen * von Film (deren Verwendung bedeuten würde, dass die relevante Instanz eine Instanz von Film ist) oder Eigenschaften, deren Domäne oder Bereich sind Superklassen * von Film, die konsequent auch auf Filme angewendet werden können. OPs Frage klingt nach dem, was gewünscht wird, ist die Menge von Eigenschaften, für die alle Filme einen Wert haben. –

+0

Okay, ich muss zugeben, dass ich diese Abfrage zuerst in meiner lokalen Instanz ausprobiert habe, bevor ich diese Frage tatsächlich auf stackoverflow gestellt habe. Aber das gab mir keine Ergebnisse. Auf der öffentlichen DBpedia hat es getan. Ich denke, das hat etwas mit meiner Virtuoso-Instanz zu tun. Zurück zu der Frage. @JoshuaTaylor hat Recht. Dies würde Eigenschaften ausgeben, die explizit die Domäne und den Bereich bereits angegeben haben. Ich interessiere mich für die Eigenschaften, die allen Instanzen gemeinsam sind, oder für die Eigenschaften, für die alle Instanzen von Film einen Wert haben. – N00bsie

+0

@ N00bsie Ich denke, dass [meine Antwort] (http://stackoverflow.com/a/39414521/1281433) entspricht Ihrer Spezifikation. –

Verwandte Themen