こんにちは、まずXQueryの質問を読んでいただきありがとうございます。
データ構造内のアイテムを順番に検出する関数をXQueryに実装する必要があります。私はXQueryを初めて使用するので、まだなじみのないいくつかの概念を見つけており、XQUery/Saxonでの数週間と比較して長年の経験を持つ皆さんの助けに大いに感謝しています。
これはログファイル分析の一部であり、関連するデータを、XQueryモジュールに順番に保持されるよりコンパクトなXML構造(以下を参照)にまとめました。次に、このシーケンスを、データ内の特定のイベントを検出する関数に渡す必要があります。私の構造は次のとおりです:-
<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関数(例:'* describe function local:analyse_case_1($ seq as element())as xs:boolean ')は、要素のシーケンス全体(上記)をパラメーターとして受け取り、3つのイベントが見つかった場合は'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を返します。2番目の要件として、これらのアイテム間の時間が0.60より長い場合もfalseを返す必要があります。
過去1日ほどXQueryを詳細に調べたので、これはコンパイル型言語で簡単に実現できたと思いますが、何らかの理由でXQueryをすぐに使用する方法がわかりません。誰かが私を正しい方向に向けてくれることを願っていますか?
感謝を込めて。