-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathextract-raci-table.xq
74 lines (61 loc) · 2.12 KB
/
extract-raci-table.xq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(: Extract RACI information from ArchiMate :)
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
declare namespace archimate = "http://www.archimatetool.com/archimate";
<html>
<head>
<title>RACI matrix for {//archimate:model/@name/data()}</title>
<link href="raci.css" rel="stylesheet" />
</head>
<body>
<table>{
let $rels := //element[@xsi:type = "archimate:AssignmentRelationship"]
(: Only include roles that have an assignment :)
let $roles :=
for $r in //element[@xsi:type = "archimate:BusinessRole"][@id = $rels/@source]
return <role>{$r/@id, $r/@name, $r/documentation/text()}</role>
let $roleIDs := $roles/@id
let $processes := //element[@xsi:type = "archimate:BusinessProcess"]
let $functions := //element[@xsi:type = "archimate:BusinessFunction"]
(: Header row: process/function name, role names :)
let $header_row :=
<tr>
<th>Process or function name</th>
{for $role_name in $roles/@name
return <th class="role">{$role_name/data()}</th>}
</tr>
let $process_rows :=
for $process in $processes
let $process_id := $process/@id
let $prelt :=
for $role in $roles
let $assignment := $rels[@source = $role/@id][@target = $process_id]
let $relname :=
if ($assignment/@name)
then $assignment/@name/data()
else if ($assignment)
then "X"
else ()
let $raci_code :=
if ($assignment/property[@key="RACI"])
then concat("(", $assignment/property[@key="RACI"]/@value/data(), ")")
else ()
return <td>{$relname, $raci_code}</td>
return <tr><td>P: {$process/@name/data()}</td>{$prelt}</tr>
let $function_rows :=
for $function in $functions
let $function_id := $function/@id
let $prelt :=
for $role in $roles
let $assignment := $rels[@source = $role/@id][@target = $function_id]
let $relname :=
if ($assignment/@name)
then $assignment/@name/data()
else if ($assignment)
then "X"
else ()
return <td>{$relname}</td>
return <tr><td>F: {$function/@name/data()}</td>{$prelt}</tr>
return ($header_row, $process_rows, $function_rows)
}</table>
</body>
</html>