У меня есть несколько целочисленных значений в объектной части троек RDF, например:
subject predicate object
:a1 :d1 2017
:a2 :d1 201601
:a3 :d1 20170510
Мне нужно выяснить, больше ли значение объекта субъекта :a1
, чем значение объекта :a2
, а значение объекта :a2
больше, чем значение объекта :a3
, или нет, через SPARQL. Однако перед написанием этого запроса мне нужно сделать все значения объекта восьмизначными, добавив дополнительные нули в правую часть значения, как показано ниже:
subject predicate object
:a1 :d1 20170000
:a2 :d1 20160100
:a3 :d1 20170510
Не могли бы вы сообщить мне, как преобразовать значения объектов в восьмизначное целое число в SPARQL? Спасибо.
n
, которое можно сделать, используя длину строки литерала. После этого вы можете либо умножить на10^n
, либо добавитьn
умноженное на 0. - person UninformedUser   schedule 06.12.2017order by desc(str(?value))
закажет правильно - person UninformedUser   schedule 06.12.2017afn:sprintf
. - person Stanislav Kralin   schedule 06.12.2017BIND(STRLEN(STR(?value)) as ?numDigits)
, а затем используйте некоторые встроенные математические функции. - person UninformedUser   schedule 06.12.2017prefix : <http://ex.org/> prefix math: <http://www.w3.org/2005/xpath-functions/math#> select * { ?s :d ?v . BIND(STRLEN(STR(?v)) as ?n) BIND((?v * math:pow(10, 8 - ?n)) AS ?vext ) } order by desc(str(?v))
- person UninformedUser   schedule 06.12.2017Virtuoso 42001 Error SR185: Undefined procedure DB.DBA.http://www.w3.org/2005/xpath-functions/math#pow.
- person Beautiful Mind   schedule 06.12.2017BIND (IF(?n=6, ?v*100, IF(?n=4, ?v*10000, ?v) ) AS ?vext)
. Он работает для большинства целочисленных значений. Однако для некоторых восьмизначных значений он добавляет дополнительные нули, например: 2016040100. Вы знаете, почему это так? - person Beautiful Mind   schedule 07.12.2017