stepmod-utils 0.3.29 → 0.3.31
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +168 -1
- data/exe/stepmod-annotate-all +32 -26
- data/exe/stepmod-extract-concepts +1 -1
- data/exe/stepmod-srl-migrate +96 -0
- data/exe/stepmod-srl-migrate-docs +82 -0
- data/exe/stepmod-srl-migrate-schemas +114 -0
- data/lib/stepmod/utils/converters/express_g.rb +3 -2
- data/lib/stepmod/utils/stepmod_file_annotator.rb +31 -3
- data/lib/stepmod/utils/terms_extractor.rb +19 -9
- data/lib/stepmod/utils/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7459842ad5de4eed3337c26d6267a5d85e6255f8a730a443d27dfd93ec76bbf
|
4
|
+
data.tar.gz: e43d507c19b7027d0c22f6bb0e7fba544db9443a7a4df36162e3b8af3f2a28c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a547cb2ee89f17a9d869dbc19aa6c74ee15a830c5bb88836166c4bf7d61532268508982e171ff318f2cb163b4041187d3e8638141a26e9d340433ebcb1b3ae58
|
7
|
+
data.tar.gz: 61e26c2579d309560b5336868e1c75f3b18cca9cd036272f990e8d872118e779ff1b4969ac55c84c3f8fa9c39ae76d93cac86f8ac290d068f9acde029cd4f1ec
|
data/README.adoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= STEPmod utilities
|
2
2
|
|
3
|
-
image:https://img.shields.io/gem/v/
|
3
|
+
image:https://img.shields.io/gem/v/stepmod-utils.svg["Gem Version", link="https://rubygems.org/gems/stepmod-utils"]
|
4
4
|
image:https://github.com/metanorma/stepmod-utils/workflows/ubuntu/badge.svg["Ubuntu Build Status", link="https://github.com/metanorma/stepmod-utils/actions?query=workflow%3Aubuntu"]
|
5
5
|
image:https://github.com/metanorma/stepmod-utils/workflows/macos/badge.svg["OSX Build Status", link="https://github.com/metanorma/stepmod-utils/actions?query=workflow%3Amacos"]
|
6
6
|
image:https://github.com/metanorma/stepmod-utils/workflows/windows/badge.svg["Windows Build Status", link="https://github.com/metanorma/stepmod-utils/actions?query=workflow%3Awindows"]
|
@@ -111,6 +111,173 @@ expg_image:contract_schemaexpg1.xml[]
|
|
111
111
|
expg_image:contract_schemaexpg2.xml[]
|
112
112
|
----
|
113
113
|
|
114
|
+
== Convertion of all schema history information into independent per-schema YAML files
|
115
|
+
|
116
|
+
Command:
|
117
|
+
|
118
|
+
[source,sh]
|
119
|
+
----
|
120
|
+
$ stepmod-extract-changes -p {stepmod-data-directory}
|
121
|
+
----
|
122
|
+
|
123
|
+
=== Examples
|
124
|
+
|
125
|
+
Given the following XML
|
126
|
+
|
127
|
+
[source,xml]
|
128
|
+
----
|
129
|
+
<change version="4">
|
130
|
+
<arm.changes>
|
131
|
+
<arm.modifications>
|
132
|
+
<modified.object type="TYPE" name="ap242_requirement_assignment_item" />
|
133
|
+
<!-- ... -->
|
134
|
+
</arm.modifications>
|
135
|
+
</arm.changes>
|
136
|
+
<mim.changes>
|
137
|
+
<mim.additions>
|
138
|
+
<modified.object type="CONSTANT" name="ap242_shape_representation_reference_types" />
|
139
|
+
<!-- ... -->
|
140
|
+
</mim.additions>
|
141
|
+
<mim.modifications>
|
142
|
+
<modified.object type="CONSTANT" name="deprecated_interfaced_data_types" />
|
143
|
+
<!-- ... -->
|
144
|
+
</mim.modifications>
|
145
|
+
<mim.deletions>
|
146
|
+
<modified.object type="RULE" name="subtype_mandatory_shape_representation" />
|
147
|
+
</mim.deletions>
|
148
|
+
</mim.changes>
|
149
|
+
|
150
|
+
<arm_longform.changes>
|
151
|
+
<arm.additions>
|
152
|
+
<modified.object type="TYPE" name="advanced_face_model" />
|
153
|
+
<!-- ... -->
|
154
|
+
</arm.additions>
|
155
|
+
<arm.modifications>
|
156
|
+
<modified.object type="TYPE" name="assembly_constraint_select">
|
157
|
+
<description>
|
158
|
+
<ul>
|
159
|
+
<li>Remove SELECT value 'ENTITY Binary_assembly_constraint'</li>
|
160
|
+
<!-- ... -->
|
161
|
+
</ul>
|
162
|
+
</description>
|
163
|
+
</modified.object>
|
164
|
+
<!-- ... -->
|
165
|
+
</arm.modifications>
|
166
|
+
<arm.deletions>
|
167
|
+
<modified.object type="TYPE" name="axis_placement_mapping_source" />
|
168
|
+
</arm.deletions>
|
169
|
+
</arm_longform.changes>
|
170
|
+
|
171
|
+
<mim_longform.changes>
|
172
|
+
<mim.additions>
|
173
|
+
<modified.object type="CONSTANT" name="ap242_shape_representation_reference_types" />
|
174
|
+
</mim.additions>
|
175
|
+
|
176
|
+
<mim.modifications>
|
177
|
+
<modified.object type="CONSTANT" name="deprecated_constructed_data_types">
|
178
|
+
<description>
|
179
|
+
CONSTANT 'deprecated_constructed_data_types': Expression Changed
|
180
|
+
</description>
|
181
|
+
</modified.object>
|
182
|
+
<!-- ... -->
|
183
|
+
</mim.modifications>
|
184
|
+
|
185
|
+
<mim.deletions>
|
186
|
+
<modified.object type="TYPE" name="connected_edge_with_length_set_items" />
|
187
|
+
<!-- ... -->
|
188
|
+
</mim.deletions>
|
189
|
+
</mim_longform.changes>
|
190
|
+
|
191
|
+
</change>
|
192
|
+
----
|
193
|
+
|
194
|
+
Will Generate 4 files:
|
195
|
+
|
196
|
+
- arm.changes.yml
|
197
|
+
- mim.changes.yml
|
198
|
+
- arm_lf.changes.yml
|
199
|
+
- mim_lf.changes.yml
|
200
|
+
|
201
|
+
`arm.changes.yml`:
|
202
|
+
|
203
|
+
[source,yaml]
|
204
|
+
----
|
205
|
+
---
|
206
|
+
schema: Ap242_managed_model_based_3d_engineering_arm
|
207
|
+
change_edition:
|
208
|
+
- version: 4
|
209
|
+
description:
|
210
|
+
modifications:
|
211
|
+
- type: TYPE
|
212
|
+
name: ap242_requirement_assignment_item
|
213
|
+
----
|
214
|
+
|
215
|
+
|
216
|
+
`mim.changes.yml`:
|
217
|
+
|
218
|
+
[source,yaml]
|
219
|
+
----
|
220
|
+
---
|
221
|
+
schema: Ap242_managed_model_based_3d_engineering_mim
|
222
|
+
change_edition:
|
223
|
+
- version: 4
|
224
|
+
description:
|
225
|
+
additions:
|
226
|
+
- type: CONSTANT
|
227
|
+
name: ap242_shape_representation_reference_types
|
228
|
+
modifications:
|
229
|
+
- type: CONSTANT
|
230
|
+
name: deprecated_interfaced_data_types
|
231
|
+
deletions:
|
232
|
+
- type: RULE
|
233
|
+
name: subtype_mandatory_shape_representation
|
234
|
+
----
|
235
|
+
|
236
|
+
`arm_lf.changes.yml`:
|
237
|
+
|
238
|
+
[source,yaml]
|
239
|
+
----
|
240
|
+
---
|
241
|
+
schema: Ap242_managed_model_based_3d_engineering_arm_LF
|
242
|
+
change_edition:
|
243
|
+
- version: 4
|
244
|
+
description:
|
245
|
+
additions:
|
246
|
+
- type: TYPE
|
247
|
+
name: advanced_face_model
|
248
|
+
modifications:
|
249
|
+
- type: TYPE
|
250
|
+
name: assembly_constraint_select
|
251
|
+
descriptions:
|
252
|
+
- Remove SELECT value 'ENTITY Binary_assembly_constraint'
|
253
|
+
deletions:
|
254
|
+
- type: TYPE
|
255
|
+
name: axis_placement_mapping_source
|
256
|
+
----
|
257
|
+
|
258
|
+
`mim_lf.changes.yml`:
|
259
|
+
|
260
|
+
[source,yaml]
|
261
|
+
----
|
262
|
+
---
|
263
|
+
schema: Ap242_managed_model_based_3d_engineering_mim_LF
|
264
|
+
change_edition:
|
265
|
+
- version: 4
|
266
|
+
description:
|
267
|
+
additions:
|
268
|
+
- type: CONSTANT
|
269
|
+
name: ap242_shape_representation_reference_types
|
270
|
+
modifications:
|
271
|
+
- type: CONSTANT
|
272
|
+
name: deprecated_constructed_data_types
|
273
|
+
description: |
|
274
|
+
CONSTANT 'deprecated_constructed_data_types': Expression Changed
|
275
|
+
deletions:
|
276
|
+
- type: TYPE
|
277
|
+
name: connected_edge_with_length_set_items
|
278
|
+
----
|
279
|
+
|
280
|
+
|
114
281
|
== Git repository
|
115
282
|
|
116
283
|
If the STEPmod repository is a Git repository, term extract will work.
|
data/exe/stepmod-annotate-all
CHANGED
@@ -2,8 +2,10 @@
|
|
2
2
|
|
3
3
|
require "concurrent"
|
4
4
|
require "stepmod/utils/stepmod_file_annotator"
|
5
|
+
require "fileutils"
|
5
6
|
|
6
7
|
stepmod_dir = ARGV.first || Dir.pwd
|
8
|
+
stepmod_dir = Pathname.new(stepmod_dir.gsub("\\", "/"))
|
7
9
|
|
8
10
|
def all_express_files(stepmod_dir)
|
9
11
|
index_file = File.read(File.join(stepmod_dir, "repository_index.xml"))
|
@@ -32,34 +34,38 @@ end
|
|
32
34
|
MAX_THREADS = 1 #[2, Concurrent.processor_count].max * 2
|
33
35
|
MAX_QUEUE_SIZE = MAX_THREADS * 4
|
34
36
|
# https://github.com/ruby-concurrency/concurrent-ruby/blob/master/docs-source/thread_pools.md
|
35
|
-
pool = Concurrent::ThreadPoolExecutor.new(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
)
|
37
|
+
# pool = Concurrent::ThreadPoolExecutor.new(
|
38
|
+
# min_threads: MAX_THREADS,
|
39
|
+
# max_threads: MAX_THREADS,
|
40
|
+
# max_queue: MAX_QUEUE_SIZE,
|
41
|
+
# fallback_policy: :caller_runs,
|
42
|
+
# )
|
41
43
|
|
42
44
|
files = all_express_files(stepmod_dir)
|
43
45
|
|
44
|
-
files.
|
45
|
-
puts
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
46
|
+
files.each do |file|
|
47
|
+
puts "#{Thread.current.object_id}: Processing #{file}"
|
48
|
+
|
49
|
+
result = Stepmod::Utils::StepmodFileAnnotator.new(
|
50
|
+
express_file: file,
|
51
|
+
stepmod_dir: stepmod_dir,
|
52
|
+
).call
|
53
|
+
|
54
|
+
annotated_file_name = "#{File.basename(file, '.exp')}_annotated.exp"
|
55
|
+
annotated_file_path = File.join(File.dirname(file), annotated_file_name)
|
56
|
+
|
57
|
+
File.open(annotated_file_path, "w") do |annotated_file|
|
58
|
+
annotated_file.puts(result[:annotated_text])
|
59
|
+
end
|
60
|
+
|
61
|
+
result[:images_references].each do |source, destination|
|
62
|
+
source_path = File.join(stepmod_dir, "data", source)
|
63
|
+
destination_path = File.join(File.dirname(file), destination)
|
64
|
+
|
65
|
+
next if File.exist?(destination_path) || !File.exist?(source_path)
|
66
|
+
|
67
|
+
FileUtils.cp(source_path, destination_path)
|
63
68
|
end
|
64
|
-
|
69
|
+
|
70
|
+
puts "#{Thread.current.object_id}: Done processing #{File.basename(file)} => #{annotated_file_path}."
|
65
71
|
end
|
@@ -86,7 +86,7 @@ else
|
|
86
86
|
)
|
87
87
|
end
|
88
88
|
|
89
|
-
default_output_dir = File.join(stepmod_dir, "output_yaml")
|
89
|
+
default_output_dir = File.join(File.expand_path("..", stepmod_dir), "output_yaml")
|
90
90
|
output_dir = options[:output_dir] || default_output_dir
|
91
91
|
unless File.directory?(output_dir)
|
92
92
|
FileUtils.mkdir_p(output_dir)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# encoding: UTF-8
|
4
|
+
|
5
|
+
require "pathname"
|
6
|
+
bin_file = Pathname.new(__FILE__).realpath
|
7
|
+
|
8
|
+
# add self to libpath
|
9
|
+
$:.unshift File.expand_path("../../lib", bin_file)
|
10
|
+
|
11
|
+
# Fixes https://github.com/rubygems/rubygems/issues/1420
|
12
|
+
require "rubygems/specification"
|
13
|
+
|
14
|
+
module Gem
|
15
|
+
class Specification
|
16
|
+
def this; self; end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require "bundler/setup"
|
21
|
+
require "optparse"
|
22
|
+
|
23
|
+
def log(message)
|
24
|
+
puts "[stepmod-utils] #{message}"
|
25
|
+
end
|
26
|
+
|
27
|
+
options = {}
|
28
|
+
OptionParser.new do |opts|
|
29
|
+
opts.banner = "Usage: #{$0} [options]"
|
30
|
+
|
31
|
+
opts.on(
|
32
|
+
"--stepmod-data-dir STEPMOD_DATA_DIR",
|
33
|
+
String,
|
34
|
+
"Path to STEPmod data directory",
|
35
|
+
) do |path|
|
36
|
+
options[:stepmod_dir] = path
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on(
|
40
|
+
"--srl-docs-dir SRL_DOCS_DIR",
|
41
|
+
String,
|
42
|
+
"Path to output srl docs",
|
43
|
+
) do |path|
|
44
|
+
options[:srl_output_docs_dir] = path
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on(
|
48
|
+
"--srl-schemas-dir SRL_SCHEMAS_DIR",
|
49
|
+
String,
|
50
|
+
"Path to output srl schemas",
|
51
|
+
) do |path|
|
52
|
+
options[:srl_output_schemas_dir] = path
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on(
|
56
|
+
"-s",
|
57
|
+
"--stepmod2mn-executeable STEPMOD2MN_EXECUTEABLE",
|
58
|
+
String,
|
59
|
+
"Path to STEPMOD2MN_EXECUTEABLE",
|
60
|
+
) do |path|
|
61
|
+
options[:stepmod2mn_path] = path
|
62
|
+
end
|
63
|
+
|
64
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
65
|
+
puts opts
|
66
|
+
exit
|
67
|
+
end
|
68
|
+
end.parse!
|
69
|
+
|
70
|
+
stepmod2mn_path = options[:stepmod2mn_path]
|
71
|
+
if stepmod2mn_path.nil?
|
72
|
+
raise StandardError.new(
|
73
|
+
"stepmod2mn executeable is required, set with the `-s` option.",
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
stepmod_dir = options[:stepmod_dir] || "stepmod"
|
78
|
+
if stepmod_dir.nil?
|
79
|
+
raise StandardError.new(
|
80
|
+
"stepmod data directory required, set with the `--stepmod_dir` option.",
|
81
|
+
)
|
82
|
+
end
|
83
|
+
|
84
|
+
migrate_docs_command = %(stepmod-srl-migrate-docs -s "#{stepmod2mn_path}" --stepmod-data-dir "#{stepmod_dir}")
|
85
|
+
migrate_docs_command += %( --srl-docs-dir #{options[:srl_output_docs_dir]}) if options[:srl_output_docs_dir]
|
86
|
+
|
87
|
+
migrate_schemas_command = %(stepmod-srl-migrate-schemas -s "#{stepmod2mn_path}" --stepmod-data-dir "#{stepmod_dir}")
|
88
|
+
migrate_schemas_command += %( --srl-schemas-dir #{options[:srl_output_schemas_dir]}) if options[:srl_output_schemas_dir]
|
89
|
+
|
90
|
+
log("--- START Migrate Docs ---")
|
91
|
+
system migrate_docs_command
|
92
|
+
log("--- END Migrate Docs ---")
|
93
|
+
|
94
|
+
log("--- START Migrate Schemas ---")
|
95
|
+
system migrate_schemas_command
|
96
|
+
log("--- END Migrate Schemas ---")
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# encoding: UTF-8
|
4
|
+
|
5
|
+
require "fileutils"
|
6
|
+
# resolve bin path, ignoring symlinks
|
7
|
+
require "pathname"
|
8
|
+
bin_file = Pathname.new(__FILE__).realpath
|
9
|
+
|
10
|
+
# add self to libpath
|
11
|
+
$:.unshift File.expand_path("../../lib", bin_file)
|
12
|
+
|
13
|
+
# Fixes https://github.com/rubygems/rubygems/issues/1420
|
14
|
+
require "rubygems/specification"
|
15
|
+
|
16
|
+
module Gem
|
17
|
+
class Specification
|
18
|
+
def this; self; end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
require "bundler/setup"
|
23
|
+
require "optparse"
|
24
|
+
|
25
|
+
def log(message)
|
26
|
+
puts "[stepmod-utils] #{message}"
|
27
|
+
end
|
28
|
+
|
29
|
+
options = {}
|
30
|
+
OptionParser.new do |opts|
|
31
|
+
opts.banner = "Usage: #{$0} [options]"
|
32
|
+
|
33
|
+
opts.on(
|
34
|
+
"--stepmod-data-dir STEPMOD_DATA_DIR",
|
35
|
+
String,
|
36
|
+
"Path to STEPmod data directory",
|
37
|
+
) do |path|
|
38
|
+
options[:stepmod_dir] = path
|
39
|
+
end
|
40
|
+
|
41
|
+
opts.on(
|
42
|
+
"--srl-docs-dir SRL_DOCS_DIR",
|
43
|
+
String,
|
44
|
+
"Path to output srl docs",
|
45
|
+
) do |path|
|
46
|
+
options[:srl_output_docs_dir] = path
|
47
|
+
end
|
48
|
+
|
49
|
+
opts.on(
|
50
|
+
"-s",
|
51
|
+
"--stepmod2mn-executeable STEPMOD2MN_EXECUTEABLE",
|
52
|
+
String,
|
53
|
+
"Path to STEPMOD2MN_EXECUTEABLE",
|
54
|
+
) do |path|
|
55
|
+
options[:stepmod2mn_path] = path
|
56
|
+
end
|
57
|
+
|
58
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
59
|
+
puts opts
|
60
|
+
exit
|
61
|
+
end
|
62
|
+
end.parse!
|
63
|
+
|
64
|
+
stepmod2mn_path = options[:stepmod2mn_path]
|
65
|
+
if stepmod2mn_path.nil?
|
66
|
+
raise StandardError.new(
|
67
|
+
"stepmod2mn executeable is required, set with the `-s` option.",
|
68
|
+
)
|
69
|
+
else
|
70
|
+
log "stepmod2mn executeable path: `#{stepmod2mn_path}`"
|
71
|
+
end
|
72
|
+
|
73
|
+
stepmod_dir = options[:stepmod_dir] || "stepmod/data"
|
74
|
+
log "STEPmod data path: `#{stepmod_dir}`"
|
75
|
+
|
76
|
+
srl_output_docs_dir = options[:srl_output_docs_dir] || "documents"
|
77
|
+
unless File.directory?(srl_output_docs_dir)
|
78
|
+
FileUtils.mkdir_p(srl_output_docs_dir)
|
79
|
+
end
|
80
|
+
log "SRL output docs directory path: `#{srl_output_docs_dir}`"
|
81
|
+
|
82
|
+
system "java -Xss5m -jar #{stepmod2mn_path} #{stepmod_dir} --output #{srl_output_docs_dir}"
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# encoding: UTF-8
|
4
|
+
|
5
|
+
require "fileutils"
|
6
|
+
# resolve bin path, ignoring symlinks
|
7
|
+
require "pathname"
|
8
|
+
bin_file = Pathname.new(__FILE__).realpath
|
9
|
+
|
10
|
+
# add self to libpath
|
11
|
+
$:.unshift File.expand_path("../../lib", bin_file)
|
12
|
+
|
13
|
+
# Fixes https://github.com/rubygems/rubygems/issues/1420
|
14
|
+
require "rubygems/specification"
|
15
|
+
|
16
|
+
module Gem
|
17
|
+
class Specification
|
18
|
+
def this; self; end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
require "bundler/setup"
|
23
|
+
require "optparse"
|
24
|
+
|
25
|
+
def log(message, indent = 0)
|
26
|
+
indent_spaces = " " * (indent * 2)
|
27
|
+
puts "[stepmod-utils] #{indent_spaces}#{message}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def copy_files_to_schemas(path, output_dir)
|
31
|
+
schema_name = path.dirname.basename
|
32
|
+
file_name = path.basename
|
33
|
+
|
34
|
+
new_dir = File.join(output_dir, schema_name)
|
35
|
+
new_file_path = File.join(new_dir, file_name.to_s.gsub("_annotated.exp", ".exp"))
|
36
|
+
|
37
|
+
unless Dir.exist?(new_dir)
|
38
|
+
FileUtils.mkdir_p(new_dir)
|
39
|
+
end
|
40
|
+
|
41
|
+
FileUtils.copy_file(path, new_file_path)
|
42
|
+
log("Copied #{path.basename} to #{new_file_path}", 1)
|
43
|
+
end
|
44
|
+
|
45
|
+
options = {}
|
46
|
+
OptionParser.new do |opts|
|
47
|
+
opts.banner = "Usage: #{$0} [options]"
|
48
|
+
|
49
|
+
opts.on(
|
50
|
+
"--stepmod-data-dir STEPMOD_DATA_DIR",
|
51
|
+
String,
|
52
|
+
"Path to STEPmod data directory",
|
53
|
+
) do |path|
|
54
|
+
options[:stepmod_dir] = path
|
55
|
+
end
|
56
|
+
|
57
|
+
opts.on(
|
58
|
+
"--srl-schemas-dir SRL_SCHEMAS_DIR",
|
59
|
+
String,
|
60
|
+
"Path to output srl schemas",
|
61
|
+
) do |path|
|
62
|
+
options[:srl_output_schemas_dir] = path
|
63
|
+
end
|
64
|
+
|
65
|
+
opts.on(
|
66
|
+
"-s",
|
67
|
+
"--stepmod2mn-executeable STEPMOD2MN_EXECUTEABLE",
|
68
|
+
String,
|
69
|
+
"Path to STEPMOD2MN_EXECUTEABLE",
|
70
|
+
) do |path|
|
71
|
+
options[:stepmod2mn_path] = path
|
72
|
+
end
|
73
|
+
|
74
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
75
|
+
puts opts
|
76
|
+
exit
|
77
|
+
end
|
78
|
+
end.parse!
|
79
|
+
|
80
|
+
stepmod2mn_path = options[:stepmod2mn_path]
|
81
|
+
if stepmod2mn_path.nil?
|
82
|
+
raise StandardError.new(
|
83
|
+
"stepmod2mn executeable is required, set with the `-s` option.",
|
84
|
+
)
|
85
|
+
else
|
86
|
+
log "stepmod2mn executeable path: `#{stepmod2mn_path}`"
|
87
|
+
end
|
88
|
+
|
89
|
+
stepmod_dir = options[:stepmod_dir] || "stepmod/data"
|
90
|
+
log "STEPmod data path: `#{stepmod_dir}`"
|
91
|
+
|
92
|
+
srl_output_schemas_dir = options[:srl_output_schemas_dir] || "schemas"
|
93
|
+
unless File.directory?(srl_output_schemas_dir)
|
94
|
+
FileUtils.mkdir_p(srl_output_schemas_dir)
|
95
|
+
end
|
96
|
+
log "SRL output schemas directory path: `#{srl_output_schemas_dir}`"
|
97
|
+
|
98
|
+
system "java -Xss5m -jar #{stepmod2mn_path} #{stepmod_dir} --output #{srl_output_schemas_dir} --svg"
|
99
|
+
|
100
|
+
system "stepmod-annotate-all #{stepmod_dir}"
|
101
|
+
|
102
|
+
Dir.glob("#{stepmod_dir}/data/**/*_annotated.exp").each do |filepath|
|
103
|
+
path = Pathname.new(filepath)
|
104
|
+
copy_files_to_schemas(path, srl_output_schemas_dir)
|
105
|
+
end
|
106
|
+
|
107
|
+
system "stepmod-extract-changes -p #{stepmod_dir}"
|
108
|
+
|
109
|
+
Dir.glob("#{stepmod_dir}/data/**/*.changes.yaml").each do |filepath|
|
110
|
+
path = Pathname.new(filepath)
|
111
|
+
copy_files_to_schemas(path, srl_output_schemas_dir)
|
112
|
+
end
|
113
|
+
|
114
|
+
log("Done")
|
@@ -18,15 +18,16 @@ module Stepmod
|
|
18
18
|
return "" unless File.file?(file)
|
19
19
|
|
20
20
|
image_document = Nokogiri::XML(File.read(file))
|
21
|
-
|
21
|
+
svg_filename = File.basename(image_document.xpath("//img").first["src"],
|
22
22
|
".*")
|
23
23
|
<<~SVGMAP
|
24
24
|
|
25
25
|
*)
|
26
26
|
(*"#{state.fetch(:schema_name)}.__expressg"
|
27
|
+
[[#{svg_filename}]]
|
27
28
|
[.svgmap]
|
28
29
|
====
|
29
|
-
image::#{
|
30
|
+
image::#{svg_filename}.svg[]
|
30
31
|
|
31
32
|
#{image_document.xpath('//img.area').map.with_index(1) { |n, i| schema_reference(n['href'], i) }.join("\n")}
|
32
33
|
====
|
@@ -21,6 +21,7 @@ module Stepmod
|
|
21
21
|
@resource_docs_cache = resource_docs_schemas(stepmod_dir)
|
22
22
|
@stepmod_dir = stepmod_dir || Dir.pwd
|
23
23
|
@added_bibdata = {}
|
24
|
+
@images_references = {}
|
24
25
|
|
25
26
|
@schema_name = Expressir::Express::Parser.from_file(express_file)
|
26
27
|
.schemas
|
@@ -29,11 +30,11 @@ module Stepmod
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def resource_docs_schemas(stepmod_dir)
|
32
|
-
filepath = File.join(stepmod_dir, "data
|
33
|
+
filepath = File.join(stepmod_dir, "data", "resource_docs", "*", "resource.xml")
|
33
34
|
|
34
35
|
schemas = {}
|
35
36
|
Dir.glob(filepath).each do |resource_docs_file|
|
36
|
-
match = resource_docs_file.match("data
|
37
|
+
match = resource_docs_file.match("data[/\]resource_docs[/\]([^/\]+)[/\]resource.xml")
|
37
38
|
resource_docs_dir = match.captures[0]
|
38
39
|
|
39
40
|
resource_docs = Nokogiri::XML(File.read(resource_docs_file)).root
|
@@ -55,6 +56,7 @@ module Stepmod
|
|
55
56
|
output_express = File.read(express_file)
|
56
57
|
converted_description = ""
|
57
58
|
base_linked = ""
|
59
|
+
processed_images_cache = {}
|
58
60
|
|
59
61
|
if File.exist?(descriptions_file)
|
60
62
|
descriptions = Nokogiri::XML(File.read(descriptions_file)).root
|
@@ -82,6 +84,10 @@ module Stepmod
|
|
82
84
|
descriptions_file, description
|
83
85
|
)
|
84
86
|
end
|
87
|
+
|
88
|
+
schema_base_dir = resource_docs_cache[base_linked]
|
89
|
+
add_images_references(converted_description, schema_base_dir, processed_images_cache)
|
90
|
+
|
85
91
|
# Add converted description from exact linked path
|
86
92
|
if resource_docs_dir && added_resource_descriptions[description["linkend"]].nil?
|
87
93
|
output_express << convert_from_resource_file(resource_docs_dir,
|
@@ -112,7 +118,10 @@ module Stepmod
|
|
112
118
|
converted_description
|
113
119
|
end
|
114
120
|
|
115
|
-
|
121
|
+
{
|
122
|
+
annotated_text: sanitize(output_express),
|
123
|
+
images_references: @images_references,
|
124
|
+
}
|
116
125
|
rescue StandardError => e
|
117
126
|
puts "[ERROR]!!! #{e.message}"
|
118
127
|
puts e.backtrace
|
@@ -124,6 +133,25 @@ module Stepmod
|
|
124
133
|
file_content.gsub("(*)", "(`*`)")
|
125
134
|
end
|
126
135
|
|
136
|
+
def add_images_references(description, schema_base_dir, processed_images_cache)
|
137
|
+
referenced_images = description.scan(/image::(.*?)\[\]/).flatten
|
138
|
+
|
139
|
+
referenced_images.each do |referenced_image|
|
140
|
+
next unless schema_base_dir
|
141
|
+
|
142
|
+
image_file_path = File.join("resource_docs", schema_base_dir, referenced_image)
|
143
|
+
new_image_file_path = referenced_image
|
144
|
+
|
145
|
+
if processed_images_cache[new_image_file_path]
|
146
|
+
processed_images_cache[new_image_file_path] = true
|
147
|
+
next
|
148
|
+
end
|
149
|
+
|
150
|
+
processed_images_cache[new_image_file_path] = true
|
151
|
+
@images_references[image_file_path] = new_image_file_path
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
127
155
|
def convert_from_description_text(descriptions_file, description)
|
128
156
|
Dir.chdir(File.dirname(descriptions_file)) do
|
129
157
|
wrapper = "<ext_descriptions>#{description}</ext_descriptions>"
|
@@ -243,13 +243,15 @@ module Stepmod
|
|
243
243
|
bibdata: bibdata,
|
244
244
|
# See: metanorma/iso-10303-2#90
|
245
245
|
domain_prefix: "application module",
|
246
|
+
schema_type: type,
|
246
247
|
)
|
247
248
|
when "module_mim"
|
248
249
|
mim_concepts = parse_annotated_module(
|
249
250
|
schema: schema,
|
250
251
|
bibdata: bibdata,
|
251
252
|
# See: metanorma/iso-10303-2#90
|
252
|
-
domain_prefix: "application
|
253
|
+
domain_prefix: "application module",
|
254
|
+
schema_type: type,
|
253
255
|
)
|
254
256
|
when "resource"
|
255
257
|
parse_annotated_resource(schema: schema, bibdata: bibdata)
|
@@ -268,7 +270,7 @@ module Stepmod
|
|
268
270
|
}[match.captures[0]] || "resource"
|
269
271
|
end
|
270
272
|
|
271
|
-
def parse_annotated_module(schema:, bibdata:, domain_prefix:)
|
273
|
+
def parse_annotated_module(schema:, bibdata:, domain_prefix:, schema_type:)
|
272
274
|
log "INFO: parse_annotated_module: " \
|
273
275
|
"Processing modules schema #{schema.file}"
|
274
276
|
|
@@ -285,6 +287,7 @@ module Stepmod
|
|
285
287
|
"name" => schema.id,
|
286
288
|
"type" => "module",
|
287
289
|
"path" => extract_file_path(entity.parent.file),
|
290
|
+
"schema_type" => schema_type
|
288
291
|
},
|
289
292
|
document: {
|
290
293
|
"type" => "module",
|
@@ -330,6 +333,7 @@ module Stepmod
|
|
330
333
|
"name" => schema.id,
|
331
334
|
"type" => "resource",
|
332
335
|
"path" => extract_file_path(entity.parent.file),
|
336
|
+
"schema_type" => "resource"
|
333
337
|
},
|
334
338
|
document: {
|
335
339
|
"type" => "resource",
|
@@ -363,7 +367,8 @@ module Stepmod
|
|
363
367
|
# rubocop:disable Metrics/MethodLength
|
364
368
|
def generate_concept_from_entity(entity:, schema:, domain:, bibdata:, document:)
|
365
369
|
old_definition = trim_definition(entity.remarks.first)
|
366
|
-
|
370
|
+
schema_type = schema["schema_type"]
|
371
|
+
definition = generate_entity_definition(entity, domain, schema_type)
|
367
372
|
|
368
373
|
notes = [old_definition].reject { |note| redundant_note?(note) }
|
369
374
|
|
@@ -515,15 +520,20 @@ module Stepmod
|
|
515
520
|
# end
|
516
521
|
|
517
522
|
# rubocop:disable Layout/LineLength
|
518
|
-
def generate_entity_definition(entity, domain)
|
523
|
+
def generate_entity_definition(entity, domain, schema_type)
|
519
524
|
return "" if entity.nil?
|
520
525
|
|
521
526
|
# See: metanorma/iso-10303-2#90
|
522
|
-
entity_type =
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
+
entity_type = case schema_type
|
528
|
+
when "module_arm"
|
529
|
+
"{{application object}}"
|
530
|
+
when "module_mim"
|
531
|
+
"{{entity data type}}"
|
532
|
+
when "resource", "business_object_model"
|
533
|
+
"{{entity data type}}"
|
534
|
+
else
|
535
|
+
raise Error.new("[stepmod-utils] encountered unsupported schema_type")
|
536
|
+
end
|
527
537
|
|
528
538
|
if entity.subtype_of.size.zero?
|
529
539
|
"#{entity_type} " \
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stepmod-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -175,6 +175,9 @@ executables:
|
|
175
175
|
- stepmod-convert-express-resource
|
176
176
|
- stepmod-extract-changes
|
177
177
|
- stepmod-extract-concepts
|
178
|
+
- stepmod-srl-migrate
|
179
|
+
- stepmod-srl-migrate-docs
|
180
|
+
- stepmod-srl-migrate-schemas
|
178
181
|
extensions: []
|
179
182
|
extra_rdoc_files: []
|
180
183
|
files:
|
@@ -197,6 +200,9 @@ files:
|
|
197
200
|
- exe/stepmod-convert-express-resource
|
198
201
|
- exe/stepmod-extract-changes
|
199
202
|
- exe/stepmod-extract-concepts
|
203
|
+
- exe/stepmod-srl-migrate
|
204
|
+
- exe/stepmod-srl-migrate-docs
|
205
|
+
- exe/stepmod-srl-migrate-schemas
|
200
206
|
- lib/stepmod/utils.rb
|
201
207
|
- lib/stepmod/utils/bibdata.rb
|
202
208
|
- lib/stepmod/utils/change.rb
|