Когда я поднимаю ошибку внутри запроса XQuery, например, с:Возможно ли получить пространство имен повышенной ошибки?
error(fn:QName('http://example.com', 'XMPL0001'), 'Conflict')
... возвращается Basex (будь то при общении с сервером, или из графического интерфейса пользователя)
следующееStopped at ., 1/7:
[XMPL0001] Conflict
Как можно получить пространство имен ошибки (в данном случае http://example.com
)?
Я использую настроенный клиент PHP, и я хотел бы использовать эту информацию, чтобы предотвратить возможные (будущие) конфликты с моими кодами ошибок и проанализировать ошибки, чтобы выбросить либо стандартный BaseX\Exception
, либо пользовательский SomeNamespace\Exception
, в зависимости от пространство имен ошибки.
Я мог бы, конечно, использовать другой шаблон кода ошибки, чем обычный шаблон XQuery ABCD1234
, чтобы предотвратить возможные (будущие) конфликты кода ошибки, но возможное использование пространства имен обращается ко мне больше, потому что тогда я могу определить равномерная Exception
интерфейс, такие как:
interface ExceptionInterface
{
public function getCategory(); // the 4 alpha character part
public function getCode(); // the 4 digit part
}
Я в настоящее время использую Basex 7.7.2, кстати.
Ага, я вижу! Вы показали мне очень полезную информацию об обработке ошибок, о которой я не знал. Однако, поскольку это фактически «улавливает ошибку», мой PHP-клиент больше не будет уведомлен об ошибке * фактического *. Я мог бы, вероятно, сигнализировать пойманную ошибку вместо регулярного результата, возвращая элемент '', например (и, возможно, это даже более подходящая стратегия, чем моя текущая). Но я надеялся, что механизм ошибок, на который я сейчас полагаюсь, предоставит немного больше информации об ошибке. Вы бы не узнали о таком механизме, не так ли? –
Я рад! Однако PHP видит BaseX. Возможно, вы могли бы эмулировать/переписать поведение BaseX в предложении catch, включая вывод и код состояния HTTP, если он обменивается данными по HTTP и если BaseX позволяет вам изменить это? –
Спасибо за предложение. Проблема в том, что я не смог бы эмулировать байты нижнего уровня, которые использует [серверный протокол] (http://docs.basex.org/wiki/Server_Protocol#Command_Protocol), чтобы сигнализировать * актуальную * ошибку. Но не беспокойтесь, вы дали мне достаточно ввода для a) либо придерживаться того, что у меня есть (и просто игнорировать пространство имен ошибок), либо b) пойти с возвратом элемента '' и использовать *, который * в качестве сигнала ошибки. Итак, еще раз спасибо за вашу ценную информацию! –