Xquery возвращает строку вместо форматированной даты

Я запускаю простой Xquery в XML-репозитории Xhive, и у меня возникают проблемы с возвращаемым значением для даты:

Xquery:

for $x in document('')[matches(xhive:metadata(., "docato-name"),"THOCEO")][xhive:metadata(., "docato-type") = 'XML_RESOURCE_TYPE']
return
<file>
      <filename>{xhive:metadata($x, "docato-name")}</filename>
      <validated>{xhive:metadata($x,"Last Modified")}</validated>
</file>

Результат:

<result>
    <file>
        <filename>THOCEO</filename>
        <validated>1375875821721</validated>
    </file>
</result>

Я хотел бы, чтобы дата «последнего изменения» возвращалась как отформатированная дата, как она отображается в репозитории: «2013-08-07 12:43:41», а не как строка, как указано выше («1375875821721»)

Я попытался изменить запрос на "{xs: date (xhive: metadata ($ x," Last Modified "))}", но это не помогло с ошибкой:

query:8:19:XQUERY_ERROR_VALUE: casting error, cannot cast '1375875821721' from xdt:untypedAtomic to {http://www.w3.org/2001/XMLSchema}date (FORG0001: Invalid value for cast/constructor.)

Мы будем очень благодарны за любую помощь в возврате даты «последнего изменения» в качестве отформатированной!

Спасибо!


person bomdiddybombom    schedule 20.11.2013    source источник


Ответы (2)


Да, я бы сказал, что использование xhive: last-modified (...) - самый простой способ, но если вы действительно хотите использовать временную метку, то вот то, что я использовал в прошлом:

declare function local:timestamp-to-dateTime($v) as xs:dateTime { 
  xs:dateTime("1970-01-01T00:00:00-00:00") + xs:dayTimeDuration(concat("PT", $v idiv 1000, "S"))
};

local:timestamp-to-dateTime(number("1375875821721"))
person Ewout Graswinckel    schedule 20.11.2013
comment
Большое спасибо за это, Ewout, трюк! Боюсь, я не могу дать вам +1 к моей ничтожной репутации, равной 1, но я постараюсь и запомню, если я когда-нибудь дойду до 15! - person bomdiddybombom; 21.11.2013

Я не уверен, что представляет собой это число и как его разобрать, но вместо этого вы можете попробовать xhive:last-modified(), который возвращает xs:dateTime:

<validated>{ xhive:last-modified(fn:document-uri($x)) }</validated>
person wst    schedule 20.11.2013
comment
Привет, когда я пытаюсь запустить функцию xhive: last-modified, описанную выше, я получаю следующую ошибку: query:8:20:XQUERY_UNKNOWN_FUNCTION: {http://www.x-hive.com/2001/08/xquery-functions}last-modified/1 (XPST0017: It is a static error if the expanded QName and number of arguments in a function call do not match the name and arity of a function signature in the static context.) - person bomdiddybombom; 21.11.2013
comment
@ user2083508 Вы уверены, что не передаете в функцию пустое значение? Можете ли вы выделить один звонок на xhive:last-modified()? - person wst; 21.11.2013