Appendix I: MSS-to-MDS Algorithm
Procedure MSS-to-MDS (OEFMSS, GMDS) begin MSS-to-IM (OEFMSS, IM, L) R = root of IM newplace(P) GMDS' = IM-to-MDS' (R, P) MDS'-to-MDS (GMDS', L, GMDS) end Procedure MSS-to-IM (OEFMSS, IM, L) begin L = the set of temporal links in OEFMSS for each M in OEFMSS create a node M' in IM N1 = the set of nodes attached to M N2 = the set of nodes annotating M while (N1 neq ¢) remove a node n from N1 if no node in N1 links to n via a temporal link create a node representing n as a child of M' else create a child Mt for M' in IM for each node m in N1 links to n via temporal link S create a node representing m as a child of Mt N1 = N1 - {m} Mt.attribute = S.attribute if (N2 neq ¢) create a node Mt in IM M' becomes a child of Mt for each node n in N2 create a node representing n as a child of Mt end Function IM-to-MDS'(M, P) begin if M is a leaf node in IM return P else split(P, Pi, Pj, Ti, Tj) /* split place P into two places Pi and Pj and two transitions Ti and Tj, where Pi is the input place of Ti and Pj is output place of Tj */ for each child n of M newplace(Pn.delay) newplace(Pn.object) newtrans(Tn) Ttmp = Ti add_input_place(Tn, Pn.delay) add_output_place(Tn, Pn.object) if (M.attribute == PARALLEL) add_output_place(Ti, Pn.delay) add_input_place(Tj, Pn.object) if (M.attribute == SEQUENTIAL) add_output_place(Ttmp, Pn.delay) if n is the last child processed add_input_place(Tj, Pn.object) else newtrans(Ttmp) add_input_place(Ttmp, Pn.object) return IM-to-MDS'(n, Pn.object) end Procedure MDS'-to-MDS (GMDS', L, GMDS) begin for each link S=(u, v) in L M1 = the place in MDS' representing u M2 = the place in MDS' representing v newplace(Paux) /* the value of the delay attribute in Paux is described in Table 1 */ Paux.duration = Tableaux(S.attribute) if (S.attribute == SEQUENTIAL) newplace(Paux') newtrans(Taux) add_input_place(output_trans(M1), Paux') remove_input_place(output_trans(M1), M1) add_output_place(Taux, Paux) add_output_place(Taux, Paux') add_input_place(Taux, M1) add_input_place(input_trans(M2), Paux) if (S.attribute == PARALLEL) if ((S.sub-attribute == during) or ((S.sub-attribute == co-end) and (M1.duration < M2.duration))) add_output_place(input_trans(M2), Paux) add_input_place(input_trans(M1), Paux) else add_output_place(input_trans(M1), Paux) add_input_place(input_trans(M2), Paux) end
Appendix II: Object Exchange Format
Appendix III: Object Exchange Format: BNF Syntax
<Exchange_File> ::= <Begin><Header_Part><Node_Part><Link_Part><Knowledge_Part> <Raw_Data_Part><End> <Header_Part> ::= <Header_Part_Begin><Version><MDS><MCS><Head_Part_End> <Version> ::= "DATAEX94.1" <MDS> ::= <MDS_Begin><ascii_spec_of_G-net><MDS_End> <MCS> ::= <MCS_Begin><ascii_spec_of_G-net><MCS_End> <Node_Part> ::= <Node_Part_Begin><Num_of_Nodes><Node>* <Node_Part_End> <Node> ::= <Node_Begin><Node_Fixed_Attribute><Node_Var_Attribute>* <Node_End> <Node_Fixed_Attribute> ::= <Node_Id><Node_Type><Size><Location><Offset> "NIL" <Node_Id> ::= <integer> (unique within MMO structure) <Node_Type> ::= <N_Type><Media_Type><Media_Sub_Type> <Size> ::= <integer> (actual size of node in bytes) <Location> ::= "LOCAL" | <ftp://machine-name/directory-path:file-name> | "NIL" <Offset> ::= <integer> (offset from the beginning of raw data part, regardless it's LOCAL or not) <N_Type> ::= <Composite_Type> | <Basic_Media_Type> | "NIL" <Media_Type> ::= <Text_Type> | <Image_Type> | <Audio_Type> | <Video_Type> | ... <Media_Sub_Type> ::= <Text_Subtype> | <Image_Subtype> | <Audio_Subtype> | <Video_Subtype> | ... <Text_Subtype> ::= "PLAIN" | "RICH" | ... <Image_Subtype> ::= "GIF" | "JPEG" | "PBM" | "PGM" | "PPM" | ... <Audio_Subtype> ::= "BASIC" | ... <Video_Subtype> ::= "MPEG" | "QUICKTIME" | ... <Node_Var_Attribute> ::= <Text_Attribute> | <Image_Attribute> | <Audio_Attribute> | <Video_Attribute> | <Form_Attribute> | "NIL" <Text_Attribute> ::= <charset><Text> <charset> ::= "ASCII" | "EBCDIC" <Image_Attribute> ::= "IMAGE" <Image_Info> <Image_Info> ::= "COMPRESSION_ALG" | "PROGRESSIVE_TRANS" | ... <Audio_Attribute> ::= "AUDIO" <Audio_info> <Video_Attribute> ::= "VIDEO" <Video_info> <Form_Attribute> ::= <Attribute_Name><Attribute_Value> <Link_Part> ::= <Link_Part_Begin><Num_of_Links><Link>* <Link_Part_End> <Link> ::= <Link_Begin><Link_Fixed_Attribute><Link_Var_Attribute>* <Link_End> <Link_Fixed_Attribute> ::= <Link_Id><Link_Type><Node_List><Direction> <Link_Id> ::= <integer> (unique within MMO structure) <Link_Type> ::= "ATTACHMENT" | "ANNOTATION" | "REFERENCE" | "SYNCHRONIZATION" | "LOCATION" | ... <Node_list> ::= <Node_Id>* (a sequence of integers) <Direction> ::= <Begin_to_End> | <End_to_Begin> | <Undirected> <Begin_to_end> ::= "B" <End_to_Begin> ::= "E" <Undirected> ::= "U" <Link_Var_Attribute> ::= <Link_Var_Attr><Size><Value> <Link_Var_Attr> ::= <Attachment_Attribute> | <Annotation_Attribute> | <Synchronize_Attribute> | <Reference_Attribute> | ... <Raw_Data_Part> ::= <Raw_Data_Part_Begin><Raw_Data>* <Raw_Data_Part_End> <Raw_Data> ::= <Raw_Data_Begin><Data><Raw_Data_End> <Knowledge_Part> ::= <Knowledge_Part_Begin><Knowledge>* <Knowledge_Part_End> <Knowledge> ::= <Knowledge_Begin><Rule>* <Knowledge_End> <Rule> ::= <Rule_Begin><Condition><Action>* <Rule_End> <Begin> ::= "MMB" <End> ::= "MME" <Header_Part_Begin> ::= "HPB" <Header_part_End> ::= "HPE" <MDS_Begin> ::= "MDB" <MDS_End> ::= "MDE" <MCS_Begin> ::= "MCB" <MCS_End> ::= "MCE" <Node_Part_Begin> ::= "NPB" <Node_Part_End> ::= "NPE" <Node_Begin> ::= "NOB" <Node_End> ::= "NOE" <Link_Part_Begin> ::= "LPB" <Link_Part_End> ::= "LPE" <Link_Begin> ::= "LIB" <Link_End> ::= "LIB" <Raw_Data_Part_Begin> ::= "RPB" <Raw_Data_Part_End> ::= "RPE" <Raw_Data_Begin> ::= "RDB" <Raw_Data_End> ::= "RDE" <Knowledge_Part_Begin> ::= "KPB" <Knowledge_Part_End> ::= "KPE" <Knowledge_Begin> ::= "KNB" <Knowledge_End> ::= "KNE" <MDS_End> ::= "MDE" <MCS_Begin> ::= "MCB" <MCS_End> ::= "MCE" <Node_Part_Begin> ::= "NPB" <Node_Part_End> ::= "NPE" <Node_Begin> ::= "NOB" <Node_End> ::= "NOE" <Link_Part_Begin> ::= "LPB" <Link_Part_End> ::= "LPE" <Link_Begin> ::= "LIB" <Link_End> ::= "LIB" <Raw_Data_Part_Begin> ::= "RPB" <Raw_Data_Part_End> ::= "RPE" <Raw_Data_Begin> ::= "RDB" <Raw_Data_End> ::= "RDE" <Knowledge_Part_Begin> ::= "KPB" <Knowledge_Part_End> ::= "KPE" <Knowledge_Begin> ::= "KNB" <Knowledge_End> ::= "KNE"