使用从另一个查询中获取的资源标识符通过SPARQL查询wikidata

使用从另一个查询中获取的资源标识符通过SPARQL查询wikidata,sparql,wikidata,Sparql,Wikidata,我想通过将从我的本体中获取的wikidata资源id赋给一个变量来查询带有服务关键字的wikidata。我将wikidata id作为字符串存储在我的本体中。通常,您需要使用前缀(例如wd:Q1048)告诉wikidata endpoint您想要哪个项目。在这里,我需要使用一个变量来实现这一点。Wikidate没有用于存储实体ID的属性。因此,我需要将Id作为查询中的主题。在?wid中,存储的变量为“wd:Q1048”。它是一个字符串,因此无法识别为wikidata的元素。有什么办法可以让我用这

我想通过将从我的本体中获取的wikidata资源id赋给一个变量来查询带有服务关键字的wikidata。我将wikidata id作为字符串存储在我的本体中。通常,您需要使用前缀(例如wd:Q1048)告诉wikidata endpoint您想要哪个项目。在这里,我需要使用一个变量来实现这一点。Wikidate没有用于存储实体ID的属性。因此,我需要将Id作为查询中的主题。在?wid中,存储的变量为“wd:Q1048”。它是一个字符串,因此无法识别为wikidata的元素。有什么办法可以让我用这种方式查询维基数据吗

PREFIX lit: <http://purl.org/net/cnyt-literature#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX wd: <http://www.wikidata.org/entity/>

SELECT distinct ?writer ?play ?character  ?wid ?child WHERE {
    {
        ?writer lit:writerOf ?play .
        ?play lit:character ?character .
        ?character lit:wikidataUri  ?uri . BIND (IRI(CONCAT("wd:",?uri)) as ?wid)
    }
    SERVICE <http://query.wikidata.org/sparql> {
        ?wid p:P40 ?child
    } 
}
LIMIT 50
前缀点亮:
前缀p:
前缀wd:
选择不同的?编剧?播放?角色?wid?孩子,在哪里{
{
?writer Light:writerOf?播放。
?播放灯光:角色?角色。
?字符lit:wikidataUri?uri.BIND(IRI(CONCAT(“wd:”,?uri))作为?wid)
}
服务{
?wid p:P40?儿童
} 
}
限制50

问题是您将前缀放在引号中-这意味着它是一个包含字符
wd:
的字符串,而没有其他字符<代码>绑定(IRI(CONCAT(wd:,?uri))as?wid)我试过了,当我编写服务部件并查看您的建议结果时,wid返回空。当我放回服务部件时,它会从wikidata返回不相关的实体。wid值导致与uri不同的值,例如wd:Q5050,而uri是Q1048。好的,您必须将
str
函数包装在前缀->
BIND(IRI(CONCAT(str(wd:),?uri))作为?wid)
注意,提供一些示例数据使我们的测试更容易-我不想自己生成数据来解释为什么其他人的查询不起作用。下次请考虑好,谢谢。下次我会提供样本数据。好的。请随意在这里提供答案并自己接受。这将有助于其他搜索类似主题的人获得更高的排名。问题是您将前缀放在引号中-这意味着它是一个包含字符
wd:
的字符串,除此之外没有其他字符<代码>绑定(IRI(CONCAT(wd:,?uri))as?wid)我试过了,当我编写服务部件并查看您的建议结果时,wid返回空。当我放回服务部件时,它会从wikidata返回不相关的实体。wid值导致与uri不同的值,例如wd:Q5050,而uri是Q1048。好的,您必须将
str
函数包装在前缀->
BIND(IRI(CONCAT(str(wd:),?uri))作为?wid)
注意,提供一些示例数据使我们的测试更容易-我不想自己生成数据来解释为什么其他人的查询不起作用。下次请考虑好,谢谢。下次我会提供样本数据。好的。请随意在这里提供答案并自己接受。这将有助于其他搜索类似主题的人,因为已回答的主题将排名更高。