Как проверить пустой аргумент даты в функции XQuery? - PullRequest
2 голосов
/ 15 июня 2009

Рассмотрим следующий код, который проверяет наличие пустой даты:

declare xqse function tns:isEmptyDate($dob as xs:date) as xs:boolean {
    if(empty($dob)) then {
    }
}

При выполнении, почему я получаю приведенную ниже ошибку в ALDSP:

weblogic.xml.query.exceptions.XQueryDynamicException: {err}XP0021: "": can not cast to {http://www.w3.org/2001/XMLSchema}date: error: date: Invalid date value: wrong type:

Ответы [ 4 ]

2 голосов
/ 15 июня 2009

Хорошо, я посмотрел на это, и я думаю, что вы сможете выполнить свой запрос, определив свою функцию как

declare function tns:isEmptyDate($dob as xs:date?) as xs:boolean

Обратите внимание на? после типа - это означает, что аргумент может быть пустой последовательностью.

Я проверил это в Oxygen, используя Saxon-B ... извините, у меня нет доступа к программному обеспечению, которое вы используете.

Вот мое определение функции.

declare function tns:isEmptyDate($dob as xs:date?) as xs:boolean {
    let $empty := if (empty($dob))
        then true()
        else false()
    return $empty
};

Запуск с этим файлом:

<?xml version="1.0" encoding="UTF-8"?>
<datetime>2002-09-24</datetime>

возвращает true и работает с этим файлом:

<?xml version="1.0" encoding="UTF-8"?>
<dontmatch>2002-09-24</dontmatch>

возвращает ложь.

Запуск той же функции без вопросительного знака, на втором документе, ошибки с:

Серьезность: ошибка. Описание: пустая последовательность не допускается в качестве первого аргумента tns: isEmptyDate ()

1 голос
/ 18 мая 2012

Используйте функцию empty() вместо написания своей собственной функции. Empty вернет true, если последовательность имеет нулевой счет, где xs:date? может быть последовательностью нулевой длины или единицы.

0 голосов
/ 17 июня 2009

Попробуйте сделать это с вопросительным знаком или звездочкой после объявления типа.

Например,

$ dob as xs: date означает, что $ dob - это последовательность из 1 элемента (типа xs: date)

$ dob as xs: date? означает, что $ dob - это последовательность из 1 или ни одного элемента (каждый из которых имеет тип xs: date)

$ dob as xs: date * означает, что $ dob является последовательностью, состоящей из одного или нескольких элементов (каждый из которых имеет тип xs: date)

0 голосов
/ 15 июня 2009

Я только возился с XQuery, но я подозреваю, что ошибка генерируется, потому что сигнатура функции ($dob as xs:date) требует тип даты, а вы передаете что-то еще, например пустое значение.

...