metanorma-plugin-lutaml 0.4.9 → 0.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
- |===