expressir 2.1.30 → 2.1.31

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.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +98 -0
  3. data/.github/workflows/links.yml +100 -0
  4. data/.github/workflows/rake.yml +4 -0
  5. data/.github/workflows/release.yml +5 -0
  6. data/.github/workflows/validate_schemas.yml +1 -1
  7. data/.gitignore +3 -0
  8. data/.rubocop.yml +1 -1
  9. data/.rubocop_todo.yml +244 -39
  10. data/Gemfile +2 -1
  11. data/README.adoc +621 -54
  12. data/docs/Gemfile +12 -0
  13. data/docs/_config.yml +141 -0
  14. data/docs/_guides/changes/changes-format.adoc +778 -0
  15. data/docs/_guides/changes/importing-eengine.adoc +898 -0
  16. data/docs/_guides/changes/index.adoc +396 -0
  17. data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
  18. data/docs/_guides/changes/validating-changes.adoc +681 -0
  19. data/docs/_guides/cli/benchmark-performance.adoc +834 -0
  20. data/docs/_guides/cli/coverage-analysis.adoc +921 -0
  21. data/docs/_guides/cli/format-schemas.adoc +547 -0
  22. data/docs/_guides/cli/index.adoc +8 -0
  23. data/docs/_guides/cli/managing-changes.adoc +927 -0
  24. data/docs/_guides/cli/validate-ascii.adoc +645 -0
  25. data/docs/_guides/cli/validate-schemas.adoc +534 -0
  26. data/docs/_guides/index.adoc +165 -0
  27. data/docs/_guides/ler/creating-packages.adoc +664 -0
  28. data/docs/_guides/ler/index.adoc +305 -0
  29. data/docs/_guides/ler/loading-packages.adoc +707 -0
  30. data/docs/_guides/ler/package-formats.adoc +748 -0
  31. data/docs/_guides/ler/querying-packages.adoc +826 -0
  32. data/docs/_guides/ler/validating-packages.adoc +750 -0
  33. data/docs/_guides/liquid/basic-templates.adoc +813 -0
  34. data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
  35. data/docs/_guides/liquid/drops-reference.adoc +829 -0
  36. data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
  37. data/docs/_guides/liquid/index.adoc +468 -0
  38. data/docs/_guides/manifests/creating-manifests.adoc +483 -0
  39. data/docs/_guides/manifests/index.adoc +307 -0
  40. data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
  41. data/docs/_guides/manifests/validating-manifests.adoc +713 -0
  42. data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
  43. data/docs/_guides/ruby-api/index.adoc +257 -0
  44. data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
  45. data/docs/_guides/ruby-api/search-engine.adoc +609 -0
  46. data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
  47. data/docs/_pages/data-model.adoc +665 -0
  48. data/docs/_pages/express-language.adoc +506 -0
  49. data/docs/_pages/getting-started.adoc +414 -0
  50. data/docs/_pages/index.adoc +116 -0
  51. data/docs/_pages/introduction.adoc +256 -0
  52. data/docs/_pages/ler-packages.adoc +837 -0
  53. data/docs/_pages/parsers.adoc +683 -0
  54. data/docs/_pages/schema-manifests.adoc +431 -0
  55. data/docs/_references/index.adoc +228 -0
  56. data/docs/_tutorials/creating-ler-package.adoc +735 -0
  57. data/docs/_tutorials/documentation-coverage.adoc +795 -0
  58. data/docs/_tutorials/index.adoc +221 -0
  59. data/docs/_tutorials/liquid-templates.adoc +806 -0
  60. data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
  61. data/docs/_tutorials/querying-schemas.adoc +751 -0
  62. data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
  63. data/docs/index.adoc +242 -0
  64. data/docs/lychee.toml +84 -0
  65. data/examples/demo_ler_usage.sh +86 -0
  66. data/examples/ler/README.md +111 -0
  67. data/examples/ler/simple_example.ler +0 -0
  68. data/examples/ler/simple_schema.exp +33 -0
  69. data/examples/ler_build.rb +75 -0
  70. data/examples/ler_cli.rb +79 -0
  71. data/examples/ler_demo_complete.rb +276 -0
  72. data/examples/ler_query.rb +91 -0
  73. data/examples/ler_query_examples.rb +305 -0
  74. data/examples/ler_stats.rb +81 -0
  75. data/examples/phase3_demo.rb +159 -0
  76. data/examples/query_demo_simple.rb +131 -0
  77. data/expressir.gemspec +2 -0
  78. data/lib/expressir/cli.rb +12 -4
  79. data/lib/expressir/commands/manifest.rb +427 -0
  80. data/lib/expressir/commands/package.rb +1274 -0
  81. data/lib/expressir/commands/validate.rb +70 -37
  82. data/lib/expressir/commands/validate_ascii.rb +607 -0
  83. data/lib/expressir/commands/validate_load.rb +88 -0
  84. data/lib/expressir/express/formatter.rb +5 -1
  85. data/lib/expressir/express/formatters/remark_item_formatter.rb +25 -0
  86. data/lib/expressir/express/parser.rb +33 -0
  87. data/lib/expressir/manifest/resolver.rb +213 -0
  88. data/lib/expressir/manifest/validator.rb +195 -0
  89. data/lib/expressir/model/declarations/entity.rb +6 -0
  90. data/lib/expressir/model/dependency_resolver.rb +270 -0
  91. data/lib/expressir/model/indexes/entity_index.rb +103 -0
  92. data/lib/expressir/model/indexes/reference_index.rb +148 -0
  93. data/lib/expressir/model/indexes/type_index.rb +149 -0
  94. data/lib/expressir/model/interface_validator.rb +384 -0
  95. data/lib/expressir/model/repository.rb +400 -5
  96. data/lib/expressir/model/repository_validator.rb +295 -0
  97. data/lib/expressir/model/search_engine.rb +525 -0
  98. data/lib/expressir/model.rb +4 -94
  99. data/lib/expressir/package/builder.rb +200 -0
  100. data/lib/expressir/package/metadata.rb +81 -0
  101. data/lib/expressir/package/reader.rb +165 -0
  102. data/lib/expressir/schema_manifest.rb +11 -1
  103. data/lib/expressir/version.rb +1 -1
  104. data/lib/expressir.rb +15 -2
  105. metadata +114 -4
  106. data/docs/benchmarking.adoc +0 -107
  107. data/docs/liquid_drops.adoc +0 -1547
