2

空の日付をチェックする次のコードを検討してください。

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

4 に答える 4

2

OK、これを見てきました。関数を次のように定義することで、クエリを実行できると思います

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

? に注意してください。タイプの後 - 引数が空のシーケンスである可能性があることを意味します。

Saxon-B を使用して、Oxygen でこれをテストしました...申し訳ありませんが、あなたが使用しているソフトウェアにアクセスできません。

これが私の関数定義です。

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>

false を返します。

2 番目のドキュメントで疑問符を付けずに同じ関数を実行すると、次のエラーが発生します。

重大度: エラー。説明: tns:isEmptyDate() の最初の引数として空のシーケンスは許可されていません

于 2009-06-15T16:22:41.217 に答える
1

empty()独自の関数を作成する代わりに、関数を使用してください。シーケンスのカウントが 0 の場合、Empty は true を返します。ここxs:date?で、シーケンスの長さは 0 または 1 です。

于 2012-05-18T16:58:53.910 に答える
1

型宣言の後に疑問符または星印を付けて、これを試してください。

例えば、

$dob as xs:date は、$dob が (xs:date 型の) 1 つの項目のシーケンスであることを意味します。

$dob as xs:date? $dob が 1 個または 1 個の項目のシーケンスであることを意味します (それぞれの項目は xs:date 型です)

$dob as xs:date* は、$dob が 0 個以上の項目のシーケンスであることを意味します (それぞれの項目は xs:date 型です)

于 2009-06-17T16:10:51.843 に答える
0

私は XQuery をいじっただけですが、関数の署名($dob as xs:date)に日付型が必要で、空の値など、何か他のものを渡しているため、エラーが生成されていると思われます。

于 2009-06-15T16:01:29.723 に答える