gpt4 book ai didi

sparql --通过返回空响应排序

转载 作者:行者123 更新时间:2023-12-04 04:41:36 24 4
gpt4 key购买 nike

我是 SPARQL 的新手,并尝试了一个简单的查询,该查询最后有 ORDER BY,我的查询工作正常,但是当我在最后添加 ORDER BY 时,我得到了空响应。你能告诉我我在这里做错了什么吗?

工作正常:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpediaowl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbpprop: <http://dbpedia.org/property/>



SELECT * WHERE
{
{?private dbpediaowl:city dbpedia:Los_Angeles} UNION {?private dbpprop:location dbpedia:Los_Angeles}

?private dbpprop:established ?yr.
bind(year(now())-?yr as ?age).
FILTER (?age > 100). }

与 ORDER BY 相同的查询返回空响应:
  SELECT * WHERE 
{
{?private dbpediaowl:city dbpedia:Los_Angeles} UNION {?private dbpprop:location dbpedia:Los_Angeles}

?private dbpprop:established ?yr.
bind(year(now())-?yr as ?age).
FILTER (?age > 100) . }
ORDER BY ?age

谁能告诉我我做错了什么?

最佳答案

您可以使用 public DBpedia endpoint 尝试 SPARQL 查询。 .在尝试重新创建您的查询时,我通过以下查询成功:

select * where {  
{
?private dbpedia-owl:city dbpedia:Los_Angeles
}
UNION
{
?private dbpprop:location dbpedia:Los_Angeles
}
?private dbpprop:established ?year.
bind(year(now())-?year as ?age).
filter (?age > 100).
}
limit 10

SPARQL results

请注意,该查询中的某些结果具有一些您可能没有预料到的值。例如,
private                                             year                                        age
... ... ...
http://dbpedia.org/resource/Harvard-Westlake_School "''Harvard School for Boys: 1900"@en 2013
http://dbpedia.org/resource/Harvard-Westlake_School "Fully Merged as Harvard-Westlake: 1991"@en 2013
http://dbpedia.org/resource/Harvard-Westlake_School "Westlake School for Girls: 1904''"@en 2013

现在,当我添加 order by ?age到查询,我得到一个相当描述性的错误消息,它以以下开头:

Virtuoso 22003 Error SR087: Wrong arguments for datetime arithmetic, can not subtract value of type 211 (DATETIME) from value type 189 (INTEGER).



在深入研究了其中一些值的数据类型之后,看起来 now() 的数据类型发生了一些非常奇怪的事情。 (但看起来您的查询使用的是正确的)。看看这个查询:
select ?now ?nowtype where { 
values ?value { <urn:ex:value> } # only here so that there are non-bind variables
bind( now() as ?now )
bind( datatype(now()) as ?nowtype )
}

SPARQL results

结果是:
now                               nowtype
2013-09-13T21:11:11.000005+02:00 2013-09-13T21:11:11.000005+02:00

它看起来像 now() 返回的文字的数据类型和时间一样! now 应该返回 xsd:dateTime虽然!为了进行比较,使用 Jena 的 ARQ 运行的相同查询返回:
now                                                                          nowtype
"2013-09-13T15:24:10.908-04:00"^^<http://www.w3.org/2001/XMLSchema#dateTime> <http://www.w3.org/2001/XMLSchema#dateTime>

这里发生了一些奇怪的事情,我还没有能够构建一个有效的查询。但是,我建议您联系他们的 mailing list并直接询问他们,因为这在您的 SPARQL 中看起来不是问题。

额外的奇怪结果

这个查询很奇怪,因为 theYear 的所有值它产生的东西确实至少是 100 年前的,这些年代根本没有任何意义。
select ?private ?theYear ?age where { 
values ?location { dbpedia-owl:city dbpprop:location }
?private ?location dbpedia:Los_Angeles ;
dbpprop:established ?year .
bind( if( datatype(?year) = xsd:int, xsd:integer(?year), year(now()) ) as ?theYear )
bind( year(now()) - ?theYear as ?age )
filter( ?age > xsd:integer(100) )
}
order by ?age

results

我尝试进行大量数据类型转换以确保生成的值具有适当的数据类型,并最终得到以下查询:
select * where { 
values ?location { dbpedia-owl:city dbpprop:location }
?private ?location dbpedia:Los_Angeles ;
dbpprop:established ?established .

bind( xsd:int(year(now())) as ?nowYear )
bind( if( datatype(?established) = xsd:dateTime || datatype(?established) = xsd:date,
year(xsd:dateTime(?established)),
if( datatype(?established) = xsd:integer || datatype(?established) = xsd:int,
xsd:int(?established),
?nowYear ) )
as ?year )
bind( ?nowYear - ?year as ?age )
}

results

它的结果表明一切都被正确计算,但是如果我们添加一个 filter( ?age > 100 )到它,我们得到 these results其中很多年龄小于100,而所有 year值表明我们得到了正确的条目, age值根本不正确。例如,
private http://dbpedia.org/resource/UCLA_Graduate_School_of_Education_and_Information_Studies
now 2013
then 1881
age 66

完全错误。

关于sparql --通过返回空响应排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18792943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com