stepmod-utils 0.1.0 → 0.1.1
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/.gitignore +1 -0
- data/Gemfile +3 -1
- data/exe/term_extractor +91 -0
- data/lib/stepmod/utils/bibdata.rb +122 -0
- data/lib/stepmod/utils/concept.rb +32 -0
- data/lib/stepmod/utils/converters/clause_ref.rb +22 -0
- data/lib/stepmod/utils/converters/def.rb +61 -0
- data/lib/stepmod/utils/converters/definition.rb +22 -0
- data/lib/stepmod/utils/converters/em.rb +21 -0
- data/lib/stepmod/utils/converters/example.rb +19 -0
- data/lib/stepmod/utils/converters/express_ref.rb +14 -0
- data/lib/stepmod/utils/converters/module_ref.rb +14 -0
- data/lib/stepmod/utils/converters/note.rb +19 -0
- data/lib/stepmod/utils/converters/stem.rb +19 -0
- data/lib/stepmod/utils/converters/synonym.rb +15 -0
- data/lib/stepmod/utils/converters/term.rb +15 -0
- data/lib/stepmod/utils/stepmod_definition_converter.rb +57 -0
- data/lib/stepmod/utils/version.rb +1 -1
- data/resource_example.xml +302 -0
- data/stepmod-utils.gemspec +3 -4
- metadata +38 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd7dda08cc3511c8d5a25d912e1fc81872d2e8879c4065768e3032b1b7068296
|
4
|
+
data.tar.gz: f394c802254fd8443431452cd3eec62730d9def7e7628d8812f227daa7b689df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ece9c20e6fa654abc670182b432cb8dcdceddb58e1ccf9856d47beb77bc732af90c3395e2d704ea45c8c85dc15f967c68a5232b66ea3f04129d39fb9f6489cf7
|
7
|
+
data.tar.gz: 0bbb3bee01bef5443ffb39f5e1cc383228ad0d44c6745a7ec207a866abeb303f82e2638b9c04a1a3b5c073d8c903ef0da3f62f28ec0238c8b5b8b9e5fb195867
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/exe/term_extractor
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
#!/usr/bin/env ruby
|
4
|
+
# encoding: UTF-8
|
5
|
+
|
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
|
+
class Gem::Specification
|
17
|
+
def this; self; end
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'bundler/setup'
|
21
|
+
require 'stepmod/utils/stepmod_definition_converter'
|
22
|
+
require 'stepmod/utils/bibdata'
|
23
|
+
require 'stepmod/utils/concept'
|
24
|
+
|
25
|
+
ReverseAsciidoctor.config.unknown_tags = :bypass
|
26
|
+
|
27
|
+
parsed_terms = []
|
28
|
+
parsed_bibliography = []
|
29
|
+
encountered_terms = {}
|
30
|
+
|
31
|
+
paths = ARGV.map do |path|
|
32
|
+
path = "../iso-10303-stepmod/data"
|
33
|
+
puts "Searching for #{path}/{resource,module,application_protocol,business_object_model}.xml..."
|
34
|
+
Dir[
|
35
|
+
"#{path}/**/resource.xml",
|
36
|
+
"#{path}/**/application_protocol.xml",
|
37
|
+
"#{path}/**/business_object_model.xml",
|
38
|
+
"#{path}/**/module.xml"
|
39
|
+
]
|
40
|
+
end.flatten.sort.uniq
|
41
|
+
|
42
|
+
paths.each do |file_path|
|
43
|
+
puts("Processing XML file #{file_path}")
|
44
|
+
current_document = Nokogiri::XML(File.read(file_path)).root
|
45
|
+
|
46
|
+
bibdata = nil
|
47
|
+
begin
|
48
|
+
bibdata = Stepmod::Utils::Bibdata.new(document: current_document)
|
49
|
+
rescue
|
50
|
+
puts "WARNING: Unknown file #{file_path}, skipped"
|
51
|
+
next
|
52
|
+
end
|
53
|
+
|
54
|
+
if bibdata.part.to_s.empty?
|
55
|
+
puts "FATAL: missing `part` attribute: #{file_path}"
|
56
|
+
end
|
57
|
+
|
58
|
+
# read definitions
|
59
|
+
current_document.xpath('//definition').each.with_index(1) do |definition, index|
|
60
|
+
|
61
|
+
term_id = definition['id']
|
62
|
+
unless term_id.nil?
|
63
|
+
if encountered_terms[term_id]
|
64
|
+
puts "FATAL: Duplicated term with id: #{term_id}, #{file_path}"
|
65
|
+
end
|
66
|
+
encountered_terms[term_id] = true
|
67
|
+
end
|
68
|
+
|
69
|
+
concept = Stepmod::Utils::Concept.parse(
|
70
|
+
definition,
|
71
|
+
reference_anchor: bibdata.anchor,
|
72
|
+
# Assume that definition is located in clause 3 of the ISO document
|
73
|
+
# in order. We really don't have a good reference here.
|
74
|
+
reference_clause: "3.#{index}"
|
75
|
+
)
|
76
|
+
|
77
|
+
parsed_terms << concept
|
78
|
+
parsed_bibliography << bibdata
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
parsed_bibliography.uniq!
|
84
|
+
|
85
|
+
File.open('031-generated-terms.adoc', 'w') { |file|
|
86
|
+
file.puts(parsed_terms.map(&:to_mn_adoc).join("\n"))
|
87
|
+
}
|
88
|
+
|
89
|
+
File.open('991-generated-bibliography.adoc', 'w') { |file|
|
90
|
+
file.puts(parsed_bibliography.map(&:to_mn_adoc).join("\n"))
|
91
|
+
}
|
@@ -0,0 +1,122 @@
|
|
1
|
+
module Stepmod
|
2
|
+
module Utils
|
3
|
+
|
4
|
+
class Bibdata
|
5
|
+
|
6
|
+
DOCNUMBER = 10303
|
7
|
+
|
8
|
+
attr_accessor *%w(
|
9
|
+
type doctype part title_en title_fr version language pub_year pub_date
|
10
|
+
)
|
11
|
+
|
12
|
+
def initialize(document:)
|
13
|
+
return nil unless document.is_a?(Nokogiri::XML::Element)
|
14
|
+
|
15
|
+
# module, resource, application_protocol, business_object_model
|
16
|
+
@type = document.name
|
17
|
+
|
18
|
+
raise 'UnknownFileError' unless %w(module resource application_protocol business_object_model).include?(@type)
|
19
|
+
|
20
|
+
@doctype = document['status']
|
21
|
+
@part = document['part']
|
22
|
+
@title_en = document['title'] ||
|
23
|
+
document['name'].gsub('_', ' ').capitalize.gsub('2d','2D').gsub('3d','3D')
|
24
|
+
@title_fr = document['name.french']
|
25
|
+
@version = document['version']
|
26
|
+
@language = document['language']
|
27
|
+
|
28
|
+
# Some publication.year contains month...
|
29
|
+
@pub_year = document['publication.year'].split('-').first
|
30
|
+
@pub_date = document['publication.date']
|
31
|
+
|
32
|
+
puts to_mn_adoc
|
33
|
+
|
34
|
+
return self
|
35
|
+
# <module
|
36
|
+
# name="security_classification"
|
37
|
+
# name.french="Classification des sécurités"
|
38
|
+
# part="1015"
|
39
|
+
# wg.number="1095"
|
40
|
+
# wg.number.supersedes="720"
|
41
|
+
# wg.number.arm.supersedes="1096"
|
42
|
+
# wg.number.arm="3221"
|
43
|
+
# wg.number.mim="1097"
|
44
|
+
# checklist.internal_review="2133"
|
45
|
+
# checklist.project_leader="2134"
|
46
|
+
# checklist.convener="2135"
|
47
|
+
# version="1"
|
48
|
+
# status="TS"
|
49
|
+
# language="E"
|
50
|
+
# publication.year="2004"
|
51
|
+
# publication.date="2004-12-01"
|
52
|
+
# published="y"
|
53
|
+
# rcs.date="$Date: 2009/11/02 10:59:35 $"
|
54
|
+
# rcs.revision="$Revision: 1.26 $"
|
55
|
+
# development.folder="dvlp"
|
56
|
+
# >
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def docid
|
61
|
+
no_date = case doctype
|
62
|
+
when "IS"
|
63
|
+
"ISO #{DOCNUMBER}-#{part}"
|
64
|
+
when "WD"
|
65
|
+
"ISO/WD #{DOCNUMBER}-#{part}"
|
66
|
+
when "CD"
|
67
|
+
"ISO/CD #{DOCNUMBER}-#{part}"
|
68
|
+
when "DIS"
|
69
|
+
"ISO/DIS #{DOCNUMBER}-#{part}"
|
70
|
+
when "TS"
|
71
|
+
"ISO/TS #{DOCNUMBER}-#{part}"
|
72
|
+
when "CD-TS"
|
73
|
+
"ISO/CD TS #{DOCNUMBER}-#{part}"
|
74
|
+
else
|
75
|
+
"UNKNOWN DOCTYPE: (#{doctype})"
|
76
|
+
end
|
77
|
+
|
78
|
+
if pub_year
|
79
|
+
"#{no_date}:#{pub_year}"
|
80
|
+
else
|
81
|
+
no_date
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def part_title
|
86
|
+
case part
|
87
|
+
when [200..299]
|
88
|
+
"Application protocol: #{title_en}"
|
89
|
+
when [300..399]
|
90
|
+
"Abstract test suite: #{title_en}"
|
91
|
+
when [400..499]
|
92
|
+
"Application module: #{title_en}"
|
93
|
+
when [500..599]
|
94
|
+
"Application interpreted construct: #{title_en}"
|
95
|
+
when [1000..1799]
|
96
|
+
"Application module: #{title_en}"
|
97
|
+
else
|
98
|
+
title_en
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def full_title
|
103
|
+
"Industrial automation systems and integration -- Product data representation and exchange -- Part #{part}: #{part_title}"
|
104
|
+
end
|
105
|
+
|
106
|
+
def anchor
|
107
|
+
docid.gsub('/', '-').gsub(' ', '_')
|
108
|
+
end
|
109
|
+
|
110
|
+
def to_mn_adoc
|
111
|
+
if title_en
|
112
|
+
"* [[[ISO#{DOCNUMBER}-#{part},#{docid}]]], _#{full_title}_"
|
113
|
+
else
|
114
|
+
"* [[[ISO#{DOCNUMBER}-#{part},#{docid}]]]"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Stepmod
|
2
|
+
module Utils
|
3
|
+
|
4
|
+
class Concept
|
5
|
+
attr_accessor *%w(designation definition reference_anchor reference_clause examples notes synonym converted_definition)
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
options.each_pair do |k, v|
|
9
|
+
send("#{k}=", v)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.parse(definition_xml, reference_anchor:, reference_clause:)
|
14
|
+
new(
|
15
|
+
converted_definition: Stepmod::Utils::StepmodDefinitionConverter.convert(definition_xml),
|
16
|
+
reference_anchor: reference_anchor,
|
17
|
+
reference_clause: reference_clause
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_mn_adoc
|
22
|
+
<<~TEXT
|
23
|
+
#{converted_definition}
|
24
|
+
|
25
|
+
[.source]
|
26
|
+
<<#{reference_anchor},clause=#{reference_clause}>>
|
27
|
+
TEXT
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class ClauseRef < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, _state = {})
|
8
|
+
" term:[#{normalized_ref(node['linkend'])}] "
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def normalized_ref(ref)
|
14
|
+
return unless ref || ref.empty?
|
15
|
+
|
16
|
+
ref.to_s.split(':').last.squeeze(' ').strip
|
17
|
+
end
|
18
|
+
end
|
19
|
+
ReverseAsciidoctor::Converters.register :clause_ref, ClauseRef.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
module Stepmod
|
3
|
+
module Utils
|
4
|
+
module Converters
|
5
|
+
class Def < ReverseAsciidoctor::Converters::Base
|
6
|
+
def convert(node, state = {})
|
7
|
+
node = node.dup
|
8
|
+
"#{additional_block(node)}#{treat_children(node, state)}"
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def treat_children(node, state)
|
14
|
+
converted = node.children.each_with_object({}) do |child, res|
|
15
|
+
content = treat(child, state)
|
16
|
+
.split("\n")
|
17
|
+
.map(&:strip)
|
18
|
+
.reject(&:empty?)
|
19
|
+
.join("\n")
|
20
|
+
.strip
|
21
|
+
next if content.empty?
|
22
|
+
|
23
|
+
res[child] = content
|
24
|
+
end
|
25
|
+
previous = nil
|
26
|
+
result = ''
|
27
|
+
converted.each.with_index do |(child, content), i|
|
28
|
+
if i == 0 || inlinde_tag?(child, previous)
|
29
|
+
result += " #{content}"
|
30
|
+
else
|
31
|
+
result += "\n\n#{content}"
|
32
|
+
end
|
33
|
+
previous = child
|
34
|
+
end
|
35
|
+
result.strip
|
36
|
+
end
|
37
|
+
|
38
|
+
def inlinde_tag?(child, previous)
|
39
|
+
%w[text sub i clause_ref].include?(child.name) && previous && %w[i sub text clause_ref].include?(previous.name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def additional_block(node)
|
43
|
+
# Treat first `p` tag as an `alt` block, metanorma/stepmod-utils#9
|
44
|
+
first_child_tag = node
|
45
|
+
.children
|
46
|
+
.find { |n| n.is_a?(Nokogiri::XML::Element) }
|
47
|
+
return unless first_child_tag&.name == 'p' &&
|
48
|
+
defined?(Stepmod::Utils::Converters::Synonym)
|
49
|
+
|
50
|
+
result = Stepmod::Utils::Converters::Synonym
|
51
|
+
.new
|
52
|
+
.convert(first_child_tag)
|
53
|
+
first_child_tag.remove
|
54
|
+
"#{result}\n\n"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
ReverseAsciidoctor::Converters.register :def, Def.new
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Definition < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
treat_children(node, state)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def treat_children(node, state)
|
14
|
+
res = node.children.map { |child| treat(child, state) }
|
15
|
+
res.map(&:strip).reject(&:empty?).join("\n\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
ReverseAsciidoctor::Converters.register :definition, Definition.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Em < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
content = treat_children(node, state.merge(already_italic: true))
|
9
|
+
if content.strip.empty? || state[:already_italic]
|
10
|
+
content
|
11
|
+
else
|
12
|
+
"#{content[/^\s*/]}_#{content.strip}_#{content[/\s*$/]}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
ReverseAsciidoctor::Converters.register :em, Em.new
|
18
|
+
ReverseAsciidoctor::Converters.register :cite, Em.new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Example < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
<<~TEMPLATE
|
9
|
+
[example]
|
10
|
+
====
|
11
|
+
#{treat_children(node, state).strip}
|
12
|
+
====
|
13
|
+
TEMPLATE
|
14
|
+
end
|
15
|
+
end
|
16
|
+
ReverseAsciidoctor::Converters.register :example, Example.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class ExpressRef < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, _state = {})
|
8
|
+
"*#{node['linkend'].to_s.split('.').last}*"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
ReverseAsciidoctor::Converters.register :express_ref, ExpressRef.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class ModuleRef < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, _state = {})
|
8
|
+
" term:[#{node['linkend']}] "
|
9
|
+
end
|
10
|
+
end
|
11
|
+
ReverseAsciidoctor::Converters.register :module_ref, ModuleRef.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Note < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
<<~TEMPLATE
|
9
|
+
[NOTE]
|
10
|
+
--
|
11
|
+
#{treat_children(node, state).strip}
|
12
|
+
--
|
13
|
+
TEMPLATE
|
14
|
+
end
|
15
|
+
end
|
16
|
+
ReverseAsciidoctor::Converters.register :note, Note.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'stepmod/utils/converters/em'
|
4
|
+
|
5
|
+
module Stepmod
|
6
|
+
module Utils
|
7
|
+
module Converters
|
8
|
+
class Stem < ReverseAsciidoctor::Converters::Base
|
9
|
+
def convert(node, state = {})
|
10
|
+
return Em.new.convert(node, state) if node.text.strip.length > 8
|
11
|
+
|
12
|
+
" stem:[#{node.text.strip}] "
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ReverseAsciidoctor::Converters.register :i, Stem.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Synonym < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
"alt:[#{node.text.strip}]"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAsciidoctor::Converters.register :synonym, Synonym.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Term < ReverseAsciidoctor::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
"=== #{treat_children(node, state).strip}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAsciidoctor::Converters.register :term, Term.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'reverse_asciidoctor'
|
4
|
+
require 'stepmod/utils/converters/clause_ref'
|
5
|
+
require 'stepmod/utils/converters/express_ref'
|
6
|
+
require 'stepmod/utils/converters/module_ref'
|
7
|
+
require 'stepmod/utils/converters/def'
|
8
|
+
require 'stepmod/utils/converters/definition'
|
9
|
+
require 'stepmod/utils/converters/em'
|
10
|
+
require 'stepmod/utils/converters/example'
|
11
|
+
require 'stepmod/utils/converters/note'
|
12
|
+
require 'stepmod/utils/converters/stem'
|
13
|
+
require 'stepmod/utils/converters/term'
|
14
|
+
require 'stepmod/utils/converters/synonym'
|
15
|
+
|
16
|
+
require 'reverse_asciidoctor/converters/a'
|
17
|
+
require 'reverse_asciidoctor/converters/blockquote'
|
18
|
+
require 'reverse_asciidoctor/converters/bypass'
|
19
|
+
require 'reverse_asciidoctor/converters/br'
|
20
|
+
require 'reverse_asciidoctor/converters/code'
|
21
|
+
require 'reverse_asciidoctor/converters/drop'
|
22
|
+
require 'reverse_asciidoctor/converters/head'
|
23
|
+
require 'reverse_asciidoctor/converters/hr'
|
24
|
+
require 'reverse_asciidoctor/converters/ignore'
|
25
|
+
require 'reverse_asciidoctor/converters/li'
|
26
|
+
require 'reverse_asciidoctor/converters/ol'
|
27
|
+
require 'reverse_asciidoctor/converters/p'
|
28
|
+
require 'reverse_asciidoctor/converters/pass_through'
|
29
|
+
require 'reverse_asciidoctor/converters/q'
|
30
|
+
require 'reverse_asciidoctor/converters/strong'
|
31
|
+
require 'reverse_asciidoctor/converters/sup'
|
32
|
+
require 'reverse_asciidoctor/converters/sub'
|
33
|
+
require 'reverse_asciidoctor/converters/text'
|
34
|
+
|
35
|
+
|
36
|
+
module Stepmod
|
37
|
+
module Utils
|
38
|
+
class StepmodDefinitionConverter
|
39
|
+
def self.convert(input, options = {})
|
40
|
+
root = if input.is_a?(String)
|
41
|
+
then Nokogiri::XML(input).root
|
42
|
+
elsif input.is_a?(Nokogiri::XML::Document)
|
43
|
+
then input.root
|
44
|
+
elsif input.is_a?(Nokogiri::XML::Node)
|
45
|
+
then input
|
46
|
+
end
|
47
|
+
|
48
|
+
root || (return '')
|
49
|
+
|
50
|
+
ReverseAsciidoctor.config.with(options) do
|
51
|
+
result = ReverseAsciidoctor::Converters.lookup(root.name).convert(root)
|
52
|
+
ReverseAsciidoctor.cleaner.tidy(result)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,302 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- $Id: resource.xml,v 1.22 2009/11/02 11:00:33 lothartklein Exp $ -->
|
3
|
+
<!DOCTYPE resource SYSTEM "../../../dtd/res_doc/resource.dtd">
|
4
|
+
<!-- Generated by mkresource.js, Eurostep Limited, http://www.eurostep.com -->
|
5
|
+
<!--
|
6
|
+
To view the resource in IExplorer, open: sys/1_scope.xml
|
7
|
+
-->
|
8
|
+
<resource
|
9
|
+
name="classification_and_set_theory"
|
10
|
+
name.french="Classification et théorie des ensembles"
|
11
|
+
part="54"
|
12
|
+
version="1"
|
13
|
+
wg.number="3212"
|
14
|
+
wg.number.supersedes="1509"
|
15
|
+
wg.number.express="3213"
|
16
|
+
wg.number.express.supersedes="1510"
|
17
|
+
checklist.internal_review="3215"
|
18
|
+
checklist.project_leader="3216"
|
19
|
+
checklist.convener="3217"
|
20
|
+
sc4.working_group="12"
|
21
|
+
status="IS"
|
22
|
+
language="E"
|
23
|
+
publication.date="2005-03-15"
|
24
|
+
publication.year="2005"
|
25
|
+
published="n"
|
26
|
+
development.folder="dvlp"
|
27
|
+
rcs.date="$Date: 2009/11/02 11:00:33 $"
|
28
|
+
rcs.revision="$Revision: 1.22 $">
|
29
|
+
|
30
|
+
<keywords>
|
31
|
+
resource, STEP, 10303, integrated resources, set theory, class, classification, specialisation, subset, superset,
|
32
|
+
union, intersection, complement power set
|
33
|
+
</keywords>
|
34
|
+
<!-- the abstract for the resource. If not provided, the XSL will use the inscope -->
|
35
|
+
<abstract>
|
36
|
+
<p>ISO 10303-54 specifies:</p>
|
37
|
+
<ul>
|
38
|
+
<li>that an object is a member of a set, and can define a finite set by enumerating all its members;</li>
|
39
|
+
<li>that the relationship between two sets is proper subset, subset, or equal;</li>
|
40
|
+
<li>that a set is result of a union, intersection, complement or powerset operation.</li>
|
41
|
+
</ul>
|
42
|
+
</abstract>
|
43
|
+
<!-- the abstract for the resource. If not provided, the XSL will use the in scope
|
44
|
+
<abstract>
|
45
|
+
<li>a specification that an object is a member of a set;</li>
|
46
|
+
<li>a specification of all the members of a finite set;</li>
|
47
|
+
<li>a specification that one set is a proper subset of, is a
|
48
|
+
subset of, or is equal to another;</li>
|
49
|
+
<li>a specification that a set is result of a union,
|
50
|
+
intersection, complement or powerset operation.</li>
|
51
|
+
</abstract>
|
52
|
+
-->
|
53
|
+
<!-- Reference to contacts detailed in stepmod/data/basic/contacts.xml -->
|
54
|
+
<contacts>
|
55
|
+
<projlead ref="ap221.projlead" />
|
56
|
+
<editor ref="ap221.projeditor" />
|
57
|
+
</contacts>
|
58
|
+
|
59
|
+
<!-- Introduction -->
|
60
|
+
<!-- The introduction should start as shown: -->
|
61
|
+
<purpose>
|
62
|
+
<p>
|
63
|
+
This part of ISO 10303 specifies an application resource for the
|
64
|
+
representation of classes or sets and classification relationships. This part of ISO 10303 also supports the
|
65
|
+
following set theory relationships:</p>
|
66
|
+
<ul>
|
67
|
+
<li>complement;</li>
|
68
|
+
<li>intersection;</li>
|
69
|
+
<li>power set;</li>
|
70
|
+
<li>proper subset;</li>
|
71
|
+
<li>same membership (that is, set equality);</li>
|
72
|
+
<li>subset;</li>
|
73
|
+
<li>union.</li>
|
74
|
+
</ul>
|
75
|
+
</purpose>
|
76
|
+
|
77
|
+
<!-- Schema Interface express-g diagrams -->
|
78
|
+
<!-- refer to p41ed2 as example -->
|
79
|
+
<schema_diag>
|
80
|
+
<express-g>
|
81
|
+
<imgfile title="Relationship between schemas in ISO 10303-54" file="schema_diagexpg1.xml" />
|
82
|
+
</express-g>
|
83
|
+
</schema_diag>
|
84
|
+
|
85
|
+
<!-- Items in scope -->
|
86
|
+
<inscope>
|
87
|
+
<li>the existence of a class or set;</li>
|
88
|
+
<li>the distinction between a class or set that is defined by abstract criteria, and a class or set that is defined
|
89
|
+
by enumerating its members;</li>
|
90
|
+
|
91
|
+
|
92
|
+
<li>the classification relationship between a class or set and a member;</li>
|
93
|
+
|
94
|
+
<li>the complete enumeration of the members for a class or set;</li>
|
95
|
+
<li> the representation of set theory relationships between classes or sets;</li>
|
96
|
+
|
97
|
+
<li>the following set theory relationships:
|
98
|
+
<ul>
|
99
|
+
<li>complement;</li>
|
100
|
+
<li>equivalence;</li>
|
101
|
+
<li>intersection;</li>
|
102
|
+
<li>power set;</li>
|
103
|
+
<li>proper subset;</li>
|
104
|
+
<li>subset;</li>
|
105
|
+
<li>union.</li>
|
106
|
+
</ul>
|
107
|
+
</li>
|
108
|
+
</inscope>
|
109
|
+
|
110
|
+
<!-- Items out of scope -->
|
111
|
+
<outscope>
|
112
|
+
<li>mappings between sets or classes;</li>
|
113
|
+
<li>relationships that are not classification or set theory relationships; </li>
|
114
|
+
<li>entities and relationships specific to continuous sets.
|
115
|
+
<note number="1">
|
116
|
+
<p>All the entities and relationships within this part of ISO 10303 are equally valid for discrete and
|
117
|
+
continuous sets.</p>
|
118
|
+
</note>
|
119
|
+
<note number="2">
|
120
|
+
<p>Entities and relationships for continuous sets can be created in anntotated EXPRESS schemas that use or
|
121
|
+
specialize entities in this part of ISO 10303, as follows:</p>
|
122
|
+
<ul>
|
123
|
+
<li><b>discrete_class_by_intension</b> and <b>continuous_set</b> can be disjoint subtypes of
|
124
|
+
<express_ref linkend="classification_and_set_theory:ir:classification_schema.class_by_intension" />;</li>
|
125
|
+
<li><b>open_set</b> and <b>closed_set</b> can be disjoint subtypes of <b>continuous_set</b>;</li>
|
126
|
+
<li><b>closure</b> can be the relationship between an <b>open_set</b> and the <b>closed_set</b> that is its
|
127
|
+
<b>boundary</b>.</li>
|
128
|
+
</ul>
|
129
|
+
</note>
|
130
|
+
</li>
|
131
|
+
</outscope>
|
132
|
+
|
133
|
+
<normrefs>
|
134
|
+
<normref.inc normref="ref10303-41" />
|
135
|
+
</normrefs>
|
136
|
+
|
137
|
+
<definition>
|
138
|
+
<term id="set">set
|
139
|
+
</term>
|
140
|
+
<synonym>class</synonym>
|
141
|
+
<def>
|
142
|
+
<p>number of things considered together</p>
|
143
|
+
<note number="1"> A set that is defined by enumerating its members is a 'class by intension'.</note>
|
144
|
+
<note number="2">A set that is defined by means of criteria that do not enumerate the members is a 'class by
|
145
|
+
extension'.</note>
|
146
|
+
</def>
|
147
|
+
</definition>
|
148
|
+
<!--
|
149
|
+
<abbreviations/>
|
150
|
+
-->
|
151
|
+
|
152
|
+
<schema name="classification_schema" version="1">
|
153
|
+
<!-- Note schema EXPRESS are in ..\resources\resource_name name_of_schema.xml -->
|
154
|
+
<introduction>The classification_schema specifies a class, and a classification relationship between a class and a
|
155
|
+
member of a class.
|
156
|
+
</introduction>
|
157
|
+
<fund_cons>
|
158
|
+
<p>For many different entity types defined within ISO 10303, an instance may stand for a class or set of things.
|
159
|
+
The fact that an instance stands for a class or set of things can be made explicit by creating a compound
|
160
|
+
instance of:</p>
|
161
|
+
<ul>
|
162
|
+
<li>the entity type class defined in this part of ISO 10303, and</li>
|
163
|
+
<li>
|
164
|
+
another entity type defined in ISO 10303. </li>
|
165
|
+
</ul>
|
166
|
+
<p>Members can be specified for an instance of the entity type class. An instance of the entity type class can be
|
167
|
+
involved in set theory relationships, such as union or intersection, with other instances of the entity type
|
168
|
+
class.</p>
|
169
|
+
<note>Instances of the entity types product, product_definition_formation and product_definition in ISO 10303-41
|
170
|
+
can be classes. In order to allow set theory relationships for these classes, an application protocol or
|
171
|
+
application module can define a subtype of:</note>
|
172
|
+
<ul>
|
173
|
+
<li>product_definition_formation (from ISO 10303-41);</li>
|
174
|
+
<li>class (from this part of ISO 10303).</li>
|
175
|
+
</ul>
|
176
|
+
<example number="1">
|
177
|
+
Pump model 'XYZ_123' is a product_definition_formation and a class. This class is a class_by_extension.
|
178
|
+
</example>
|
179
|
+
|
180
|
+
<example number="2">The set of pumps enumerated in maintenance contract '98/1234' is a class. This class is a
|
181
|
+
class_by_intension.</example>
|
182
|
+
|
183
|
+
<example number="3">The relationship between individual pump 'X/85/4567' and pump model 'XYZ_123', that indicates
|
184
|
+
the model of the pump, is a classification.</example>
|
185
|
+
<example number="4">The relationship between individual pump 'X/85/4567' and the set of pumps enumerated in
|
186
|
+
maintenance contract '98/1234', that indicates it is one of the set, is a classification. The complete set of
|
187
|
+
pumps covered by the contract can be defined by an instance of the entity type complete_membership.
|
188
|
+
</example>
|
189
|
+
<example number="5">The set of pumps that are both within maintenance contract '98/1234' and of pump model
|
190
|
+
'XYZ_123' can be defined by the set theory relationship intersection.</example>
|
191
|
+
</fund_cons>
|
192
|
+
|
193
|
+
<!-- EXPRESS-G -->
|
194
|
+
<express-g>
|
195
|
+
<imgfile file="classification_schemaexpg2.xml" />
|
196
|
+
</express-g>
|
197
|
+
</schema>
|
198
|
+
<schema name="set_theory_schema" version="1">
|
199
|
+
<!-- Note schema EXPRESS are in ..\resources\resource_name name_of_schema.xml -->
|
200
|
+
<introduction>The set_theory_schema specifies the following relationships between classes:
|
201
|
+
<ul>
|
202
|
+
<li>complement;</li>
|
203
|
+
<li>intersection;</li>
|
204
|
+
<li>power set;</li>
|
205
|
+
<li>proper subset;</li>
|
206
|
+
<li>same membership (that is, set equality);</li>
|
207
|
+
<li>subset;</li>
|
208
|
+
<li>union.</li>
|
209
|
+
</ul>
|
210
|
+
</introduction>
|
211
|
+
<fund_cons>
|
212
|
+
<p>The set theory schema defines set theory relationship between classes or sets.</p>
|
213
|
+
|
214
|
+
<note number="1">In this part of ISO 10303, the terms class and set are synonyms.</note>
|
215
|
+
|
216
|
+
<p>In order to use this schema the entity that records the class or set shall be
|
217
|
+
<express_ref linkend="classification_and_set_theory:ir:classification_schema.class" /> or a subtype of
|
218
|
+
<express_ref linkend="classification_and_set_theory:ir:classification_schema.class" />.</p>
|
219
|
+
<example number="1">
|
220
|
+
<p>Consider the following instances of
|
221
|
+
<express_ref linkend="classification_and_set_theory:ir:classification_schema.class" />:</p>
|
222
|
+
<ul>
|
223
|
+
<li>
|
224
|
+
pump model 'XYZ_123', which is a
|
225
|
+
<express_ref
|
226
|
+
linkend="product_definition_schema:ir_express:product_definition_schema.product_definition_formation" />
|
227
|
+
|
228
|
+
and a
|
229
|
+
<express_ref linkend="classification_and_set_theory:ir:classification_schema.class" />; and </li>
|
230
|
+
<li>
|
231
|
+
the set of pumps enumerated in maintenance contract '98/1234'.
|
232
|
+
</li>
|
233
|
+
</ul>
|
234
|
+
<p>An instance of the relationship
|
235
|
+
<express_ref linkend="classification_and_set_theory:ir:set_theory_schema.subset" />
|
236
|
+
|
237
|
+
indicates that each of the set of pumps enumerated in maintenance contract '98/1234' is of pump model
|
238
|
+
'XYZ_123'.
|
239
|
+
</p>
|
240
|
+
</example>
|
241
|
+
|
242
|
+
<example number="2">
|
243
|
+
<p>An organization has pumps of type A and type B. Some pumps handle radioactive fluids. There are the following
|
244
|
+
classes of activity:</p>
|
245
|
+
<ul>
|
246
|
+
<li>
|
247
|
+
SA - service pump type A;</li>
|
248
|
+
<li>
|
249
|
+
SB - service pump type B;</li>
|
250
|
+
<li>
|
251
|
+
DR - service equipment that has handled radioactive fluids.
|
252
|
+
</li>
|
253
|
+
</ul>
|
254
|
+
<p>For workflow management purposes, the following derived class of activity is defined:</p>
|
255
|
+
<ul>
|
256
|
+
<li>
|
257
|
+
DRS - service pump that has handled radioactive fluids.
|
258
|
+
</li>
|
259
|
+
</ul>
|
260
|
+
<p>This class is the
|
261
|
+
<express_ref linkend="classification_and_set_theory:ir:set_theory_schema.intersection" />
|
262
|
+
|
263
|
+
of class DR with the
|
264
|
+
<express_ref linkend="classification_and_set_theory:ir:set_theory_schema.union" />
|
265
|
+
|
266
|
+
of classes SA and SB.</p>
|
267
|
+
</example>
|
268
|
+
</fund_cons>
|
269
|
+
|
270
|
+
<!-- EXPRESS-G -->
|
271
|
+
<express-g>
|
272
|
+
<imgfile file="set_theory_schemaexpg2.xml" />
|
273
|
+
</express-g>
|
274
|
+
</schema>
|
275
|
+
|
276
|
+
|
277
|
+
<shortnames>
|
278
|
+
<shortname entity="class" name="CLASS" />
|
279
|
+
<shortname entity="class_by_extension" name="CLBYEX" />
|
280
|
+
<shortname entity="class_by_intension" name="CLBYIN" />
|
281
|
+
<shortname entity="classification" name="CLSSFC" />
|
282
|
+
<shortname entity="complete_membership" name="CMPMMB" />
|
283
|
+
<shortname entity="complete_membership_of_empty_set" name="CMOES" />
|
284
|
+
<shortname entity="complete_membership_of_non_empty_set" name="CMONES" />
|
285
|
+
<shortname entity="complement" name="CMPLMN" />
|
286
|
+
<shortname entity="intersection" name="INTRSC" />
|
287
|
+
<shortname entity="power_set" name="PWRST" />
|
288
|
+
<shortname entity="proper_subset" name="PRPSBS" />
|
289
|
+
<shortname entity="same_membership" name="SMMMB" />
|
290
|
+
<shortname entity="subset" name="SUBSET" />
|
291
|
+
<shortname entity="union" name="UNION" />
|
292
|
+
<shortname entity="union_of_all_members" name="UOAM" />
|
293
|
+
</shortnames>
|
294
|
+
<!--
|
295
|
+
<tech_discussion/>
|
296
|
+
|
297
|
+
<examples/>
|
298
|
+
|
299
|
+
<add_scope/>
|
300
|
+
-->
|
301
|
+
<!-- <bibliography/> -->
|
302
|
+
</resource>
|
data/stepmod-utils.gemspec
CHANGED
@@ -6,11 +6,9 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.authors = ["Ribose Inc."]
|
7
7
|
spec.email = ["open.source@ribose.com"]
|
8
8
|
|
9
|
-
spec.summary = "
|
9
|
+
spec.summary = "Stepmod-utils is a toolkit that works on STEPmod data."
|
10
10
|
spec.description = <<~DESCRIPTION
|
11
|
-
|
12
|
-
This gem is a wrapper around stepmod-utils.jar available from
|
13
|
-
https://github.com/metanorma/stepmod-utils, with versions matching the JAR file.
|
11
|
+
Stepmod-utils is a toolkit that works on STEPmod data.
|
14
12
|
DESCRIPTION
|
15
13
|
|
16
14
|
spec.homepage = "https://github.com/metanorma/stepmod-utils"
|
@@ -33,4 +31,5 @@ Gem::Specification.new do |spec|
|
|
33
31
|
|
34
32
|
spec.add_runtime_dependency "thor", "~> 1.0"
|
35
33
|
spec.add_runtime_dependency "reverse_adoc", "~> 0.2"
|
34
|
+
spec.add_development_dependency "byebug", "~> 11.1"
|
36
35
|
end
|
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.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -38,13 +38,27 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.2'
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '11.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '11.1'
|
55
|
+
description: 'Stepmod-utils is a toolkit that works on STEPmod data.
|
56
|
+
|
57
|
+
'
|
45
58
|
email:
|
46
59
|
- open.source@ribose.com
|
47
|
-
executables:
|
60
|
+
executables:
|
61
|
+
- term_extractor
|
48
62
|
extensions: []
|
49
63
|
extra_rdoc_files: []
|
50
64
|
files:
|
@@ -60,8 +74,24 @@ files:
|
|
60
74
|
- Rakefile
|
61
75
|
- bin/console
|
62
76
|
- bin/setup
|
77
|
+
- exe/term_extractor
|
63
78
|
- lib/stepmod/utils.rb
|
79
|
+
- lib/stepmod/utils/bibdata.rb
|
80
|
+
- lib/stepmod/utils/concept.rb
|
81
|
+
- lib/stepmod/utils/converters/clause_ref.rb
|
82
|
+
- lib/stepmod/utils/converters/def.rb
|
83
|
+
- lib/stepmod/utils/converters/definition.rb
|
84
|
+
- lib/stepmod/utils/converters/em.rb
|
85
|
+
- lib/stepmod/utils/converters/example.rb
|
86
|
+
- lib/stepmod/utils/converters/express_ref.rb
|
87
|
+
- lib/stepmod/utils/converters/module_ref.rb
|
88
|
+
- lib/stepmod/utils/converters/note.rb
|
89
|
+
- lib/stepmod/utils/converters/stem.rb
|
90
|
+
- lib/stepmod/utils/converters/synonym.rb
|
91
|
+
- lib/stepmod/utils/converters/term.rb
|
92
|
+
- lib/stepmod/utils/stepmod_definition_converter.rb
|
64
93
|
- lib/stepmod/utils/version.rb
|
94
|
+
- resource_example.xml
|
65
95
|
- stepmod-utils.gemspec
|
66
96
|
homepage: https://github.com/metanorma/stepmod-utils
|
67
97
|
licenses:
|
@@ -85,5 +115,5 @@ requirements: []
|
|
85
115
|
rubygems_version: 3.0.3
|
86
116
|
signing_key:
|
87
117
|
specification_version: 4
|
88
|
-
summary:
|
118
|
+
summary: Stepmod-utils is a toolkit that works on STEPmod data.
|
89
119
|
test_files: []
|