SPARQL划:dateTime平等
-
21-09-2019 - |
题
我有一个SPARQL查询:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX person: <http://www.myOntDomain/person#>
PREFIX likedEvent: <http://www.myOntDomain/likedEventRule#>
PREFIX event: <http://www.myOntDomain/event#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX weather: <http://www.myOntDomain/weather#>
PREFIX eventHasSuitableWeather: <http://www.myOntDomain/eventHasSuitableWeather#>
PREFIX freeAtEvent: <http://www.myOntDomain/freeAtEventRule#>
SELECT DISTINCT ?Event ?Person ?Time
WHERE
{ ?Person rdf:type person:Person .
?Event rdf:type event:Event .
?WeatherEvent
rdf:type weather:WeatherEvent .
?WeatherType rdf:type weather:WeatherEventType .
?Person likedEvent:likedEvents ?Event ;
freeAtEvent:freeAtEvent ?Event .
?Event eventHasSuitableWeather:eventHasSuitableWeather true ;
event:eventHasDate ?Time .
?Person person:hasName ?PersonName ;
person:hasAge ?PersonAge .
?Event event:hasEventType ?EventType .
}
返回下面的结果集中在一个特定的体:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Event | Person | Time |
=====================================================================================================================================================================================================
| <http://www.myOntDomain/event#SyntheticPitchFootballMatch> | <http://www.myOntDomain/person#Ali> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/event#SerlockHolmesMovie> | <http://www.myOntDomain/person#Ali> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/event#SerlockHolmesMovie> | <http://www.myOntDomain/person#Ayse> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/event#SyntheticPitchFootballMatch> | <http://www.myOntDomain/person#Veli> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/weather#AnkaraMuseumVisit> | <http://www.myOntDomain/person#Ali> | "2010-01-19T17:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我想添加一个时间约束的选择将会发生的时间:
2010-01-19T16:00:00Z
因此我添加一个过滤器元件到我的查询,现在是:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX person: <http://www.myOntDomain/person#>
PREFIX likedEvent: <http://www.myOntDomain/likedEventRule#>
PREFIX event: <http://www.myOntDomain/event#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX weather: <http://www.myOntDomain/weather#>
PREFIX eventHasSuitableWeather: <http://www.myOntDomain/eventHasSuitableWeather#>
PREFIX freeAtEvent: <http://www.myOntDomain/freeAtEventRule#>
SELECT DISTINCT ?Event ?Person ?Time
WHERE
{ ?Person rdf:type person:Person .
?Event rdf:type event:Event .
?WeatherEvent
rdf:type weather:WeatherEvent .
?WeatherType rdf:type weather:WeatherEventType .
?Person likedEvent:likedEvents ?Event ;
freeAtEvent:freeAtEvent ?Event .
?Event eventHasSuitableWeather:eventHasSuitableWeather true ;
event:eventHasDate ?Time .
?Person person:hasName ?PersonName ;
person:hasAge ?PersonAge .
?Event event:hasEventType ?EventType .
FILTER ( ?Time = "2010-01-19T16:00:00Z"^^xsd:dateTime )
}
然而这个时间返回查询空的结果清单上的相同的本体:
-------------------------
| Event | Person | Time |
=========================
-------------------------
很明显我错过一些有关SPARQL或文件:日期时间比较,但我不能出来。如果你有一个想法,请指引我.谢谢。
更新
我用的是传执行SPARQL这是用在耶拿框架。我认为问题是关于执行不体或查询
我检查了实现 com.hp。防火.耶拿。数据类型。划.XSDDateTime和 com.hp。防火.耶拿。数据类型。划.AbstractDateTime 可以在这里找到: http://grepcode.com/file/repo1.maven.org/maven2/com.hp.hpl.jena/jena/2.6.0/com/hp/hpl/jena/datatypes/xsd
和看到这一日期时间目的是由9值:
protected final static int CY = 0, M = 1, D = 2, h = 3, m = 4, s = 5, ms = 6, utc=7, msscale=8
值msscale总是3的时候XSDDateTime目的是创建一个java。工具.日历的对象和XSDDateTime对象的分析从本体始终是零。而且比较功能检查所有这9值平等,使他们永不相等。例如,当我加过滤器的编辑查询的文本,我得到想要的结果之后,平等的检查。但当我补充过滤程序列化的两个过滤器是相同的,但是结果是不一样的。这里是一个例子两个查询,其结果立即显示在他们之后。
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX person: <http://www.myOntDomain/person#>
PREFIX likedEvent: <http://www.myOntDomain/likedEventRule#>
PREFIX event: <http://www.myOntDomain/event#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX weather: <http://www.myOntDomain/weather#>
PREFIX eventHasSuitableWeather: <http://www.myOntDomain/eventHasSuitableWeather#>
PREFIX freeAtEvent: <http://www.myOntDomain/freeAtEventRule#>
SELECT DISTINCT ?Event ?Person ?Time
WHERE
{ ?Person rdf:type person:Person .
?Event rdf:type event:Event .
?WeatherEvent
rdf:type weather:WeatherEvent .
?WeatherType rdf:type weather:WeatherEventType .
?Person likedEvent:likedEvents ?Event ;
freeAtEvent:freeAtEvent ?Event .
?Event eventHasSuitableWeather:eventHasSuitableWeather true ;
event:eventHasDate ?Time .
?Person person:hasName ?PersonName ;
person:hasAge ?PersonAge .
?Event event:hasEventType ?EventType .
FILTER ( ?Time = "2010-01-19T16:00:00Z"^^xsd:dateTime )
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Event | Person | Time |
=====================================================================================================================================================================================================
| <http://www.myOntDomain/event#SerlockHolmesMovie> | <http://www.myOntDomain/person#Ayse> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/event#SerlockHolmesMovie> | <http://www.myOntDomain/person#Ali> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/event#SyntheticPitchFootballMatch> | <http://www.myOntDomain/person#Veli> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.myOntDomain/event#SyntheticPitchFootballMatch> | <http://www.myOntDomain/person#Ali> | "2010-01-19T16:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX person: <http://www.myOntDomain/person#>
PREFIX likedEvent: <http://www.myOntDomain/likedEventRule#>
PREFIX event: <http://www.myOntDomain/event#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX weather: <http://www.myOntDomain/weather#>
PREFIX eventHasSuitableWeather: <http://www.myOntDomain/eventHasSuitableWeather#>
PREFIX freeAtEvent: <http://www.myOntDomain/freeAtEventRule#>
SELECT DISTINCT ?Event ?Person ?Time
WHERE
{ ?Person rdf:type person:Person .
?Event rdf:type event:Event .
?WeatherEvent
rdf:type weather:WeatherEvent .
?WeatherType rdf:type weather:WeatherEventType .
?Person likedEvent:likedEvents ?Event ;
freeAtEvent:freeAtEvent ?Event .
?Event eventHasSuitableWeather:eventHasSuitableWeather true ;
event:eventHasDate ?Time .
?Person person:hasName ?PersonName ;
person:hasAge ?PersonAge .
?Event event:hasEventType ?EventType .
FILTER ( ?Time = "2010-01-19T16:00:00Z"^^xsd:dateTime )
FILTER ( ?Time = "2010-01-19T16:00:00Z"^^xsd:dateTime )
}
-------------------------
| Event | Person | Time |
=========================
-------------------------
更新
我问同样的问题在耶拿-dev并了解到,没有什么不妥查询或代码。这是一个问题在耶拿2.6.0但是已经固定在耶拿2.6.2.
解决方案
没有什么明显的错误你的查询,这可能是一个问题是如何SPARQL引擎您使用的是实现=operator.这SPARQL引擎你们使用?
该=操作者应该做的值平等,所以你的过滤器应该为你的期望仍然返回的大多数相同的结果查询时评价反对你的本体。
即使=operator只是做卢旺达国防军的期中的平等SPARQL引擎你是在利用你仍然应该得到结果,因为该文本将仍然完全匹配。
如果你发布其SPARQL引擎你是在使用和复制你实际的体我可以给你一个更好的答案不是"应该"
更新
我怀疑,但不能肯定地说,这可能会有一些奇怪的问题在文件:日期时间序列化/反.我会发邮件到耶拿开发的邮件列表详细说明你的问题并看到如果开发人员和社区可以给你答案在这一: