私は、たとえば、XQuery問合せの中からエラーを発生させる:発生したエラーの名前空間を取得することは可能ですか?
error(fn:QName('http://example.com', 'XMPL0001'), 'Conflict')
... BaseX(サーバーと通信するときにそれをすること、またはGUI内から)
によって返され、次のStopped at ., 1/7:
[XMPL0001] Conflict
エラーの名前空間(この場合はhttp://example.com
)も同様に取得できますか。
カスタマイズされたPHPクライアントを使用しています。この情報を使用してカスタムエラーコードとの(将来の)競合を防ぎ、エラーを解析して標準BaseX\Exception
またはカスタムSomeNamespace\Exception
を投げますエラーの名前空間。
可能な(将来の)エラーコードの競合を防ぐために、通常のABCD1234
XQueryパターン以外のエラーコードパターンを使用することもできますが、名前空間を使用する可能性があります。以下のような均一Exception
インターフェース、:
interface ExceptionInterface
{
public function getCategory(); // the 4 alpha character part
public function getCode(); // the 4 digit part
}
私は現在の方法により、BaseX 7.7.2を使用しています。
ああ、私は見る!私が気づいていなかったエラー処理に関する非常に有益な情報をあなたに教えてくれました。しかし、実際にはこれが 'catch'するので、PHPクライアントには実際のエラーは発生しなくなります。私はおそらく、通常の結果の代わりに、 ' '要素を返すことで、キャッチされたエラーを通知することができます(そして、それは私の現在よりもさらに適切な戦略です)。しかし、私が現在頼りにしているエラーメカニズムが、エラーに関するもう少し詳細を提供することを期待していました。あなたはそのような仕組みについて知りませんでしたか? –
私はうれしいです! PHPが見ているのは、BaseX固有のものです。おそらく、HTTP経由で通信し、BaseXでこれを変更できる場合、出力とHTTPステータスコードを含むcatch節のBaseX動作をエミュレート/書き直すことができますか? –
提案していただきありがとうございます。問題は、[サーバープロトコル](http://docs.basex.org/wiki/Server_Protocol#Command_Protocol)が実際のエラーを通知するために使用する低レベルのバイトをエミュレートできないことです。しかし、心配する必要はありません。私は今のものに固執して(そしてエラー名前空間を無視する)か、b) ''要素を返して、エラー信号として* that *を使用するのに十分な入力を与えました。あなたの貴重な情報に感謝します。 –