基於OpenXES的XES序列化源碼示例

本文來自李明子csdn博客(http://blog.csdn.net/free1985),商業轉載請聯繫博主獲得授權,非商業轉載請註明出處!

本文中的示例代碼編寫於2013年5月,爲筆者預研OpenXES所寫。代碼中包含了XES的主要元素,展示了使用OpenXes對序列化XES文件的方法。鑑於當時的產品開發環境環境,本文代碼由C#編寫。因OpenXES是基於java的開發庫,故筆者使用IKVM對其進行了轉換包裝。
以下是示例代碼。


        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private void SerializationButton_Click(object sender, EventArgs e)
        {
            // log屬性
            XAttributeMap xLogAttributeMap = new XAttributeMapImpl();
            xLogAttributeMap.put("lifecycle:model", new XAttributeLiteralImpl("lifecycle:model", "standard", XLifecycleExtension.instance()));
            xLogAttributeMap.put("creator", new XAttributeLiteralImpl("creator", "Gilbert"));
            xLogAttributeMap.put("library", new XAttributeLiteralImpl("library", "OpenXes v1.9"));
            XLog xLog = new XLogImpl(xLogAttributeMap);
            // 擴展
            Set extensions = xLog.getExtensions();
            extensions.add(XConceptExtension.instance());
            extensions.add(XLifecycleExtension.instance());
            extensions.add(XTimeExtension.instance());
            // trace全局屬性
            List globalTraceAttributes = xLog.getGlobalTraceAttributes();
            XAttribute traceNameAttribute = new XAttributeLiteralImpl("concept:name", "name", XConceptExtension.instance());
            globalTraceAttributes.add(traceNameAttribute);
            // event全局屬性
            List globalEventAttributes = xLog.getGlobalEventAttributes();
            XAttribute eventNameAttribute = new XAttributeLiteralImpl("concept:name", "name", XConceptExtension.instance());
            globalEventAttributes.add(eventNameAttribute);
            XAttribute eventTransitionAttribute = new XAttributeLiteralImpl("lifecycle:transition", "transition", XLifecycleExtension.instance());
            globalEventAttributes.add(eventTransitionAttribute);
            XAttribute eventTimestampAttribute = new XAttributeTimestampImpl("time:timestamp",
                new Date((long)((DateTime.Parse("2013-05-08T13:47:39.418+08:00") - DateTime.Parse("1970-1-1T00:00:00+0:00")).TotalMilliseconds)), XTimeExtension.instance());
            globalEventAttributes.add(eventTimestampAttribute);
            XAttribute eventActivityName = new XAttributeLiteralImpl("活動名稱", "string");
            // 分類器
            List classifiers = xLog.getClassifiers();
            XEventClassifier activityClassifier = new XEventAttributeClassifier("Activity", new string[] { "活動名稱" });
            classifiers.add(activityClassifier);
            // 第一個trace
            XAttributeMap xTraceAttributeMap = new XAttributeMapImpl();
            xTraceAttributeMap.put("concept:name", new XAttributeLiteralImpl("concept:name", "152422866DE588B44825794A000D90E2", XConceptExtension.instance()));
            xTraceAttributeMap.put("creator", new XAttributeLiteralImpl("creator", "Gilbert"));
            XTrace xTrace = new XTraceImpl(xTraceAttributeMap);
            xLog.add(xTrace);
            // 第一個trace的event
            XAttributeMap xEventAttributeMap = new XAttributeMapImpl();
            xEventAttributeMap.put("concept:name", new XAttributeLiteralImpl("concept:name", "登記", XConceptExtension.instance()));
            xEventAttributeMap.put("lifecycle:transition", new XAttributeLiteralImpl("lifecycle:transition", "start", XLifecycleExtension.instance()));
            xEventAttributeMap.put("time:timestamp", new XAttributeTimestampImpl("time:timestamp",
                new Date((long)((DateTime.Parse("2011-10-11T09:29:37.000+08:00") - DateTime.Parse("1970-1-1T00:00:00+0:00")).TotalMilliseconds)),
                XTimeExtension.instance()));
            xEventAttributeMap.put("活動名稱", new XAttributeLiteralImpl("活動名稱", "登記"));
            XEvent xEvent = new XEventImpl(xEventAttributeMap);
            xTrace.add(xEvent);

            #region 向xTrace添加其它Event,過程類似,用於測試輸出結果
            AddEventsToTrace(ref xTrace, "登記", "complete", "2011-10-11T09:35:10.000+08:00", "登記");
            AddEventsToTrace(ref xTrace, "部門領導批示", "start", "2011-10-11T09:35:10.000+08:00", "部門領導批示");
            AddEventsToTrace(ref xTrace, "部門領導批示", "complete", "2011-10-11T09:41:43.000+08:00", "部門領導批示");
            AddEventsToTrace(ref xTrace, "部門落實", "start", "2011-10-11T09:41:43.000+08:00", "部門落實");
            AddEventsToTrace(ref xTrace, "財務落實", "start", "2011-10-11T09:41:43.000+08:00", "財務落實");
            AddEventsToTrace(ref xTrace, "部門落實", "complete", "2011-10-11T10:12:32.000+08:00", "部門落實");
            AddEventsToTrace(ref xTrace, "財務落實", "complete", "2011-10-13T09:00:58.000+08:00", "財務落實");
            #endregion
            #region 向xLog添加其它Trace,過程類似,用於測試輸出結果
            AddTraceToLog(ref xLog);
            #endregion

            XesXmlSerializer xesSerializer = new XesXmlSerializer();
            java.io.File xesFile = new java.io.File("d:\\test.xes");
            java.io.OutputStream xesStream = new java.io.FileOutputStream(xesFile);
            xesSerializer.serialize(xLog, xesStream);
            MessageBox.Show("序列化結束");
        }

        /// <summary>
        /// 向xTrace添加Event,用於測試序列化結果
        /// </summary>
        /// <param name="xTrace"></param>
        /// <param name="name"></param>
        /// <param name="transition"></param>
        /// <param name="timeString"></param>
        /// <param name="activityName"></param>
        /// <returns></returns>
        void AddEventsToTrace(ref XTrace xTrace, string name, string transition, string timeString, string activityName)
        {
            XAttributeMap xEventAttributeMap = new XAttributeMapImpl();
            xEventAttributeMap.put("concept:name", new XAttributeLiteralImpl("concept:name", name, XConceptExtension.instance()));
            xEventAttributeMap.put("lifecycle:transition", new XAttributeLiteralImpl("lifecycle:transition", transition, XLifecycleExtension.instance()));
            xEventAttributeMap.put("time:timestamp", new XAttributeTimestampImpl("time:timestamp",
                new Date((long)((DateTime.Parse(timeString) - DateTime.Parse("1970-1-1T00:00:00+0:00")).TotalMilliseconds)),
                XTimeExtension.instance()));
            xEventAttributeMap.put("活動名稱", new XAttributeLiteralImpl("活動名稱", activityName));
            XEvent xEvent = new XEventImpl(xEventAttributeMap);
            xTrace.add(xEvent);
        }

        void AddTraceToLog(ref XLog xLog)
        {
            XAttributeMap xTraceAttributeMap = new XAttributeMapImpl();
            xTraceAttributeMap.put("concept:name", new XAttributeLiteralImpl("concept:name", "152422866DE588B44825794A000D90E3", XConceptExtension.instance()));
            xTraceAttributeMap.put("creator", new XAttributeLiteralImpl("creator", "Gilbert"));
            XTrace xTrace = new XTraceImpl(xTraceAttributeMap);
            xLog.add(xTrace);
            AddEventsToTrace(ref xTrace, "登記", "start", "2012-10-11T09:29:37.000+08:00", "登記");
            AddEventsToTrace(ref xTrace, "登記", "complete", "2012-10-11T09:35:10.000+08:00", "登記");
            AddEventsToTrace(ref xTrace, "部門領導批示", "start", "2012-10-11T09:35:10.000+08:00", "部門領導批示");
            AddEventsToTrace(ref xTrace, "部門領導批示", "complete", "2012-10-11T09:41:43.000+08:00", "部門領導批示");
            AddEventsToTrace(ref xTrace, "部門落實", "start", "2012-10-11T09:41:43.000+08:00", "部門落實");
            AddEventsToTrace(ref xTrace, "財務落實", "start", "2012-10-11T09:41:43.000+08:00", "財務落實");
            AddEventsToTrace(ref xTrace, "部門落實", "complete", "2012-10-11T10:12:32.000+08:00", "部門落實");
            AddEventsToTrace(ref xTrace, "財務落實", "complete", "2012-10-13T09:00:58.000+08:00", "財務落實");
        }
    }

