标签: wikidata

使用变量键名访问JSON项

以下是我的JSON数据,恰好是维基数据提供的格式,虽然为了清晰起见而大大减少了.

{
"entities": {
    "Q200405": {
        "id": "Q200405",
        "type": "item",
        "claims": "Cheese"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图在c#中访问这些数据.我的问题是Q200405是动态的 - 它基本上是我正在检索的记录号.例如,另一页可能会给我

{
"entities": {
    "Q123456": {
        "id": "Q123456",
        "type": "item",
        "claims": "Lemon"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我最好的尝试是使用Json.NET(Newtonsoft);

json = "{\"entities\":{\"Q200405\" {\"id\":\"Q200405\",\"type\":\"item\",\"claims\":\"Cheese\"}}}";

var Query = JsonConvert.DeserializeObject<dynamic>(json);
string entities = Query.entities.ToString();

Query = JsonConvert.DeserializeObject<dynamic>(entities);
string entity = Query.Q200405.ToString();

Query = JsonConvert.DeserializeObject<dynamic>(entity);
string id = Query.id.ToString();
string claims = Query.claims.ToString();
Run Code Online (Sandbox Code Playgroud)

可行,但显然硬编码Query.Q200405.ToString()不是理想的解决方案!我可能不应该做多个Deserialize语句来深入研究数据?

我的问题是将上述JSON格式读入ac#程序的最佳方法是什么?

c# mediawiki json wikidata wikidata-api

4
推荐指数
1
解决办法
3724
查看次数

我怎样才能使维基达塔能够建立类似Siri的服务?

我想讨论这种类似Siri的服务的第一部分.

理想情况下,我希望能够查询以下内容:

  1. "社交网络"
  2. "贝多芬"
  3. "坏血泰勒斯威夫特"

得到这样的结果:

{type:"film"}

{type:"composer"}

{type:"song"}
Run Code Online (Sandbox Code Playgroud)

我什么都不关心,我发现维基百科以外的描述,图像和一般信息完全无用.我将维基数据视为一种元数据服务,它可以为我提供我搜索的文本的语义.

所有数据结构都有"类型"或某种与其含义有关的属性吗?是否有所有类型的列表?对于具有双重含义的实体,如"apple",是否有建议功能?最后,如何发送文本查询并读取响应数据结构的"类型"?

我知道我没有提供任何代码,但我真的无法理解维基数据的API.我到处搜索,所有我找不到的是一些残缺的获取示例,并搞砸了Objective-C HTML解析器.我甚至无法让他们的"示例查询"页面工作,因为我不明白的一些错误.

真的新手不友好,充满了沉重的术语.

mediawiki json wikipedia-api mediawiki-api wikidata

4
推荐指数
1
解决办法
590
查看次数

sparql wikidata标识符引用

我使用KMDb人员ID从wikidata数据库中检索信息.结果是三行,包含三个IMDB代码.如果我看女演员wikidata网页(https://www.wikidata.org/wiki/Q7496795),我可以看到其中只有一个有参考.

我怎样才能只选择这个项目?是否可以将引用显示为sparql查询的输出?

非常感谢

PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd:       <http://www.wikidata.org/entity/> 
PREFIX wdt:      <http://www.wikidata.org/prop/direct/>
PREFIX rdfs:     <http://www.w3.org/2000/01/rdf-schema#>
PREFIX p:        <http://www.wikidata.org/prop/>
PREFIX v:        <http://www.wikidata.org/prop/statement/>
PREFIX pr: <http://www.wikidata.org/prop/reference/>

SELECT ?wikidata ?imdb ?Q ?prop ?value
       WHERE {
   ?wikidata wdt:P345  ?imdb .
   ?wikidata wdt:P31   wd:Q5 .
    ?wikidata wdt:P1649 "00003964" . # KMDb person ID
}
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

sparql wikidata

4
推荐指数
1
解决办法
595
查看次数

如何使用Wikidata和SPARQL查询人员?

我是SPARQL和Wikidata的新手。我试图让我的用户搜索Wikidata中的人员,并且仅限人员,我不希望任何结果成为摩托车品牌或任何东西。

所以我在这里玩以下查询:

SELECT ?person ?personLabel WHERE {
  ?person wdt:P31 wd:Q5.
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en".
    ?person rdfs:label ?personLabel .
  }
  FILTER regex(?personLabel, "Albert", "i").
}
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

尽管这最终会返回结果,但它几乎不如我希望的那样快。请注意,如果您使用更大的名称尝试上述查询,它也会超时。

此处找到的所有示例查询都假定您已经有一个要从其查询的实体。就我而言,您什么也没做,因为我正在尝试查询具有特定名称的人。我可能对正在使用的数据库的内部运行方式做出了一些错误的假设,但是我不确定它们到底是什么。

有任何想法吗?

sparql wikidata

4
推荐指数
2
解决办法
1390
查看次数

如何从wikidata检索别名

我正在尝试从维基数据中检索一些信息,我发现有趣的是收集声音的别名.例如,Francesco Totti也被称为il Capitano或er Pupone: 弗朗切斯科托蒂的维基达塔

我正试图用这个sparql查询检索所有系列的足球运动员:

SELECT ?subject ?nomeLabel ?cognomeLabel ?subjectLabel WHERE {
  ?subject wdt:P31 wd:Q5.

  ?subject p:P54 ?team .
  ?team ps:P54 wd:""" + team_code +""" .
  FILTER NOT EXISTS { ?team pq:P582 ?end
    }
OPTIONAL{
  ?subject wdt:P735 ?nome .
  ?subject wdt:P734 ?cognome .
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}
ORDER BY (?cognomeLabel)
Run Code Online (Sandbox Code Playgroud)

如何修改我的查询以获取别名?谢谢

sparql wikidata

4
推荐指数
2
解决办法
1193
查看次数

WikiData端点中的路径查询?

考虑以下片段

ASK WHERE { wd:Q734774 wdt:P31 wd:Q3918. }
Run Code Online (Sandbox Code Playgroud)

在WikiData中可以正常工作。我想在此代码段中使用一些路径语法。具体来说,我想限制路径中使用“ wdt:P31”的次数。根据准则,这应该是正确的语法:

ASK WHERE { wd:Q734774 wdt:P31{,3} wd:Q3918. }
Run Code Online (Sandbox Code Playgroud)

但这给了我奇怪的错误信息。有任何想法吗?

sparql wikidata wikidata-api

4
推荐指数
1
解决办法
162
查看次数

SPARQL Wikidata - 检索维基媒体类别的成员

我想检索 Wikimedia Category 的成员American rock singers。我必须使用维基数据,它告诉我用P31Q4167836。下面的查询仅返回有关“类别”页面的信息,而不返回有关其成员的信息。

还有其他方法可以检索维基媒体类别的成员吗?我还尝试使用术语dcterms:subject,我在 DBpedia 中成功使用了该术语,但在 Wikidata 中,查询返回空结果。

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix wd: <http://www.wikidata.org/entity/>
prefix wikibase: <http://wikiba.se/ontology#>
prefix bd: <http://www.bigdata.com/rdf#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?subject ?predicate ?object ?objectLabel WHERE {
     ?subject ?predicate ?object ; wdt:P31 wd:Q4167836 ; 
     rdfs:label "Category:American rock singers"@en 
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" .}
}
Run Code Online (Sandbox Code Playgroud)

在这里试试

member sparql categories wikimedia wikidata

4
推荐指数
1
解决办法
425
查看次数

有些城市不是城市或大城市的实例?维基数据的奇怪行为

在检查官方示例查询“大陆、国家、地区和首都”的结果(在https://query.wikidata.org/ 上,为了您的方便,这里仅限于德国:链接),我注意到德国联邦的一些首都状态丢失。例如威斯巴登作为黑森州的首府。我注意到与其他一些城市相比,威斯巴登是 的一个实例big city,但不是city(参见https://www.wikidata.org/wiki/Q1721)。我能够还包括那些的子类城市来缓解这一问题city,通过改变线路17 ?city wdt:P31/wdt:P279? wd:Q515
仍然失踪的四个城市之一是萨克森-安哈尔特州的首府马格德堡。
诊断查询

SELECT ?cityLabel ?props
WHERE {
  ?city wdt:P31 ?props.
  FILTER(?city = wd:Q1733 || ?city = wd:Q1726).
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
Run Code Online (Sandbox Code Playgroud)

显示 Magdeburg 甚至不是 的一个实例city,尽管它显然是根据其 Wikidata 页面https://www.wikidata.org/wiki/Q1733

我是 Wikidata 和 SPARQL 的新手。然而,这对我来说似乎是错误的。我该怎么做才能获得德国联邦州的所有首都?这种行为的原因是什么?

sparql wikidata

4
推荐指数
1
解决办法
566
查看次数

SPARQL 问题:如何从 Wikidata 返回属性标签和关联的日期限定符

我正在尝试为一组担任过政治职务的人(爱丁堡大学校友)返回结果。我想返回所担任职位的标题标签,以及每个职位的开始和结束日期,许多人担任多个职位。如果这个人只担任一个职位,我似乎能够找到其中一个,或者可以让它发挥作用,但无法让两者走到一起,因为有多个办公室。

我当前的查询版本如下。这将为我提供开始和结束日期,但如果政治办公室(例如英国 [x] 议会成员)将返回标签,而不是标签, ?officeLabel 返回一个值,例如:statement/Q4668868-E3734C7D-40F0-4D4A-8208-E3D6B8C944CB

SELECT DISTINCT ?alumni ?fullName ?roleLabel ?officeLabel ?start ?end WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?alumni wdt:P69 wd:Q160302.
  ?alumni rdfs:label ?fullName.
  ?alumni wdt:P106 ?role.
  #Use Values to separate out politicians - Q82955
  VALUES (?role) {
    (wd:Q82955)
  }
  #Select only where position of office is stated but make dates optional
  ?alumni p:P39 ?office.
  OPTIONAL { ?office pq:P580 ?start. }
  OPTIONAL { ?office pq:P582 ?end. }
  FILTER(LANGMATCHES(LANG(?fullName), "en"))
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-ca")) …
Run Code Online (Sandbox Code Playgroud)

properties qualifiers sparql wikidata

4
推荐指数
1
解决办法
374
查看次数

POST(非 GET)维基数据查询

我正在按照这些说明提交 SPARQL 查询,更喜欢 POST 方法,因为查询可能很长。但即使 GET 有效,它似乎也失败了 - 有什么方法可以使 POST 查询有效?

sparql = <<END
SELECT ?item ?itemLabel 
WHERE 
{
    ?item wdt:P31 wd:Q146.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
END

# Fails with 405 Not writable
resp = Excon.post('https://query.wikidata.org/sparql', body: "query=#{URI::encode(sparql)}")
puts resp.status, resp.body

# Works with 200
resp = Excon.get("https://query.wikidata.org/sparql?query=#{URI::encode(sparql)}")
puts resp.status, resp.body
Run Code Online (Sandbox Code Playgroud)

我也试过发送"Content-Type" => "application/x-www-form-urlencoded",但没有运气。

ruby sparql wikidata

4
推荐指数
1
解决办法
293
查看次数