4
我收到以下錯誤。如何驗證SPARQL中的datetime對象? (Virtuoso 22007錯誤DT006)
Virtuoso 22007 Error DT006: Cannot convert -0359 to datetime : Incorrect month field length
SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define sql:signal-void-variables 1 select ?item bif:year(xsd:dateTime(str(?dob))) as ?m{
?item <h://f.cm/ns/common/topic/notable_types> <h://f.cm/ns/people/person> .
?item <h://f.cm/ns/people/person/date_of_birth> ?dob
} limit 675
如果我將限制更改爲674
,它的工作原理。
我懷疑是某個日期時間字段在某處出錯,並打印?dob
,其中顯示其中一個值爲-0359
。
解決方法是在應用bif
函數之前驗證該值。
但是,我們如何驗證SPARQL中的日期時間?
這裏沒有相同的方法運氣。也沒有運氣:FILTER(正則表達式(str(?o),'^ [0-9] [0-9] [0-9] [0-9] - [01] [0-9] - [0- 3)[0-9]'))FILTER(xsd:datetime(?o)>'「+ minBirthDate +」'^^ xsd:datetime)。什麼是聚合(...)在這裏? – TextGeek
上面的查詢中的合併不顧名稱的意思:它將?o的轉換結果連接到帶有感嘆號的日期時間。如果結果只是一個感嘆號,那就意味着日期時間是空的,因此,o不是有效的日期時間。由於我們對不會合併爲'!'的結果進行過濾,因此我們過濾了確實是有效日期時間的值。這是否讓你更清楚? –
@TextGeek ...有點晚了,但你的minBirthDate真的有xsd:datetime或只是xsd:date(像我的):) FILTER(數據類型(?sdate)= xsd:date) FILTER(coalesce(xsd: date(str(?sdate)),'!')='!')' – Richard