Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sparql——通过返回空响应进行排序_Sparql_Dbpedia - Fatal编程技术网

sparql——通过返回空响应进行排序

sparql——通过返回空响应进行排序,sparql,dbpedia,Sparql,Dbpedia,我是SPARQL新手,正在尝试一个简单的查询,该查询的末尾有ORDERBY,我的查询工作正常,但当我在末尾添加ORDERBY时,我得到了空响应。你能告诉我我做错了什么吗 工作正常: 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://dbpedi

我是SPARQL新手,正在尝试一个简单的查询,该查询的末尾有ORDERBY,我的查询工作正常,但当我在末尾添加ORDERBY时,我得到了空响应。你能告诉我我做错了什么吗

工作正常:

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). } 

谁能告诉我我做错了什么

您可以使用尝试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

请注意,该查询中的某些结果具有一些您可能没有预料到的值。e、 g

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
现在,当我将
orderby?age
添加到查询中时,我得到了一条相当描述性的错误消息,它以:

Virtuoso 22003错误SR087:日期时间算术参数错误,无法从值类型189(整数)中减去类型211(日期时间)的值

在深入研究了其中一些值的数据类型之后,看起来在
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 )
}
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 )
}
看起来
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>

我尝试进行了一系列数据类型转换,以确保生成的值具有适当的数据类型,并以以下查询结束:

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 )
}
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 )
}

它的结果表明,所有的计算都是正确的,但如果我们在其中添加一个
过滤器(?age>100)
,我们会得到很多年龄小于100岁的数据,虽然所有
年份
值都表明我们得到了正确的条目,但
年龄
值根本不正确。例如:

private http://dbpedia.org/resource/UCLA_Graduate_School_of_Education_and_Information_Studies
now     2013
then    1881
age     66

完全错了。

是的,谢谢,但我正在尝试按升序排列查询结果,因此当我将bind与order By结合使用时,会得到一个错误,即响应为空。这对您的问题提出了一些问题,因此我在上面对其进行了评论(而不是在这里对我的答案进行了评论)。当我运行您在DBpedia公共端点上发布的第二个查询时(将
dbpediaowl
更改为
dbpediaowl
,以匹配它们预定义的前缀),我不会得到空响应;我得到“datetime算术的参数错误,不能从值类型189(整数)中减去类型211(datetime)的值。”“您是如何运行查询的,空响应是什么意思?您能澄清一下您是如何运行查询的吗?正如我在回答中所解释的,当我运行这个查询时,我没有得到一个空的响应,我实际上得到了一个错误。如果您可以提供更多关于如何实际运行此查询的代码,也许可以确定其他一些答案。
private http://dbpedia.org/resource/UCLA_Graduate_School_of_Education_and_Information_Studies
now     2013
then    1881
age     66