2017-01-07 10 views
0

я могу получить товар и его свойства по меткам:Получить свойства по QID?

SELECT distinct ?item ?itemLabel ?itemDescription 
(SAMPLE(?DR) as ?DR) (SAMPLE(?article)as ?article) 
WHERE {?item wdt:P31 wd:Q5. 
?item ?label "Einstein"@en 
OPTIONAL{?item wdt:P569 ?DR .} 
?article schema:about ?item . 
?article schema:inLanguage "en" . 
?article schema:isPartOf <https://en.wikipedia.org/>. 
OPTIONAL{?item wdt:P570 ?RIP .} 
OPTIONAL{?item wdt:P18 ?image .} 
SERVICE wikibase:label 
{ bd:serviceParam wikibase:language "en". }} 
GROUP BY ?item ?itemLabel ?itemDescription 

Посмотреть на Wikidata Query Services.

Как я могу сделать то же самое с использованием QID вместо метки?

+0

Что такое QID? Это URI Альберта Эйнштейна? Если это так, просто замените переменный «элемент» на него. – AKSW

+0

в этом случае QID = Q937, заменяющий? Элемент не работает – Alexan

+0

Вы должны использовать полные URI или префиксы в SPARQL. Просто Q937 не является URI, это будет http://www.wikidata.org/entity/Q937. И тогда вы можете удалить первые два тройных паттерна. См. Мой ответ ниже. – AKSW

ответ

2

Использование URI вместо переменной ?item получит информацию, основанную на сущности Альберта Эйнштейна:

PREFIX schema: <http://schema.org/> 
PREFIX bd: <http://www.bigdata.com/rdf#> 
PREFIX wdt: <http://www.wikidata.org/prop/direct/> 
PREFIX wikibase: <http://wikiba.se/ontology#> 

SELECT DISTINCT ?item ?itemLabel ?itemDescription (SAMPLE(?DR) AS ?DRSample) (SAMPLE(?article) AS ?articleSample) 
WHERE 
    { ?article schema:about  ?item ; 
       schema:inLanguage "en" ; 
       schema:isPartOf <https://en.wikipedia.org/> 
    FILTER (?item = <http://www.wikidata.org/entity/Q937>) 
    OPTIONAL 
     { ?item wdt:P569 ?DR } 
    OPTIONAL 
     { ?item wdt:P570 ?RIP } 
    OPTIONAL 
     { ?item wdt:P18 ?image } 
    SERVICE wikibase:label 
     { bd:serviceParam 
        wikibase:language "en" 
     } 
    } 
GROUP BY ?item ?itemLabel ?itemDescription 
+0

ваш ответ может быть применен к моему другому вопросу: http://opendata.stackexchange.com/questions/10334/get -items-properties-know-qid – Alexan

1

Если у вас уже есть QID сущности вы ищете и просто искать его свойства и этикетки, вы лучше с помощью Wikidata API wbgetentities module

В А. Эйнштейна (Q937) случае, что даст следующие API вызова: https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q937&format=json

+0

, но могу ли я использовать SPARQL? – Alexan

+0

вы могли бы сделать что-то вроде 'wd: Q937? Property? Value' ([try it] (https://query.wikidata.org/#SELECT%20%3Fproperty%20%3FpropertyLabel%20%3Fvalue%20%3FvalueLabel % 20WHERE% 20% 7B% 0A% 20% 20wd% 3AQ937% 20% 3Fproperty% 20% 3Fvalue% 20.% 0A% 20% 20SERVICE% 20wikibase% 3Alabel% 20% 7B% 0A% 20% 20% 20% 20bd% 3AserviceParam% 20wikibase% 3Alanguage% 20% 22en% 22% 20.% 0A% 20% 20% 20% 7D% 0A% 7D)), но это было бы бесполезным для анализа, без каких-либо преимуществ, о которых я знаю. – maxlath

+0

этот json очень большой. Как я могу получить только требуемую информацию, например: ярлык, описание, день рождения, ссылку на изображение и ссылку на Википедию? – Alexan

1

Вы можете использовать уже известную QID с помощью BIND:

BIND(wd:Q937 AS ?item). 
... 
+0

Да, это работает. Должен ли я использовать BIND или FILTER? Что лучше? – Alexan