metanorma-plugin-lutaml 0.4.9 → 0.4.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@
4
4
  {% endif %}
5
5
  {% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
6
6
  [[section-{{ klass.xmi_id }}]]
7
- .Elements of “{{ package.name }}::{{ klass.name }}” (class)
7
+ .Elements of “{{ package.name }}::{{ klass.name }}” ({{ klass.stereotype }})
8
8
  [width="100%",cols="a,a,a,a,a,a,a,a"]
9
9
  |===
10
10
 
@@ -69,8 +69,8 @@ h| Public attributes:
69
69
 
70
70
  {% if klass.constraints.size > 0 %}
71
71
  .{{ klass.constraints.size }}+h| Constraints:
72
- {% for constr in klass.constraints %}
73
- 7+| `{{ constr.body }}`
72
+ {% for constraint in klass.constraints %}
73
+ 7+| `{{ constraint.body }}`: `{{ constraint.definition | replace: '|', '\|' }}`
74
74
 
75
75
  {% endfor %}
76
76
  {% else %}
@@ -1,158 +1,250 @@
1
1
  {% for package in context.packages %}
2
2
  {% assign package_name = package.name | downcase | replace: ":", "" | replace: " ", "_" %}
3
+ {% assign nested_depth = depth | plus: 1 %}
3
4
  {% if additional_context.before and additional_context.before.size > 0 %}
4
5
  {% for before in additional_context.before %}
6
+ {% if before.text %}
7
+
8
+ {% if before.liquid %}
9
+ {{ before.text | interpolate }}
10
+ {% else %}
5
11
  {{ before.text }}
12
+ {% endif %}
13
+ {% endif %}
14
+ {% endfor %}
15
+ {% endif %}
16
+
17
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
18
+ {{equalsigns}} {{ package.name }}
19
+ {%comment%}(package: depth is {{ depth }}, nested_depth is {{ nested_depth }}){%endcomment%}
20
+
21
+ {% if additional_context.all_macros.size > 0 %}
22
+ {% assign sorted_all_macros = additional_context.all_macros | where: "position", "before" | sort: 'index' %}
23
+ {% for block in sorted_all_macros %}
24
+ {% case block.type %}
25
+ {% when 'include_block' %}
26
+ {% unless block.package and block.package != package.name %}
27
+ {% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
28
+ {% capture block_content %}{% include block_filename %}{% endcapture %}
29
+ {% unless block_content contains "Liquid error" %}
30
+ {% if block.text %}
31
+
32
+ {% if block.liquid %}
33
+ {{ block.text | interpolate }}
34
+ {% else %}
35
+ {{ block.text }}
36
+ {% endif %}
37
+ {% endif %}
38
+
39
+ {{ block_content }}
40
+ {% endunless %}
41
+ {% endunless %}
42
+ {% when 'package_text' %}
43
+ {% unless block.package and block.package != package.name %}
44
+
45
+ {% if block.liquid %}
46
+ {{ block.text | interpolate }}
47
+ {% else %}
48
+ {{ block.text }}
49
+ {% endif %}
50
+ {% endunless %}
51
+ {% else %}
52
+ {% endcase %}
6
53
  {% endfor %}
7
54
  {% endif %}
8
- {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}{{equalsigns}} {{ package.name }}
9
55
 
10
56
  {% assign before_package_key = 'before;' | append: package.name %}
11
57
  {% if additional_context[before_package_key] and additional_context[before_package_key].size > 0 %}
12
58
  {% for before in additional_context[before_package_key] %}
59
+ {% if before.text %}
60
+
61
+ {% if before.liquid %}
62
+ {{ before.text | interpolate }}
63
+ {% else %}
13
64
  {{ before.text }}
65
+ {% endif %}
66
+ {% endif %}
14
67
  {% endfor %}
15
68
  {% endif %}
16
69
 
70
+ .Metadata of {{ package.name }} ({{ package.stereotype }})
17
71
  [cols="1a,4a"]
18
72
  |===
19
73
 
20
- h|Description: | {{ package.definition }}
74
+ h|Description: | {{ package.definition | replace: '|', '\|' }}
21
75
  h|Parent package: | {{ context.name }}
22
76
  h|Stereotype: | «{{ package.stereotype }}»
23
77
 
24
78
  |===
25
79
 
80
+ {% assign inner_depth = depth | plus: 2 %}
26
81
  {% assign basic_types = package.classes | where: "stereotype", "BasicType" %}
27
82
  {% assign unions = package.data_types | where: "stereotype", "Union" %}
28
83
  {% assign code_lists = package.classes | where: "stereotype", "CodeList" %}
29
84
  {% assign not_classes_length = basic_types.size | plus: code_lists.size %}
30
- {% assign not_classes_stereoptypes = 'DataType,BasicType,Enumeration,CodeList' | split: ','%}
85
+ {% assign not_classes_stereotypes = 'DataType,BasicType,Enumeration,CodeList' | split: ','%}
86
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
31
87
  {{equalsigns}}= Classes
88
+ {%comment%}(class: depth is {{ depth }}, nested_depth is {{ nested_depth }}){%endcomment%}
32
89
 
33
90
  {% unless not_classes_length == package.classes.size %}
34
91
 
35
92
  {% for klass in package.classes %}
36
- {% unless not_classes_stereoptypes contains klass.stereotype %}
37
- {% include "packages_data_dictionary_class" %}
93
+ {% unless not_classes_stereotypes contains klass.stereotype %}
94
+ {% include "packages_data_dictionary_class", depth: inner_depth %}
38
95
  {% endunless %}
39
96
  {% endfor %}
40
97
  {% else %}
41
- None
98
+ None.
42
99
  {% endunless %}
43
100
 
101
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
44
102
  {{equalsigns}}= Basic types
103
+ {%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
45
104
 
46
105
  {% if basic_types.size > 0 %}
47
-
48
- {% include "packages_data_dictionary_classes", classes: basic_types %}
106
+ {% include "packages_data_dictionary_classes", classes: basic_types, depth: inner_depth %}
49
107
  {% else %}
50
- None
108
+ None.
51
109
  {% endif %}
52
110
 
111
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
53
112
  {{equalsigns}}= Unions
113
+ {%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
54
114
 
55
115
  {% if unions.size > 0 %}
56
-
57
- {% include "packages_data_dictionary_classes", classes: unions %}
116
+ {% include "packages_data_dictionary_classes", classes: unions, depth: inner_depth %}
58
117
  {% else %}
59
- None
118
+ None.
60
119
  {% endif %}
61
120
 
121
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
62
122
  {{equalsigns}}= Code lists
123
+ {%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
63
124
 
64
125
  {% if code_lists.size > 0 %}
65
-
66
- {% include "packages_data_dictionary_classes", classes: code_lists %}
126
+ {% include "packages_data_dictionary_classes", classes: code_lists, depth: inner_depth %}
67
127
  {% else %}
68
- None
128
+ None.
69
129
  {% endif %}
70
130
 
131
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
71
132
  {{equalsigns}}= Data types
133
+ {%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
72
134
 
73
135
  {% assign non_unions = package.data_types | where: "stereotype", "DataType" %}
74
136
  {% if non_unions.size > 0 %}
75
-
76
137
  {% for data_type in non_unions %}
77
- {% capture generalizations %}{% assign inheritance = data_type.associations | where: "member_end_type", "inheritance" %}{% for assoc in inheritance %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
138
+ {% capture generalizations %}{% assign inheritance = klass.associations | where: "member_end_type", "inheritance" %}{% for assoc in inheritance %}<<{{ assoc.member_end }}-section,{{ assoc.member_end }}>>{% endfor %}{% endcapture %}
78
139
  [[{{ data_type.name }}-section]]
79
- [cols="1a"]
140
+ {{equalsigns}}== {{ data_type.name }}
141
+
142
+ .Metadata of {{ data_type.name }} ({{ data_type.stereotype }})
143
+ [cols="1a,4a"]
80
144
  |===
81
- |*{{ data_type.name }}*
82
- |[cols="1,4"]
83
- !===
84
- !Definition: ! {{ data_type.definition }}
85
- !Subclass of: ! {% if generalizations.size > 4 %}{{ generalizations }}{% else %}None{% endif %}
86
- !Stereotype: ! «{{ data_type.stereotype }
87
- !===
145
+ h|Definition: | {{ data_type.definition | replace: '|', '\|' }}
146
+ h|Subclass of: | {% if generalizations.size > 0 %}{{ generalizations }}{% else %}None{% endif %}
147
+ h|Stereotype: | «{{ data_type.stereotype }}»
148
+
149
+ {% if data_type.constraints.size > 0 %}
150
+ {% for constraint in data_type.constraints %}
151
+ h| Constraint:
152
+ | `{{ constraint.body }}`:
153
+
154
+ [source,ocl,%unnumbered]
155
+ ------
156
+ {{ constraint.definition | replace: '|', '\|' }}
157
+ ------
158
+ {% endfor %}
159
+ {% endif %}
160
+
161
+ |===
162
+
88
163
  {% if data_type.associations.size > 0 %}
89
164
  {% capture rendered_associations %}
90
165
  {% for assoc in data_type.associations %}
91
166
  {% if assoc.member_end_attribute_name.size > 0 %}
92
- {% capture cardinality %}{% if assoc.member_end_cardinality.min == 'C' %}[0..{{ assoc.member_end_cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ assoc.member_end_cardinality.max }}]{% endif %}{% endcapture %}
93
- ! {{ assoc.member_end_attribute_name }} !<<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }} ! {{ assoc.definition }}
167
+ {% capture cardinality %}&#91;{% case assoc.member_end_cardinality.min %}{% when "C" %}0{% when "M" %}1{% else %}{{assoc.member_end_cardinality.min}}{% endcase %}..{{ assoc.member_end_cardinality.max }}&#93;{% endcapture %}
168
+ | {{ assoc.member_end_attribute_name }}
169
+ | <<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }}
170
+ | {{ assoc.definition | replace: '|', '\|' }}
94
171
  {% endif %}
95
172
  {% endfor %}
96
173
  {% endcapture %}
97
- {% if rendered_associations.size > 100 %}
98
- |
99
- [cols="15,20,60",options="header"]
100
- !===
101
- ! Role name !Target class and multiplicity !Definition
174
+
175
+ {% assign associations_stripped = rendered_associations | strip_newlines | strip %}
176
+
177
+ {% if associations_stripped.size > 0 %}
178
+ .Associations of {{ data_type.name }} ({{ data_type.stereotype }})
179
+ [cols="15a,20a,60a",options="header"]
180
+ |===
181
+ | Role name | Target class and multiplicity | Definition
182
+
102
183
  {{ rendered_associations }}
103
- !===
184
+
185
+ |===
104
186
  {% endif %}
105
187
  {% endif %}
188
+
106
189
  {% if data_type.attributes.size > 0 %}
107
- |
108
- [cols="15,20,60",options="header"]
109
- !===
110
- ! Attribute ! Value type and multiplicity ! Definition
190
+ .Attributes of {{ data_type.name }} ({{ data_type.stereotype }})
191
+ [cols="15a,20a,60a",options="header"]
192
+ |===
193
+ | Attribute | Value type and multiplicity | Definition
194
+
111
195
  {% for attr in data_type.attributes %}
112
- {% capture cardinality %}{% if attr.cardinality.min == 'C' %}[0..{{ attr.cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ attr.cardinality.max }}]{% endif %}{% endcapture %}
113
- ! {{ attr.name }} !<<{{ attr.type }}-section,{{ attr.type }}>> {{ cardinality }} !{{ attr.definition }}
196
+ {% capture cardinality %}&#91;{% case attr.cardinality.min %}{% when 'C' %}0{% when 'M' %}1{% else %}{{ attr.cardinality.min }}{% endcase %}..{{ attr.cardinality.max }}&#93;{% endcapture %}
197
+ | {{ attr.name }}
198
+ | <<{{ attr.type }}-section,{{ attr.type }}>> {{ cardinality }}
199
+ | {{ attr.definition | replace: '|', '\|' }}
200
+
114
201
  {% endfor %}
115
- !===
116
- | NOTE: Unless otherwise specified, all attributes and role names have the stereotype «Property».
117
- {% endif %}
118
202
  |===
119
203
 
204
+ [NOTE,keep-separate=true]
205
+ ====
206
+ Unless otherwise specified, all attributes and role names have the stereotype
207
+ «Property».
208
+ ====
209
+ {% endif %}
210
+
120
211
  {% endfor %}
121
212
  {% else %}
122
- None
213
+ None.
123
214
  {% endif %}
124
215
 
125
216
  {{equalsigns}}= Enumerations
126
217
 
127
218
  {% if package.enums.size > 0 %}
128
-
129
219
  {% for enum in package.enums %}
130
220
  [[{{ enum.name }}-section]]
131
- [cols="1a"]
221
+ {{equalsigns}}== {{ enum.name }}
222
+
223
+ .Metadata of {{ enum.name }} (Enumeration)
224
+ [cols="1a,4a"]
225
+ |===
226
+ h|Definition: | {{ enum.definition | replace: '|', '\|' }}
227
+ h|Stereotype: | «Enumeration»
132
228
  |===
133
- |*{{ enum.name }}*
134
- |
135
- [cols="1,4"]
136
- !===
137
- !Definition: ! {{ enum.definition }}
138
- !Stereotype: ! «Enumeration»
139
- !===
229
+
140
230
  {% if enum.values.size > 0 %}
141
- |
142
- [cols="1,4",options="header"]
143
- !===
144
- ! Literal value !Definition
231
+ .Values of {{ enum.name }} (Enumeration)
232
+ [cols="1a,4a",options="header"]
233
+ |===
234
+ | Literal value | Definition
145
235
 
146
236
  {% for val in enum.values %}
147
- ! {{ val.name }} !{{ val.definition }}
237
+ | {{ val.name }}
238
+ | {{ val.definition | replace: '|', '\|' }}
239
+
148
240
  {% endfor %}
149
- !===
150
- {% endif %}
241
+
151
242
  |===
243
+ {% endif %}
152
244
 
153
245
  {% endfor %}
154
246
  {% else %}
155
- None
247
+ None.
156
248
  {% endif %}
157
249
 
158
250
  {% if additional_context.include_block and additional_context.include_block.size > 0 %}
@@ -175,27 +267,83 @@ None
175
267
  {% capture block_content %}{% include block_filename %}{% endcapture %}
176
268
  {% unless block_content contains "Liquid error" %}
177
269
  {% if block.text %}
270
+
271
+ {% if block.liquid %}
272
+ {{ block.text | interpolate }}
273
+ {% else %}
178
274
  {{ block.text }}
179
275
  {% endif %}
276
+ {% endif %}
180
277
  {{ block_content }}
181
278
  {% endunless %}
182
279
  {% endfor %}
183
280
  {% endif %}
184
281
 
282
+ {% if additional_context.all_macros.size > 0 %}
283
+ {% assign sorted_all_macros = additional_context.all_macros | where: "position", "after" | sort: 'index' %}
284
+ {% for block in sorted_all_macros %}
285
+ {% case block.type %}
286
+ {% when 'include_block' %}
287
+ {% unless block.package and block.package != package.name %}
288
+ {% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
289
+ {% capture block_content %}{% include block_filename %}{% endcapture %}
290
+ {% unless block_content contains "Liquid error" %}
291
+ {% if block.text %}
292
+
293
+ {% if block.liquid %}
294
+ {{ block.text | interpolate }}
295
+ {% else %}
296
+ {{ block.text }}
297
+ {% endif %}
298
+ {% endif %}
299
+
300
+ {{ block_content }}
301
+ {% endunless %}
302
+ {% endunless %}
303
+ {% when 'package_text' %}
304
+ {% unless block.package and block.package != package.name %}
305
+
306
+ {% if block.liquid %}
307
+ {{ block.text | interpolate }}
308
+ {% else %}
309
+ {{ block.text }}
310
+ {% endif %}
311
+ {% endunless %}
312
+ {% else %}
313
+ {% endcase %}
314
+ {% endfor %}
315
+ {% endif %}
316
+
317
+
185
318
  {% assign after_package_key = 'after;' | append: package.name %}
186
319
  {% if additional_context[after_package_key] %}
187
320
  {{equalsigns}}= Additional information
188
321
  {% for after in additional_context[after_package_key] %}
322
+ {% if after.text %}
323
+
324
+ {% if after.liquid %}
325
+ {{ after.text | interpolate }}
326
+ {% else %}
189
327
  {{ after.text }}
328
+ {% endif %}
329
+ {% endif %}
190
330
  {% endfor %}
191
331
  {% endif %}
332
+
192
333
  {% if package.packages.size > 0 and render_nested_packages %}
193
- {% assign nested_depth = depth | plus: 1 %}{% include "packages_data_dictionary", depth: nested_depth, context: package %}
334
+ {% include "packages_data_dictionary", depth: nested_depth, context: package %}
194
335
  {% endif %}
195
336
  {% endfor %}
196
337
 
197
338
  {% if additional_context.after and additional_context.after.size > 0 %}
198
339
  {% for after in additional_context.after %}
340
+ {% if after.text %}
341
+
342
+ {% if after.liquid %}
343
+ {{ after.text | interpolate }}
344
+ {% else %}
199
345
  {{ after.text }}
346
+ {% endif %}
347
+ {% endif %}
200
348
  {% endfor %}
201
349
  {% endif %}
@@ -1,67 +1,73 @@
1
- {% capture generalizations %}{% assign inheritance = klass.associations | where: "member_end_type", "inheritance" %}{% for assoc in inheritance %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
1
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
2
+ {% capture generalizations %}{% assign inheritance = klass.associations | where: "member_end_type", "inheritance" %}{% for assoc in inheritance %}<<{{ assoc.member_end }}-section,{{ assoc.member_end }}>>{% endfor %}{% endcapture %}
2
3
  [[{{ klass.name }}-section]]
3
- [cols="1a"]
4
+ {{equalsigns}} {{ klass.name }}
5
+ {%comment%}(inside class: depth is {{ depth }}, equalsigns {{equalsigns}}){%endcomment%}
6
+
7
+ .Metadata of {{ klass.name }} ({{klass.stereotype}})
8
+ [cols="1a,4a"]
4
9
  |===
5
- |*{{ klass.name }}*
6
- |
7
- [cols="1,4"]
8
- !===
9
- ! Definition: ! {{ klass.definition }}
10
- ! Subclass of: ! {% if generalizations.size > 4 %}{{ generalizations }}{% else %}None{% endif %}
11
- ! Stereotype: ! «{{ klass.stereotype }}»
10
+ h| Definition: | {{ klass.definition | replace: '|', '\|' }}
11
+ h| Subclass of: | {% if generalizations.size > 0 %}{{ generalizations }}{% else %}None{% endif %}
12
+ h| Stereotype: | «{{ klass.stereotype }}»
13
+
12
14
  {% if klass.constraints.size > 0 %}
13
15
  {% for constraint in klass.constraints %}
14
- ! Constraint: ! {{ constraint.body }}: {{ constraint.definition | replace: '|', '\|' }}
16
+ h| Constraint:
17
+ | `{{ constraint.body }}`:
18
+
19
+ [source,ocl,%unnumbered]
20
+ ------
21
+ {{ constraint.definition | replace: '|', '\|' }}
22
+ ------
15
23
  {% endfor %}
16
24
  {% endif %}
17
- !===
25
+
26
+ |===
18
27
 
19
28
  {% if klass.associations.size > 0 %}
20
29
  {% capture rendered_associations %}
21
30
  {% for assoc in klass.associations %}
22
-
23
31
  {% if assoc.member_end_attribute_name.size > 0 %}
24
-
25
- {% capture cardinality %}{% if assoc.member_end_cardinality.min == 'C' %}[0..{{ assoc.member_end_cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ assoc.member_end_cardinality.max }}]{% endif %}{% endcapture %}
26
-
27
- ! {{ assoc.member_end_attribute_name }}
28
- ! <<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }}
29
- ! {{ assoc.definition }}
30
-
32
+ {% capture cardinality %}&#91;{% case assoc.member_end_cardinality.min %}{% when "C" %}0{% when "M" %}1{% else %}{{assoc.member_end_cardinality.min}}{% endcase %}..{{ assoc.member_end_cardinality.max }}&#93;{% endcapture %}
33
+ | {{ assoc.member_end_attribute_name }}
34
+ | <<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }}
35
+ | {{ assoc.definition | replace: '|', '\|' }}
31
36
  {% endif %}
32
37
  {% endfor %}
33
38
  {% endcapture %}
39
+ {% assign associations_stripped = rendered_associations | strip_newlines | strip %}
40
+
41
+ {% if associations_stripped.size > 0 %}
42
+ .Associations of {{ klass.name }} ({{ klass.stereotype }})
43
+ [cols="15a,20a,60a",options="header"]
44
+ |===
45
+ | Role name | Target class and multiplicity | Definition
34
46
 
35
- {% if rendered_associations.size > 100 %}
36
- |
37
- [cols="15,20,60",options="header"]
38
- !===
39
- ! *Role name*
40
- ! *Target class and multiplicity*
41
- ! *Definition*
42
47
  {{ rendered_associations }}
43
- !===
44
- {% endif %}
45
48
 
49
+ |===
50
+ {% endif %}
46
51
  {% endif %}
47
- {% if klass.attributes.size > 0 %}
48
- |
49
- [cols="15,20,60",options="header"]
50
- !===
51
- ! *Attribute*
52
- ! *Value type and multiplicity*
53
- ! *Definition*
54
- {% for attr in klass.attributes %}
55
52
 
56
- {% capture cardinality %}{% if attr.cardinality.min == 'C' %}[0..{{ attr.cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ attr.cardinality.max }}]{% endif %}{% endcapture %}
53
+ {% if klass.attributes.size > 0 %}
54
+ .Attributes of {{ klass.name }} ({{klass.stereotype}})
55
+ [cols="15a,20a,60a",options="header"]
56
+ |===
57
+ | Attribute | Value type and multiplicity | Definition
57
58
 
58
- ! {{ attr.name }}
59
- !<<{{ attr.type }}-section,{{ attr.type }}>> {{ cardinality }}
60
- !{{ attr.definition }}
59
+ {% for attr in klass.attributes %}
60
+ {% capture cardinality %}&#91;{% case attr.cardinality.min %}{% when 'C' %}0{% when 'M' %}1{% else %}{{ attr.cardinality.min }}{% endcase %}..{{ attr.cardinality.max }}&#93;{% endcapture %}
61
+ | {{ attr.name }}
62
+ | <<{{ attr.type }}-section,{{ attr.type }}>> {{ cardinality }}
63
+ | {{ attr.definition | replace: '|', '\|' }}
61
64
 
62
65
  {% endfor %}
63
- !===
66
+ |===
64
67
 
65
- | NOTE: Unless otherwise specified, all attributes and role names have the stereotype «Property».
68
+ [NOTE,keep-separate=true]
69
+ ====
70
+ Unless otherwise specified, all attributes and role names have the stereotype
71
+ «Property».
72
+ ====
66
73
  {% endif %}
67
- |===