От CSV до RDF - анализ даты до действительного формата xsd: DateTime - PullRequest
0 голосов
/ 01 ноября 2018

Я использую Tarql для преобразования некоторых данных CSV в rdf. CSV содержит столбец дат в формате «21.09.2017, 12:15:00».

Я использую приведенное ниже предложение SPARQL where для преобразования даты в этом столбце в допустимый формат xsd: DateTime.

SELECT ?date
WHERE {
    BIND ("([0-9][0-9]?)/([0-9][0-9]?)/([0-9][0-9][0-9][0-9])\\s*([0-9][0-9]):([0-9][0-9]):([0-9][0-9])\\s*([A-Z][A-Z])" AS ?DateRegex)
    BIND (REPLACE(?Date, ?DateRegex, "$1") AS ?month)
    BIND (REPLACE(?Date, ?DateRegex, "$2") AS ?day)
    BIND (REPLACE(?Date, ?DateRegex, "$3") AS ?year)
    BIND (REPLACE(?Date, ?DateRegex, "$4") AS ?hours)
    BIND (REPLACE(?Date, ?DateRegex, "$5") AS ?mins)
    BIND (REPLACE(?Date, ?DateRegex, "$6") AS ?sec)
    BIND (REPLACE(?Date, ?DateRegex, "$7") AS ?clockPeriod)
    BIND (STRDT(CONCAT(?year, "-", ?month, "-", ?day, "T", IF(?clockPeriod = "PM", IF(?hours >= 1 && ?hours < 12, xsd:string(xsd:integer(?hours) + 12), ?hours), IF(?hours = 12, "00" , ?hours)), ":", ?mins, ":" , ?sec), xsd:dateTime) AS ?date)
}

Это прекрасно работает, когда часы не требуют смены из-за смены часов с 12 часов на 24 часа, но дата не генерируется, когда часы нужно менять. Я предполагаю, что что-то не так в последнем предложении с IF.

Кто-нибудь может указать, в чем может быть проблема?

...