Преобразование типов SPARQL?

У меня есть следующий запрос SPARQL:

PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#> 
PREFIX dtp: <http://dtp-126.sncs.abdn.ac.uk#> 
PREFIX dbp: <http://dbpedia.org/resource/> 
SELECT ?value ?time WHERE {         
    dtp:CD7514 ssn:madeObservation ?observation .       
    ?observation ssn:observedProperty ?property .   
    ?property ssn:hasValue <http://dbpedia.org/resource/Temperature> .          
    ?observation ssn:observationResult ?observationValue .      
    ?observationValue ssn:hasValue ?value .         
    ?observationValue ssn:observationSamplingTime ?time 
    FILTER(?time > 1291908000)
}

В двух словах, это выбор всех наблюдений датчика температуры с датчика dtp:CD7514 и отфильтровывание значений, меньших заданной метки времени.

Однако добавление ограничения фильтра возвращает 0 результатов (когда есть наблюдения, соответствующие этому временному региону!)

Возможно ли, что ?time является типом данных varchar/text/String, и поэтому сравнение невозможно? Если да, то можно ли выполнить преобразование в SPARQL?


person Bailz    schedule 14.12.2010    source источник
comment
Что находится в вашем графике данных - каков тип данных ?time литералов? Онтология SSN не предписывает конкретного формата представления моментов времени.   -  person laalto    schedule 14.12.2010


Ответы (2)


Это будет работать только в том случае, если значение времени, которое вы сопоставляете, имеет одинаковое количество цифр, поскольку оно будет выполнять сильное сравнение. Лучшим решением будет:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
...
FILTER(xsd:integer(?time) > 1291908000)

Это приведёт значение ?time к целому числу, а затем выполнит числовое сравнение.

person Steve Harris    schedule 07.02.2011

Решением этого было просто добавить кавычки вокруг метки времени.

person Bailz    schedule 14.12.2010
comment
Да, это делает их строковыми литералами, а не xsd:integer. Строковые литералы имеют четко определенный лексикографический порядок сортировки. - person laalto; 14.12.2010