Sparql query gone wrong cause of incorrect geo onto + inexistence in results of a property I required(SPARQL查询出错,原因是我所需属性的结果中存在不正确的地理位置+)
问题描述
我使用php的ARC2库来发出SPARQL查询,我被这个问题卡住了(我不认为这与lib有什么关系)。
此查询在我的应用程序和DBpedia Snorql:
中运行良好PREFIX dbo:<http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geo: <http://www.geonames.org/ontology#>
SELECT * WHERE {
?c rdf:type dbo:Country;
foaf:name "someCountryName"@en.
}
另一方面,此查询不起作用:
SELECT * WHERE {
?c rdf:type dbo:Country;
foaf:name "someCountryName"@en;
geo:lat ?lat.
}
注意:使用与上面列出的前缀相同的前缀完成查询。
我只需要了解一个国家的最新情况(&A)。我也可以试试FreeBase,但我真的需要让它在这里工作。第二个查询在Snorql中工作,不明白为什么它不能在我的应用程序中工作?
如有任何帮助,我们将不胜感激!
IrinaM
注意:本文由@推荐答案提供,但由于8小时的限制,本文以a revision的形式进入问题。现在已经很晚了,@IrinaM帖子作为回答的建议还没有付诸实施。以下是包含文本略微编辑的CW答案。
问题中的代码有几个错误。
第2个查询(没有"工作"的那个)将返回几个结果。如果我用
foaf:name "Romania"
搜索国家,它会返回"Communist Romania"
、"Wallachian Romania"
、"Romania"
等。在这些结果中,只有一个国家会有geo:lat
和geo:long
。 基本上,如果所有结果都不满足必需的属性,则不会返回任何结果。geo
使用的本体错误;应该是<http://www.w3.org/2003/01/geo/wgs84_pos#>
。需要过滤掉其他奇怪的结果,以便只保留所需的唯一结果。在这种情况下,在
dbpedia-owl:dissolutionDate
的不存在之后进行筛选。 使用FILTER (?name="someCountryName"^^xsd:string)
无法精确匹配foaf:name。
以下代码可成功检索给定国家/地区的纬度值和经度值(请注意,在搜索正确的国家/地区时可能需要其他一些过滤器):
//setup prefixes
$prefixes = 'PREFIX dbo:<http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
';
//query no. 1 - find out "right" country - hoping for a unique result
$q1 = $prefixes.'SELECT ?c WHERE {
?c rdf:type dbo:Country;
foaf:name "'.$userPreferences->country.'"@en.
OPTIONAL {?c dbo:dissolutionDate ?x}
FILTER(!bound(?x))}';
//note: $userPreferences->country represents a country entered by the user in an input
//query no. 2 - find out long & lat
$q2 = $prefixes.'SELECT * WHERE {
<'.$countryReturned.'> geo:lat ?lat;
geo:long ?long.
}';
//note: $countryReturned represents the URI of the "unique" country my 1st query
//retrieved, we use it directly.
对于那些热衷于ARC2 PHP库的人来说,下面是如何进行查询的(注意:不要忘记包含ARC2.php文件):
$dbpediaEndpoint = array('remote_store_endpoint' =>'http://dbpedia.org/sparql');
$dbpediaStore = ARC2::getRemoteStore($dbpediaEndpoint);
$rows1 = $dbpediaStore->query($q1,'rows');
var_dump($rows1); //to see quick results
这篇关于SPARQL查询出错,原因是我所需属性的结果中存在不正确的地理位置+的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:SPARQL查询出错,原因是我所需属性的结果中存在不正确的地理位置+
基础教程推荐
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01