2017-10-10 101 views
0

我试图用CONSTRUCT得到国家的名单和他们的首都并解析结果,早在龟格式查询DBpedia中与SPARQL:如何去掉括号在DBpedia中查询结果SPARQL?

CONSTRUCT { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country. 
} WHERE { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country 
} 

然而,当有括号()_在国家名称中,结果不正确地使用前缀。

例子:

dbr:Virginia dbo:capital <http://dbpedia.org/resource/Richmond,_Virginia> 

是否有解决这个问题的任何自动化的方式?我真的不期待手动修复此...

+0

什么你通过固定意思?你如何处理括号,以及如何处理',_'?其他情况下没有前缀表单的情况怎么样?你知道为什么这些URI不能以前缀形式序列化吗? – AKSW

+0

此外,为什么你想要一切前缀? CONSTRUCT查询只是以指定的RDF序列化格式返回一组RDF三元组。为什么你不能简单地在客户端代码中工作? – AKSW

+0

我不明白为什么,但这会非常复杂。你必须(1)走资源'r'并修改其URI'STR(R)'一些功能'F'导致字符串'S = F(STR(R))'和(2)此字符串必须使用'uri(s)'将其转换为URI。函数f的定义取决于你。 – AKSW

回答

0

说实话,我不明白你为什么要做到这一点,它仍然是开放的,你希望如何处理不属于的情况下(可以” t be)以Turtle语法为前缀。但是,给你一个大概的了解:

CONSTRUCT { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country. 
} WHERE { 
    ?country dbo:capital ?city_tmp. 
    ?country a dbo:Country 
    ## here you would handle the "fix", e.g. use a regex and find some replacement 
    BIND(uri(REPLACE(str(?city_tmp), ",_", "_", "i")) AS ?city) 
} 

您可以在我使用的只是一个虚拟的正则表达式匹配,_和替换字符串_查询看到。 例如,http://dbpedia.org/resource/Nancy,_France将被取代,以dbr:Nancy_France