本文來自李明子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>