2016-04-12 12 views
4

Ich habe die folgende Abfrage, dass ich auf dem wikidata query service web interface lief:Zugang Eigentum einer Immobilie

SELECT ?objectLabel ?mass 
WHERE { 
    ?object wdt:P397 wd:Q525. # the object should have the sun as parent astronomical body 
    ?object wdt:P31 ?status. 
    ?object wdt:P2067 ?mass. 

    # Here are the accepted object status 
    VALUES ?status {wd:Q128207 wd:Q121750 wd:Q1319599}. # terrestrial planet, gas giant, ice giant 

    # automatically use the english label for ?xLabel variables 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} 

ich, dass der mass Wert gefunden in einem bestimmten unit, yottagram im Falle der Erde gegeben . Wie kann ich auf diese Informationen zugreifen?

Ich habe versucht, so etwas wie hinzufügen:

?mass wdt:P2237 ?mass_unit. 

Aber expectedly, das funktioniert nicht, weil ?mass eine ganze Zahl ist, nicht ein Objekt der Masse der Erde verweist. Nutzung der Eigenschaft, sich selbst als Subjekt weder funktioniert nicht:

?object wdt:P2067 ?mass. 
wd:P2067 wdt:P2237 ?massUnit. 

Diese returns alle Tupel mit allen verfügbaren Einheiten. (Erde ist im Zusammenhang mit 5972,37 Kilogramm 5.972,37 yottagrams, 5972,37 Sonnenmasse, etc.)

Auch Verkettungs die Eigenschaften führt zu no results:

?object wdt:P2067/wdt:P2237 ?massUnit. 

Ich stelle mir vor, dass ich verwenden müssen, nicht die Immobilie selbst, aber eine Instanz davon verbindet spezifisch die Erde und die ganze Zahl, die ihre Masse beschreibt.

Zugriff auf die Geräteinformationen? (im Falle der Erde, Yottagram)

Antwort

3

Wie Wikidata in RDF dargestellt wird (und damit in SPARQL) auf MediaWiki.org Seite Wikibase/Indexing/RDF Dump Format beschrieben.

Der relevante Teil ist, dass in Ihrem Fall wdt:P2067 gibt Ihnen direkt nur den Wert, aber wenn Sie stattdessen p:P2067 verwenden, können Sie die ganze Anweisung bekommen. Von dort können Sie psv:P2067 verwenden, um einen Wertknoten zu erhalten. Und von dort können Sie wikibase:quantityAmount verwenden, um die Masse zu erhalten (genau wie Sie könnten mit wdt:P2067), aber Sie können auch wikibase:quantityUnit verwenden, um die Entität zu erhalten, die die Einheit darstellt.

So könnte die ganze Abfrage wie folgt aussehen:

SELECT ?objectLabel ?mass ?massUnitLabel 
WHERE { 
    ?object wdt:P397 wd:Q525. # the object should have the sun as parent astronomical body 
    ?object wdt:P31 ?status. 

    ?object p:P2067/psv:P2067 ?massValue. 
    ?massValue wikibase:quantityAmount ?mass. 
    ?massValue wikibase:quantityUnit ?massUnit. 

    # Here are the accepted object status 
    VALUES ?status {wd:Q128207 wd:Q121750 wd:Q1319599}. # terrestrial planet, gas giant, ice giant 

    # automatically use the english label for ?xLabel variables 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} 

Wenn Sie wollten, könnten Sie die ?massValue Variable eliminieren, indem Sie den folgenden Code:

?object p:P2067/psv:P2067 [ 
    wikibase:quantityAmount ?mass; 
    wikibase:quantityUnit ?massUnit ] 
0

RDF-Literale werden von XSD-Datentypen eingegeben, und SPARQL datatype() kann verwendet werden, um den Typ zu finden. Also versuchen Sie dies in Ihrer SELECT Anweisung den Typen für ?mass zu finden:

SELECT ?objectLabel ?mass (datatype(?mass) AS ?masstype) 
.... 
+1

Ich glaube nicht, diese Antworten OPs Frage. Je nach Frage ist der Wert eine ganze Zahl, aber OP möchte wissen, welche Einheit tatsächlich verwendet wird. Also der Wert könnte 42 sein, aber OP will "42 von was?" –

+0

42 von xsd: ganze Zahl ist auf mögliche Antwort. – scotthenninger

+1

Die Masse eines Objekts ist nicht 42 ganze Zahlen, es ist 42 kg (zum Beispiel). Sehen Sie sich zum Beispiel den Wikidata-Eintrag für [Earth] (https://www.wikidata.org/wiki/Q2) an. Im Eintrag für Masse heißt es "5,97 ± 0,01 Yottagram".OP fragt, wie yottagram abgerufen werden soll. Ich hätte dies mit RDF durch etwas wie: dargestellt: Masse: Masse [: Ausdehnung 5.97; : Einheit: Yottagram] '. Es ist nicht klar, wie Wikidata dies codiert, aber es scheint in den Daten in irgendeinem Format vorhanden zu sein. Ist das in der RDF-Ansicht der Daten verfügbar, und wenn ja, wie kann mit SPARQL abgefragt werden? –