基于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>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值