2016-05-23 19 views
0

現在、Java経由でXQueryファイルを実行しようとしています。私はXQueryをとても慣れていないので、それをデバッグする方法は不明です。 XQを実行すると、次のエラーが表示されます。XQueryのデバッグ - XPTY0019エラー

XQueryプロセッサ例外:Saxonを呼び出す際の例外: '/'の最初のオペランドの必須アイテムタイプはnode()です。指定された値はアイテムタイプxs:anyAtomicTypeを持ちます。 SystemID:;行番号:301;列番号:-1;原因:301行目でエラーが発生しました。XPTY0019: '/'の最初のオペランドの必須項目タイプはnode()です。提供された値のアイテムタイプがxs:anyAtomicType

ここで、エラーを投げている行をどのようにピン止めするのか知りたいですか?

編集:私はそれを削除した場合、私は最終的にletコマンドにルートcasueを突き止めnumurous試みた後

if ($ipItems) then (
    for $item in $ipItems 
     let $ipAddress := data ($item/nc:IpAddressList/nc:ipAddress) 

は、コードが細かい実行されます。私がそこで間違っていたことを教えてもらえますか?

答えて

2

問題はほぼ確実にこのパス式$item/nc:IpAddressListです。問題は、$itemxs:anyAtomicTypeの値にバインドするのに対し、パス式はノードに対してのみ動作することです。実行時に$itemの値が何であるかを確認するには、デバッグを行う必要があります。

1

私はあなたがこれに苦しんでいる理由を正確に理解できません。あなたが私たちに示したコード断片はおそらく、問い合わせの行301のどこかにあります。エラーメッセージは "/"演算子を参照し、クエリには2つの "/"演算子しかありません。最初の "/"演算子(A)の最初のオペランドは$itemであり、2番目の "/"演算子(B)の最初のオペランドは$item/nc:IpAddressListです。 Bが何かを返すとノードを返すだけなので、静的型はnode()*なので、Bは問題ではありません。したがって、問題はAでなければなりません。$itemのアイテムタイプは、$ipItemsのアイテムタイプと同じです。したがって、$ipItemsにノードではなく原子値が含まれているというエラーメッセージが表示されます。 $ipItemsの値に常に原子値が含まれているか、実行時の値がアトミックな場合に実行時にエラーが発生する可能性がある場合は、コンパイル時にSaxonがこのエラーを表示することがあります。この場合、コンパイル時エラーと思われます。実行時エラーの場合、メッセージはより具体的になるからです。 $ itemはxs:decimal、おそらくxs:dateです。

$ipItemsが初期化されているかどうかを確認する必要があるため、この段階ではもう手助けできません。可能性は、これまでに原子にしかできない値に初期化されています:例はlet $ipItems := distinct-values(xx/yy/zz)です。アトミック値はnc:IpAddressListという名前の子要素を持つことができないので、これは意味をなさない。

+0

MichealとAdamの入力に感謝します。 両方の入力が私に正しい方向を指示しました。 これは、私がスキーマを横断していたためです。 XQで春のチキンであることは本当に難しいです! –