2017-01-07 263 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吗?如果是这样,只需用它替换变量“?item”。 – AKSW

+0

在这种情况下QID = Q937,替换?项不起作用 – Alexan

+0

您必须在SPARQL中使用完整的URI或前缀。只是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% )但是,这将是一个混乱的解析,没有我知道的好处。 – maxlath

+0

这个json非常大。我如何获得唯一所需的信息,例如:标签,说明,生日,图像链接和维基百科链接? – Alexan

1

您可以使用已知的QID BIND

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

是的,它的工作。我应该使用BIND还是FILTER?哪个更好? – Alexan