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"