上述代碼中,84行,向trace添加event,97行,向log添加trace。上面的代碼編譯運行後生成下面的XES文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- This file has been generated with the OpenXES library. It conforms -->
<!-- to the XML serialization of the XES standard for log storage and -->
<!-- management. -->
<!-- XES standard version: 1.0 -->
<!-- OpenXES library version: 1.0RC7 -->
<!-- OpenXES is available from http://www.openxes.org/ -->
<log xes.version="1.0" xes.features="nested-attributes" openxes.version="1.0RC7" xmlns="http://www.xes-standard.org/">
    <extension name="Lifecycle" prefix="lifecycle" uri="http://www.xes-standard.org/lifecycle.xesext"/>
    <extension name="Time" prefix="time" uri="http://www.xes-standard.org/time.xesext"/>
    <extension name="Concept" prefix="concept" uri="http://www.xes-standard.org/concept.xesext"/>
    <global scope="trace">
        <string key="concept:name" value="name"/>
    </global>
    <global scope="event">
        <string key="concept:name" value="name"/>
        <string key="lifecycle:transition" value="transition"/>
        <date key="time:timestamp" value="2013-05-08T13:47:39.418+08:00"/>
    </global>
    <classifier name="Activity" keys="活動名稱"/>
    <string key="library" value="OpenXes v1.9"/>
    <string key="lifecycle:model" value="standard"/>
    <string key="creator" value="Gilbert"/>
    <trace>
        <string key="creator" value="Gilbert"/>
        <string key="concept:name" value="152422866DE588B44825794A000D90E2"/>
        <event>
            <date key="time:timestamp" value="2011-10-11T09:29:37+08:00"/>
            <string key="concept:name" value="登記"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="登記"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-11T09:35:10+08:00"/>
            <string key="concept:name" value="登記"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="登記"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-11T09:35:10+08:00"/>
            <string key="concept:name" value="部門領導批示"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="部門領導批示"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-11T09:41:43+08:00"/>
            <string key="concept:name" value="部門領導批示"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="部門領導批示"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-11T09:41:43+08:00"/>
            <string key="concept:name" value="部門落實"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="部門落實"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-11T09:41:43+08:00"/>
            <string key="concept:name" value="財務落實"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="財務落實"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-11T10:12:32+08:00"/>
            <string key="concept:name" value="部門落實"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="部門落實"/>
        </event>
        <event>
            <date key="time:timestamp" value="2011-10-13T09:00:58+08:00"/>
            <string key="concept:name" value="財務落實"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="財務落實"/>
        </event>
    </trace>
    <trace>
        <string key="creator" value="Gilbert"/>
        <string key="concept:name" value="152422866DE588B44825794A000D90E3"/>
        <event>
            <date key="time:timestamp" value="2012-10-11T09:29:37+08:00"/>
            <string key="concept:name" value="登記"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="登記"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-11T09:35:10+08:00"/>
            <string key="concept:name" value="登記"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="登記"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-11T09:35:10+08:00"/>
            <string key="concept:name" value="部門領導批示"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="部門領導批示"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-11T09:41:43+08:00"/>
            <string key="concept:name" value="部門領導批示"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="部門領導批示"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-11T09:41:43+08:00"/>
            <string key="concept:name" value="部門落實"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="部門落實"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-11T09:41:43+08:00"/>
            <string key="concept:name" value="財務落實"/>
            <string key="lifecycle:transition" value="start"/>
            <string key="活動名稱" value="財務落實"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-11T10:12:32+08:00"/>
            <string key="concept:name" value="部門落實"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="部門落實"/>
        </event>
        <event>
            <date key="time:timestamp" value="2012-10-13T09:00:58+08:00"/>
            <string key="concept:name" value="財務落實"/>
            <string key="lifecycle:transition" value="complete"/>
            <string key="活動名稱" value="財務落實"/>
        </event>
    </trace>
</log>
發佈了56 篇原創文章 · 獲贊 28 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章