Добрый день, во-первых, спасибо, что прочитали мой вопрос о XQuery.
Мне нужно реализовать в XQuery функцию для последовательного обнаружения элементов в структуре данных. Поскольку я новичок в XQuery, я все еще нахожу некоторые незнакомые концепции и очень благодарен за помощь от тех из вас, у кого есть многолетний опыт по сравнению с моими несколькими неделями с XQUery / Saxon.
Это часть анализа файла журнала, и я уже свел соответствующие данные в более компактную структуру XML (см. Ниже), которая хранится в последовательности в моем модуле XQuery. Теперь мне нужно передать эту последовательность функции, которая обнаруживает определенные события в данных. Моя структура следующая: -
<SEQUENCE><TIME>0.01</TIME><TAG>2100</TAG><FIELD>PRIMARY_MODE_CMD</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>0.57</TIME><TAG>2900</TAG><FIELD>PRIMARY_MODE_CNF</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>0.65</TIME><TAG>2900</TAG><FIELD>PRIMARY_MODE_CNF</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>1.29</TIME><TAG>2900</TAG><FIELD>PRIMARY_MODE_CNF</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>1.94</TIME><TAG>2900</TAG><FIELD>PRIMARY_MODE_CNF</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>2.57</TIME><TAG>2900</TAG><FIELD>PRIMARY_MODE_CNF</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>3.01</TIME><TAG>3800</TAG><FIELD>JAT_INITIALISE_CMD</FIELD><MODE>UPDATE_JAT_INITIALISE_PARAMS</MODE></SEQUENCE>
<SEQUENCE><TIME>3.03</TIME><TAG>2900</TAG><FIELD>PRIMARY_MODE_CNF</FIELD><MODE>MODE1</MODE></SEQUENCE>
<SEQUENCE><TIME>3.03</TIME><TAG>2900</TAG><FIELD>INVALID_CMD_CNF</FIELD><MODE>INVALID</MODE></SEQUENCE>
Функция XQuery (например, '* declare function local: analyse_case_1 ($ seq as element () ) as xs: boolean') должна принимать всю последовательность элементов (см. Выше) в качестве параметра и возвращать 'true 'если он обнаружит три события в строгой последовательности, а именно:
'2100 + PRIMARY_MODE_CMD + MODE1' - followed by:
'2900 + PRIMARY_MODE_CNF + MODE1' - followed by:
'3800 + JAT_INITIALISE_CMD + UPDATE_JAT_INITIALISE_PARAMS' - followed by:
'2900 + INVALID_CMD_CNF + INVALID'
Функция вернет false, если обнаружит, что этот порядок неверен, отсутствуют элементы и т. Д. В качестве второго требования она также должна возвращать false, если время между этими элементами больше 0,60.
Посмотрев на XQuery более подробно за последний день или около того, я считаю, что этого было бы легко достичь на скомпилированном языке, но по какой-то причине я не вижу немедленного способа использования XQuery. Я надеюсь, что кто-нибудь может указать мне правильное направление, пожалуйста?
С благодарностью.