我有一个正在运行的 Wikibase 实例。我能够成功地使用 Wikidata 运行联合查询。我有一些比较这样的标签的查询:
PREFIX xwdt: <http://www.wikidata.org/prop/direct/>
PREFIX xwd: <http://www.wikidata.org/entity/>
PREFIX xpq: <http://www.wikidata.org/prop/qualifier/>
PREFIX xps: <http://www.wikidata.org/prop/statement/>
PREFIX xp: <http://www.wikidata.org/prop/>
select ?item ?wditem ?itemLabel ?wid ?wditemlabel
where {
?item wdt:P17 wd:Q39.
?item wdt:P31 wd:Q5.
optional {
?item wdt:P14 ?wid .
}
?item rdfs:label ?itemLabel.
SERVICE <https://query.wikidata.org/sparql> {
?wditem xwdt:P27 xwd:Q258.
?wditem xwdt:P106 xwd:Q937857.
?wditem rdfs:label ?wditemlabel.
filter(LANGMATCHES(LANG(?wditemlabel), "en")).
}
filter(contains(?wditemlabel, ?itemLabel))
}
group by ?item ?itemLabel ?wid ?wditem ?wditemlabel
但是,以上内容可以通过标签进行匹配和匹配:
1)我最初filter(contains(?wditemlabel, ?itemLabel))
在 SERVICE 子句中,它没有返回任何结果。但是,如果我对其中一个变量(例如filter(contains("test string", ?itemLabel))
)使用静态字符串,它似乎可以工作。为什么比较变量和字符串而不是两个变量时会起作用?
2)我希望查询在最后没有“分组依据”的情况下工作。但看起来没有它,会发生某种交叉连接/笛卡尔积,并且每个匹配的项目都会重复总次数(n * n)。查询的哪一部分导致了这种情况?