美好的一天,首先感谢您阅读我的 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。作为第二个要求,如果这些项目之间的时间长于 0.60,它也应该返回 false
在过去一天左右详细研究了 XQuery 之后,我认为这在编译语言中很容易实现,但由于某种原因,我无法立即看到使用 XQuery 的方法。我希望有人能指出我正确的方向吗?
感谢。