rng 0.1.1 → 0.3.3

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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +63 -0
  3. data/.github/workflows/release.yml +8 -3
  4. data/.gitignore +11 -0
  5. data/.rubocop.yml +11 -6
  6. data/.rubocop_todo.yml +270 -0
  7. data/CHANGELOG.md +317 -0
  8. data/CLAUDE.md +139 -0
  9. data/CODE_OF_CONDUCT.md +132 -0
  10. data/Gemfile +11 -10
  11. data/README.adoc +1929 -0
  12. data/Rakefile +11 -3
  13. data/docs/Gemfile +8 -0
  14. data/docs/_config.yml +23 -0
  15. data/docs/getting-started/index.adoc +75 -0
  16. data/docs/guides/error-handling.adoc +137 -0
  17. data/docs/guides/external-references.adoc +128 -0
  18. data/docs/guides/index.adoc +24 -0
  19. data/docs/guides/parsing-rnc.adoc +141 -0
  20. data/docs/guides/parsing-rng-xml.adoc +81 -0
  21. data/docs/guides/rng-to-rnc.adoc +101 -0
  22. data/docs/guides/validation.adoc +85 -0
  23. data/docs/index.adoc +52 -0
  24. data/docs/reference/api.adoc +126 -0
  25. data/docs/reference/cli.adoc +182 -0
  26. data/docs/understanding/architecture.adoc +58 -0
  27. data/docs/understanding/rng-vs-rnc.adoc +118 -0
  28. data/exe/rng +5 -0
  29. data/lib/rng/any_name.rb +28 -0
  30. data/lib/rng/attribute.rb +61 -5
  31. data/lib/rng/choice.rb +60 -0
  32. data/lib/rng/cli.rb +607 -0
  33. data/lib/rng/data.rb +32 -0
  34. data/lib/rng/datatype_declaration.rb +26 -0
  35. data/lib/rng/define.rb +56 -5
  36. data/lib/rng/div.rb +36 -0
  37. data/lib/rng/documentation.rb +9 -0
  38. data/lib/rng/element.rb +66 -18
  39. data/lib/rng/empty.rb +23 -0
  40. data/lib/rng/except.rb +62 -0
  41. data/lib/rng/external_ref.rb +28 -0
  42. data/lib/rng/external_ref_resolver.rb +582 -0
  43. data/lib/rng/foreign_attribute.rb +26 -0
  44. data/lib/rng/foreign_element.rb +33 -0
  45. data/lib/rng/grammar.rb +38 -0
  46. data/lib/rng/group.rb +62 -0
  47. data/lib/rng/include.rb +23 -0
  48. data/lib/rng/include_processor.rb +461 -0
  49. data/lib/rng/interleave.rb +58 -0
  50. data/lib/rng/list.rb +56 -0
  51. data/lib/rng/mixed.rb +58 -0
  52. data/lib/rng/name.rb +28 -0
  53. data/lib/rng/namespace_declaration.rb +47 -0
  54. data/lib/rng/namespaces.rb +15 -0
  55. data/lib/rng/not_allowed.rb +23 -0
  56. data/lib/rng/ns_name.rb +31 -0
  57. data/lib/rng/one_or_more.rb +58 -0
  58. data/lib/rng/optional.rb +58 -0
  59. data/lib/rng/param.rb +30 -0
  60. data/lib/rng/parent_ref.rb +28 -0
  61. data/lib/rng/parse_rnc.rb +26 -0
  62. data/lib/rng/parse_tree_processor.rb +695 -0
  63. data/lib/rng/pattern.rb +24 -0
  64. data/lib/rng/ref.rb +28 -0
  65. data/lib/rng/rnc_builder.rb +927 -0
  66. data/lib/rng/rnc_parser.rb +672 -115
  67. data/lib/rng/rnc_to_rng_converter.rb +1408 -0
  68. data/lib/rng/schema_preamble.rb +73 -0
  69. data/lib/rng/schema_validator.rb +1622 -0
  70. data/lib/rng/start.rb +57 -6
  71. data/lib/rng/test_suite_parser.rb +168 -0
  72. data/lib/rng/text.rb +29 -0
  73. data/lib/rng/to_rnc.rb +24 -0
  74. data/lib/rng/value.rb +28 -0
  75. data/lib/rng/version.rb +1 -1
  76. data/lib/rng/zero_or_more.rb +58 -0
  77. data/lib/rng.rb +80 -5
  78. data/rng.gemspec +19 -19
  79. data/scripts/extract_spectest_resources.rb +96 -0
  80. data/spec/fixtures/compacttest.xml +2511 -0
  81. data/spec/fixtures/external/circular_a.rng +7 -0
  82. data/spec/fixtures/external/circular_b.rng +7 -0
  83. data/spec/fixtures/external/circular_main.rng +7 -0
  84. data/spec/fixtures/external/external_ref_lib.rng +7 -0
  85. data/spec/fixtures/external/external_ref_main.rng +7 -0
  86. data/spec/fixtures/external/include_lib.rng +7 -0
  87. data/spec/fixtures/external/include_main.rng +3 -0
  88. data/spec/fixtures/external/nested_chain.rng +6 -0
  89. data/spec/fixtures/external/nested_leaf.rng +7 -0
  90. data/spec/fixtures/external/nested_mid.rng +8 -0
  91. data/spec/fixtures/metanorma/3gpp.rnc +35 -0
  92. data/spec/fixtures/metanorma/3gpp.rng +105 -0
  93. data/spec/fixtures/metanorma/basicdoc.rnc +11 -0
  94. data/spec/fixtures/metanorma/bipm.rnc +148 -0
  95. data/spec/fixtures/metanorma/bipm.rng +376 -0
  96. data/spec/fixtures/metanorma/bsi.rnc +104 -0
  97. data/spec/fixtures/metanorma/bsi.rng +332 -0
  98. data/spec/fixtures/metanorma/csa.rnc +45 -0
  99. data/spec/fixtures/metanorma/csa.rng +131 -0
  100. data/spec/fixtures/metanorma/csd.rnc +43 -0
  101. data/spec/fixtures/metanorma/csd.rng +132 -0
  102. data/spec/fixtures/metanorma/gbstandard.rnc +99 -0
  103. data/spec/fixtures/metanorma/gbstandard.rng +316 -0
  104. data/spec/fixtures/metanorma/iec.rnc +49 -0
  105. data/spec/fixtures/metanorma/iec.rng +193 -0
  106. data/spec/fixtures/metanorma/ietf.rnc +275 -0
  107. data/spec/fixtures/metanorma/ietf.rng +925 -0
  108. data/spec/fixtures/metanorma/iho.rnc +58 -0
  109. data/spec/fixtures/metanorma/iho.rng +179 -0
  110. data/spec/fixtures/metanorma/isodoc.rnc +873 -0
  111. data/spec/fixtures/metanorma/isodoc.rng +2704 -0
  112. data/spec/fixtures/metanorma/isostandard-amd.rnc +43 -0
  113. data/spec/fixtures/metanorma/isostandard-amd.rng +108 -0
  114. data/spec/fixtures/metanorma/isostandard.rnc +166 -0
  115. data/spec/fixtures/metanorma/isostandard.rng +494 -0
  116. data/spec/fixtures/metanorma/itu.rnc +122 -0
  117. data/spec/fixtures/metanorma/itu.rng +377 -0
  118. data/spec/fixtures/metanorma/m3d.rnc +41 -0
  119. data/spec/fixtures/metanorma/m3d.rng +122 -0
  120. data/spec/fixtures/metanorma/mpfd.rnc +36 -0
  121. data/spec/fixtures/metanorma/mpfd.rng +95 -0
  122. data/spec/fixtures/metanorma/nist.rnc +77 -0
  123. data/spec/fixtures/metanorma/nist.rng +216 -0
  124. data/spec/fixtures/metanorma/ogc.rnc +51 -0
  125. data/spec/fixtures/metanorma/ogc.rng +151 -0
  126. data/spec/fixtures/metanorma/reqt.rnc +6 -0
  127. data/spec/fixtures/metanorma/rsd.rnc +36 -0
  128. data/spec/fixtures/metanorma/rsd.rng +95 -0
  129. data/spec/fixtures/metanorma/un.rnc +103 -0
  130. data/spec/fixtures/metanorma/un.rng +367 -0
  131. data/spec/fixtures/rnc/address_book.rnc +10 -0
  132. data/spec/fixtures/rnc/base.rnc +4 -0
  133. data/spec/fixtures/rnc/complex_example.rnc +61 -0
  134. data/spec/fixtures/rnc/grammar_with_trailing.rnc +8 -0
  135. data/spec/fixtures/rnc/main_include_trailing.rnc +3 -0
  136. data/spec/fixtures/rnc/main_with_include.rnc +5 -0
  137. data/spec/fixtures/rnc/test_augment.rnc +10 -0
  138. data/spec/fixtures/rnc/test_isodoc_simple.rnc +9 -0
  139. data/spec/fixtures/rnc/top_level_include.rnc +8 -0
  140. data/spec/fixtures/rng/address_book.rng +20 -0
  141. data/spec/fixtures/rng/relaxng.rng +335 -0
  142. data/spec/fixtures/rng/testSuite.rng +163 -0
  143. data/spec/fixtures/spectest.xml +6845 -0
  144. data/spec/fixtures/spectest_external/case_10_4.7/x +3 -0
  145. data/spec/fixtures/spectest_external/case_10_4.7/y +7 -0
  146. data/spec/fixtures/spectest_external/case_11_4.7/x +3 -0
  147. data/spec/fixtures/spectest_external/case_12_4.7/x +3 -0
  148. data/spec/fixtures/spectest_external/case_13_4.7/x +3 -0
  149. data/spec/fixtures/spectest_external/case_13_4.7/y +3 -0
  150. data/spec/fixtures/spectest_external/case_14_4.7/x +7 -0
  151. data/spec/fixtures/spectest_external/case_15_4.7/x +7 -0
  152. data/spec/fixtures/spectest_external/case_16_4.7/x +5 -0
  153. data/spec/fixtures/spectest_external/case_17_4.7/x +5 -0
  154. data/spec/fixtures/spectest_external/case_18_4.7/x +7 -0
  155. data/spec/fixtures/spectest_external/case_19_4.7/level1.rng +9 -0
  156. data/spec/fixtures/spectest_external/case_19_4.7/level2.rng +7 -0
  157. data/spec/fixtures/spectest_external/case_1_4.5/sub1/x +3 -0
  158. data/spec/fixtures/spectest_external/case_1_4.5/sub3/x +3 -0
  159. data/spec/fixtures/spectest_external/case_1_4.5/x +3 -0
  160. data/spec/fixtures/spectest_external/case_20_4.6/x +3 -0
  161. data/spec/fixtures/spectest_external/case_2_4.5/x +3 -0
  162. data/spec/fixtures/spectest_external/case_3_4.6/x +3 -0
  163. data/spec/fixtures/spectest_external/case_4_4.6/x +3 -0
  164. data/spec/fixtures/spectest_external/case_5_4.6/x +1 -0
  165. data/spec/fixtures/spectest_external/case_6_4.6/x +5 -0
  166. data/spec/fixtures/spectest_external/case_7_4.6/x +1 -0
  167. data/spec/fixtures/spectest_external/case_7_4.6/y +1 -0
  168. data/spec/fixtures/spectest_external/case_8_4.7/x +7 -0
  169. data/spec/fixtures/spectest_external/case_9_4.7/x +7 -0
  170. data/spec/fixtures/spectest_external/resources.json +149 -0
  171. data/spec/rng/advanced_rnc_spec.rb +101 -0
  172. data/spec/rng/compacttest_spec.rb +197 -0
  173. data/spec/rng/datatype_declaration_spec.rb +28 -0
  174. data/spec/rng/div_spec.rb +207 -0
  175. data/spec/rng/external_ref_resolver_spec.rb +122 -0
  176. data/spec/rng/metanorma_conversion_spec.rb +159 -0
  177. data/spec/rng/namespace_declaration_spec.rb +60 -0
  178. data/spec/rng/namespace_support_spec.rb +199 -0
  179. data/spec/rng/rnc_parser_spec.rb +501 -23
  180. data/spec/rng/rnc_roundtrip_spec.rb +135 -0
  181. data/spec/rng/rng_generation_spec.rb +288 -0
  182. data/spec/rng/roundtrip_spec.rb +342 -0
  183. data/spec/rng/schema_preamble_spec.rb +145 -0
  184. data/spec/rng/schema_spec.rb +125 -172
  185. data/spec/rng/spectest_spec.rb +273 -0
  186. data/spec/rng_spec.rb +2 -2
  187. data/spec/spec_helper.rb +7 -9
  188. metadata +188 -8
  189. data/lib/rng/builder.rb +0 -158
  190. data/lib/rng/rng_parser.rb +0 -107
  191. data/lib/rng/schema.rb +0 -18
  192. data/spec/rng/rng_parser_spec.rb +0 -102
data/exe/rng ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'rng/cli'
5
+ Rng::CLI.start(ARGV)
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rng
4
+ class AnyName < Lutaml::Model::Serializable
5
+ attribute :name, :string
6
+ attribute :id, :string
7
+ attribute :ns, :string
8
+ attribute :datatypeLibrary, :string
9
+ attribute :except, Except
10
+
11
+ xml do
12
+ element 'anyName'
13
+ namespace ::Rng::Namespaces::RngNamespace
14
+
15
+ ordered
16
+
17
+ map_attribute 'name', to: :name
18
+ map_attribute 'id', to: :id
19
+ map_attribute 'ns', to: :ns, value_map: {
20
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
21
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
22
+ }
23
+ map_attribute 'datatypeLibrary', to: :datatypeLibrary
24
+
25
+ map_element 'except', to: :except
26
+ end
27
+ end
28
+ end
data/lib/rng/attribute.rb CHANGED
@@ -1,13 +1,69 @@
1
- require "lutaml/model"
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Rng
4
4
  class Attribute < Lutaml::Model::Serializable
5
- attribute :name, :string
6
- attribute :type, :string, collection: true
5
+ attribute :name, Name
6
+ attribute :attr_name, :string
7
+ attribute :ns, :string
8
+ attribute :datatypeLibrary, :string
9
+ attribute :id, :string
10
+ attribute :ns_name, NsName
11
+ attribute :ref, Ref
12
+ attribute :choice, Choice
13
+ attribute :group, Group
14
+ attribute :interleave, Interleave
15
+ attribute :mixed, Mixed
16
+ attribute :optional, Optional
17
+ attribute :zeroOrMore, ZeroOrMore
18
+ attribute :oneOrMore, OneOrMore
19
+ attribute :anyName, AnyName
20
+ attribute :text, Text
21
+ attribute :empty, Empty
22
+ attribute :value, Value
23
+ attribute :data, Data
24
+ attribute :list, List
25
+ attribute :notAllowed, NotAllowed
26
+ attribute :attribute, Attribute
27
+ attribute :documentation, Documentation
7
28
 
8
29
  xml do
9
- map_attribute "name", to: :name
10
- map_element "data", to: :type
30
+ element 'attribute'
31
+ ordered
32
+
33
+ namespace ::Rng::Namespaces::RngNamespace
34
+
35
+ map_element 'name', to: :name
36
+ map_attribute 'name', to: :attr_name
37
+ map_attribute 'ns', to: :ns, value_map: {
38
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
39
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
40
+ }
41
+ map_attribute 'datatypeLibrary', to: :datatypeLibrary, value_map: {
42
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
43
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
44
+ }
45
+ map_attribute 'id', to: :id
46
+ map_element 'ref', to: :ref
47
+ map_element 'choice', to: :choice
48
+ map_element 'group', to: :group
49
+ map_element 'interleave', to: :interleave
50
+ map_element 'mixed', to: :mixed
51
+ map_element 'optional', to: :optional
52
+ map_element 'zeroOrMore', to: :zeroOrMore
53
+ map_element 'oneOrMore', to: :oneOrMore
54
+ map_element 'anyName', to: :anyName
55
+ map_element 'text', to: :text, value_map: {
56
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
57
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
58
+ }
59
+ map_element 'empty', to: :empty
60
+ map_element 'value', to: :value
61
+ map_element 'data', to: :data
62
+ map_element 'list', to: :list
63
+ map_element 'notAllowed', to: :notAllowed
64
+ map_element 'attribute', to: :attribute
65
+ map_element 'nsName', to: :ns_name
66
+ map_element 'documentation', to: :documentation
11
67
  end
12
68
  end
13
69
  end
data/lib/rng/choice.rb ADDED
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rng
4
+ class Choice < Lutaml::Model::Serializable
5
+ attribute :id, :string
6
+ attribute :ns, :string
7
+ attribute :datatypeLibrary, :string
8
+ attribute :element, Element, collection: true, initialize_empty: true
9
+ attribute :attribute, Attribute, collection: true, initialize_empty: true
10
+ attribute :ref, Ref, collection: true, initialize_empty: true
11
+ attribute :choice, Choice, collection: true, initialize_empty: true
12
+ attribute :group, Group, collection: true, initialize_empty: true
13
+ attribute :interleave, Interleave, collection: true, initialize_empty: true
14
+ attribute :mixed, Mixed, collection: true, initialize_empty: true
15
+ attribute :optional, Optional, collection: true, initialize_empty: true
16
+ attribute :zeroOrMore, ZeroOrMore, collection: true, initialize_empty: true
17
+ attribute :oneOrMore, OneOrMore, collection: true, initialize_empty: true
18
+ attribute :text, Text, collection: true, initialize_empty: true
19
+ attribute :empty, Empty, collection: true, initialize_empty: true
20
+ attribute :value, Value, collection: true, initialize_empty: true
21
+ attribute :data, Data, collection: true, initialize_empty: true
22
+ attribute :list, List, collection: true, initialize_empty: true
23
+ attribute :notAllowed, NotAllowed, collection: true, initialize_empty: true
24
+ attribute :name, Name, collection: true, initialize_empty: true
25
+
26
+ xml do
27
+ element 'choice'
28
+ ordered
29
+
30
+ namespace ::Rng::Namespaces::RngNamespace
31
+
32
+ map_attribute 'id', to: :id
33
+ map_attribute 'ns', to: :ns, value_map: {
34
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
35
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
36
+ }
37
+ map_attribute 'datatypeLibrary', to: :datatypeLibrary, value_map: {
38
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
39
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
40
+ }
41
+ map_element 'element', to: :element
42
+ map_element 'attribute', to: :attribute
43
+ map_element 'ref', to: :ref
44
+ map_element 'choice', to: :choice
45
+ map_element 'group', to: :group
46
+ map_element 'interleave', to: :interleave
47
+ map_element 'mixed', to: :mixed
48
+ map_element 'optional', to: :optional
49
+ map_element 'zeroOrMore', to: :zeroOrMore
50
+ map_element 'oneOrMore', to: :oneOrMore
51
+ map_element 'text', to: :text
52
+ map_element 'empty', to: :empty
53
+ map_element 'value', to: :value
54
+ map_element 'data', to: :data
55
+ map_element 'list', to: :list
56
+ map_element 'notAllowed', to: :notAllowed
57
+ map_element 'name', to: :name
58
+ end
59
+ end
60
+ end