@@ -0,0 +1,483 @@
1
+ ---
2
+ title: Creating Manifests
3
+ parent: Manifest Workflows
4
+ grand_parent: Guides
5
+ nav_order: 1
6
+ ---
7
+
8
+ = Creating Schema Manifests
9
+
10
+ == Purpose
11
+
12
+ This guide shows you how to create schema manifests from root schemas, interpret the output, and handle unresolved schemas.
13
+
14
+ == What You'll Learn
15
+
16
+ * Using the `manifest create` command
17
+ * Understanding resolved vs unresolved schemas
18
+ * Configuring base directories
19
+ * Interpreting creation output
20
+ * Editing manifests to add missing paths
21
+
22
+ == Prerequisites
23
+
24
+ * Expressir installed
25
+ * EXPRESS schema files to package
26
+ * Understanding of link:../../pages/schema-manifests.html[Schema Manifests]
27
+
28
+ == The `manifest create` Command
29
+
30
+ === Basic Syntax
31
+
32
+ [source,bash]
33
+ ----
34
+ expressir manifest create ROOT_SCHEMA [MORE_SCHEMAS...] -o OUTPUT.yaml [OPTIONS]
35
+ ----
36
+
37
+ === Required Parameters
38
+
39
+ `ROOT_SCHEMA`::
40
+ One or more EXPRESS schema files to use as starting points
41
+ +
42
+ The command will parse these files and recursively resolve all their dependencies via `USE FROM` and `REFERENCE FROM` declarations.
43
+
44
+ `-o, --output OUTPUT.yaml`::
45
+ Path where the manifest file will be written
46
+ +
47
+ By convention, use `.yaml` or `.yml` extension.
48
+
49
+ === Optional Parameters
50
+
51
+ `--base-dirs DIRS`::
52
+ Comma-separated list of directories to search for schema files
53
+ +
54
+ [source,bash]
55
+ ----
56
+ --base-dirs /path/to/schemas,/another/path,/third/path
57
+ ----
58
+ +
59
+ The resolver searches for schemas using these patterns:
60
+ +
61
+ * `<SCHEMA_ID>.exp` - Direct schema name match
62
+ * `<lowercase_module>/{mim,arm}.exp` - STEP module pattern
63
+ +
64
+ For example, `Activity_method_mim` will match:
65
+ +
66
+ * `Activity_method_mim.exp`
67
+ * `activity_method/mim.exp`
68
+
69
+ `--verbose`::
70
+ Show detailed progress and warnings during resolution
71
+ +
72
+ Highly recommended for understanding what's happening.
73
+
74
+ == Understanding Manifest Creation Output
75
+
76
+ When you run the create command, you'll see output like this:
77
+
78
+ [source,bash]
79
+ ----
80
+ $ expressir manifest create schemas/activity/mim.exp \
81
+ -o activity_manifest.yaml \
82
+ --base-dirs ~/iso-10303/schemas \
83
+ --verbose
84
+
85
+ Creating manifest from 1 root schema(s)...
86
+ Base directories:
87
+ - /Users/user/iso-10303/schemas
88
+ Resolving dependencies...
89
+ USE FROM action_schema (in Activity_mim): ✓ action_schema.exp
90
+ REFERENCE FROM basic_attribute_schema (in action_schema): ✓ basic_attribute_schema.exp
91
+ USE FROM Activity_method_mim (in Activity_mim): ✗ not found
92
+ ...
93
+ ✓ Manifest created: activity_manifest.yaml
94
+ Resolved schemas: 41
95
+
96
+ ⚠ Unresolved schemas (1):
97
+ - Activity_method_mim
98
+
99
+ Please edit activity_manifest.yaml and set 'path:' for unresolved schemas
100
+ Then validate with: expressir manifest validate activity_manifest.yaml
101
+ ----
102
+
103
+ === Output Components
104
+
105
+ **Resolution Progress** (`✓` and `✗`)::
106
+ Shows each dependency being resolved
107
+ +
108
+ * `✓` = Schema file found and added to manifest
109
+ * `✗` = Schema file not found in base directories
110
+
111
+ **Statistics**::
112
+ * Total root schemas provided
113
+ * Number of resolved schemas (with paths)
114
+ * Number of unresolved schemas (without paths)
115
+
116
+ **Next Steps**::
117
+ The output tells you what to do next - edit the manifest and validate it.
118
+
119
+ == Understanding Resolved vs Unresolved Schemas
120
+
121
+ === Resolved Schemas
122
+
123
+ A schema is "resolved" when the system finds its `.exp` file:
124
+
125
+ [source,yaml]
126
+ ----
127
+ schemas:
128
+ action_schema:
129
+ path: /Users/user/iso-10303/schemas/resources/action_schema/action_schema.exp
130
+ dependencies:
131
+ - schema_name: basic_attribute_schema
132
+ kind: REFERENCE
133
+ ----
134
+
135
+ **Key points:**
136
+
137
+ * Has a `path:` field with full file path
138
+ * Can be used directly in package builds
139
+ * Dependencies are documented but optional
140
+
141
+ === Unresolved Schemas
142
+
143
+ A schema is "unresolved" when the file cannot be found:
144
+
145
+ [source,yaml]
146
+ ----
147
+ schemas:
148
+ Activity_method_mim:
149
+ dependencies:
150
+ - schema_name: action_schema
151
+ kind: USE
152
+ ----
153
+
154
+ **Key points:**
155
+
156
+ * Missing `path:` field
157
+ * Will cause warnings during validation
158
+ * Must be manually resolved or removed
159
+
160
+ == Step-by-Step: Creating Your First Manifest
161
+
162
+ === Step 1: Identify Your Root Schema
163
+
164
+ Find the main schema file you want to package:
165
+
166
+ [source,bash]
167
+ ----
168
+ ls schemas/modules/activity/
169
+ # Output: mim.exp arm.exp
170
+ ----
171
+
172
+ We'll use `mim.exp` as our root.
173
+
174
+ === Step 2: Identify Base Directories
175
+
176
+ List directories where referenced schemas might be located:
177
+
178
+ [source]
179
+ ----
180
+ schemas/
181
+ ├── resources/ ← Resource schemas here
182
+ │ ├── action_schema/
183
+ │ └── approval_schema/
184
+ └── modules/ ← Application modules here
185
+ ├── activity/
186
+ └── activity_method/
187
+ ----
188
+
189
+ We need both `schemas/resources` and `schemas/modules`.
190
+
191
+ === Step 3: Run the Create Command
192
+
193
+ [source,bash]
194
+ ----
195
+ expressir manifest create schemas/modules/activity/mim.exp \
196
+ -o activity_manifest.yaml \
197
+ --base-dirs schemas/resources,schemas/modules \
198
+ --verbose
199
+ ----
200
+
201
+ === Step 4: Review the Output
202
+
203
+ Check for unresolved schemas:
204
+
205
+ [source]
206
+ ----
207
+ ✓ Manifest created: activity_manifest.yaml
208
+ Resolved schemas: 41
209
+
210
+ ⚠ Unresolved schemas (2):
211
+ - Activity_method_mim
212
+ - geometric_model_schema
213
+ ----
214
+
215
+ === Step 5: Examine the Manifest File
216
+
217
+ Open `activity_manifest.yaml`:
218
+
219
+ [source,yaml]
220
+ ----
221
+ name: ''
222
+ version: 1.0.0
223
+ created_at: '2025-12-06T12:00:00Z'
224
+ root_schemas:
225
+ - /full/path/to/schemas/modules/activity/mim.exp
226
+ base_dirs:
227
+ - /full/path/to/schemas/resources
228
+ - /full/path/to/schemas/modules
229
+ schemas:
230
+ Activity_mim:
231
+ path: /full/path/to/schemas/modules/activity/mim.exp
232
+ dependencies:
233
+ - schema_name: action_schema
234
+ kind: USE
235
+ action_schema:
236
+ path: /full/path/to/schemas/resources/action_schema/action_schema.exp
237
+ dependencies: []
238
+ Activity_method_mim: # ← Unresolved!
239
+ dependencies:
240
+ - schema_name: action_schema
241
+ kind: USE
242
+ ----
243
+
244
+ == Editing Manifests to Add Missing Paths
245
+
246
+ === Adding Paths Manually
247
+
248
+ For each unresolved schema, add the `path:` field:
249
+
250
+ [source,yaml]
251
+ ----
252
+ schemas:
253
+ Activity_method_mim:
254
+ path: /full/path/to/schemas/modules/activity_method/mim.exp # ← Added
255
+ dependencies:
256
+ - schema_name: action_schema
257
+ kind: USE
258
+ ----
259
+
260
+ === Finding the Right Path
261
+
262
+ **Option 1: Use `find` command**
263
+
264
+ [source,bash]
265
+ ----
266
+ find schemas/ -name "mim.exp" | grep -i activity_method
267
+ # Output: schemas/modules/activity_method/mim.exp
268
+ ----
269
+
270
+ **Option 2: Use schema name pattern**
271
+
272
+ For `Activity_method_mim`:
273
+ * Remove `_mim` suffix → `Activity_method`
274
+ * Convert to lowercase → `activity_method`
275
+ * Add `/mim.exp` → `activity_method/mim.exp`
276
+
277
+ **Option 3: Search by SCHEMA declaration**
278
+
279
+ [source,bash]
280
+ ----
281
+ grep -r "SCHEMA Activity_method_mim" schemas/
282
+ # Shows which file contains this schema
283
+ ----
284
+
285
+ === Best Practices for Manual Editing
286
+
287
+ **Use absolute paths** (recommended)::
288
+ Ensures manifest works from any directory
289
+ +
290
+ [source,yaml]
291
+ ----
292
+ path: /Users/user/iso-10303/schemas/modules/activity_method/mim.exp
293
+ ----
294
+
295
+ **Or use relative paths** (from manifest location)::
296
+ More portable across systems
297
+ +
298
+ [source,yaml]
299
+ ----
300
+ path: ../../schemas/modules/activity_method/mim.exp
301
+ ----
302
+
303
+ **Document why schemas are unresolved**::
304
+ Add YAML comments to explain
305
+ +
306
+ [source,yaml]
307
+ ----
308
+ future_schema:
309
+ # TODO: Schema not yet released, will be available in v2.0
310
+ dependencies: []
311
+ ----
312
+
313
+ == Handling Special Cases
314
+
315
+ === Circular Dependencies
316
+
317
+ EXPRESS allows schema-level circular references. The manifest creation handles these correctly:
318
+
319
+ [source]
320
+ ----
321
+ Looking for: measure_schema.exp
322
+ ├─ Finds: representation_schema.exp (depends on measure_schema)
323
+ │ └─ Circular reference detected: measure_schema (skipping, valid)
324
+ └─ Both schemas included in manifest
325
+ ----
326
+
327
+ With `--verbose`, you'll see:
328
+
329
+ [source]
330
+ ----
331
+ Circular reference detected: measure_schema (valid schema-level circular dependency, skipping)
332
+ ----
333
+
334
+ **This is not an error** - both schemas will be included with their paths.
335
+
336
+ === Multiple Root Schemas
337
+
338
+ You can specify multiple root schemas:
339
+
340
+ [source,bash]
341
+ ----
342
+ expressir manifest create \
343
+ schemas/modules/activity/mim.exp \
344
+ schemas/modules/activity/arm.exp \
345
+ schemas/resources/geometry.exp \
346
+ -o combined_manifest.yaml \
347
+ --base-dirs schemas/resources,schemas/modules
348
+ ----
349
+
350
+ All dependencies from all roots will be merged into one manifest.
351
+
352
+ === Schemas in Non-Standard Locations
353
+
354
+ If schemas don't follow naming conventions, you may need to:
355
+
356
+ 1. Create the manifest with what can be auto-resolved
357
+ 2. Manually add the non-standard schemas
358
+ 3. Use the resolve command with additional base directories
359
+
360
+ == Complete Example
361
+
362
+ Here's a complete workflow with real output:
363
+
364
+ [source,bash]
365
+ ----
366
+ # Create manifest
367
+ $ expressir manifest create schemas/modules/activity/mim.exp \
368
+ -o activity_manifest.yaml \
369
+ --base-dirs ~/iso-10303/schemas/resources,~/iso-10303/schemas/modules \
370
+ --verbose
371
+
372
+ Creating manifest from 1 root schema(s)...
373
+ Base directories:
374
+ - /Users/user/iso-10303/schemas/resources
375
+ - /Users/user/iso-10303/schemas/modules
376
+ Resolving dependencies...
377
+ USE FROM action_schema (in Activity_mim): ✓ action_schema.exp
378
+ REFERENCE FROM basic_attribute_schema (in action_schema): ✓ basic_attribute_schema.exp
379
+ REFERENCE FROM support_resource_schema (in basic_attribute_schema): ✓ support_resource_schema.exp
380
+ USE FROM Activity_method_mim (in Activity_mim): ✗ not found
381
+ USE FROM basic_attribute_schema (in Activity_mim): ✓ basic_attribute_schema.exp
382
+ Circular reference detected: measure_schema (valid schema-level circular dependency, skipping)
383
+ ✓ Manifest created: activity_manifest.yaml
384
+ Resolved schemas: 41
385
+
386
+ ⚠ Unresolved schemas (1):
387
+ - Activity_method_mim
388
+
389
+ Please edit activity_manifest.yaml and set 'path:' for unresolved schemas
390
+ Then validate with: expressir manifest validate activity_manifest.yaml
391
+
392
+ # Find the missing schema
393
+ $ find ~/iso-10303/schemas -name "mim.exp" | grep -i activity_method
394
+ /Users/user/iso-10303/schemas/modules/activity_method/mim.exp
395
+
396
+ # Edit the manifest (add path for Activity_method_mim)
397
+ $ vim activity_manifest.yaml
398
+
399
+ # Validate the edited manifest
400
+ $ expressir manifest validate activity_manifest.yaml --verbose
401
+ Validating manifest: activity_manifest.yaml...
402
+ ✓ Manifest is valid
403
+ Total schemas: 42
404
+ Resolved schemas: 42
405
+ ----
406
+
407
+ == Troubleshooting
408
+
409
+ === No Schemas Resolved
410
+
411
+ **Problem:** All schemas show as unresolved
412
+
413
+ **Causes:**
414
+
415
+ * Incorrect base directories
416
+ * Non-standard file naming
417
+ * Wrong file extensions
418
+
419
+ **Solutions:**
420
+
421
+ 1. Verify base directories exist:
422
+ ```bash
423
+ ls -d ~/iso-10303/schemas/resources
424
+ ```
425
+
426
+ 2. Check file naming:
427
+ ```bash
428
+ ls ~/iso-10303/schemas/resources/
429
+ ```
430
+
431
+ 3. Ensure files have `.exp` extension
432
+
433
+ === Too Many Circular Dependency Warnings
434
+
435
+ **Problem:** Many circular dependency warnings in output
436
+
437
+ **This is normal** for complex EXPRESS schemas. The warnings are informational and don't prevent manifest creation.
438
+
439
+ **If concerned**, verify with `--verbose` that schemas are being included correctly.
440
+
441
+ === Schema Exists But Not Found
442
+
443
+ **Problem:** Schema file exists but marked as unresolved
444
+
445
+ **Causes:**
446
+
447
+ * File name doesn't match schema name
448
+ * Missing from base directories
449
+ * Case sensitivity issues
450
+
451
+ **Solutions:**
452
+
453
+ 1. Check schema name in file:
454
+ ```bash
455
+ grep "^SCHEMA " problem_schema.exp
456
+ ```
457
+
458
+ 2. Verify file is in base directory:
459
+ ```bash
460
+ find ~/iso-10303/schemas -name "problem_schema.exp"
461
+ ```
462
+
463
+ 3. Add specific directory to base-dirs
464
+
465
+ == Next Steps
466
+
467
+ Now that you can create manifests:
468
+
469
+ **Resolve missing schemas**::
470
+ Use link:resolving-manifests.html[Resolving Manifests] to auto-resolve remaining schemas
471
+
472
+ **Validate your manifest**::
473
+ See link:validating-manifests.html[Validating Manifests] to check for errors
474
+
475
+ **Build a package**::
476
+ Move to link:../../pages/ler-packages.html#building-from-manifests[Building from Manifests]
477
+
478
+ == Bibliography
479
+
480
+ * link:../../pages/schema-manifests.html#creating-a-manifest-from-a-root-schema[Manifest Creation Reference]
481
+ * link:resolving-manifests.html[Resolving Manifests]
482
+ * link:validating-manifests.html[Validating Manifests]
483
+ * link:index.html[Manifest Workflows Overview]