У меня есть запрос SPARQL:SPARQL XSD: 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 .
}
который возвращает следующий результат, установленный на определенной онтологии:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 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 или XSD: Обрыв сравнению DATETIME, но я не мог понять это из. Если у вас есть идея, пожалуйста, направляйте меня. Благодарю.
UPDATE
Я использую реализации ARQ в SPARQL, который используется в Йене Framework.I думаю, что проблема о реализации не онтология или запрос
Я рассмотрел реализацию com.hp .hpl.jena.datatypes.xsd.XSDDateTime и com.hp.hpl.jena.datatypes.xsd.AbstractDateTime можно найти здесь: http://grepcode.com/file/repo1.maven.org/maven2/com.hp.hpl.jena/jena/2.6.0/com/hp/hpl/jena/datatypes/xsd
и увидел, что объект DATETIME представлена 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.util.Calendar и объектов XSDDateTime разобранного из онтологии всегда равна нулю. Кроме того, функция сравнения проверяет все эти 9 значений для равенства, чтобы они никогда не были равны. Например, когда я добавляю FILTER, редактируя текст запроса, я получаю желаемый результат после проверки равенства. Но когда я добавляю FILTER программно, сериализация двух ФИЛЬТРОВ одинакова, однако результат не является тем же. Вот пример двух запросов, и их результат сразу же отображается после них.
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 |
=========================
-------------------------
UPDATE
я задал тот же самый вопрос в Йене-разработчика и узнал, что нет ничего плохого в запросе или код. Это проблема в Jena 2.6.0, однако она уже исправлена в Jena 2.6.2.
Из последующего обсуждения в списке рассылки Jena это было ошибка, связанная с использованием более старой версии Jena, чем нынешняя - в последних версиях исправлена ошибка – RobV