metanorma-plugin-lutaml 0.7.16 → 0.7.18
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.
- checksums.yaml +4 -4
- data/README.adoc +516 -278
- data/lib/metanorma/plugin/lutaml/liquid_templates/_klass_table.liquid +4 -4
- data/lib/metanorma/plugin/lutaml/lutaml_ea_diagram_block_macro.rb +50 -8
- data/lib/metanorma/plugin/lutaml/lutaml_ea_xmi_base.rb +57 -5
- data/lib/metanorma/plugin/lutaml/lutaml_preprocessor.rb +36 -130
- data/lib/metanorma/plugin/lutaml/utils.rb +6 -1
- data/lib/metanorma/plugin/lutaml/version.rb +1 -1
- data/metanorma-plugin-lutaml.gemspec +2 -2
- metadata +11 -12
- data/lib/metanorma/plugin/lutaml/express_remarks_decorator.rb +0 -78
data/README.adoc
CHANGED
@@ -4,13 +4,15 @@ image:https://github.com/metanorma/metanorma-plugin-lutaml/workflows/rake/badge.
|
|
4
4
|
|
5
5
|
== Purpose
|
6
6
|
|
7
|
-
LutaML is a data model accessor that supports various data model formats
|
8
|
-
|
7
|
+
LutaML is a data model accessor that supports various data model formats.
|
8
|
+
|
9
|
+
This plugin allows you to access the following types of information models from
|
10
|
+
within a Metanorma document:
|
9
11
|
|
10
12
|
* EXPRESS (`*.exp` files)
|
11
|
-
*
|
13
|
+
* LutaML-UML (`*.lutaml` files)
|
14
|
+
* Enterprise Architect exported UML in XMI format (`*.xmi` files)
|
12
15
|
|
13
|
-
This plugin allows you to access LutaML models from within a Metanorma document.
|
14
16
|
|
15
17
|
== Installation
|
16
18
|
|
@@ -24,11 +26,93 @@ $ gem install metanorma-plugin-lutaml
|
|
24
26
|
|
25
27
|
=== General
|
26
28
|
|
29
|
+
The LutaML plugin supports working with EXPRESS schema files to render EXPRESS
|
30
|
+
models and definitions.
|
31
|
+
|
27
32
|
LutaML supports accessing EXPRESS models via the
|
28
33
|
https://github.com/lutaml/expressir[Expressir] parser.
|
29
34
|
|
30
35
|
|
31
|
-
===
|
36
|
+
=== Document attribute `:lutaml-express-index:`
|
37
|
+
|
38
|
+
This attribute allows specifying one or more EXPRESS files to defined names
|
39
|
+
for later use with `lutaml_express` command.
|
40
|
+
|
41
|
+
Syntax:
|
42
|
+
|
43
|
+
[source,adoc]
|
44
|
+
----
|
45
|
+
:lutaml-express-index: shortname_of_index; name_of_schemas_listing_file.yml;
|
46
|
+
----
|
47
|
+
|
48
|
+
Where:
|
49
|
+
|
50
|
+
`shortname_of_index`:: is name of the parsed EXPRESS files context for the later
|
51
|
+
use.
|
52
|
+
|
53
|
+
`name_of_schemas_listing_file.yml`:: location of the YAML index file to parse
|
54
|
+
all EXPRESS files listed within.
|
55
|
+
|
56
|
+
|
57
|
+
[example]
|
58
|
+
.Define an index in the document and use it in the `lutaml_express` command
|
59
|
+
====
|
60
|
+
[source,adoc]
|
61
|
+
-----
|
62
|
+
:lutaml-express-index: my_custom_name; /path/to/schemas.yml
|
63
|
+
|
64
|
+
[lutaml_express,my_custom_name,context]
|
65
|
+
----
|
66
|
+
{% for schema in context.schemas %}
|
67
|
+
== {{schema.id}}
|
68
|
+
|
69
|
+
{% for entity in schema.entities %}
|
70
|
+
=== {{entity.id}}
|
71
|
+
{% endfor %}
|
72
|
+
|
73
|
+
{% endfor %}
|
74
|
+
-----
|
75
|
+
|
76
|
+
Where the `schemas.yml` file contains:
|
77
|
+
|
78
|
+
[source,yaml]
|
79
|
+
----
|
80
|
+
---
|
81
|
+
schemas:
|
82
|
+
action_schema:
|
83
|
+
path: "../../schemas/resources/action_schema/action_schema.exp"
|
84
|
+
application_context_schema:
|
85
|
+
path: "../../schemas/resources/application_context_schema/application_context_schema.exp"
|
86
|
+
----
|
87
|
+
====
|
88
|
+
|
89
|
+
|
90
|
+
=== Schemas listing file
|
91
|
+
|
92
|
+
The schemas listing file is a YAML file that lists all EXPRESS files to be
|
93
|
+
parsed. The file should have the following structure:
|
94
|
+
|
95
|
+
[source,yaml]
|
96
|
+
----
|
97
|
+
---
|
98
|
+
schemas:
|
99
|
+
schema_name:
|
100
|
+
path: path/to/schema_file.exp
|
101
|
+
schema_name_2:
|
102
|
+
path: path/to/schema_file_2.exp
|
103
|
+
----
|
104
|
+
|
105
|
+
Where:
|
106
|
+
|
107
|
+
`schema_name`:: is the name of the EXPRESS schema.
|
108
|
+
|
109
|
+
`path`:: (optional) path to the EXPRESS schema file. When the path is not
|
110
|
+
specified, the command will look for the schema file in the directory where the
|
111
|
+
YAML file is located using the filename pattern `{schema_name}.exp`. The path
|
112
|
+
can be relative to the YAML file or an absolute path.
|
113
|
+
|
114
|
+
|
115
|
+
=== Usage of the `lutaml_express` command
|
32
116
|
|
33
117
|
Given an `example.exp` EXPRESS file with content:
|
34
118
|
|
@@ -57,13 +141,16 @@ SCHEMA test_schema 'test';
|
|
57
141
|
END_SCHEMA;
|
58
142
|
----
|
59
143
|
|
60
|
-
And the `
|
144
|
+
And the `lutaml_express` block:
|
61
145
|
|
62
146
|
[source,adoc]
|
63
147
|
-----
|
64
|
-
|
148
|
+
<<<<<<< HEAD
|
149
|
+
[lutaml_express,example.exp,my_context]
|
150
|
+
=======
|
151
|
+
[lutaml_express_liquid,example.exp,my_context]
|
152
|
+
>>>>>>> accd8ee (Remove obsolete codes of macros "lutaml" and "lutaml_express")
|
65
153
|
----
|
66
|
-
|
67
154
|
{% for schema in my_context.schemas %}
|
68
155
|
== {{schema.id}}
|
69
156
|
|
@@ -75,15 +162,20 @@ And the `lutaml` block:
|
|
75
162
|
----
|
76
163
|
-----
|
77
164
|
|
165
|
+
NOTE: The `lutaml` command can auto-detect the EXPRESS schema file type by the
|
166
|
+
file extension. If the file extension is `.exp`, the command will use the
|
167
|
+
`Expressir` parser to parse the file. If the file extension is `.lutaml`, the
|
168
|
+
command will use the `Lutaml` parser to parse the file.
|
169
|
+
|
78
170
|
Where:
|
79
171
|
|
80
172
|
* content within the block is called the "`template`";
|
81
173
|
|
82
174
|
* `{example.exp}` is the location of the EXPRESS schema file (`*.exp`) that
|
83
175
|
contains data to be loaded. Location of the file is computed relative to the
|
84
|
-
source directory that `[
|
85
|
-
`[
|
86
|
-
`/foo/bar/doc.adoc`, the data file is expected to be found at
|
176
|
+
source directory that `[lutaml_express_liquid]` is used (e.g., if
|
177
|
+
`[lutaml_express_liquid,example.exp,my_context]` is invoked in an `.adoc` file
|
178
|
+
located at `/foo/bar/doc.adoc`, the data file is expected to be found at
|
87
179
|
`/foo/bar/example.exp`);
|
88
180
|
|
89
181
|
* `{my_context}` is the name where the EXPRESS Repository read from the `.exp`
|
@@ -107,28 +199,27 @@ ____
|
|
107
199
|
=== my_type5
|
108
200
|
____
|
109
201
|
|
110
|
-
This command also supports `.lutaml` files.
|
111
202
|
|
112
|
-
Instead of using the direct path to the file one can use
|
203
|
+
Instead of using the direct path to the file one can use `:lutaml-express-index:`
|
113
204
|
document attribute to supply directory with express files or YAML index file to
|
114
205
|
parse as well as the cache file location.
|
115
206
|
|
116
|
-
|
207
|
+
Syntax:
|
117
208
|
|
118
209
|
[source,adoc]
|
119
|
-
|
210
|
+
----
|
120
211
|
:lutaml-express-index: my_custom_name; dir_or_index_path[; cache=cache_path]
|
121
|
-
|
212
|
+
----
|
122
213
|
|
123
214
|
Where:
|
124
215
|
|
125
|
-
|
126
|
-
use with lutaml
|
216
|
+
`my_custom_name`:: is name of the parsed EXPRESS files context for the later
|
217
|
+
use with lutaml command
|
127
218
|
|
128
|
-
|
219
|
+
`dir_or_index_path`:: location of directory with EXPRESS files or path to the
|
129
220
|
YAML index file to parse
|
130
221
|
|
131
|
-
|
222
|
+
`cache_path`:: (optional) location of the Expressir cache file to use
|
132
223
|
|
133
224
|
Example of usage:
|
134
225
|
|
@@ -138,7 +229,7 @@ Example of usage:
|
|
138
229
|
Author
|
139
230
|
:lutaml-express-index: index_name; /path/to/express_files; cache=/path/to/cache_file.yaml
|
140
231
|
|
141
|
-
[
|
232
|
+
[lutaml_express_liquid,index_name,context]
|
142
233
|
----
|
143
234
|
{% for schema in context.schemas %}
|
144
235
|
== {{schema.id}}
|
@@ -146,22 +237,29 @@ Author
|
|
146
237
|
----
|
147
238
|
-----
|
148
239
|
|
149
|
-
|
240
|
+
* The `lutaml_express_liquid` macro processes the EXPRESS files specified by
|
241
|
+
the `index_name` and makes them available in the `context` as
|
242
|
+
Liquid Drops object.
|
150
243
|
|
151
|
-
|
244
|
+
* The Liquid template inside the macro block iterates over the `schemas` in
|
245
|
+
the `context` and renders the attributes of each schema such as `id`.
|
246
|
+
|
247
|
+
=== Using `config_yaml`
|
248
|
+
|
249
|
+
This functionality allows `[lutaml_express_liquid]` blocks to load a full set of
|
152
250
|
EXPRESS schemas in one index, and then provide a select ("filter") option
|
153
251
|
per-block via a separate YAML file.
|
154
252
|
|
155
253
|
[source,adoc]
|
156
|
-
|
254
|
+
-----
|
157
255
|
:lutaml-express-index: all_schemas; ../schemas_all.yaml;
|
158
256
|
|
159
|
-
[
|
257
|
+
[lutaml_express_liquid,all_schemas,context,config_yaml=schemas.yaml]
|
160
258
|
---
|
161
259
|
{% assign selected = context.schemas | where: "selected" %}
|
162
260
|
{% render "templates/resources/schema" for selected as schema %}
|
163
|
-
---
|
164
261
|
----
|
262
|
+
-----
|
165
263
|
|
166
264
|
Where `schemas_all.yml` provides all schemas:
|
167
265
|
|
@@ -196,17 +294,24 @@ via Liquid:
|
|
196
294
|
|
197
295
|
[source,liquid]
|
198
296
|
----
|
199
|
-
[
|
297
|
+
[lutaml_express_liquid,schemas_1,repo,config_yaml=select.yaml]
|
200
298
|
---
|
201
299
|
{% assign selected = repo.schemas | where: "selected" %}
|
202
300
|
... do things with `selected` ...
|
203
|
-
|
301
|
+
---
|
302
|
+
-----
|
204
303
|
|
205
304
|
NOTE: This functionality is used in the ISO 10303 SRL to load the full schema
|
206
305
|
set at once but only render the selected schemas in individual documents.
|
207
306
|
|
208
307
|
|
209
|
-
== Usage with UML
|
308
|
+
== Usage with Lutaml-UML
|
309
|
+
|
310
|
+
=== General
|
311
|
+
|
312
|
+
The LutaML plugin supports working with LutaML UML files to render UML diagrams
|
313
|
+
and class definitions.
|
314
|
+
|
210
315
|
|
211
316
|
=== Rendering a LutaML view: `lutaml_diagram`
|
212
317
|
|
@@ -239,9 +344,9 @@ diagram MyView {
|
|
239
344
|
The `lutaml_diagram` command will add the image to the document.
|
240
345
|
|
241
346
|
[source,adoc]
|
242
|
-
|
347
|
+
----
|
243
348
|
lutaml_diagram::example.lutaml[]
|
244
|
-
|
349
|
+
----
|
245
350
|
|
246
351
|
The `lutaml_diagram` command can also be used to denote a block with an embedded
|
247
352
|
LutaML view.
|
@@ -273,172 +378,7 @@ diagram MyView {
|
|
273
378
|
....
|
274
379
|
----
|
275
380
|
|
276
|
-
===
|
277
|
-
|
278
|
-
This command allows to quickly render a LutaML diagram as an image file by
|
279
|
-
specifying the name of diagram.
|
280
|
-
|
281
|
-
[source,adoc]
|
282
|
-
-----
|
283
|
-
lutaml_ea_diagram::[name="name_of_diagram",base_path="/path/to/xmi-images",format="png"]
|
284
|
-
-----
|
285
|
-
|
286
|
-
The code will search the diagram with name `name_of_diagram` and then
|
287
|
-
render it as:
|
288
|
-
|
289
|
-
[source,adoc]
|
290
|
-
-----
|
291
|
-
[[figure-{{ diagram.xmi_id }}]]
|
292
|
-
.{{ diagram.name }}
|
293
|
-
image::{{ image_base_path }}/{{ diagram.xmi_id }}.{{ format | default: 'png' }}[]
|
294
|
-
-----
|
295
|
-
|
296
|
-
=== Rendering a LutaML GML Dictionary: `lutaml_gml_dictionary`
|
297
|
-
|
298
|
-
This command allows to render a LutaML GML Dictionary by using Liquid Drop.
|
299
|
-
|
300
|
-
GmlDictionaryDrop has the following attributes:
|
301
|
-
|
302
|
-
* name
|
303
|
-
* file_name
|
304
|
-
* dictionary_entry
|
305
|
-
|
306
|
-
Each `dictionary_entry` has the following attributes:
|
307
|
-
|
308
|
-
* name
|
309
|
-
* description
|
310
|
-
|
311
|
-
[source,adoc]
|
312
|
-
-----
|
313
|
-
lutaml_gml_dictionary::/path/to/dictionary.xml[template="/path/to/template.liquid",context=dict]
|
314
|
-
-----
|
315
|
-
|
316
|
-
The command accepts the options listed below:
|
317
|
-
|
318
|
-
* `/path/to/dictionary.xml` specifies the path of xml file of the
|
319
|
-
GML Dictionary.
|
320
|
-
|
321
|
-
* `template="/path/to/template.liquid"` specifies the liquid template.
|
322
|
-
For example, you can create a liquid template and link it by `template`.
|
323
|
-
|
324
|
-
* `context=dict` define the context in the template.
|
325
|
-
|
326
|
-
[source,adoc]
|
327
|
-
-----
|
328
|
-
[cols="3a,22a"]
|
329
|
-
|===
|
330
|
-
| Name | {{ dict.file_name }}
|
331
|
-
|
332
|
-
h| Code h| Description
|
333
|
-
{% for entry in dict.dictionary_entry %}
|
334
|
-
| {{ entry.name }} | {{ entry.description }}
|
335
|
-
{% endfor %}
|
336
|
-
|===
|
337
|
-
|
338
|
-
[.source]
|
339
|
-
<<source_link>>
|
340
|
-
-----
|
341
|
-
|
342
|
-
In spite of specifying the path of the template, you can also define an inline
|
343
|
-
template within a block by
|
344
|
-
`[lutaml_gml_dictionary,"/path/to/dictionary.xml",context=dict]`.
|
345
|
-
|
346
|
-
[source,adoc]
|
347
|
-
-----
|
348
|
-
[lutaml_gml_dictionary,"/path/to/dictionary.xml",context=dict]
|
349
|
-
--
|
350
|
-
{% capture link %}https://www.test.com/{{ dict.file_name }}{% endcapture %}
|
351
|
-
|
352
|
-
[cols="3a,22a"]
|
353
|
-
|===
|
354
|
-
| File Name | {{ dict.file_name }}
|
355
|
-
h| URL | {{ link }}
|
356
|
-
h| Help | Description
|
357
|
-
{% for entry in dict.dictionary_entry %}
|
358
|
-
| {{ entry.name }} | {{ entry.description }}
|
359
|
-
{% endfor %}
|
360
|
-
|===
|
361
|
-
|
362
|
-
[.source]
|
363
|
-
<<source_link>>
|
364
|
-
--
|
365
|
-
-----
|
366
|
-
|
367
|
-
=== Rendering a LutaML table of a class: `lutaml_klass_table`
|
368
|
-
|
369
|
-
This command allows to render a LutaML table of a class by using Liquid Drop.
|
370
|
-
|
371
|
-
The table will show:
|
372
|
-
|
373
|
-
* Class Name
|
374
|
-
* Class Definition
|
375
|
-
* Inherited Properties
|
376
|
-
* Self-defined Properties
|
377
|
-
* Properties Inherited from Association
|
378
|
-
* Properties Defined in Association
|
379
|
-
|
380
|
-
[source,adoc]
|
381
|
-
-----
|
382
|
-
lutaml_klass_table::/path/to/example.xmi[name="NameOfClass",template="/path/to/templates/_my_klass_table.liquid"]
|
383
|
-
-----
|
384
|
-
|
385
|
-
The command accepts the options listed below:
|
386
|
-
|
387
|
-
* `/path/to/example.xmi` specifies the path of xmi file.
|
388
|
-
|
389
|
-
* `name` option only, `name` option with `package` option or `path` option.
|
390
|
-
One of 3 forms of options can be used to specify the name of the class.
|
391
|
-
|
392
|
-
** `name="NameOfClass"` specifies the name of the `class`.
|
393
|
-
(e.g. `name="Building"`)
|
394
|
-
If there are multiple classes with the same name, other form of options
|
395
|
-
are recommended to specify the class.
|
396
|
-
|
397
|
-
** `package="NameOfPackage"name="NameOfClass"` specifies the name of the
|
398
|
-
`class` (specified by `name` option) inside the `package`
|
399
|
-
(specified by `package` option).
|
400
|
-
The `package` option must be used with the `name` option.
|
401
|
-
(e.g. `package="uro",name="_BoundarySurface"`)
|
402
|
-
|
403
|
-
** `path="PathOfClass"` specifies the `absolute` path of the `class`
|
404
|
-
which is started with `::`
|
405
|
-
(e.g. `path="::EA_Model::Conceptual Models::i-UR::Urban Planning ADE 3.
|
406
|
-
1::uro::_BoundarySurface"`)
|
407
|
-
or `relative` path of the `class` which is not started with `::`
|
408
|
-
(e.g. `path="uro::_BoundarySurface"`).
|
409
|
-
The last part of the path separated by `::` is the name of the `class`.
|
410
|
-
The other parts of the path are the names of the `packages`.
|
411
|
-
|
412
|
-
* `template="/path/to/templates/_my_klass_table.liquid"` specifies the path of
|
413
|
-
the liquid template. (Optional)
|
414
|
-
By default, it will look for the template `_klass_table.liquid` defined in
|
415
|
-
`lib/metanorma/plugin/lutaml/templates`. This template can be customized by
|
416
|
-
changing the template path in the `template` option.
|
417
|
-
|
418
|
-
* `guidance="/path/to/my_guidance.yml"` specifies the path of
|
419
|
-
the yaml file of the guidance. (Optional)
|
420
|
-
|
421
|
-
The guidance file should be in the following format:
|
422
|
-
|
423
|
-
[source,yaml]
|
424
|
-
----
|
425
|
-
---
|
426
|
-
classes:
|
427
|
-
- name: Name Of Class
|
428
|
-
attributes:
|
429
|
-
- name: Name Of Attribute (e.g. gml:boundedBy)
|
430
|
-
used: false
|
431
|
-
guidance: |
|
432
|
-
Drop guidance message here.
|
433
|
-
...
|
434
|
-
----
|
435
|
-
|
436
|
-
If you want to define the guidance, you can define the `name` of the class
|
437
|
-
under `classes`. Then define which `attributes` you want to add guidance by the
|
438
|
-
`name`. Set `used` to show the attribute is used or not. Drop the message of
|
439
|
-
guidance in `guidance`.
|
440
|
-
|
441
|
-
=== Generating UML class and attributes: `lutaml_uml_class`
|
381
|
+
=== Generating a UML class and attributes clause: `lutaml_uml_class`
|
442
382
|
|
443
383
|
This command allows rendering a definition clause for a UML class.
|
444
384
|
|
@@ -503,17 +443,17 @@ ____
|
|
503
443
|
|
504
444
|
The command accepts two options:
|
505
445
|
|
506
|
-
|
446
|
+
`skip_headers=true`:: (or just `skip_headers`) The initial heading (the UML class name)
|
507
447
|
will not be generated. This is useful if additional content is to be supplied
|
508
448
|
to the clause, such as diagrams that are defined outside the UML model.
|
509
449
|
|
510
|
-
|
450
|
+
`depth={n}`:: (default: `2`) This determines the depth of the generated headings.
|
511
451
|
A depth of `2` means the initial heading will have 2 equal signs, and so forth.
|
512
452
|
The heading depth of the attributes are in relation to the initial depth, so
|
513
453
|
a depth of `2` will have the "Attributes" section at depth `3`.
|
514
454
|
|
515
455
|
|
516
|
-
=== `lutaml_uml_attributes_table`
|
456
|
+
=== Generating a UML attributes table: `lutaml_uml_attributes_table`
|
517
457
|
|
518
458
|
This command allows rendering definition tables for a UML model.
|
519
459
|
|
@@ -541,12 +481,12 @@ diagram MyView {
|
|
541
481
|
}
|
542
482
|
----
|
543
483
|
|
544
|
-
And the `lutaml_uml_attributes_table`
|
484
|
+
And the `lutaml_uml_attributes_table` command:
|
545
485
|
|
546
486
|
[source,adoc]
|
547
|
-
|
487
|
+
----
|
548
488
|
[lutaml_uml_attributes_table, example.lutaml, AttributeProfile]
|
549
|
-
|
489
|
+
----
|
550
490
|
|
551
491
|
Will produce this output:
|
552
492
|
|
@@ -568,9 +508,9 @@ ____
|
|
568
508
|
In case of "enumeration" (AddressClassProfile) entity:
|
569
509
|
|
570
510
|
[source,adoc]
|
571
|
-
|
511
|
+
----
|
572
512
|
[lutaml_uml_attributes_table, example.lutaml, AddressClassProfile]
|
573
|
-
|
513
|
+
----
|
574
514
|
|
575
515
|
Will produce this output:
|
576
516
|
|
@@ -586,20 +526,305 @@ ____
|
|
586
526
|
|===
|
587
527
|
____
|
588
528
|
|
589
|
-
=== Usage of `lutaml_uml_datamodel_description` macro
|
590
529
|
|
591
|
-
|
592
|
-
objects for supplied XMI file.
|
530
|
+
== Usage with Enterprise Architect (UML in XMI)
|
593
531
|
|
594
|
-
|
532
|
+
=== General
|
595
533
|
|
596
|
-
|
597
|
-
|
534
|
+
The LutaML plugin supports working with Enterprise Architect exported XMI files
|
535
|
+
to render UML diagrams and class definitions.
|
536
|
+
|
537
|
+
The commands are prefixed as `lutaml_ea_*` to denote their specific use with
|
538
|
+
Enterprise Architect XMI files.
|
539
|
+
|
540
|
+
|
541
|
+
=== Document attribute `:lutaml-xmi-index:`
|
542
|
+
|
543
|
+
This attribute allows specifying one or more XMI files to defined names
|
544
|
+
for later use with `lutaml_ea_*` commands.
|
598
545
|
|
599
|
-
|
546
|
+
Syntax:
|
600
547
|
|
601
548
|
[source,adoc]
|
602
|
-
|
549
|
+
----
|
550
|
+
:lutaml-xmi-index: index_name; index_path[; config=config_path]
|
551
|
+
----
|
552
|
+
|
553
|
+
where:
|
554
|
+
|
555
|
+
`index_name`:: name of index
|
556
|
+
`index_path`:: path to XMI file for the later use with `lutaml_ea_*` command
|
557
|
+
`config_path`:: optional, location of YAML configuration file that specifies
|
558
|
+
what packages to include in the render, what render style is desired and
|
559
|
+
location of the root package.
|
560
|
+
|
561
|
+
|
562
|
+
[example]
|
563
|
+
.Define two indexes in the document and use them in the `lutaml_ea_xmi` command
|
564
|
+
====
|
565
|
+
[source,adoc]
|
566
|
+
----
|
567
|
+
:lutaml-xmi-index: first-xmi-index; /path/to/first.xmi
|
568
|
+
:lutaml-xmi-index: second-xmi-index; /path/to/second.xmi; config=/path/to/config.yml
|
569
|
+
|
570
|
+
[lutaml_ea_xmi,index=first-xmi-index]
|
571
|
+
--
|
572
|
+
...
|
573
|
+
--
|
574
|
+
|
575
|
+
lutaml_ea_diagram::[name="NameOfDiagramInSecondXmiIndex",base_path="./xmi-images",format="png",index="second-xmi-index"]
|
576
|
+
...
|
577
|
+
----
|
578
|
+
|
579
|
+
The command `lutaml_ea_xmi` will load the XMI file from the path
|
580
|
+
`/path/to/first.xmi` which is specified by the `index`: `first-xmi-index`.
|
581
|
+
|
582
|
+
The command `lutaml_ea_diagram` will load the XMI file from the path
|
583
|
+
`/path/to/second.xmi` which is specified by the `index`: `second-xmi-index`.
|
584
|
+
====
|
585
|
+
|
586
|
+
|
587
|
+
=== Rendering a Enterprise Architect diagram from XMI: `lutaml_ea_diagram`
|
588
|
+
|
589
|
+
This command allows to quickly render a LutaML diagram as an image file by
|
590
|
+
specifying the name of diagram.
|
591
|
+
|
592
|
+
Syntax:
|
593
|
+
|
594
|
+
[source,adoc]
|
595
|
+
----
|
596
|
+
lutaml_ea_diagram::[{options}]
|
597
|
+
----
|
598
|
+
|
599
|
+
where `{options}` is a hash of options, where:
|
600
|
+
|
601
|
+
`name`:: (mandatory) name of the diagram to render.
|
602
|
+
`base_path`:: (mandatory) base path where the diagram images are located.
|
603
|
+
`format`:: (optional) format of the image file. Defaults to `png`.
|
604
|
+
`index`:: (optional) index name of the XMI file. If the index is not provided,
|
605
|
+
the command will look for the diagram in the first XMI file specified through
|
606
|
+
the `lutaml_ea_xmi` command.
|
607
|
+
`package`:: (optional) name of the package which contains the diagram. If the
|
608
|
+
package is not provided, the command will look for the diagram across all
|
609
|
+
packages in the XMI file.
|
610
|
+
|
611
|
+
The diagram with name `name_of_diagram` will be converted into the following
|
612
|
+
Metanorma block:
|
613
|
+
|
614
|
+
[source,adoc]
|
615
|
+
----
|
616
|
+
[[figure-{{ diagram.xmi_id }}]]
|
617
|
+
.{{ diagram.name }}
|
618
|
+
image::{{ image_base_path }}/{{ diagram.xmi_id }}.{{ format | default: 'png' }}[]
|
619
|
+
----
|
620
|
+
|
621
|
+
[example]
|
622
|
+
.Specifying a diagram within an XMI file
|
623
|
+
====
|
624
|
+
[source,adoc]
|
625
|
+
----
|
626
|
+
lutaml_ea_diagram::[name="name_of_diagram",base_path="/path/to/xmi-images",format="png"]
|
627
|
+
----
|
628
|
+
|
629
|
+
Renders the diagram with name `name_of_diagram` from the XMI file in PNG format,
|
630
|
+
where the EA images exported with the XMI file are at `/path/to/xmi-images`.
|
631
|
+
====
|
632
|
+
|
633
|
+
[example]
|
634
|
+
.Specifying a diagram within a specific package (if there are multiple diagrams with the same name)
|
635
|
+
====
|
636
|
+
[source,adoc]
|
637
|
+
----
|
638
|
+
lutaml_ea_diagram::[name="DiagramName",package="PackageA",base_path="/path/to/xmi-images"]
|
639
|
+
----
|
640
|
+
|
641
|
+
The search wil be restricted to the diagrams named `DiagramName` in the
|
642
|
+
`PackageA` package.
|
643
|
+
====
|
644
|
+
|
645
|
+
[example]
|
646
|
+
.Specifying a diagram using a specific index
|
647
|
+
====
|
648
|
+
[source,adoc]
|
649
|
+
----
|
650
|
+
:lutaml-xmi-index: index_name; /path/to/xmi-file.xmi
|
651
|
+
|
652
|
+
...
|
653
|
+
|
654
|
+
lutaml_ea_diagram::[name="name_of_diagram",base_path="/path/to/xmi-images",format="png",index="index_name"]
|
655
|
+
----
|
656
|
+
|
657
|
+
Renders the diagram with name `name_of_diagram` from the XMI file in PNG format,
|
658
|
+
where the EA images exported with the XMI file are at `/path/to/xmi-images` and
|
659
|
+
the XMI file defined in the index `index_name`.
|
660
|
+
====
|
661
|
+
|
662
|
+
|
663
|
+
|
664
|
+
=== Generating a class definition table for a class: `lutaml_klass_table`
|
665
|
+
|
666
|
+
This command allows to render a LutaML table of a class by using Liquid Drop.
|
667
|
+
|
668
|
+
The table will show:
|
669
|
+
|
670
|
+
* Class Name
|
671
|
+
* Class Definition
|
672
|
+
* Inherited Properties
|
673
|
+
* Self-defined Properties
|
674
|
+
* Properties Inherited from Association
|
675
|
+
* Properties Defined in Association
|
676
|
+
|
677
|
+
[source,adoc]
|
678
|
+
----
|
679
|
+
lutaml_klass_table::/path/to/example.xmi[name="NameOfClass",template="/path/to/templates/_my_klass_table.liquid"]
|
680
|
+
----
|
681
|
+
|
682
|
+
The command accepts the options listed below:
|
683
|
+
|
684
|
+
* `/path/to/example.xmi` specifies the path of xmi file.
|
685
|
+
|
686
|
+
* `name` option only, `name` option with `package` option or `path` option.
|
687
|
+
One of 3 forms of options can be used to specify the name of the class.
|
688
|
+
|
689
|
+
** `name="NameOfClass"` specifies the name of the `class`.
|
690
|
+
(e.g. `name="Building"`)
|
691
|
+
If there are multiple classes with the same name, other form of options
|
692
|
+
are recommended to specify the class.
|
693
|
+
|
694
|
+
** `package="NameOfPackage"name="NameOfClass"` specifies the name of the
|
695
|
+
`class` (specified by `name` option) inside the `package`
|
696
|
+
(specified by `package` option).
|
697
|
+
The `package` option must be used with the `name` option.
|
698
|
+
(e.g. `package="uro",name="_BoundarySurface"`)
|
699
|
+
|
700
|
+
** `path="PathOfClass"` specifies the `absolute` path of the `class`
|
701
|
+
which is started with `::`
|
702
|
+
(e.g. `path="::EA_Model::Conceptual Models::i-UR::Urban Planning ADE 3.
|
703
|
+
1::uro::_BoundarySurface"`)
|
704
|
+
or `relative` path of the `class` which is not started with `::`
|
705
|
+
(e.g. `path="uro::_BoundarySurface"`).
|
706
|
+
The last part of the path separated by `::` is the name of the `class`.
|
707
|
+
The other parts of the path are the names of the `packages`.
|
708
|
+
|
709
|
+
* `template="/path/to/templates/_my_klass_table.liquid"` specifies the path of
|
710
|
+
the liquid template. (Optional)
|
711
|
+
By default, it will look for the template `_klass_table.liquid` defined in
|
712
|
+
`lib/metanorma/plugin/lutaml/templates`. This template can be customized by
|
713
|
+
changing the template path in the `template` option.
|
714
|
+
|
715
|
+
* `guidance="/path/to/my_guidance.yml"` specifies the path of
|
716
|
+
the yaml file of the guidance. (Optional)
|
717
|
+
|
718
|
+
The guidance file should be in the following format:
|
719
|
+
|
720
|
+
[source,yaml]
|
721
|
+
----
|
722
|
+
---
|
723
|
+
classes:
|
724
|
+
- name: Name Of Class
|
725
|
+
attributes:
|
726
|
+
- name: Name Of Attribute (e.g. gml:boundedBy)
|
727
|
+
used: false
|
728
|
+
guidance: |
|
729
|
+
Drop guidance message here.
|
730
|
+
...
|
731
|
+
----
|
732
|
+
|
733
|
+
If you want to define the guidance, you can define the `name` of the class
|
734
|
+
under `classes`. Then define which `attributes` you want to add guidance by the
|
735
|
+
`name`. Set `used` to show the attribute is used or not. Drop the message of
|
736
|
+
guidance in `guidance`.
|
737
|
+
|
738
|
+
|
739
|
+
|
740
|
+
|
741
|
+
=== Usage of `lutaml_ea_xmi` command
|
742
|
+
|
743
|
+
The `lutaml_ea_xmi` command supersedes the `lutaml_uml_datamodel_description`
|
744
|
+
command which it is functionally equivalent to.
|
745
|
+
|
746
|
+
This command renders data model packages and its dependent objects for supplied
|
747
|
+
XMI file, by using Liquid Drop objects.
|
748
|
+
|
749
|
+
NOTE: The performance of `lutaml_ea_xmi` exceeds
|
750
|
+
`lutaml_uml_datamodel_description` by 10~20 times (Tested with a 10.6MB XMI file
|
751
|
+
with 120,000+ lines).
|
752
|
+
|
753
|
+
NOTE: To migrate to this command from `lutaml_uml_datamodel_description`, just
|
754
|
+
replace the command `lutaml_uml_datamodel_description` by `lutaml_ea_xmi`.
|
755
|
+
|
756
|
+
Replace:
|
757
|
+
|
758
|
+
[source,adoc]
|
759
|
+
----
|
760
|
+
[lutaml_uml_datamodel_description, path/to/example.xmi]
|
761
|
+
...
|
762
|
+
----
|
763
|
+
|
764
|
+
By:
|
765
|
+
|
766
|
+
[source,adoc]
|
767
|
+
----
|
768
|
+
[lutaml_ea_xmi, path/to/example.xmi]
|
769
|
+
...
|
770
|
+
----
|
771
|
+
|
772
|
+
You can define guidance in the configuration file as well. The configuration
|
773
|
+
file will looks like:
|
774
|
+
|
775
|
+
[source,yaml]
|
776
|
+
----
|
777
|
+
packages:
|
778
|
+
- my_package
|
779
|
+
guidance: "path/to/guidance.yaml"
|
780
|
+
----
|
781
|
+
|
782
|
+
The guidance file should be in the following format:
|
783
|
+
|
784
|
+
[source,yaml]
|
785
|
+
----
|
786
|
+
---
|
787
|
+
classes:
|
788
|
+
- name: "NameOfClass"
|
789
|
+
attributes:
|
790
|
+
- name: Name Of Attribute (e.g. gml:boundedBy)
|
791
|
+
used: false
|
792
|
+
guidance: |
|
793
|
+
Drop guidance message here.
|
794
|
+
...
|
795
|
+
----
|
796
|
+
|
797
|
+
If you want to define the guidance, you can define the `name` of the class
|
798
|
+
under `classes`. Then define which `attributes` you want to add guidance by the
|
799
|
+
`name`. Set `used` to show the attribute is used or not. Drop the message of
|
800
|
+
guidance in `guidance`.
|
801
|
+
|
802
|
+
The `name` of class can be defined in the following ways:
|
803
|
+
|
804
|
+
* `name: "NameOfClass"` specifies the name of the `class`.
|
805
|
+
(e.g. `name: "Building"`)
|
806
|
+
If there are multiple classes with the same name, it is recommended to
|
807
|
+
specify the class by absolute path.
|
808
|
+
|
809
|
+
* `name: "::NameOfPackage::NameOfClass"` specifies the name of the `class` in
|
810
|
+
`absolute` path.
|
811
|
+
(e.g. `name: "::EA_Model::Conceptual Models::CityGML2.0::bldg::Building"`)
|
812
|
+
|
813
|
+
|
814
|
+
=== Usage of `lutaml_uml_datamodel_description` command
|
815
|
+
|
816
|
+
This command allows to quickly render data model packages and its dependent
|
817
|
+
objects for supplied XMI file.
|
818
|
+
|
819
|
+
Given an Enterprise Architect `example.xmi` file with 2 packages:
|
820
|
+
|
821
|
+
* 'Another'
|
822
|
+
* 'CityGML'
|
823
|
+
|
824
|
+
The `lutaml_uml_datamodel_description` command can be used:
|
825
|
+
|
826
|
+
[source,adoc]
|
827
|
+
----
|
603
828
|
[lutaml_uml_datamodel_description, path/to/example.xmi]
|
604
829
|
--
|
605
830
|
[.before]
|
@@ -643,15 +868,15 @@ footer text
|
|
643
868
|
....
|
644
869
|
--
|
645
870
|
--
|
646
|
-
|
871
|
+
----
|
647
872
|
|
648
873
|
Where:
|
649
874
|
|
650
875
|
* `path/to/example.xmi` - required, path to the XMI file to render
|
651
876
|
|
652
|
-
* `[.before]` - block text that adds additional text before the rendered output, can be used only once, additional occurrences of
|
877
|
+
* `[.before]` - block text that adds additional text before the rendered output, can be used only once, additional occurrences of command will overwrite text, not that `literal` block style must be used in there(eg `....`)
|
653
878
|
|
654
|
-
* `[.after]` - block text that adds additional text after the rendered output, can be used only once, additional occurrences of
|
879
|
+
* `[.after]` - block text that adds additional text after the rendered output, can be used only once, additional occurrences of command will overwrite text
|
655
880
|
|
656
881
|
* `[.after, package="Another"]` - block text to be inserted before(after in case of `.before` name) the package
|
657
882
|
|
@@ -663,7 +888,7 @@ Where:
|
|
663
888
|
+
|
664
889
|
The logic is as follows:
|
665
890
|
[source,adoc]
|
666
|
-
|
891
|
+
----
|
667
892
|
{% for diagram in package.diagrams %}
|
668
893
|
[[figure-{{ diagram.xmi_id }}]]
|
669
894
|
.{{ diagram.name }}
|
@@ -673,18 +898,21 @@ image::{{ image_base_path }}/{{ diagram.xmi_id }}.{{ format | default: 'png' }}[
|
|
673
898
|
{{ diagram.definition | html2adoc }}
|
674
899
|
{% endif %}
|
675
900
|
{% endfor %}
|
676
|
-
|
901
|
+
----
|
677
902
|
|
678
|
-
For instance, the script will take package diagrams supplied in the XMI file and will try to include `image` with the name equal to diagram' xmi_id attribute plus `.png`. Also one can add any text to the
|
903
|
+
For instance, the script will take package diagrams supplied in the XMI file and will try to include `image` with the name equal to diagram' xmi_id attribute plus `.png`. Also one can add any text to the command text, it will be added as paragraph before each image include.
|
679
904
|
|
680
905
|
* `[.diagram_include_block, package="Another"]` - same as above, but diagram will be included only for supplied package name
|
681
906
|
|
682
|
-
* `[.include_block, base_path="spec/fixtures"]` -
|
907
|
+
* `[.include_block, base_path="spec/fixtures"]` - command to include files (`*.adoc` or `*.liquid`) for each package name. Attribute `base_path` is a required attribute to supply path prefix where to look for file to include. command will look for a file called `base_path` + `/` `_package_name`(downcase, replace : -> '', ' ' -> '_') + `.adoc`[`.liquid`], eg for package 'My Package name' and `base_path` eq to `my/path`, command will look for the following file path: `my/path/_my_package_name.adoc`.
|
683
908
|
|
684
909
|
* `[.include_block, package="Another", base_path="spec/fixtures"]` - same as above, but include block will be included only for supplied package name
|
685
910
|
|
686
911
|
|
687
|
-
NOTE: .after, .before, package_text and include_block
|
912
|
+
NOTE: .after, .before, package_text and include_block commandses all can be used with additional option - `liquid`, if this option is supplied then the code inside block will be interpolated in liquid context
|
913
|
+
|
914
|
+
|
915
|
+
=== Referencing objects generated by LutaML
|
688
916
|
|
689
917
|
|
690
918
|
There are two other commands that are used to refer to LutaML generated document elements:
|
@@ -695,10 +923,11 @@ There are two other commands that are used to refer to LutaML generated document
|
|
695
923
|
* `lutaml_table`. Provides a reference anchor to the definition tables of a
|
696
924
|
particular package, class, enumeration or data type object in the XMI.
|
697
925
|
|
926
|
+
|
698
927
|
The syntax is as follows:
|
699
928
|
|
700
929
|
[source,adoc]
|
701
|
-
|
930
|
+
----
|
702
931
|
// For lutaml_figure
|
703
932
|
This is lutaml_figure::[package="Wrapper root package", name="Fig B1 Full model"] figure
|
704
933
|
|
@@ -707,14 +936,14 @@ This is lutaml_table::[package="Wrapper root package"] package
|
|
707
936
|
This is lutaml_table::[package="Wrapper root package", class="my name"] class
|
708
937
|
This is lutaml_table::[package="Wrapper root package", enum="my name"] enumeration
|
709
938
|
This is lutaml_table::[package="Wrapper root package", data_type="my name"] data type
|
710
|
-
|
939
|
+
----
|
711
940
|
|
712
|
-
This code will be transformed into `<<figure-{diagram.xmi_id}>>` and will point to diagram figure. One can only use this
|
941
|
+
This code will be transformed into `<<figure-{diagram.xmi_id}>>` and will point to diagram figure. One can only use this command when document rendered `lutaml_uml_datamodel_description` command as it needs diagram lookup table in order to reference package diagram.
|
713
942
|
|
714
943
|
Will produce this output:
|
715
944
|
|
716
945
|
[source,adoc]
|
717
|
-
|
946
|
+
----
|
718
947
|
my text
|
719
948
|
== CityGML package
|
720
949
|
=== CityGML overview
|
@@ -785,9 +1014,9 @@ h|Constraints: 7+| (none)
|
|
785
1014
|
=== Additional Information
|
786
1015
|
|
787
1016
|
text after CityGML package
|
788
|
-
|
1017
|
+
----
|
789
1018
|
|
790
|
-
In addition to the XMI file, this
|
1019
|
+
In addition to the XMI file, this command also supports a YAML configuration file
|
791
1020
|
that specifies:
|
792
1021
|
|
793
1022
|
* What packages to include in the render;
|
@@ -853,7 +1082,7 @@ equal to 2, root package will be `one-1`.
|
|
853
1082
|
]
|
854
1083
|
----
|
855
1084
|
|
856
|
-
Usage with
|
1085
|
+
Usage with command:
|
857
1086
|
|
858
1087
|
[source,adoc]
|
859
1088
|
--
|
@@ -870,73 +1099,82 @@ and iterate through packages according to the order supplied in the file. All
|
|
870
1099
|
packages that matches `skip` in the YAML config file will be skipped during
|
871
1100
|
render.
|
872
1101
|
|
873
|
-
=== Usage of `lutaml_ea_xmi` macro
|
874
1102
|
|
875
|
-
This command is a replacement for `lutaml_uml_datamodel_description` to perform
|
876
|
-
the same functionalities of `lutaml_uml_datamodel_description`, which is to
|
877
|
-
render data model packages and its dependent objects for supplied XMI file, by
|
878
|
-
using Liquid Drop. The performance of `lutaml_ea_xmi` can be improved by
|
879
|
-
10~20 times. (Tested with a 10.6MB XMI file with 120000+ lines)
|
880
1103
|
|
881
|
-
To use this macro, you only need to replace `lutaml_uml_datamodel_description`
|
882
|
-
by `lutaml_ea_xmi`.
|
883
1104
|
|
884
|
-
|
1105
|
+
== Usage with GML
|
885
1106
|
|
886
|
-
|
887
|
-
-----
|
888
|
-
[lutaml_uml_datamodel_description, path/to/example.xmi]
|
889
|
-
...
|
890
|
-
-----
|
1107
|
+
=== Rendering a LutaML GML Dictionary: `lutaml_gml_dictionary`
|
891
1108
|
|
892
|
-
|
1109
|
+
This command allows to render a LutaML GML Dictionary by using Liquid Drop.
|
1110
|
+
|
1111
|
+
GmlDictionaryDrop has the following attributes:
|
1112
|
+
|
1113
|
+
* name
|
1114
|
+
* file_name
|
1115
|
+
* dictionary_entry
|
1116
|
+
|
1117
|
+
Each `dictionary_entry` has the following attributes:
|
1118
|
+
|
1119
|
+
* name
|
1120
|
+
* description
|
893
1121
|
|
894
1122
|
[source,adoc]
|
895
|
-
|
896
|
-
[
|
897
|
-
|
898
|
-
-----
|
1123
|
+
----
|
1124
|
+
lutaml_gml_dictionary::/path/to/dictionary.xml[template="/path/to/template.liquid",context=dict]
|
1125
|
+
----
|
899
1126
|
|
900
|
-
|
901
|
-
file will looks like:
|
1127
|
+
The command accepts the options listed below:
|
902
1128
|
|
903
|
-
|
904
|
-
|
905
|
-
packages:
|
906
|
-
- my_package
|
907
|
-
guidance: "path/to/guidance.yaml"
|
908
|
-
-----
|
1129
|
+
* `/path/to/dictionary.xml` specifies the path of xml file of the
|
1130
|
+
GML Dictionary.
|
909
1131
|
|
910
|
-
|
1132
|
+
* `template="/path/to/template.liquid"` specifies the liquid template.
|
1133
|
+
For example, you can create a liquid template and link it by `template`.
|
911
1134
|
|
912
|
-
|
1135
|
+
* `context=dict` define the context in the template.
|
1136
|
+
|
1137
|
+
[source,adoc]
|
913
1138
|
----
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
1139
|
+
[cols="3a,22a"]
|
1140
|
+
|===
|
1141
|
+
| Name | {{ dict.file_name }}
|
1142
|
+
|
1143
|
+
h| Code h| Description
|
1144
|
+
{% for entry in dict.dictionary_entry %}
|
1145
|
+
| {{ entry.name }} | {{ entry.description }}
|
1146
|
+
{% endfor %}
|
1147
|
+
|===
|
1148
|
+
|
1149
|
+
[.source]
|
1150
|
+
<<source_link>>
|
923
1151
|
----
|
924
1152
|
|
925
|
-
|
926
|
-
|
927
|
-
`
|
928
|
-
guidance in `guidance`.
|
1153
|
+
In spite of specifying the path of the template, you can also define an inline
|
1154
|
+
template within a block by
|
1155
|
+
`[lutaml_gml_dictionary,"/path/to/dictionary.xml",context=dict]`.
|
929
1156
|
|
930
|
-
|
1157
|
+
[source,adoc]
|
1158
|
+
----
|
1159
|
+
[lutaml_gml_dictionary,"/path/to/dictionary.xml",context=dict]
|
1160
|
+
--
|
1161
|
+
{% capture link %}https://www.test.com/{{ dict.file_name }}{% endcapture %}
|
931
1162
|
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
1163
|
+
[cols="3a,22a"]
|
1164
|
+
|===
|
1165
|
+
| File Name | {{ dict.file_name }}
|
1166
|
+
h| URL | {{ link }}
|
1167
|
+
h| Help | Description
|
1168
|
+
{% for entry in dict.dictionary_entry %}
|
1169
|
+
| {{ entry.name }} | {{ entry.description }}
|
1170
|
+
{% endfor %}
|
1171
|
+
|===
|
1172
|
+
|
1173
|
+
[.source]
|
1174
|
+
<<source_link>>
|
1175
|
+
--
|
1176
|
+
----
|
936
1177
|
|
937
|
-
* `name: "::NameOfPackage::NameOfClass"` specifies the name of the `class` in
|
938
|
-
`absolute` path.
|
939
|
-
(e.g. `name: "::EA_Model::Conceptual Models::CityGML2.0::bldg::Building"`)
|
940
1178
|
|
941
1179
|
== Documentation
|
942
1180
|
|