Я пишу запрос, который вычисляет возраст человека, знающего дату своего рождения и дату смерти. Я хочу попросить определенного художника (в данном случае Майкла Джексона). Проблема в том, что я не могу повторно использовать дату рождения и дату смерти в следующем запросе:
select ?artist ?age
where {
dbr:Michael_Jackson dbo:birthDate ?birthdate .
dbr:Michael_Jackson dbo:deathDate ?deathdate .
bind( year(?deathdate) - year(?birthdate) - if (month(?deathdate)<month(?birthdate) || (month(?deathdate)=month(?birthdate) && day(?deathdate<day(?birthdate)),1,0) as ?age)
}
Кто-нибудь знает, как решить эту проблему?
Вы сказали, что «не можете повторно использовать дату рождения и дату смерти». Почему нет? Пожалуйста, опубликуйте любое сообщение об ошибке, так как я вижу что-то другое, чем @AKSW.
@TallTed запрос в вопросе не выполняется из-за некоторых синтаксических ошибок, но правильный запрос не выполняется из-за ошибки, которую я показал в моем комментарии выше: select ?artist ?age where { values ?artist {dbr:Michael_Jackson} ?artist dbo:birthDate ?birthdate . ?artist dbo:deathDate ?deathdate . bind( year(?deathdate) - year(?birthdate) - if (month(?deathdate)<month(?birthdate) || (month(?deathdate) < month(?birthdate) && day(?deathdate)< day(?birthdate)),1,0) as ?age) }
Я немного отредактировал запрос, чтобы получить значения, с которыми вы рассчитываете -
birthdate deathdate
"1958-8-29"^^<http://www.w3.org/2001/XMLSchema#date> "2009-6-25"^^<http://www.w3.org/2001/XMLSchema#date>
Ошибка, с которой вы сталкиваетесь, заключается в том, что это недопустимые литералы xsd:date
, для которых требуется 2 цифры для месяца.
Эта проблема с данными была исправлена в Википедии и т. д. В DBpedia-Live, и ваш запрос работает там как ты можешь видеть. Существуют и другие проблемы с данными DBpedia-Live (например, отображение нескольких версий аннотации, когда вы действительно хотите видеть только самую последнюю), но, возможно, это решает вашу сиюминутную потребность.
ошибка
Virtuoso 22003 Error SR586: Incomplete RDF box as argument 0 for year().
- я думаю, это происходит из-за неправильной лексической формы литерала даты