allter: (Default)
allter ([personal profile] allter) wrote2009-07-28 02:24 pm

Однопроходная обработка XML в трубопроводах.

XML по своему замечательный формат, поскольку для его обработки требуется всего лишь память, равная максимальной длине всех вложенных тегов + максимальному количеству вложенных тегов (а если требуется обрабатывать не весь документ, а только подэлементы, то и того меньше). Но для того, что бы обрабатывать XML поточно (событийным способом) надо сначала знать, что он, как минимум, well-formed. Т.е. по идее, надо сначала засосать XML куда-нибудь (потенциально гигантского размера), убедиться, что он well-formed, а затем обрабатывать. Тогда как можно выделить специальный тег вроде <error xmlns="streaming_error" />, который бы сигнализировал последующим обработчикам о том, что на предыдущем шаге парсер или обработчик обнаружил условие ошибки.

Т.е. обработчики могут пропускать через себя XML без проверки на валидность, а в случае ошибки сигнализировать последующим обработчикам "ну не шмогла я". Соответственно, последний обработчик в цепочке может, получив эту информацию, в зависимости от заданной логики либо отбрасывать весь уровень XML, предшествующий сообщению об ошибке, либо отбрасывать весь XML документ, в котором содержится ошибка, либо приступить к восстановлению ошибочных данных.

Вопрос: где-нибудь описан стандарт подобного оповещения? Гугление особо ничего не дало.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting