lutaml-model 0.7.7 → 0.8.15

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 (1700) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependent-repos.json +10 -0
  3. data/.github/workflows/dependent-tests.yml +9 -0
  4. data/.github/workflows/docs.yml +59 -0
  5. data/.github/workflows/downstream-performance.yml +153 -0
  6. data/.github/workflows/opal.yml +31 -0
  7. data/.github/workflows/performance.yml +33 -0
  8. data/.github/workflows/rake.yml +13 -0
  9. data/.github/workflows/release.yml +5 -0
  10. data/.gitignore +27 -1
  11. data/.rspec-opal +5 -0
  12. data/.rubocop.yml +32 -2
  13. data/.rubocop_todo.yml +463 -88
  14. data/Gemfile +15 -9
  15. data/README.adoc +14117 -6914
  16. data/RELEASE_NOTES.adoc +53 -2
  17. data/Rakefile +2 -0
  18. data/bench/baselines/.gitkeep +0 -0
  19. data/bench/bench_all.rb +52 -0
  20. data/bench/bench_common.rb +147 -0
  21. data/bench/bench_compare.rb +195 -0
  22. data/bench/bench_mml.rb +53 -0
  23. data/bench/bench_niso.rb +54 -0
  24. data/bench/bench_sts.rb +49 -0
  25. data/bench/bench_unitsml.rb +43 -0
  26. data/bench/bench_xmi.rb +51 -0
  27. data/bench/gate_config.rb +120 -0
  28. data/benchmark/quick_benchmark.rb +297 -0
  29. data/benchmark/serialization_benchmark.rb +619 -0
  30. data/docs/.rubocop.yml +1 -0
  31. data/docs/.rubocop_todo.yml +7 -0
  32. data/docs/Gemfile +13 -0
  33. data/docs/PERFORMANCE_METHODOLOGY.md +645 -0
  34. data/docs/_config.yml +145 -0
  35. data/docs/_guides/advanced-mapping.adoc +564 -0
  36. data/docs/_guides/character-encoding.adoc +342 -0
  37. data/docs/_guides/collection-serialization.adoc +349 -0
  38. data/docs/_guides/creating-xsd.adoc +1221 -0
  39. data/docs/_guides/document-validation.adoc +303 -0
  40. data/docs/_guides/index.adoc +94 -0
  41. data/docs/_guides/jsonld-serialization.adoc +219 -0
  42. data/docs/_guides/keyvalue-serialization.adoc +1156 -0
  43. data/docs/_guides/liquid-templates.adoc +505 -0
  44. data/docs/_guides/missing-values-handling.adoc +1531 -0
  45. data/docs/_guides/ooxml-examples.adoc +755 -0
  46. data/docs/_guides/opal.adoc +221 -0
  47. data/docs/_guides/rdf-serialization.adoc +430 -0
  48. data/docs/{schema_generation.adoc → _guides/schema-generation.adoc} +5 -0
  49. data/docs/{schema_import.adoc → _guides/schema-import.adoc} +276 -4
  50. data/docs/_guides/turtle-serialization.adoc +237 -0
  51. data/docs/_guides/value-transformations.adoc +1388 -0
  52. data/docs/_guides/xml/namespace-presentation.adoc +476 -0
  53. data/docs/_guides/xml/namespace-semantics.adoc +677 -0
  54. data/docs/_guides/xml/reusable-mapping-classes.adoc +181 -0
  55. data/docs/_guides/xml/schema-location.adoc +245 -0
  56. data/docs/_guides/xml/type-namespaces.adoc +1011 -0
  57. data/docs/_guides/xml-mapping.adoc +1861 -0
  58. data/docs/_guides/xml-mappings-guide.adoc +21 -0
  59. data/docs/_guides/xml-namespace-declarations.adoc +662 -0
  60. data/docs/_guides/xml-namespace-qualification.adoc +720 -0
  61. data/docs/_guides/xml-namespaces.adoc +2613 -0
  62. data/docs/_guides/xml_mappings/01_introduction.adoc +65 -0
  63. data/docs/_guides/xml_mappings/02_core_concepts.adoc +177 -0
  64. data/docs/_guides/xml_mappings/03_architecture.adoc +205 -0
  65. data/docs/_guides/xml_mappings/04_xml_namespace_class.adoc +1754 -0
  66. data/docs/_guides/xml_mappings/05_common_patterns.adoc +1803 -0
  67. data/docs/_guides/xml_mappings/06_migration_guide.adoc +523 -0
  68. data/docs/_guides/xml_mappings/07_best_practices.adoc +996 -0
  69. data/docs/_guides/xml_mappings/08_troubleshooting.adoc +1023 -0
  70. data/docs/_migrations/0-1-0-migrate-from-shale.adoc +304 -0
  71. data/docs/_migrations/0-8-0-namespace-restructuring.adoc +1662 -0
  72. data/docs/_migrations/0-8-0-xsd-features.adoc +729 -0
  73. data/docs/_migrations/index.adoc +18 -0
  74. data/docs/_migrations/xsd-type-migration.adoc +1294 -0
  75. data/docs/_pages/attributes.adoc +1156 -0
  76. data/docs/_pages/breaking-changes.adoc +154 -0
  77. data/docs/_pages/collections.adoc +1670 -0
  78. data/docs/_pages/comparison-with-shale.adoc +139 -0
  79. data/docs/_pages/configuration.adoc +311 -0
  80. data/docs/_pages/consolidation-mapping.adoc +252 -0
  81. data/docs/_pages/importable_models.adoc +592 -0
  82. data/docs/_pages/index.adoc +47 -0
  83. data/docs/_pages/installation.adoc +35 -0
  84. data/docs/_pages/models.adoc +332 -0
  85. data/docs/_pages/quick-start.adoc +124 -0
  86. data/docs/_pages/serialization_adapters.adoc +351 -0
  87. data/docs/_pages/troubleshooting.adoc +104 -0
  88. data/docs/_pages/validation.adoc +171 -0
  89. data/docs/_pages/value_types.adoc +1514 -0
  90. data/docs/_pages/xml-conformance.adoc +143 -0
  91. data/docs/_references/architecture.adoc +189 -0
  92. data/docs/{custom_adapters.adoc → _references/custom_adapters.adoc} +6 -1
  93. data/docs/_references/custom_registers.adoc +1026 -0
  94. data/docs/_references/data-modeling-in-a-nutshell.adoc +207 -0
  95. data/docs/_references/format-independent-features.adoc +713 -0
  96. data/docs/_references/index.adoc +48 -0
  97. data/docs/_references/instance-serialization.adoc +120 -0
  98. data/docs/_references/lutaml-namespace-planning.md +120 -0
  99. data/docs/_references/parent-root-context.adoc +122 -0
  100. data/docs/_references/rdf-namespaces.adoc +243 -0
  101. data/docs/_references/reference_type.adoc +302 -0
  102. data/docs/_references/serialization-model-mappings.adoc +102 -0
  103. data/docs/_references/three-phase-namespace-architecture.adoc +470 -0
  104. data/docs/_references/xml-w3c-namespace-qualification.adoc +66 -0
  105. data/docs/_references/xsd-generation-with-namespace-support.adoc +449 -0
  106. data/docs/_references/xsd-schema-parsing.adoc +1260 -0
  107. data/docs/_references/xsd-type-architecture.adoc +534 -0
  108. data/docs/_tutorials/basic-model-definition.adoc +157 -0
  109. data/docs/_tutorials/custom-types-tutorial.adoc +258 -0
  110. data/docs/_tutorials/first-json-serialization.adoc +192 -0
  111. data/docs/_tutorials/first-xml-serialization.adoc +223 -0
  112. data/docs/_tutorials/index.adoc +60 -0
  113. data/docs/_tutorials/lutaml-xml-architecture.adoc +1359 -0
  114. data/docs/_tutorials/polymorphic-models-tutorial.adoc +253 -0
  115. data/docs/_tutorials/schema-compiler-module-namespaces.adoc +497 -0
  116. data/docs/_tutorials/validation-basics.adoc +232 -0
  117. data/docs/_tutorials/working-with-collections.adoc +201 -0
  118. data/docs/_tutorials/xml-element-attribute-namespace-guide.adoc +279 -0
  119. data/docs/_tutorials/xml-namespaces-basics.adoc +315 -0
  120. data/docs/_tutorials/xml-schema-primer-style-guide.adoc +1394 -0
  121. data/docs/architecture.md +424 -0
  122. data/docs/bugreports/BUGREPORT_element_order_render_empty.md +99 -0
  123. data/docs/cli_compare.adoc +249 -0
  124. data/docs/collection_validation.adoc +366 -0
  125. data/docs/index.adoc +110 -0
  126. data/docs/key_value_data_model.adoc +1229 -0
  127. data/docs/model_transforms.adoc +769 -0
  128. data/docs/namespace-management.adoc +1051 -0
  129. data/docs/xml-schema-qualification.md +171 -0
  130. data/docs/yamls_sequence.adoc +335 -0
  131. data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/document.rb +3 -4
  132. data/lib/lutaml/hash_format/adapter/mapping.rb +17 -0
  133. data/lib/lutaml/hash_format/adapter/mapping_rule.rb +9 -0
  134. data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/standard_adapter.rb +3 -3
  135. data/lib/lutaml/hash_format/adapter/transform.rb +9 -0
  136. data/lib/lutaml/hash_format/adapter.rb +13 -0
  137. data/lib/lutaml/hash_format/type/serializers.rb +24 -0
  138. data/lib/lutaml/hash_format.rb +29 -0
  139. data/lib/lutaml/{model/json → json/adapter}/document.rb +3 -3
  140. data/lib/lutaml/json/adapter/mapping.rb +17 -0
  141. data/lib/lutaml/json/adapter/mapping_rule.rb +9 -0
  142. data/lib/lutaml/json/adapter/multi_json_adapter.rb +40 -0
  143. data/lib/lutaml/json/adapter/oj_adapter.rb +40 -0
  144. data/lib/lutaml/json/adapter/standard_adapter.rb +36 -0
  145. data/lib/lutaml/json/adapter/transform.rb +9 -0
  146. data/lib/lutaml/json/adapter.rb +20 -0
  147. data/lib/lutaml/json/schema/json_schema.rb +62 -0
  148. data/lib/lutaml/json/schema.rb +9 -0
  149. data/lib/lutaml/json/type/serializers.rb +72 -0
  150. data/lib/lutaml/json.rb +62 -0
  151. data/lib/lutaml/{model/jsonl → jsonl/adapter}/document.rb +2 -2
  152. data/lib/lutaml/jsonl/adapter/mapping.rb +17 -0
  153. data/lib/lutaml/jsonl/adapter/mapping_rule.rb +9 -0
  154. data/lib/lutaml/{model/jsonl → jsonl/adapter}/standard_adapter.rb +5 -4
  155. data/lib/lutaml/jsonl/adapter/transform.rb +26 -0
  156. data/lib/lutaml/jsonl/adapter.rb +13 -0
  157. data/lib/lutaml/jsonl.rb +21 -0
  158. data/lib/lutaml/jsonld/adapter.rb +23 -0
  159. data/lib/lutaml/jsonld/context.rb +69 -0
  160. data/lib/lutaml/jsonld/term_definition.rb +39 -0
  161. data/lib/lutaml/jsonld/transform.rb +251 -0
  162. data/lib/lutaml/jsonld.rb +23 -0
  163. data/lib/lutaml/key_value/adapter/hash/document.rb +13 -0
  164. data/lib/lutaml/key_value/adapter/hash/mapping.rb +17 -0
  165. data/lib/lutaml/key_value/adapter/hash/mapping_rule.rb +9 -0
  166. data/lib/lutaml/key_value/adapter/hash/standard_adapter.rb +19 -0
  167. data/lib/lutaml/key_value/adapter/hash/transform.rb +10 -0
  168. data/lib/lutaml/key_value/adapter/hash.rb +15 -0
  169. data/lib/lutaml/key_value/adapter/json/document.rb +16 -0
  170. data/lib/lutaml/key_value/adapter/json/mapping.rb +22 -0
  171. data/lib/lutaml/key_value/adapter/json/mapping_rule.rb +14 -0
  172. data/lib/lutaml/key_value/adapter/json/multi_json_adapter.rb +45 -0
  173. data/lib/lutaml/key_value/adapter/json/oj_adapter.rb +45 -0
  174. data/lib/lutaml/key_value/adapter/json/standard_adapter.rb +41 -0
  175. data/lib/lutaml/key_value/adapter/json/transform.rb +14 -0
  176. data/lib/lutaml/key_value/adapter/json.rb +24 -0
  177. data/lib/lutaml/key_value/adapter/jsonl/document.rb +16 -0
  178. data/lib/lutaml/key_value/adapter/jsonl/mapping.rb +17 -0
  179. data/lib/lutaml/key_value/adapter/jsonl/mapping_rule.rb +9 -0
  180. data/lib/lutaml/key_value/adapter/jsonl/standard_adapter.rb +36 -0
  181. data/lib/lutaml/key_value/adapter/jsonl/transform.rb +26 -0
  182. data/lib/lutaml/key_value/adapter/jsonl.rb +17 -0
  183. data/lib/lutaml/key_value/adapter/toml/document.rb +13 -0
  184. data/lib/lutaml/key_value/adapter/toml/mapping.rb +26 -0
  185. data/lib/lutaml/key_value/adapter/toml/mapping_rule.rb +9 -0
  186. data/lib/lutaml/key_value/adapter/toml/toml_rb_adapter.rb +40 -0
  187. data/lib/lutaml/key_value/adapter/toml/tomlib_adapter.rb +46 -0
  188. data/lib/lutaml/key_value/adapter/toml/transform.rb +10 -0
  189. data/lib/lutaml/key_value/adapter/toml.rb +21 -0
  190. data/lib/lutaml/key_value/adapter/yaml/document.rb +12 -0
  191. data/lib/lutaml/key_value/adapter/yaml/mapping.rb +17 -0
  192. data/lib/lutaml/key_value/adapter/yaml/mapping_rule.rb +9 -0
  193. data/lib/lutaml/key_value/adapter/yaml/standard_adapter.rb +41 -0
  194. data/lib/lutaml/key_value/adapter/yaml/transform.rb +10 -0
  195. data/lib/lutaml/key_value/adapter/yaml.rb +17 -0
  196. data/lib/lutaml/key_value/adapter/yamls/document.rb +16 -0
  197. data/lib/lutaml/key_value/adapter/yamls/mapping.rb +17 -0
  198. data/lib/lutaml/key_value/adapter/yamls/mapping_rule.rb +9 -0
  199. data/lib/lutaml/key_value/adapter/yamls/standard_adapter.rb +37 -0
  200. data/lib/lutaml/key_value/adapter/yamls/transform.rb +26 -0
  201. data/lib/lutaml/key_value/adapter/yamls.rb +17 -0
  202. data/lib/lutaml/key_value/adapter.rb +14 -0
  203. data/lib/lutaml/key_value/data_model/element.rb +222 -0
  204. data/lib/lutaml/key_value/data_model.rb +14 -0
  205. data/lib/lutaml/{model/key_value_document.rb → key_value/document.rb} +2 -2
  206. data/lib/lutaml/key_value/mapping.rb +290 -0
  207. data/lib/lutaml/{model/mapping/key_value_mapping_rule.rb → key_value/mapping_rule.rb} +9 -10
  208. data/lib/lutaml/{model/transform/key_value_transform.rb → key_value/transform.rb} +114 -68
  209. data/lib/lutaml/key_value/transformation/collection_serializer.rb +589 -0
  210. data/lib/lutaml/key_value/transformation/rule_compiler.rb +294 -0
  211. data/lib/lutaml/key_value/transformation/value_serializer.rb +268 -0
  212. data/lib/lutaml/key_value/transformation.rb +1081 -0
  213. data/lib/lutaml/key_value/transformation_builder.rb +30 -0
  214. data/lib/lutaml/key_value.rb +24 -0
  215. data/lib/lutaml/model/adapter_resolver.rb +405 -0
  216. data/lib/lutaml/model/adapter_scope.rb +64 -0
  217. data/lib/lutaml/model/attribute.rb +536 -123
  218. data/lib/lutaml/model/attribute_validator.rb +290 -0
  219. data/lib/lutaml/model/cached_type_resolver/concurrent_map_cache.rb +46 -0
  220. data/lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb +51 -0
  221. data/lib/lutaml/model/cached_type_resolver.rb +145 -0
  222. data/lib/lutaml/model/choice.rb +230 -13
  223. data/lib/lutaml/model/cli.rb +75 -121
  224. data/lib/lutaml/model/collection.rb +511 -44
  225. data/lib/lutaml/model/collection_handler.rb +106 -0
  226. data/lib/lutaml/model/comparable_model.rb +21 -13
  227. data/lib/lutaml/model/comparable_nil.rb +0 -2
  228. data/lib/lutaml/model/compiled_rule.rb +208 -0
  229. data/lib/lutaml/model/config.rb +111 -80
  230. data/lib/lutaml/model/configuration.rb +91 -0
  231. data/lib/lutaml/model/consolidation/attribute_grouper.rb +44 -0
  232. data/lib/lutaml/model/consolidation/dispatcher.rb +45 -0
  233. data/lib/lutaml/model/consolidation/engine.rb +33 -0
  234. data/lib/lutaml/model/consolidation/pattern_chunker.rb +87 -0
  235. data/lib/lutaml/model/consolidation_map.rb +68 -0
  236. data/lib/lutaml/model/consolidation_rule/dispatch_block.rb +34 -0
  237. data/lib/lutaml/model/consolidation_rule/gather_rule.rb +17 -0
  238. data/lib/lutaml/model/consolidation_rule/pattern_content_rule.rb +15 -0
  239. data/lib/lutaml/model/consolidation_rule/pattern_element_rule.rb +17 -0
  240. data/lib/lutaml/model/consolidation_rule.rb +27 -0
  241. data/lib/lutaml/model/constants.rb +5 -3
  242. data/lib/lutaml/model/context_registry.rb +208 -0
  243. data/lib/lutaml/model/deep_dupable.rb +16 -0
  244. data/lib/lutaml/model/error/element_count_out_of_range_error.rb +13 -7
  245. data/lib/lutaml/model/error/format_adapter_not_specified_error.rb +25 -0
  246. data/lib/lutaml/model/error/invalid_attribute_type_error.rb +98 -0
  247. data/lib/lutaml/model/error/invalid_format_error.rb +11 -0
  248. data/lib/lutaml/model/error/liquid_class_not_found_error.rb +9 -0
  249. data/lib/lutaml/model/error/liquid_drop_already_registered_error.rb +11 -0
  250. data/lib/lutaml/model/error/mapping_already_exists_error.rb +6 -0
  251. data/lib/lutaml/model/error/mapping_attribute_missing_error.rb +6 -0
  252. data/lib/lutaml/model/error/mapping_attribute_type_error.rb +6 -0
  253. data/lib/lutaml/model/error/mixed_content_collection_error.rb +17 -0
  254. data/lib/lutaml/model/error/no_attributes_defined_liquid_error.rb +9 -0
  255. data/lib/lutaml/model/error/no_mapping_found_error.rb +9 -0
  256. data/lib/lutaml/model/error/no_root_mapping_error.rb +6 -5
  257. data/lib/lutaml/model/error/no_root_namespace_error.rb +6 -5
  258. data/lib/lutaml/model/error/ordered_content_mapping_error.rb +17 -0
  259. data/lib/lutaml/model/error/required_attribute_missing_error.rb +9 -0
  260. data/lib/lutaml/model/error/reverse_transform_block_not_defined_error.rb +6 -0
  261. data/lib/lutaml/model/error/reverse_transformation_declaration_error.rb +6 -0
  262. data/lib/lutaml/model/error/sorting_configuration_conflict_error.rb +9 -0
  263. data/lib/lutaml/model/error/transform_block_not_defined_error.rb +6 -0
  264. data/lib/lutaml/model/error/type.rb +17 -0
  265. data/lib/lutaml/model/error/type_only_mapping_error.rb +13 -0
  266. data/lib/lutaml/model/error/type_only_namespace_error.rb +12 -0
  267. data/lib/lutaml/model/error/undefined_attribute_error.rb +9 -0
  268. data/lib/lutaml/model/error/unknown_adapter_type_error.rb +82 -3
  269. data/lib/lutaml/model/error/unknown_type_error.rb +25 -2
  270. data/lib/lutaml/model/error/unresolvable_type_error.rb +27 -0
  271. data/lib/lutaml/model/error.rb +2 -33
  272. data/lib/lutaml/model/errors.rb +4 -2
  273. data/lib/lutaml/model/finalization_cache.rb +51 -0
  274. data/lib/lutaml/model/format_registry.rb +181 -9
  275. data/lib/lutaml/model/global_context.rb +447 -0
  276. data/lib/lutaml/model/global_register.rb +106 -5
  277. data/lib/lutaml/model/hash.rb +15 -0
  278. data/lib/lutaml/model/import_registry.rb +250 -0
  279. data/lib/lutaml/model/instrumentation.rb +304 -0
  280. data/lib/lutaml/model/json.rb +17 -13
  281. data/lib/lutaml/model/jsonl.rb +7 -13
  282. data/lib/lutaml/model/liquefiable.rb +112 -18
  283. data/lib/lutaml/model/liquid/indexed_access.rb +33 -0
  284. data/lib/lutaml/model/liquid/mapping.rb +30 -0
  285. data/lib/lutaml/model/liquid.rb +10 -0
  286. data/lib/lutaml/model/mapping/listener.rb +126 -0
  287. data/lib/lutaml/model/mapping/mapping.rb +113 -1
  288. data/lib/lutaml/model/mapping/mapping_rule.rb +188 -23
  289. data/lib/lutaml/model/mapping/model_mapping.rb +133 -0
  290. data/lib/lutaml/model/mapping/model_mapping_rule.rb +57 -0
  291. data/lib/lutaml/model/mapping_hash.rb +4 -2
  292. data/lib/lutaml/model/model_transformer.rb +101 -0
  293. data/lib/lutaml/model/one_entry_cache.rb +57 -0
  294. data/lib/lutaml/model/organization.rb +29 -0
  295. data/lib/lutaml/model/register/model_tree_importer.rb +88 -0
  296. data/lib/lutaml/model/register/namespace_binding.rb +92 -0
  297. data/lib/lutaml/model/register.rb +500 -35
  298. data/lib/lutaml/model/registrable.rb +2 -0
  299. data/lib/lutaml/model/render_policy.rb +148 -0
  300. data/lib/lutaml/model/runtime_compatibility.rb +94 -0
  301. data/lib/lutaml/model/schema/base_schema.rb +1 -3
  302. data/lib/lutaml/model/schema/decorators/attribute.rb +3 -1
  303. data/lib/lutaml/model/schema/decorators/choices.rb +0 -2
  304. data/lib/lutaml/model/schema/decorators/class_definition.rb +4 -5
  305. data/lib/lutaml/model/schema/decorators/definition_collection.rb +7 -7
  306. data/lib/lutaml/model/schema/decorators.rb +15 -0
  307. data/lib/lutaml/model/schema/generator/definition.rb +4 -3
  308. data/lib/lutaml/model/schema/generator/definitions_collection.rb +4 -3
  309. data/lib/lutaml/model/schema/generator/properties_collection.rb +7 -5
  310. data/lib/lutaml/model/schema/generator/property.rb +5 -1
  311. data/lib/lutaml/model/schema/generator.rb +15 -0
  312. data/lib/lutaml/model/schema/helpers.rb +11 -0
  313. data/lib/lutaml/model/schema/json_schema.rb +9 -53
  314. data/lib/lutaml/model/schema/renderer.rb +19 -17
  315. data/lib/lutaml/model/schema/schema_builder/nokogiri.rb +41 -0
  316. data/lib/lutaml/model/schema/schema_builder/oga.rb +92 -0
  317. data/lib/lutaml/model/schema/shared_methods.rb +2 -2
  318. data/lib/lutaml/model/schema/xml_compiler/attribute.rb +33 -12
  319. data/lib/lutaml/model/schema/xml_compiler/attribute_group.rb +3 -1
  320. data/lib/lutaml/model/schema/xml_compiler/choice.rb +4 -2
  321. data/lib/lutaml/model/schema/xml_compiler/complex_type.rb +73 -36
  322. data/lib/lutaml/model/schema/xml_compiler/element.rb +18 -1
  323. data/lib/lutaml/model/schema/xml_compiler/group.rb +20 -4
  324. data/lib/lutaml/model/schema/xml_compiler/registry_generator.rb +127 -0
  325. data/lib/lutaml/model/schema/xml_compiler/restriction.rb +5 -2
  326. data/lib/lutaml/model/schema/xml_compiler/sequence.rb +6 -4
  327. data/lib/lutaml/model/schema/xml_compiler/simple_content.rb +7 -3
  328. data/lib/lutaml/model/schema/xml_compiler/simple_type.rb +127 -51
  329. data/lib/lutaml/model/schema/xml_compiler/xml_namespace_class.rb +110 -0
  330. data/lib/lutaml/model/schema/xml_compiler.rb +261 -87
  331. data/lib/lutaml/model/schema/yaml_schema.rb +10 -50
  332. data/lib/lutaml/model/schema.rb +49 -14
  333. data/lib/lutaml/model/schema_location.rb +12 -60
  334. data/lib/lutaml/model/sequence.rb +104 -30
  335. data/lib/lutaml/model/serializable.rb +1 -3
  336. data/lib/lutaml/model/serialization_adapter.rb +2 -0
  337. data/lib/lutaml/model/serialize/attribute_definition.rb +229 -0
  338. data/lib/lutaml/model/serialize/builder.rb +169 -0
  339. data/lib/lutaml/model/serialize/deserialization_context.rb +50 -0
  340. data/lib/lutaml/model/serialize/enum_handling.rb +124 -0
  341. data/lib/lutaml/model/serialize/format_conversion.rb +353 -0
  342. data/lib/lutaml/model/serialize/initialization.rb +432 -0
  343. data/lib/lutaml/model/serialize/model_import.rb +357 -0
  344. data/lib/lutaml/model/serialize/transformation_builder.rb +127 -0
  345. data/lib/lutaml/model/serialize/value_mapping.rb +200 -0
  346. data/lib/lutaml/model/serialize.rb +172 -578
  347. data/lib/lutaml/model/services/base.rb +2 -0
  348. data/lib/lutaml/model/services/default_value_resolver.rb +60 -0
  349. data/lib/lutaml/model/services/logger.rb +10 -7
  350. data/lib/lutaml/model/services/rule_value_extractor.rb +23 -36
  351. data/lib/lutaml/model/services/transformer.rb +95 -19
  352. data/lib/lutaml/model/services/type/validator/string.rb +3 -2
  353. data/lib/lutaml/model/services/type/validator/symbol.rb +30 -0
  354. data/lib/lutaml/model/services/type/validator.rb +5 -2
  355. data/lib/lutaml/model/services/type.rb +9 -0
  356. data/lib/lutaml/model/services/validator.rb +1 -3
  357. data/lib/lutaml/model/services.rb +12 -5
  358. data/lib/lutaml/model/store.rb +181 -0
  359. data/lib/lutaml/model/toml.rb +24 -18
  360. data/lib/lutaml/model/transform/xml_transform.rb +4 -227
  361. data/lib/lutaml/model/transform.rb +99 -19
  362. data/lib/lutaml/model/transformation.rb +84 -0
  363. data/lib/lutaml/model/transformation_builder.rb +55 -0
  364. data/lib/lutaml/model/transformation_registry.rb +314 -0
  365. data/lib/lutaml/model/type/base64_binary.rb +58 -0
  366. data/lib/lutaml/model/type/boolean.rb +9 -16
  367. data/lib/lutaml/model/type/date.rb +49 -9
  368. data/lib/lutaml/model/type/date_time.rb +30 -18
  369. data/lib/lutaml/model/type/decimal.rb +28 -9
  370. data/lib/lutaml/model/type/duration.rb +82 -0
  371. data/lib/lutaml/model/type/float.rb +12 -13
  372. data/lib/lutaml/model/type/hash.rb +19 -22
  373. data/lib/lutaml/model/type/hex_binary.rb +56 -0
  374. data/lib/lutaml/model/type/integer.rb +19 -1
  375. data/lib/lutaml/model/type/qname.rb +85 -0
  376. data/lib/lutaml/model/type/reference.rb +76 -0
  377. data/lib/lutaml/model/type/string.rb +18 -35
  378. data/lib/lutaml/model/type/symbol.rb +67 -0
  379. data/lib/lutaml/model/type/time.rb +19 -22
  380. data/lib/lutaml/model/type/time_without_date.rb +18 -18
  381. data/lib/lutaml/model/type/uninitialized_class_guard.rb +36 -0
  382. data/lib/lutaml/model/type/uri.rb +51 -0
  383. data/lib/lutaml/model/type/value.rb +52 -5
  384. data/lib/lutaml/model/type.rb +98 -13
  385. data/lib/lutaml/model/type_context.rb +285 -0
  386. data/lib/lutaml/model/type_registry.rb +165 -0
  387. data/lib/lutaml/model/type_resolver.rb +180 -0
  388. data/lib/lutaml/model/type_substitution.rb +117 -0
  389. data/lib/lutaml/model/uninitialized_class.rb +12 -6
  390. data/lib/lutaml/model/utils.rb +144 -19
  391. data/lib/lutaml/model/validation/concerns/has_issues.rb +27 -0
  392. data/lib/lutaml/model/validation/context.rb +36 -0
  393. data/lib/lutaml/model/validation/issue.rb +62 -0
  394. data/lib/lutaml/model/validation/layer_result.rb +34 -0
  395. data/lib/lutaml/model/validation/profile.rb +66 -0
  396. data/lib/lutaml/model/validation/registry.rb +60 -0
  397. data/lib/lutaml/model/validation/remediation.rb +33 -0
  398. data/lib/lutaml/model/validation/remediation_result.rb +20 -0
  399. data/lib/lutaml/model/validation/report.rb +39 -0
  400. data/lib/lutaml/model/validation/rule.rb +59 -0
  401. data/lib/lutaml/model/validation.rb +59 -9
  402. data/lib/lutaml/model/validation_framework.rb +77 -0
  403. data/lib/lutaml/model/value_transformer.rb +25 -0
  404. data/lib/lutaml/model/version.rb +1 -1
  405. data/lib/lutaml/model/yaml.rb +7 -13
  406. data/lib/lutaml/model/yamls.rb +7 -13
  407. data/lib/lutaml/model.rb +243 -25
  408. data/lib/lutaml/rdf/error.rb +7 -0
  409. data/lib/lutaml/rdf/iri.rb +44 -0
  410. data/lib/lutaml/rdf/language_tagged.rb +11 -0
  411. data/lib/lutaml/rdf/literal.rb +62 -0
  412. data/lib/lutaml/rdf/mapping.rb +86 -0
  413. data/lib/lutaml/rdf/mapping_rule.rb +52 -0
  414. data/lib/lutaml/rdf/member_rule.rb +55 -0
  415. data/lib/lutaml/rdf/namespace.rb +58 -0
  416. data/lib/lutaml/rdf/namespace_set.rb +69 -0
  417. data/lib/lutaml/rdf/namespaces/dcterms_namespace.rb +12 -0
  418. data/lib/lutaml/rdf/namespaces/owl_namespace.rb +12 -0
  419. data/lib/lutaml/rdf/namespaces/rdf_namespace.rb +14 -0
  420. data/lib/lutaml/rdf/namespaces/rdfs_namespace.rb +12 -0
  421. data/lib/lutaml/rdf/namespaces/skos_namespace.rb +12 -0
  422. data/lib/lutaml/rdf/namespaces/xsd_namespace.rb +12 -0
  423. data/lib/lutaml/rdf/namespaces.rb +14 -0
  424. data/lib/lutaml/rdf/transform.rb +45 -0
  425. data/lib/lutaml/rdf.rb +19 -0
  426. data/lib/lutaml/{model/toml → toml/adapter}/document.rb +3 -4
  427. data/lib/lutaml/toml/adapter/mapping.rb +26 -0
  428. data/lib/lutaml/toml/adapter/mapping_rule.rb +9 -0
  429. data/lib/lutaml/toml/adapter/toml_rb_adapter.rb +38 -0
  430. data/lib/lutaml/toml/adapter/tomlib_adapter.rb +54 -0
  431. data/lib/lutaml/toml/adapter/transform.rb +9 -0
  432. data/lib/lutaml/toml/adapter.rb +19 -0
  433. data/lib/lutaml/toml/type/serializers.rb +71 -0
  434. data/lib/lutaml/toml.rb +48 -0
  435. data/lib/lutaml/turtle/adapter.rb +35 -0
  436. data/lib/lutaml/turtle/mapping.rb +7 -0
  437. data/lib/lutaml/turtle/transform.rb +249 -0
  438. data/lib/lutaml/turtle.rb +22 -0
  439. data/lib/lutaml/xml/adapter/adapter_helpers.rb +108 -0
  440. data/lib/lutaml/xml/adapter/base_adapter.rb +249 -0
  441. data/lib/lutaml/xml/adapter/namespace_data.rb +56 -0
  442. data/lib/lutaml/xml/adapter/namespace_uri_collector.rb +71 -0
  443. data/lib/lutaml/xml/adapter/nokogiri_adapter.rb +16 -0
  444. data/lib/lutaml/xml/adapter/oga_adapter.rb +16 -0
  445. data/lib/lutaml/xml/adapter/ox_adapter.rb +16 -0
  446. data/lib/lutaml/xml/adapter/plan_based_builder.rb +929 -0
  447. data/lib/lutaml/xml/adapter/rexml_adapter.rb +21 -0
  448. data/lib/lutaml/xml/adapter/xml_parser.rb +86 -0
  449. data/lib/lutaml/xml/adapter/xml_serializer.rb +311 -0
  450. data/lib/lutaml/xml/adapter.rb +23 -0
  451. data/lib/lutaml/xml/adapter_element.rb +215 -0
  452. data/lib/lutaml/xml/adapter_loader.rb +53 -0
  453. data/lib/lutaml/xml/attribute_namespace_resolver.rb +139 -0
  454. data/lib/lutaml/xml/blank_namespace.rb +51 -0
  455. data/lib/lutaml/xml/blank_namespace_handler.rb +50 -0
  456. data/lib/lutaml/xml/builder/base.rb +253 -0
  457. data/lib/lutaml/xml/builder/nokogiri.rb +10 -0
  458. data/lib/lutaml/xml/builder/oga.rb +13 -0
  459. data/lib/lutaml/xml/builder/ox.rb +13 -0
  460. data/lib/lutaml/xml/builder/rexml.rb +13 -0
  461. data/lib/lutaml/xml/builder.rb +17 -0
  462. data/lib/lutaml/xml/configurable.rb +215 -0
  463. data/lib/lutaml/xml/data_model.rb +279 -0
  464. data/lib/lutaml/xml/decisions/decision.rb +103 -0
  465. data/lib/lutaml/xml/decisions/decision_context.rb +225 -0
  466. data/lib/lutaml/xml/decisions/decision_engine.rb +67 -0
  467. data/lib/lutaml/xml/decisions/decision_rule.rb +54 -0
  468. data/lib/lutaml/xml/decisions/element_prefix_resolver.rb +85 -0
  469. data/lib/lutaml/xml/decisions/rules/attribute_usage_rule.rb +37 -0
  470. data/lib/lutaml/xml/decisions/rules/default_preference_rule.rb +62 -0
  471. data/lib/lutaml/xml/decisions/rules/element_form_default_rule.rb +66 -0
  472. data/lib/lutaml/xml/decisions/rules/element_form_default_unqualified_rule.rb +73 -0
  473. data/lib/lutaml/xml/decisions/rules/element_form_option_rule.rb +83 -0
  474. data/lib/lutaml/xml/decisions/rules/explicit_option_rule.rb +57 -0
  475. data/lib/lutaml/xml/decisions/rules/format_preservation_rule.rb +74 -0
  476. data/lib/lutaml/xml/decisions/rules/hoisted_on_parent_rule.rb +60 -0
  477. data/lib/lutaml/xml/decisions/rules/inherit_from_parent_rule.rb +52 -0
  478. data/lib/lutaml/xml/decisions/rules/inherit_parent_prefix_rule.rb +69 -0
  479. data/lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb +54 -0
  480. data/lib/lutaml/xml/decisions/rules/reuse_parent_prefix_rule.rb +78 -0
  481. data/lib/lutaml/xml/decisions/rules/used_prefix_rule.rb +70 -0
  482. data/lib/lutaml/xml/decisions/rules.rb +39 -0
  483. data/lib/lutaml/xml/decisions.rb +15 -0
  484. data/lib/lutaml/xml/declaration_handler.rb +115 -0
  485. data/lib/lutaml/xml/declaration_plan/attribute_node.rb +81 -0
  486. data/lib/lutaml/xml/declaration_plan/element_node.rb +101 -0
  487. data/lib/lutaml/xml/declaration_plan.rb +480 -0
  488. data/lib/lutaml/xml/declaration_plan_query.rb +105 -0
  489. data/lib/lutaml/xml/declaration_planner.rb +1848 -0
  490. data/lib/lutaml/xml/doctype_extractor.rb +51 -0
  491. data/lib/lutaml/xml/document.rb +385 -0
  492. data/lib/lutaml/xml/element.rb +102 -0
  493. data/lib/lutaml/xml/element_prefix_resolver.rb +50 -0
  494. data/lib/lutaml/xml/encoding_normalizer.rb +54 -0
  495. data/lib/lutaml/xml/error/invalid_namespace_error.rb +46 -0
  496. data/lib/lutaml/xml/error/invalid_xsd_type_error.rb +43 -0
  497. data/lib/lutaml/xml/error/namespace_mismatch_error.rb +53 -0
  498. data/lib/lutaml/xml/error/xml_configuration_error.rb +17 -0
  499. data/lib/lutaml/xml/error/xml_error.rb +21 -0
  500. data/lib/lutaml/xml/format_chooser.rb +214 -0
  501. data/lib/lutaml/xml/hoisting_algorithm.rb +234 -0
  502. data/lib/lutaml/xml/listener.rb +33 -0
  503. data/lib/lutaml/xml/mapping.rb +1479 -0
  504. data/lib/lutaml/xml/mapping_rule.rb +578 -0
  505. data/lib/lutaml/xml/model_transform.rb +984 -0
  506. data/lib/lutaml/xml/namespace.rb +435 -0
  507. data/lib/lutaml/xml/namespace_class_registry.rb +144 -0
  508. data/lib/lutaml/xml/namespace_collector.rb +611 -0
  509. data/lib/lutaml/xml/namespace_declaration.rb +202 -0
  510. data/lib/lutaml/xml/namespace_declaration_builder.rb +67 -0
  511. data/lib/lutaml/xml/namespace_declaration_data.rb +179 -0
  512. data/lib/lutaml/xml/namespace_inheritance_resolver.rb +142 -0
  513. data/lib/lutaml/xml/namespace_inheritance_strategy.rb +26 -0
  514. data/lib/lutaml/xml/namespace_needs.rb +213 -0
  515. data/lib/lutaml/xml/namespace_resolution_strategy.rb +230 -0
  516. data/lib/lutaml/xml/namespace_resolver.rb +219 -0
  517. data/lib/lutaml/xml/namespace_scope_config.rb +110 -0
  518. data/lib/lutaml/xml/namespace_type_resolver.rb +135 -0
  519. data/lib/lutaml/xml/namespace_usage.rb +121 -0
  520. data/lib/lutaml/xml/nokogiri/element.rb +34 -0
  521. data/lib/lutaml/xml/nokogiri.rb +10 -0
  522. data/lib/lutaml/xml/oga/element.rb +15 -0
  523. data/lib/lutaml/xml/oga.rb +10 -0
  524. data/lib/lutaml/xml/ox/element.rb +15 -0
  525. data/lib/lutaml/xml/ox.rb +10 -0
  526. data/lib/lutaml/xml/parsed_namespace_declaration.rb +129 -0
  527. data/lib/lutaml/xml/parsed_namespace_set.rb +149 -0
  528. data/lib/lutaml/xml/polymorphic_value_handler.rb +41 -0
  529. data/lib/lutaml/xml/qualified_inheritance_strategy.rb +27 -0
  530. data/lib/lutaml/xml/rexml/element.rb +15 -0
  531. data/lib/lutaml/xml/rexml.rb +10 -0
  532. data/lib/lutaml/xml/schema/builder/nokogiri.rb +41 -0
  533. data/lib/lutaml/xml/schema/builder/oga.rb +92 -0
  534. data/lib/lutaml/xml/schema/builder.rb +59 -0
  535. data/lib/lutaml/xml/schema/builtin_types.rb +112 -0
  536. data/lib/lutaml/{model → xml}/schema/relaxng_schema.rb +9 -4
  537. data/lib/lutaml/xml/schema/xsd/all.rb +31 -0
  538. data/lib/lutaml/xml/schema/xsd/annotation.rb +31 -0
  539. data/lib/lutaml/xml/schema/xsd/any.rb +33 -0
  540. data/lib/lutaml/xml/schema/xsd/any_attribute.rb +29 -0
  541. data/lib/lutaml/xml/schema/xsd/appinfo.rb +25 -0
  542. data/lib/lutaml/xml/schema/xsd/attribute.rb +78 -0
  543. data/lib/lutaml/xml/schema/xsd/attribute_group.rb +89 -0
  544. data/lib/lutaml/xml/schema/xsd/base.rb +270 -0
  545. data/lib/lutaml/xml/schema/xsd/choice.rb +68 -0
  546. data/lib/lutaml/xml/schema/xsd/complex_content.rb +39 -0
  547. data/lib/lutaml/xml/schema/xsd/complex_type.rb +157 -0
  548. data/lib/lutaml/xml/schema/xsd/documentation.rb +26 -0
  549. data/lib/lutaml/xml/schema/xsd/element.rb +117 -0
  550. data/lib/lutaml/xml/schema/xsd/enumeration.rb +25 -0
  551. data/lib/lutaml/xml/schema/xsd/errors/enhanced_error.rb +142 -0
  552. data/lib/lutaml/xml/schema/xsd/errors/error_context.rb +67 -0
  553. data/lib/lutaml/xml/schema/xsd/errors/message_builder.rb +103 -0
  554. data/lib/lutaml/xml/schema/xsd/errors/suggestion.rb +67 -0
  555. data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/namespace_troubleshooter.rb +96 -0
  556. data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/troubleshooting_handler.rb +70 -0
  557. data/lib/lutaml/xml/schema/xsd/errors.rb +148 -0
  558. data/lib/lutaml/xml/schema/xsd/extension_complex_content.rb +63 -0
  559. data/lib/lutaml/xml/schema/xsd/extension_simple_content.rb +48 -0
  560. data/lib/lutaml/xml/schema/xsd/field.rb +25 -0
  561. data/lib/lutaml/xml/schema/xsd/file_validation_result.rb +55 -0
  562. data/lib/lutaml/xml/schema/xsd/fraction_digits.rb +29 -0
  563. data/lib/lutaml/xml/schema/xsd/glob.rb +105 -0
  564. data/lib/lutaml/xml/schema/xsd/group.rb +79 -0
  565. data/lib/lutaml/xml/schema/xsd/import.rb +33 -0
  566. data/lib/lutaml/xml/schema/xsd/include.rb +31 -0
  567. data/lib/lutaml/xml/schema/xsd/key.rb +32 -0
  568. data/lib/lutaml/xml/schema/xsd/keyref.rb +33 -0
  569. data/lib/lutaml/xml/schema/xsd/length.rb +27 -0
  570. data/lib/lutaml/xml/schema/xsd/list.rb +28 -0
  571. data/lib/lutaml/xml/schema/xsd/max_exclusive.rb +25 -0
  572. data/lib/lutaml/xml/schema/xsd/max_inclusive.rb +23 -0
  573. data/lib/lutaml/xml/schema/xsd/max_length.rb +25 -0
  574. data/lib/lutaml/xml/schema/xsd/min_exclusive.rb +25 -0
  575. data/lib/lutaml/xml/schema/xsd/min_inclusive.rb +23 -0
  576. data/lib/lutaml/xml/schema/xsd/min_length.rb +25 -0
  577. data/lib/lutaml/xml/schema/xsd/namespace_mapping.rb +37 -0
  578. data/lib/lutaml/xml/schema/xsd/namespace_uri_remapping.rb +79 -0
  579. data/lib/lutaml/xml/schema/xsd/notation.rb +31 -0
  580. data/lib/lutaml/xml/schema/xsd/pattern.rb +25 -0
  581. data/lib/lutaml/xml/schema/xsd/redefine.rb +35 -0
  582. data/lib/lutaml/xml/schema/xsd/restriction_complex_content.rb +56 -0
  583. data/lib/lutaml/xml/schema/xsd/restriction_simple_content.rb +84 -0
  584. data/lib/lutaml/xml/schema/xsd/restriction_simple_type.rb +64 -0
  585. data/lib/lutaml/xml/schema/xsd/schema.rb +376 -0
  586. data/lib/lutaml/xml/schema/xsd/schema_file_validation_results.rb +55 -0
  587. data/lib/lutaml/xml/schema/xsd/schema_location_mapping.rb +74 -0
  588. data/lib/lutaml/xml/schema/xsd/schema_name_resolver.rb +32 -0
  589. data/lib/lutaml/xml/schema/xsd/schema_path.rb +202 -0
  590. data/lib/lutaml/xml/schema/xsd/schema_validator.rb +259 -0
  591. data/lib/lutaml/xml/schema/xsd/selector.rb +27 -0
  592. data/lib/lutaml/xml/schema/xsd/sequence.rb +68 -0
  593. data/lib/lutaml/xml/schema/xsd/serialized_schema.rb +185 -0
  594. data/lib/lutaml/xml/schema/xsd/simple_content.rb +61 -0
  595. data/lib/lutaml/xml/schema/xsd/simple_type.rb +37 -0
  596. data/lib/lutaml/xml/schema/xsd/total_digits.rb +29 -0
  597. data/lib/lutaml/xml/schema/xsd/type_index_entry.rb +40 -0
  598. data/lib/lutaml/xml/schema/xsd/type_resolution_result.rb +112 -0
  599. data/lib/lutaml/xml/schema/xsd/union.rb +30 -0
  600. data/lib/lutaml/xml/schema/xsd/unique.rb +31 -0
  601. data/lib/lutaml/xml/schema/xsd/validation_error.rb +48 -0
  602. data/lib/lutaml/xml/schema/xsd/validation_result.rb +86 -0
  603. data/lib/lutaml/xml/schema/xsd/version.rb +11 -0
  604. data/lib/lutaml/xml/schema/xsd/white_space.rb +27 -0
  605. data/lib/lutaml/xml/schema/xsd.rb +166 -0
  606. data/lib/lutaml/xml/schema/xsd_namespace.rb +29 -0
  607. data/lib/lutaml/xml/schema/xsd_schema.rb +536 -0
  608. data/lib/lutaml/xml/schema.rb +16 -0
  609. data/lib/lutaml/xml/schema_location.rb +155 -0
  610. data/lib/lutaml/xml/serialization/collection_ext.rb +61 -0
  611. data/lib/lutaml/xml/serialization/format_conversion.rb +380 -0
  612. data/lib/lutaml/xml/serialization/instance_methods.rb +298 -0
  613. data/lib/lutaml/xml/serialization/model_import_ext.rb +40 -0
  614. data/lib/lutaml/xml/serialization.rb +15 -0
  615. data/lib/lutaml/xml/shared_dsl.rb +119 -0
  616. data/lib/lutaml/xml/transform.rb +6 -0
  617. data/lib/lutaml/xml/transformation/custom_method_wrapper.rb +241 -0
  618. data/lib/lutaml/xml/transformation/element_builder.rb +588 -0
  619. data/lib/lutaml/xml/transformation/ordered_applier.rb +373 -0
  620. data/lib/lutaml/xml/transformation/rule_applier.rb +379 -0
  621. data/lib/lutaml/xml/transformation/rule_compiler.rb +543 -0
  622. data/lib/lutaml/xml/transformation/skip_logic.rb +70 -0
  623. data/lib/lutaml/xml/transformation/value_serializer.rb +137 -0
  624. data/lib/lutaml/xml/transformation.rb +379 -0
  625. data/lib/lutaml/xml/transformation_builder.rb +28 -0
  626. data/lib/lutaml/xml/transformation_support.rb +14 -0
  627. data/lib/lutaml/xml/type/configurable.rb +153 -0
  628. data/lib/lutaml/xml/type/serializers.rb +98 -0
  629. data/lib/lutaml/xml/type/value_xml_mapping.rb +94 -0
  630. data/lib/lutaml/xml/type_namespace/collector.rb +101 -0
  631. data/lib/lutaml/xml/type_namespace/declaration.rb +61 -0
  632. data/lib/lutaml/xml/type_namespace/planner.rb +121 -0
  633. data/lib/lutaml/xml/type_namespace/reference.rb +71 -0
  634. data/lib/lutaml/xml/type_namespace/resolver.rb +43 -0
  635. data/lib/lutaml/xml/type_namespace.rb +13 -0
  636. data/lib/lutaml/xml/type_namespace_resolver.rb +76 -0
  637. data/lib/lutaml/xml/unqualified_inheritance_strategy.rb +34 -0
  638. data/lib/lutaml/xml/w3c/registration.rb +66 -0
  639. data/lib/lutaml/xml/w3c.rb +398 -0
  640. data/lib/lutaml/xml/xml_attribute.rb +38 -0
  641. data/lib/lutaml/xml/xml_element.rb +460 -0
  642. data/lib/lutaml/xml/xml_namespace.rb +72 -0
  643. data/lib/lutaml/xml/xml_orderable.rb +17 -0
  644. data/lib/lutaml/xml.rb +290 -0
  645. data/lib/lutaml/{model/yaml → yaml/adapter}/document.rb +3 -3
  646. data/lib/lutaml/yaml/adapter/mapping.rb +17 -0
  647. data/lib/lutaml/yaml/adapter/mapping_rule.rb +9 -0
  648. data/lib/lutaml/yaml/adapter/standard_adapter.rb +39 -0
  649. data/lib/lutaml/yaml/adapter/transform.rb +9 -0
  650. data/lib/lutaml/yaml/adapter.rb +13 -0
  651. data/lib/lutaml/yaml/schema/yaml_schema.rb +65 -0
  652. data/lib/lutaml/yaml/schema.rb +9 -0
  653. data/lib/lutaml/yaml/type/serializers.rb +60 -0
  654. data/lib/lutaml/yaml.rb +30 -0
  655. data/lib/lutaml/{model/yamls → yamls/adapter}/document.rb +2 -2
  656. data/lib/lutaml/yamls/adapter/mapping.rb +30 -0
  657. data/lib/lutaml/yamls/adapter/mapping_rule.rb +9 -0
  658. data/lib/lutaml/yamls/adapter/standard_adapter.rb +56 -0
  659. data/lib/lutaml/yamls/adapter/transform.rb +124 -0
  660. data/lib/lutaml/yamls/adapter/yamls_sequence.rb +20 -0
  661. data/lib/lutaml/yamls/adapter/yamls_sequence_rule.rb +48 -0
  662. data/lib/lutaml/yamls/adapter.rb +15 -0
  663. data/lib/lutaml/yamls.rb +21 -0
  664. data/lib/tasks/benchmark_runner.rb +161 -0
  665. data/lib/tasks/memory_profile.rb +176 -0
  666. data/lib/tasks/performance.rake +75 -0
  667. data/lib/tasks/performance_benchmark.rb +499 -0
  668. data/lib/tasks/performance_comparator.rb +114 -0
  669. data/lib/tasks/performance_helpers.rb +149 -0
  670. data/lib/tasks/xml_compiler_benchmark.rb +226 -0
  671. data/lib/tasks/xml_optimization_benchmark.rb +178 -0
  672. data/lutaml-model.gemspec +10 -1
  673. data/reference-docs/XML Entity Definitions for Characters (3rd Edition).html +595 -0
  674. data/scripts-xmi-profile/profile_xmi.rb +192 -0
  675. data/scripts-xmi-profile/profile_xmi_simple.rb +210 -0
  676. data/spec/address_person_spec.rb +436 -0
  677. data/spec/address_spec.rb +20 -18
  678. data/spec/ceramic_spec.rb +25 -7
  679. data/spec/fixtures/address.rb +2 -2
  680. data/spec/fixtures/ceramic.rb +6 -2
  681. data/spec/fixtures/geolexica_v2_concept.rb +136 -0
  682. data/spec/fixtures/geolexica_v2_sample.yaml +36 -0
  683. data/spec/fixtures/geolexica_v2_sample2.yaml +38 -0
  684. data/spec/fixtures/person.rb +14 -13
  685. data/spec/fixtures/sample_model.rb +3 -3
  686. data/spec/fixtures/vase.rb +3 -3
  687. data/spec/fixtures/xml/address_example_260.xsd +8 -4
  688. data/spec/fixtures/xml/examples/nested_categories.xml +45 -51
  689. data/spec/fixtures/xml/examples/valid_catalog.xml +27 -41
  690. data/spec/fixtures/xml/math_document_schema.xsd +7 -5
  691. data/spec/fixtures/xml/product_catalog.xsd +19 -138
  692. data/spec/fixtures/xml/schema/xsd/build_test_package.rb +19 -0
  693. data/spec/fixtures/xml/schema/xsd/citygml/2.0/cityGMLBase.xsd +339 -0
  694. data/spec/fixtures/xml/schema/xsd/citygml/appearance/2.0/appearance.xsd +332 -0
  695. data/spec/fixtures/xml/schema/xsd/citygml/bridge/2.0/bridge.xsd +578 -0
  696. data/spec/fixtures/xml/schema/xsd/citygml/building/2.0/building.xsd +535 -0
  697. data/spec/fixtures/xml/schema/xsd/citygml/cityfurniture/2.0/cityFurniture.xsd +57 -0
  698. data/spec/fixtures/xml/schema/xsd/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd +84 -0
  699. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/noise-ade/CityGML-NoiseADE.xsd +174 -0
  700. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/stdOp.xsd +46 -0
  701. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/unr.xsd +46 -0
  702. data/spec/fixtures/xml/schema/xsd/citygml/generics/2.0/generics.xsd +184 -0
  703. data/spec/fixtures/xml/schema/xsd/citygml/landuse/2.0/landUse.xsd +50 -0
  704. data/spec/fixtures/xml/schema/xsd/citygml/profiles/base/2.0/CityGML.xsd +30 -0
  705. data/spec/fixtures/xml/schema/xsd/citygml/relief/2.0/relief.xsd +186 -0
  706. data/spec/fixtures/xml/schema/xsd/citygml/texturedsurface/2.0/texturedSurface.xsd +157 -0
  707. data/spec/fixtures/xml/schema/xsd/citygml/transportation/2.0/transportation.xsd +224 -0
  708. data/spec/fixtures/xml/schema/xsd/citygml/tunnel/2.0/tunnel.xsd +530 -0
  709. data/spec/fixtures/xml/schema/xsd/citygml/vegetation/2.0/vegetation.xsd +108 -0
  710. data/spec/fixtures/xml/schema/xsd/citygml/waterbody/2.0/waterBody.xsd +171 -0
  711. data/spec/fixtures/xml/schema/xsd/citygml/xAL/xAL.xsd +1680 -0
  712. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/basicTypes.xsd +262 -0
  713. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateOperations.xsd +519 -0
  714. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateReferenceSystems.xsd +367 -0
  715. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateSystems.xsd +291 -0
  716. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coverage.xsd +287 -0
  717. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/datums.xsd +281 -0
  718. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/defaultStyle.xsd +447 -0
  719. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/deprecatedTypes.xsd +1128 -0
  720. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dictionary.xsd +84 -0
  721. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/direction.xsd +78 -0
  722. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dynamicFeature.xsd +103 -0
  723. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/feature.xsd +88 -0
  724. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryAggregates.xsd +191 -0
  725. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic0d1d.xsd +271 -0
  726. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic2d.xsd +118 -0
  727. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryComplexes.xsd +89 -0
  728. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryPrimitives.xsd +841 -0
  729. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gml.xsd +15 -0
  730. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gmlBase.xsd +179 -0
  731. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/grids.xsd +58 -0
  732. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/measures.xsd +63 -0
  733. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/observation.xsd +90 -0
  734. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/referenceSystems.xsd +64 -0
  735. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporal.xsd +263 -0
  736. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalReferenceSystems.xsd +183 -0
  737. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalTopology.xsd +113 -0
  738. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/topology.xsd +380 -0
  739. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/units.xsd +156 -0
  740. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/valueObjects.xsd +199 -0
  741. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/basicTypes.xsd +429 -0
  742. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gco.xsd +12 -0
  743. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gcoBase.xsd +61 -0
  744. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/applicationSchema.xsd +42 -0
  745. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/citation.xsd +275 -0
  746. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/constraints.xsd +106 -0
  747. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/content.xsd +188 -0
  748. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/dataQuality.xsd +554 -0
  749. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/distribution.xsd +202 -0
  750. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/extent.xsd +205 -0
  751. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/freeText.xsd +122 -0
  752. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/gmd.xsd +12 -0
  753. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/identification.xsd +348 -0
  754. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/maintenance.xsd +86 -0
  755. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataApplication.xsd +175 -0
  756. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataEntity.xsd +70 -0
  757. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataExtension.xsd +99 -0
  758. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/portrayalCatalogue.xsd +36 -0
  759. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/referenceSystem.xsd +100 -0
  760. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/spatialRepresentation.xsd +237 -0
  761. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/catalogues.xsd +112 -0
  762. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/codelistItem.xsd +168 -0
  763. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/crsItem.xsd +1030 -0
  764. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/extendedTypes.xsd +75 -0
  765. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmx.xsd +2 -0
  766. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmxUsage.xsd +127 -0
  767. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/uomItem.xsd +162 -0
  768. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/gsr.xsd +12 -0
  769. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/spatialReferencing.xsd +24 -0
  770. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/geometry.xsd +35 -0
  771. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/gss.xsd +12 -0
  772. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/gts.xsd +12 -0
  773. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/temporalObjects.xsd +34 -0
  774. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/xlink/1.0.0/xlinks.xsd +122 -0
  775. data/spec/fixtures/xml/schema/xsd/i-ur/urbanFunction.xsd +2772 -0
  776. data/spec/fixtures/xml/schema/xsd/i-ur/urbanObject.xsd +3344 -0
  777. data/spec/fixtures/xml/schema/xsd/import-without-location.xsd +9 -0
  778. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/baseTypes.xsd +775 -0
  779. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/gco.xsd +17 -0
  780. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/baseTypes.xsd +775 -0
  781. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/gco.xsd +17 -0
  782. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/extendedTypes.xsd +151 -0
  783. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/gcx.xsd +16 -0
  784. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/extendedTypes.xsd +151 -0
  785. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/gcx.xsd +16 -0
  786. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/coordinateGeometry.xsd +1078 -0
  787. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricAggregates.xsd +141 -0
  788. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricComplex.xsd +177 -0
  789. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricPrimative.xsd +526 -0
  790. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometry.xsd +9 -0
  791. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometryRoot.xsd +59 -0
  792. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/gss.xsd +26 -0
  793. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoComplex.xsd +33 -0
  794. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoPrimative.xsd +432 -0
  795. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoRoot.xsd +9 -0
  796. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topology.xsd +15 -0
  797. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/coordinates.xsd +15 -0
  798. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/curves.xsd +22 -0
  799. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/geometry.xsd +41 -0
  800. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/gss.xsd +21 -0
  801. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/simplicialGeometry.xsd +63 -0
  802. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/solids.xsd +21 -0
  803. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/surfaces.xsd +15 -0
  804. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/topology.xsd +21 -0
  805. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/abstract.xsd +47 -0
  806. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/fcc.xsd +12 -0
  807. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/abstract.xsd +45 -0
  808. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/fcc.xsd +11 -0
  809. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/abstract.xsd +45 -0
  810. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/fcc.xsd +11 -0
  811. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/1.0/gfc.xsd +497 -0
  812. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/featureCatalogue.xsd +673 -0
  813. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/gfc.xsd +19 -0
  814. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/featureCatalogue.xsd +798 -0
  815. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/gfc.xsd +19 -0
  816. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/featureCatalogue.xsd +798 -0
  817. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/gfc.xsd +19 -0
  818. data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/abstract.xsd +49 -0
  819. data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/fcc.xsd +9 -0
  820. data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/featureCatalogue.xsd +671 -0
  821. data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/gfc.xsd +13 -0
  822. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbc.xsd +13 -0
  823. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbcStubs.xsd +195 -0
  824. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbc.xsd +13 -0
  825. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbcStubs.xsd +195 -0
  826. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/AbstractCommonClasses.xsd +282 -0
  827. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/commonClasses.xsd +127 -0
  828. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordOps.xsd +676 -0
  829. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordRefSys.xsd +498 -0
  830. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordSys.xsd +844 -0
  831. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordinates.xsd +101 -0
  832. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/datum.xsd +474 -0
  833. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/rbc.xsd +18 -0
  834. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/cit.xsd +12 -0
  835. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/citation.xsd +445 -0
  836. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/cit.xsd +12 -0
  837. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/citation.xsd +445 -0
  838. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/extent.xsd +243 -0
  839. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/gex.xsd +16 -0
  840. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/extent.xsd +243 -0
  841. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/gex.xsd +16 -0
  842. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/extent.xsd +244 -0
  843. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/gex.xsd +15 -0
  844. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/lan.xsd +13 -0
  845. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/language.xsd +152 -0
  846. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/lan.xsd +13 -0
  847. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/language.xsd +152 -0
  848. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/applicationSchema.xsd +58 -0
  849. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/mas.xsd +16 -0
  850. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/applicationSchema.xsd +58 -0
  851. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/mas.xsd +16 -0
  852. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/AbstractCommonClasses.xsd +378 -0
  853. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/commonClasses.xsd +205 -0
  854. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/mcc.xsd +12 -0
  855. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/AbstractCommonClasses.xsd +378 -0
  856. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/commonClasses.xsd +205 -0
  857. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/mcc.xsd +12 -0
  858. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/constraints.xsd +171 -0
  859. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/mco.xsd +14 -0
  860. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/constraints.xsd +171 -0
  861. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/mco.xsd +14 -0
  862. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/mda.xsd +13 -0
  863. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/metadataApplication.xsd +207 -0
  864. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/mda.xsd +13 -0
  865. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/metadataApplication.xsd +207 -0
  866. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/mda.xsd +13 -0
  867. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/metadataApplication.xsd +247 -0
  868. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/mdb.xsd +11 -0
  869. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBase.xsd +117 -0
  870. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBaseMDAerror.xsd +116 -0
  871. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/mdb.xsd +11 -0
  872. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBase.xsd +117 -0
  873. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBaseMDAerror.xsd +116 -0
  874. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/mdb.xsd +11 -0
  875. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/metadataBase.xsd +144 -0
  876. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/metadataExtension.xsd +138 -0
  877. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/mex.xsd +15 -0
  878. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/metadataExtension.xsd +138 -0
  879. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/mex.xsd +15 -0
  880. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/maintenance.xsd +70 -0
  881. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/mmi.xsd +14 -0
  882. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/maintenance.xsd +70 -0
  883. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/mmi.xsd +14 -0
  884. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/mpc.xsd +14 -0
  885. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/portrayalCatalogue.xsd +40 -0
  886. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/mpc.xsd +14 -0
  887. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/portrayalCatalogue.xsd +40 -0
  888. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/content.xsd +368 -0
  889. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/mrc.xsd +19 -0
  890. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/content.xsd +368 -0
  891. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/mrc.xsd +19 -0
  892. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/content.xsd +366 -0
  893. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/mrc.xsd +13 -0
  894. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/distribution.xsd +232 -0
  895. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/mrd.xsd +13 -0
  896. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/distribution.xsd +232 -0
  897. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/mrd.xsd +13 -0
  898. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/identification.xsd +425 -0
  899. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/mri.xsd +16 -0
  900. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/identification.xsd +425 -0
  901. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/mri.xsd +16 -0
  902. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/lineage.xsd +130 -0
  903. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/mrl.xsd +15 -0
  904. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/lineage.xsd +130 -0
  905. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/mrl.xsd +15 -0
  906. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/mrs.xsd +16 -0
  907. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/referenceSystem.xsd +67 -0
  908. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/mrs.xsd +16 -0
  909. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/referenceSystem.xsd +67 -0
  910. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/mrs.xsd +16 -0
  911. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/referenceSystem.xsd +66 -0
  912. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/msr.xsd +17 -0
  913. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/spatialRepresentation.xsd +326 -0
  914. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/msr.xsd +17 -0
  915. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/spatialRepresentation.xsd +326 -0
  916. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/msr.xsd +15 -0
  917. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/spatialRepresentation.xsd +326 -0
  918. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/serviceInformation.xsd +252 -0
  919. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/srv.xsd +14 -0
  920. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/serviceInformation.xsd +252 -0
  921. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/srv.xsd +14 -0
  922. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/acquisitionInformation.xsd +415 -0
  923. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/contentInformation.xsd +147 -0
  924. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/dataQualityInformation.xsd +214 -0
  925. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/gmi.xsd +23 -0
  926. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/metadataEntitySet.xsd +43 -0
  927. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/spatialRepresentationInformation.xsd +140 -0
  928. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/acquisitionInformation.xsd +415 -0
  929. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/contentInformation.xsd +147 -0
  930. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/dataQualityInformation.xsd +214 -0
  931. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/gmi.xsd +24 -0
  932. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/metadataEntitySet.xsd +43 -0
  933. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/spatialRepresentationInformation.xsd +142 -0
  934. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/acquisitionInformationImagery.xsd +796 -0
  935. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/mac.xsd +11 -0
  936. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/acquisitionInformationImagery.xsd +796 -0
  937. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/mac.xsd +11 -0
  938. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/acquisitionInformationImagery.xsd +799 -0
  939. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/mac.xsd +10 -0
  940. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2/contentInformationImagery.xsd +161 -0
  941. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.0/contentInformationImagery.xsd +161 -0
  942. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.1/contentInformationImagery.xsd +159 -0
  943. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2/lineageImagery.xsd +312 -0
  944. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2.0/lineageImagery.xsd +312 -0
  945. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2/spatialRepresentationImagery.xsd +138 -0
  946. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.0/spatialRepresentationImagery.xsd +138 -0
  947. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.1/spatialRepresentationImagery.xsd +145 -0
  948. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/cat.xsd +16 -0
  949. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/catalogues.xsd +59 -0
  950. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/codelistItem.xsd +63 -0
  951. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/crsItem.xsd +188 -0
  952. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/uomItem.xsd +45 -0
  953. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/cit.xsd +11 -0
  954. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/citation.xsd +400 -0
  955. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/cit.xsd +11 -0
  956. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/citation.xsd +402 -0
  957. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes.xsd +532 -0
  958. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes2014.xsd +531 -0
  959. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/gco.xsd +16 -0
  960. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/extendedTypes.xsd +97 -0
  961. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/gcx.xsd +11 -0
  962. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/extent.xsd +207 -0
  963. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/gex.xsd +15 -0
  964. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes.xsd +147 -0
  965. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes2014.xsd +147 -0
  966. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmw.xsd +17 -0
  967. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/lan.xsd +13 -0
  968. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/language.xsd +141 -0
  969. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/acquisitionInformationImagery.xsd +424 -0
  970. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/mac.xsd +14 -0
  971. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/acquisitionInformationImagery.xsd +473 -0
  972. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/event.xsd +106 -0
  973. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/mac.xsd +15 -0
  974. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/metadataEntitySet.xsd +46 -0
  975. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/applicationSchema.xsd +53 -0
  976. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/mas.xsd +15 -0
  977. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/AbstractCommonClasses.xsd +362 -0
  978. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/commonClasses.xsd +179 -0
  979. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/mcc.xsd +12 -0
  980. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/constraints.xsd +152 -0
  981. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/mco.xsd +13 -0
  982. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/md1.xsd +19 -0
  983. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/metadataWExtendedType.xsd +10 -0
  984. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/md1.xsd +19 -0
  985. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/metadataWExtendedType.xsd +10 -0
  986. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/md2.xsd +27 -0
  987. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/metadataWithExtensions.xsd +10 -0
  988. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/md2.xsd +27 -0
  989. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/metadataWithExtensions.xsd +10 -0
  990. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/mda.xsd +13 -0
  991. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/metadataApplication.xsd +188 -0
  992. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/mda.xsd +13 -0
  993. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/metadataApplication.xsd +189 -0
  994. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/mdb.xsd +23 -0
  995. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/metadataBase.xsd +97 -0
  996. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/mdb.xsd +23 -0
  997. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/metadataBase.xsd +105 -0
  998. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/mds.xsd +59 -0
  999. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/metadataDataServices.xsd +10 -0
  1000. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/mds.xsd +44 -0
  1001. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/metadataDataServices.xsd +10 -0
  1002. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/mdt.xsd +17 -0
  1003. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/metadataTransfer.xsd +121 -0
  1004. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/mdt.xsd +17 -0
  1005. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/metadataTransfer.xsd +121 -0
  1006. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/metadataExtension.xsd +122 -0
  1007. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/mex.xsd +13 -0
  1008. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/maintenance.xsd +63 -0
  1009. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/mmi.xsd +13 -0
  1010. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/mpc.xsd +13 -0
  1011. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/portrayalCatalogue.xsd +35 -0
  1012. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/content.xsd +330 -0
  1013. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/contentInformationImagery.xsd +160 -0
  1014. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/mrc.xsd +18 -0
  1015. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/content.xsd +334 -0
  1016. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/contentInformationImagery.xsd +143 -0
  1017. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/mrc.xsd +21 -0
  1018. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/distribution.xsd +212 -0
  1019. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/mrd.xsd +13 -0
  1020. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/identification.xsd +385 -0
  1021. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/mri.xsd +15 -0
  1022. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineage.xsd +117 -0
  1023. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineageImagery.xsd +168 -0
  1024. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/mrl.xsd +14 -0
  1025. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineage.xsd +118 -0
  1026. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineageImagery.xsd +250 -0
  1027. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/mrl.xsd +14 -0
  1028. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/mrs.xsd +13 -0
  1029. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/referenceSystem.xsd +47 -0
  1030. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/msr.xsd +16 -0
  1031. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentation.xsd +288 -0
  1032. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentationImagery.xsd +113 -0
  1033. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/msr.xsd +16 -0
  1034. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentation.xsd +296 -0
  1035. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentationImagery.xsd +114 -0
  1036. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/serviceInformation.xsd +217 -0
  1037. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/srv.xsd +14 -0
  1038. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/serviceInformation.xsd +220 -0
  1039. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/srv.xsd +14 -0
  1040. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceMetadata.xsd +204 -0
  1041. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceModel.xsd +230 -0
  1042. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/srv.xsd +13 -0
  1043. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceMetadata.xsd +204 -0
  1044. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceModel.xsd +238 -0
  1045. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/srv.xsd +13 -0
  1046. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/cis-0.xsd +17 -0
  1047. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/codeLists.xsd +68 -0
  1048. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/gridPoint.xsd +47 -0
  1049. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/cis-0.xsd +17 -0
  1050. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/codeLists.xsd +68 -0
  1051. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/gridPoint.xsd +47 -0
  1052. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/codeLists.xsd +68 -0
  1053. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/gridPoint.xsd +47 -0
  1054. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/coverage.xsd +185 -0
  1055. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/gmlcovAll.xsd +21 -0
  1056. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/grids.xsd +115 -0
  1057. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/coverage.xsd +188 -0
  1058. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/gmlcovAll.xsd +25 -0
  1059. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/grids.xsd +119 -0
  1060. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/coverage.xsd +188 -0
  1061. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/gmlcovAll.xsd +25 -0
  1062. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/grids.xsd +119 -0
  1063. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/coverage.xsd +188 -0
  1064. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/gmlcovAll.xsd +23 -0
  1065. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/grids.xsd +119 -0
  1066. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/codeList.xsd +134 -0
  1067. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/groundControlPoints.xsd +239 -0
  1068. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/nonPhysicalSensorModel.xsd +321 -0
  1069. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/physicalSensorModel.xsd +62 -0
  1070. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorModel.xsd +65 -0
  1071. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorParameters.xsd +762 -0
  1072. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/spatialElements.xsd +497 -0
  1073. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/codeList.xsd +129 -0
  1074. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/groundControlPoints.xsd +235 -0
  1075. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/nonPhysicalSensorModel.xsd +321 -0
  1076. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/physicalSensorModel.xsd +62 -0
  1077. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorModel.xsd +65 -0
  1078. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorParameters.xsd +762 -0
  1079. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/spatialElements.xsd +496 -0
  1080. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/codeList.xsd +349 -0
  1081. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorModel.xsd +53 -0
  1082. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorParameters.xsd +681 -0
  1083. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/spatialElements.xsd +902 -0
  1084. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/codeList.xsd +344 -0
  1085. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorModel.xsd +49 -0
  1086. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorParameters.xsd +676 -0
  1087. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/spatialElements.xsd +897 -0
  1088. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1/smi.xsd +42 -0
  1089. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.0/smi.xsd +42 -0
  1090. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.1/smi.xsd +42 -0
  1091. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0/dps.xsd +1344 -0
  1092. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0.0/dps.xsd +1344 -0
  1093. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2/dps.xsd +1522 -0
  1094. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.0/dps.xsd +1522 -0
  1095. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.1/dps.xsd +1522 -0
  1096. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.0/dps.xsd +1339 -0
  1097. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.2.0/dps.xsd +1540 -0
  1098. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/core.xsd +349 -0
  1099. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/extended.xsd +1074 -0
  1100. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/hierarchy.xsd +57 -0
  1101. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/pir.xsd +13 -0
  1102. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/core.xsd +344 -0
  1103. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/extended.xsd +1076 -0
  1104. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/hierarchy.xsd +58 -0
  1105. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/pir.xsd +15 -0
  1106. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/core.xsd +344 -0
  1107. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/extended.xsd +1076 -0
  1108. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/hierarchy.xsd +58 -0
  1109. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/pir.xsd +15 -0
  1110. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/abstract.xsd +42 -0
  1111. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/pre.xsd +4 -0
  1112. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/abstract.xsd +44 -0
  1113. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/pre.xsd +11 -0
  1114. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/reg.xsd +8 -0
  1115. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/registration.xsd +562 -0
  1116. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/reg.xsd +22 -0
  1117. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/registration.xsd +590 -0
  1118. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/basicTypes.xsd +275 -0
  1119. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateOperations.xsd +534 -0
  1120. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateReferenceSystems.xsd +379 -0
  1121. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateSystems.xsd +303 -0
  1122. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coverage.xsd +298 -0
  1123. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/datums.xsd +293 -0
  1124. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/defaultStyle.xsd +462 -0
  1125. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/deprecatedTypes.xsd +1139 -0
  1126. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dictionary.xsd +95 -0
  1127. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/direction.xsd +90 -0
  1128. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dynamicFeature.xsd +114 -0
  1129. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/feature.xsd +99 -0
  1130. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryAggregates.xsd +203 -0
  1131. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic0d1d.xsd +283 -0
  1132. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic2d.xsd +130 -0
  1133. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryComplexes.xsd +101 -0
  1134. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryPrimitives.xsd +852 -0
  1135. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gml.xsd +25 -0
  1136. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gmlBase.xsd +191 -0
  1137. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/grids.xsd +70 -0
  1138. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/measures.xsd +74 -0
  1139. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/observation.xsd +100 -0
  1140. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/referenceSystems.xsd +78 -0
  1141. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporal.xsd +274 -0
  1142. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalReferenceSystems.xsd +194 -0
  1143. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalTopology.xsd +124 -0
  1144. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/topology.xsd +391 -0
  1145. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/units.xsd +168 -0
  1146. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/valueObjects.xsd +210 -0
  1147. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmlWrapperTypes.xsd +160 -0
  1148. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmw.xsd +27 -0
  1149. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmlWrapperTypes.xsd +160 -0
  1150. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmw.xsd +27 -0
  1151. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/cat.xsd +18 -0
  1152. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/catalogues.xsd +63 -0
  1153. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/codelistItem.xsd +64 -0
  1154. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/crsItem.xsd +200 -0
  1155. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/uomItem.xsd +49 -0
  1156. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/cat.xsd +18 -0
  1157. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/catalogues.xsd +63 -0
  1158. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/codelistItem.xsd +64 -0
  1159. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/crsItem.xsd +200 -0
  1160. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/uomItem.xsd +49 -0
  1161. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/basicTypes.xsd +439 -0
  1162. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gco.xsd +18 -0
  1163. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gcoBase.xsd +71 -0
  1164. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/applicationSchema.xsd +50 -0
  1165. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/citation.xsd +283 -0
  1166. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/constraints.xsd +114 -0
  1167. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/content.xsd +197 -0
  1168. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/dataQuality.xsd +563 -0
  1169. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/distribution.xsd +210 -0
  1170. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/extent.xsd +216 -0
  1171. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/freeText.xsd +130 -0
  1172. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/gmd.xsd +18 -0
  1173. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/identification.xsd +356 -0
  1174. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/maintenance.xsd +95 -0
  1175. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataApplication.xsd +183 -0
  1176. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataEntity.xsd +78 -0
  1177. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataExtension.xsd +107 -0
  1178. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/portrayalCatalogue.xsd +44 -0
  1179. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/referenceSystem.xsd +108 -0
  1180. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/spatialRepresentation.xsd +246 -0
  1181. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/catalogues.xsd +121 -0
  1182. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/codelistItem.xsd +179 -0
  1183. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/crsItem.xsd +1041 -0
  1184. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/extendedTypes.xsd +83 -0
  1185. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmx.xsd +18 -0
  1186. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmxUsage.xsd +136 -0
  1187. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/uomItem.xsd +173 -0
  1188. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/gsr.xsd +18 -0
  1189. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/spatialReferencing.xsd +34 -0
  1190. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/geometry.xsd +45 -0
  1191. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/gss.xsd +18 -0
  1192. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/gts.xsd +18 -0
  1193. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/temporalObjects.xsd +44 -0
  1194. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/gpi.xsd +16 -0
  1195. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/placeIdentifier.xsd +75 -0
  1196. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/sampleGMLApplicationSchema.xsd +83 -0
  1197. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/abstract.xsd +44 -0
  1198. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/dqc.xsd +16 -0
  1199. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/abstract.xsd +44 -0
  1200. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/dqc.xsd +16 -0
  1201. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/dqm.xsd +19 -0
  1202. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/qualityMeasures.xsd +332 -0
  1203. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/dqm.xsd +19 -0
  1204. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/qualityMeasures.xsd +332 -0
  1205. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityElement.xsd +583 -0
  1206. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityEvaluation.xsd +199 -0
  1207. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityImagery.xsd +75 -0
  1208. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityResult.xsd +213 -0
  1209. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/mdq.xsd +22 -0
  1210. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/metaquality.xsd +93 -0
  1211. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityElement.xsd +583 -0
  1212. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityEvaluation.xsd +199 -0
  1213. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityImagery.xsd +75 -0
  1214. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityResult.xsd +213 -0
  1215. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/mdq.xsd +22 -0
  1216. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/metaquality.xsd +93 -0
  1217. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dataQualityCommon.xsd +33 -0
  1218. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dqc.xsd +14 -0
  1219. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dataQualityCommon.xsd +43 -0
  1220. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dqc.xsd +17 -0
  1221. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dataQualityMeasure.xsd +376 -0
  1222. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dqm.xsd +11 -0
  1223. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dataQualityMeasure.xsd +367 -0
  1224. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dqm.xsd +11 -0
  1225. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQuality.xsd +570 -0
  1226. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityEvaluation.xsd +227 -0
  1227. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityResult.xsd +191 -0
  1228. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/mdq.xsd +14 -0
  1229. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/metaquality.xsd +106 -0
  1230. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQuality.xsd +581 -0
  1231. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityEvaluation.xsd +227 -0
  1232. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityResult.xsd +198 -0
  1233. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/mdq.xsd +14 -0
  1234. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/metaquality.xsd +102 -0
  1235. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/abstract.xsd +43 -0
  1236. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/dqc.xsd +15 -0
  1237. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/dqm.xsd +15 -0
  1238. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/qualityMeasures.xsd +303 -0
  1239. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityElement.xsd +554 -0
  1240. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityEvaluation.xsd +182 -0
  1241. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityImagery.xsd +72 -0
  1242. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityResult.xsd +140 -0
  1243. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/mdq.xsd +21 -0
  1244. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/metaquality.xsd +89 -0
  1245. data/spec/fixtures/xml/schema/xsd/isotc211/19160/-4/patdl/2.7.3/PATDL.v.2.7.3.xsd +517 -0
  1246. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_Imagery.xsd +520 -0
  1247. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ImageryAndGriddedData.xsd +222 -0
  1248. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ThematicGriddedData.xsd +117 -0
  1249. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/igd.xsd +14 -0
  1250. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_Imagery.xsd +520 -0
  1251. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ImageryAndGriddedData.xsd +222 -0
  1252. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ThematicGriddedData.xsd +117 -0
  1253. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/igd.xsd +14 -0
  1254. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_Imagery.xsd +518 -0
  1255. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ImageryAndGriddedData.xsd +213 -0
  1256. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ThematicGriddedData.xsd +116 -0
  1257. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/igd.xsd +15 -0
  1258. data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/geospatialPreservationMetadata.xsd +872 -0
  1259. data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/gpm.xsd +11 -0
  1260. data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/geospatialPreservationMetadata.xsd +385 -0
  1261. data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/gpm.xsd +8 -0
  1262. data/spec/fixtures/xml/schema/xsd/metaschema-datatypes.xsd +263 -0
  1263. data/spec/fixtures/xml/schema/xsd/metaschema-markup-line.xsd +9 -0
  1264. data/spec/fixtures/xml/schema/xsd/metaschema-markup-multiline.xsd +135 -0
  1265. data/spec/fixtures/xml/schema/xsd/metaschema-meta-constraints.xsd +39 -0
  1266. data/spec/fixtures/xml/schema/xsd/metaschema-prose-base.xsd +82 -0
  1267. data/spec/fixtures/xml/schema/xsd/metaschema-prose-module.xsd +5 -0
  1268. data/spec/fixtures/xml/schema/xsd/metaschema.xsd +1344 -0
  1269. data/spec/fixtures/xml/schema/xsd/omml_schema.xsd +1528 -0
  1270. data/spec/fixtures/xml/schema/xsd/smil20/rdf.xsd +16 -0
  1271. data/spec/fixtures/xml/schema/xsd/smil20/smil20-AccessKeyTiming.xsd +33 -0
  1272. data/spec/fixtures/xml/schema/xsd/smil20/smil20-AudioLayout.xsd +32 -0
  1273. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicAnimation.xsd +35 -0
  1274. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicContentControl.xsd +49 -0
  1275. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicInlineTiming.xsd +34 -0
  1276. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLayout.xsd +34 -0
  1277. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLinking.xsd +34 -0
  1278. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicMedia.xsd +39 -0
  1279. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTimeContainers.xsd +37 -0
  1280. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTransitions.xsd +36 -0
  1281. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BrushMedia.xsd +32 -0
  1282. data/spec/fixtures/xml/schema/xsd/smil20/smil20-CustomTestAttributes.xsd +33 -0
  1283. data/spec/fixtures/xml/schema/xsd/smil20/smil20-EventTiming.xsd +33 -0
  1284. data/spec/fixtures/xml/schema/xsd/smil20/smil20-ExclTimeContainers.xsd +37 -0
  1285. data/spec/fixtures/xml/schema/xsd/smil20/smil20-FillDefault.xsd +32 -0
  1286. data/spec/fixtures/xml/schema/xsd/smil20/smil20-HierarchicalLayout.xsd +46 -0
  1287. data/spec/fixtures/xml/schema/xsd/smil20/smil20-HostLanguage.xsd +85 -0
  1288. data/spec/fixtures/xml/schema/xsd/smil20/smil20-InlineTransitions.xsd +35 -0
  1289. data/spec/fixtures/xml/schema/xsd/smil20/smil20-IntegrationSet.xsd +72 -0
  1290. data/spec/fixtures/xml/schema/xsd/smil20/smil20-LinkingAttributes.xsd +40 -0
  1291. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaAccessibility.xsd +34 -0
  1292. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipMarkers.xsd +35 -0
  1293. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipping.xsd +35 -0
  1294. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaDescription.xsd +35 -0
  1295. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaMarkerTiming.xsd +33 -0
  1296. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaParam.xsd +34 -0
  1297. data/spec/fixtures/xml/schema/xsd/smil20/smil20-Metainformation.xsd +33 -0
  1298. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MinMaxTiming.xsd +33 -0
  1299. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiArcTiming.xsd +33 -0
  1300. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiWindowLayout.xsd +32 -0
  1301. data/spec/fixtures/xml/schema/xsd/smil20/smil20-ObjectLinking.xsd +33 -0
  1302. data/spec/fixtures/xml/schema/xsd/smil20/smil20-PrefetchControl.xsd +31 -0
  1303. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatTiming.xsd +34 -0
  1304. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatValueTiming.xsd +33 -0
  1305. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartDefault.xsd +32 -0
  1306. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartTiming.xsd +32 -0
  1307. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SkipContentControl.xsd +32 -0
  1308. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SplineAnimation.xsd +34 -0
  1309. data/spec/fixtures/xml/schema/xsd/smil20/smil20-Structure.xsd +34 -0
  1310. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehavior.xsd +33 -0
  1311. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehaviorDefault.xsd +33 -0
  1312. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncMaster.xsd +32 -0
  1313. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncbaseTiming.xsd +33 -0
  1314. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeContainerAttributes.xsd +35 -0
  1315. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeManipulations.xsd +35 -0
  1316. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TransitionModifiers.xsd +37 -0
  1317. data/spec/fixtures/xml/schema/xsd/smil20/smil20-WallclockTiming.xsd +33 -0
  1318. data/spec/fixtures/xml/schema/xsd/smil20/smil20-animate.xsd +229 -0
  1319. data/spec/fixtures/xml/schema/xsd/smil20/smil20-content.xsd +148 -0
  1320. data/spec/fixtures/xml/schema/xsd/smil20/smil20-language.xsd +834 -0
  1321. data/spec/fixtures/xml/schema/xsd/smil20/smil20-layout.xsd +211 -0
  1322. data/spec/fixtures/xml/schema/xsd/smil20/smil20-linking.xsd +117 -0
  1323. data/spec/fixtures/xml/schema/xsd/smil20/smil20-media.xsd +175 -0
  1324. data/spec/fixtures/xml/schema/xsd/smil20/smil20-meta.xsd +44 -0
  1325. data/spec/fixtures/xml/schema/xsd/smil20/smil20-struct.xsd +47 -0
  1326. data/spec/fixtures/xml/schema/xsd/smil20/smil20-timemanip.xsd +34 -0
  1327. data/spec/fixtures/xml/schema/xsd/smil20/smil20-timing.xsd +344 -0
  1328. data/spec/fixtures/xml/schema/xsd/smil20/smil20-transitions.xsd +138 -0
  1329. data/spec/fixtures/xml/schema/xsd/smil20/smil20-utility.xsd +57 -0
  1330. data/spec/fixtures/xml/schema/xsd/smil20/smil20.xsd +86 -0
  1331. data/spec/fixtures/xml/schema/xsd/smil20/xml-mod.xsd +25 -0
  1332. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/advanced_encodings.xsd +186 -0
  1333. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/basic_types.xsd +147 -0
  1334. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/block_components.xsd +163 -0
  1335. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/choice_components.xsd +56 -0
  1336. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/examples/security.xsd +15 -0
  1337. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/record_components.xsd +95 -0
  1338. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_components.xsd +536 -0
  1339. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_encodings.xsd +93 -0
  1340. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/swe.xsd +14 -0
  1341. data/spec/fixtures/xml/schema/xsd/test_schema.lxr +0 -0
  1342. data/spec/fixtures/xml/schema/xsd/test_schema.xsd +24 -0
  1343. data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd03.xsd +1333 -0
  1344. data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd04.xsd +1334 -0
  1345. data/spec/fixtures/xml/schema/xsd/validation_config.yml +14 -0
  1346. data/spec/fixtures/xml/special_char.xml +3 -4
  1347. data/spec/fixtures/xml/user.xsd +14 -10
  1348. data/spec/fixtures/yamls_range_concept.rb +139 -0
  1349. data/spec/lutaml/integration/edge_cases_spec.rb +109 -0
  1350. data/spec/lutaml/integration/multi_format_spec.rb +106 -0
  1351. data/spec/lutaml/integration/round_trip_spec.rb +170 -0
  1352. data/spec/lutaml/jsonld/adapter_spec.rb +46 -0
  1353. data/spec/lutaml/jsonld/context_spec.rb +114 -0
  1354. data/spec/lutaml/jsonld/term_definition_spec.rb +55 -0
  1355. data/spec/lutaml/jsonld/transform_spec.rb +597 -0
  1356. data/spec/lutaml/key_value/transformation/collection_serializer_spec.rb +213 -0
  1357. data/spec/lutaml/key_value/transformation/rule_compiler_spec.rb +229 -0
  1358. data/spec/lutaml/key_value/transformation/value_serializer_spec.rb +216 -0
  1359. data/spec/lutaml/key_value/transformation_spec.rb +292 -0
  1360. data/spec/lutaml/model/attribute_collection_spec.rb +10 -7
  1361. data/spec/lutaml/model/attribute_default_cache_spec.rb +58 -0
  1362. data/spec/lutaml/model/attribute_form_default_spec.rb +252 -0
  1363. data/spec/lutaml/model/attribute_spec.rb +335 -56
  1364. data/spec/lutaml/model/cached_type_resolver_spec.rb +362 -0
  1365. data/spec/lutaml/model/cdata_spec.rb +180 -102
  1366. data/spec/lutaml/model/choice_spec.rb +37 -7
  1367. data/spec/lutaml/model/cli_spec.rb +452 -0
  1368. data/spec/lutaml/model/collection_index_spec.rb +347 -0
  1369. data/spec/lutaml/model/collection_mutation_spec.rb +124 -0
  1370. data/spec/lutaml/model/collection_spec.rb +580 -155
  1371. data/spec/lutaml/model/collection_validation_spec.rb +736 -0
  1372. data/spec/lutaml/model/comparable_model_spec.rb +75 -0
  1373. data/spec/lutaml/model/compiled_rule_spec.rb +364 -0
  1374. data/spec/lutaml/model/consolidation_spec.rb +295 -0
  1375. data/spec/lutaml/model/context_registry_spec.rb +269 -0
  1376. data/spec/lutaml/model/custom_bibtex_adapter_spec.rb +21 -7
  1377. data/spec/lutaml/model/custom_collection_spec.rb +324 -30
  1378. data/spec/lutaml/model/custom_model_spec.rb +13 -10
  1379. data/spec/lutaml/model/custom_serialization_spec.rb +12 -14
  1380. data/spec/lutaml/model/custom_vobject_adapter_spec.rb +36 -16
  1381. data/spec/lutaml/model/default_register_spec.rb +852 -0
  1382. data/spec/lutaml/model/defaults_spec.rb +57 -6
  1383. data/spec/lutaml/model/delegation_spec.rb +187 -120
  1384. data/spec/lutaml/model/derived_attribute_serialization_spec.rb +33 -0
  1385. data/spec/lutaml/model/dynamic_attribute_spec.rb +112 -0
  1386. data/spec/lutaml/model/encoding_spec.rb +281 -0
  1387. data/spec/lutaml/model/enum_spec.rb +46 -2
  1388. data/spec/lutaml/model/except_spec.rb +240 -0
  1389. data/spec/lutaml/model/finalization_cache_spec.rb +88 -0
  1390. data/spec/lutaml/model/global_context_spec.rb +421 -0
  1391. data/spec/lutaml/model/global_register_spec.rb +153 -36
  1392. data/spec/lutaml/model/group_spec.rb +203 -64
  1393. data/spec/lutaml/model/hash/adapter_spec.rb +5 -3
  1394. data/spec/lutaml/model/import_registry_spec.rb +295 -0
  1395. data/spec/lutaml/model/included_spec.rb +10 -17
  1396. data/spec/lutaml/model/inheritance_spec.rb +6 -6
  1397. data/spec/lutaml/model/json_adapter_spec.rb +13 -6
  1398. data/spec/lutaml/model/json_spec.rb +33 -0
  1399. data/spec/lutaml/model/key_value_data_model/key_value_element_spec.rb +320 -0
  1400. data/spec/lutaml/model/key_value_mapping_spec.rb +12 -2
  1401. data/spec/lutaml/model/lazy_collection_spec.rb +208 -0
  1402. data/spec/lutaml/model/liquefiable_spec.rb +281 -26
  1403. data/spec/lutaml/model/liquid/indexed_access_spec.rb +135 -0
  1404. data/spec/lutaml/model/liquid_compatibility_spec.rb +442 -0
  1405. data/spec/lutaml/model/logger_spec.rb +68 -0
  1406. data/spec/lutaml/model/map_all_spec.rb +36 -11
  1407. data/spec/lutaml/model/map_content_spec.rb +4 -4
  1408. data/spec/lutaml/model/mapping_rule_perf_guard_spec.rb +71 -0
  1409. data/spec/lutaml/model/mixed_content_spec.rb +481 -171
  1410. data/spec/lutaml/model/model_transformer_spec.rb +678 -0
  1411. data/spec/lutaml/model/multiple_mapping_spec.rb +71 -39
  1412. data/spec/lutaml/model/namespace_versioning_spec.rb +390 -0
  1413. data/spec/lutaml/model/one_entry_cache_spec.rb +114 -0
  1414. data/spec/lutaml/model/opal_smoke_spec.rb +117 -0
  1415. data/spec/lutaml/model/optimization_spec.rb +228 -0
  1416. data/spec/lutaml/model/ordered_content_spec.rb +116 -25
  1417. data/spec/lutaml/model/polymorphic_spec.rb +29 -6
  1418. data/spec/lutaml/model/processing_instruction_spec.rb +375 -0
  1419. data/spec/lutaml/model/{register/key_value_spec.rb → register_key_value_spec.rb} +57 -5
  1420. data/spec/lutaml/model/register_methods_spec.rb +149 -0
  1421. data/spec/lutaml/model/register_spec.rb +235 -5
  1422. data/spec/lutaml/model/render_empty_spec.rb +143 -6
  1423. data/spec/lutaml/model/render_nil_spec.rb +15 -10
  1424. data/spec/lutaml/model/root_mappings_spec.rb +16 -6
  1425. data/spec/lutaml/model/rule_value_extractor_spec.rb +13 -44
  1426. data/spec/lutaml/model/runtime_compatibility_spec.rb +36 -0
  1427. data/spec/lutaml/model/schema/generator/definitions_collection_spec.rb +4 -0
  1428. data/spec/lutaml/model/schema/json_schema_spec.rb +7 -1
  1429. data/spec/lutaml/model/schema/relaxng_schema_spec.rb +1 -1
  1430. data/spec/lutaml/model/schema/renderer_spec.rb +128 -0
  1431. data/spec/lutaml/model/schema/xsd_schema_spec.rb +1 -1
  1432. data/spec/lutaml/model/sequence_spec.rb +460 -15
  1433. data/spec/lutaml/model/serializable_spec.rb +212 -12
  1434. data/spec/lutaml/model/serializable_validation_spec.rb +3 -2
  1435. data/spec/lutaml/model/serialize_perf_guard_spec.rb +100 -0
  1436. data/spec/lutaml/model/services/default_value_resolver_spec.rb +162 -0
  1437. data/spec/lutaml/model/services/transformer_spec.rb +43 -0
  1438. data/spec/lutaml/model/simple_model_spec.rb +4 -4
  1439. data/spec/lutaml/model/store_spec.rb +315 -0
  1440. data/spec/lutaml/model/toml_adapter_spec.rb +11 -4
  1441. data/spec/lutaml/model/toml_spec.rb +46 -2
  1442. data/spec/lutaml/model/transform_cache_spec.rb +104 -0
  1443. data/spec/lutaml/model/transform_dynamic_attributes_spec.rb +41 -0
  1444. data/spec/lutaml/model/transformation_builder_spec.rb +283 -0
  1445. data/spec/lutaml/model/transformation_spec.rb +165 -236
  1446. data/spec/lutaml/model/type/base64_binary_spec.rb +202 -0
  1447. data/spec/lutaml/model/type/date_spec.rb +132 -0
  1448. data/spec/lutaml/model/type/date_time_spec.rb +54 -2
  1449. data/spec/lutaml/model/type/decimal_spec.rb +1 -1
  1450. data/spec/lutaml/model/type/duration_spec.rb +185 -0
  1451. data/spec/lutaml/model/type/hex_binary_spec.rb +225 -0
  1452. data/spec/lutaml/model/type/integer_spec.rb +1 -1
  1453. data/spec/lutaml/model/type/qname_spec.rb +246 -0
  1454. data/spec/lutaml/model/type/reference_integration_spec.rb +532 -0
  1455. data/spec/lutaml/model/type/reference_spec.rb +293 -0
  1456. data/spec/lutaml/model/type/symbol_spec.rb +322 -0
  1457. data/spec/lutaml/model/type/time_spec.rb +6 -5
  1458. data/spec/lutaml/model/type/time_without_date_spec.rb +1 -1
  1459. data/spec/lutaml/model/type/uninitialized_class_spec.rb +110 -0
  1460. data/spec/lutaml/model/type/uri_spec.rb +176 -0
  1461. data/spec/lutaml/model/type/value_xml_mapping_spec.rb +162 -0
  1462. data/spec/lutaml/model/type_context_spec.rb +370 -0
  1463. data/spec/lutaml/model/type_registry_spec.rb +313 -0
  1464. data/spec/lutaml/model/type_resolver_spec.rb +278 -0
  1465. data/spec/lutaml/model/type_spec.rb +7 -8
  1466. data/spec/lutaml/model/type_substitution_spec.rb +172 -0
  1467. data/spec/lutaml/model/uninitialized_class_deep_dup_spec.rb +39 -0
  1468. data/spec/lutaml/model/uninitialized_class_spec.rb +14 -2
  1469. data/spec/lutaml/model/utils_spec.rb +39 -24
  1470. data/spec/lutaml/model/validation/concerns/has_issues_spec.rb +76 -0
  1471. data/spec/lutaml/model/validation/context_spec.rb +60 -0
  1472. data/spec/lutaml/model/validation/issue_spec.rb +77 -0
  1473. data/spec/lutaml/model/validation/layer_result_spec.rb +66 -0
  1474. data/spec/lutaml/model/validation/profile_spec.rb +134 -0
  1475. data/spec/lutaml/model/validation/registry_spec.rb +94 -0
  1476. data/spec/lutaml/model/validation/remediation_result_spec.rb +23 -0
  1477. data/spec/lutaml/model/validation/remediation_spec.rb +72 -0
  1478. data/spec/lutaml/model/validation/report_spec.rb +58 -0
  1479. data/spec/lutaml/model/validation/rule_spec.rb +134 -0
  1480. data/spec/lutaml/model/validation/uninitialized_class_validate_spec.rb +29 -0
  1481. data/spec/lutaml/model/validation/validation_error_spec.rb +29 -0
  1482. data/spec/lutaml/model/validation/validation_framework_spec.rb +110 -0
  1483. data/spec/lutaml/model/value_map_spec.rb +2 -2
  1484. data/spec/lutaml/model/value_transformation_comprehensive_spec.rb +676 -0
  1485. data/spec/lutaml/model/with_child_mapping_spec.rb +1 -1
  1486. data/spec/lutaml/model/xml_decoupling_spec.rb +436 -0
  1487. data/spec/lutaml/model/xsd_form_default_patterns_spec.rb +664 -0
  1488. data/spec/lutaml/model/xsd_patterns_spec.rb +277 -0
  1489. data/spec/lutaml/model/xsd_type_spec.rb +345 -0
  1490. data/spec/lutaml/model/xsd_type_validation_spec.rb +442 -0
  1491. data/spec/lutaml/model/yamls/standard_adapter_spec.rb +2 -2
  1492. data/spec/lutaml/model/yamls_range_spec.rb +393 -0
  1493. data/spec/lutaml/model/yamls_sequence_spec.rb +245 -0
  1494. data/spec/lutaml/rdf/graph_serialization_spec.rb +137 -0
  1495. data/spec/lutaml/rdf/iri_spec.rb +73 -0
  1496. data/spec/lutaml/rdf/literal_spec.rb +98 -0
  1497. data/spec/lutaml/rdf/mapping_rule_spec.rb +97 -0
  1498. data/spec/lutaml/rdf/mapping_spec.rb +298 -0
  1499. data/spec/lutaml/rdf/member_rule_spec.rb +160 -0
  1500. data/spec/lutaml/rdf/namespace_set_spec.rb +115 -0
  1501. data/spec/lutaml/rdf/namespace_spec.rb +241 -0
  1502. data/spec/lutaml/rdf/rdf_transform_spec.rb +148 -0
  1503. data/spec/lutaml/turtle/adapter_spec.rb +47 -0
  1504. data/spec/lutaml/turtle/mapping_spec.rb +123 -0
  1505. data/spec/lutaml/turtle/transform_spec.rb +732 -0
  1506. data/spec/lutaml/xml/adapter/base_adapter_regression_spec.rb +151 -0
  1507. data/spec/lutaml/xml/adapter/nokogiri_adapter_spec.rb +130 -0
  1508. data/spec/lutaml/xml/adapter/oga_adapter_spec.rb +135 -0
  1509. data/spec/lutaml/xml/adapter/order_spec.rb +150 -0
  1510. data/spec/lutaml/xml/adapter/ox_adapter_spec.rb +101 -0
  1511. data/spec/lutaml/xml/adapter/rexml_adapter_spec.rb +101 -0
  1512. data/spec/lutaml/xml/adapter/xml_namespace_spec.rb +531 -0
  1513. data/spec/lutaml/xml/builder/builder_spec.rb +216 -0
  1514. data/spec/lutaml/xml/clear_parse_state_spec.rb +146 -0
  1515. data/spec/lutaml/xml/compiled_rule_namespace_spec.rb +405 -0
  1516. data/spec/lutaml/xml/conformance/xml_namespaces_spec.rb +580 -0
  1517. data/spec/lutaml/xml/conformance/xml_schema_instance_spec.rb +266 -0
  1518. data/spec/lutaml/xml/content_model_validation_spec.rb +159 -0
  1519. data/spec/lutaml/xml/data_model_spec.rb +282 -0
  1520. data/spec/lutaml/xml/decisions/decision_engine_spec.rb +242 -0
  1521. data/spec/lutaml/xml/decisions/decision_spec.rb +217 -0
  1522. data/spec/lutaml/xml/decisions/element_prefix_resolver_spec.rb +198 -0
  1523. data/spec/lutaml/xml/declaration_planner_spec.rb +524 -0
  1524. data/spec/lutaml/xml/default_namespace_spec.rb +190 -0
  1525. data/spec/lutaml/{model/xml → xml}/derived_attributes_spec.rb +2 -2
  1526. data/spec/lutaml/xml/doctype_preservation_spec.rb +323 -0
  1527. data/spec/lutaml/xml/doubly_defined_namespace_spec.rb +413 -0
  1528. data/spec/lutaml/xml/dual_namespace_element_spec.rb +181 -0
  1529. data/spec/lutaml/xml/element_spec.rb +28 -0
  1530. data/spec/lutaml/xml/encoding_normalizer_spec.rb +215 -0
  1531. data/spec/lutaml/xml/enhanced_mapping_spec.rb +693 -0
  1532. data/spec/lutaml/xml/entity_fragmentation_spec.rb +583 -0
  1533. data/spec/lutaml/xml/format_chooser_spec.rb +0 -0
  1534. data/spec/lutaml/xml/fpi_namespace_spec.rb +145 -0
  1535. data/spec/lutaml/{model/xml/namespace_spec.rb → xml/general_namespace_spec.rb} +6 -5
  1536. data/spec/lutaml/xml/indent_spec.rb +109 -0
  1537. data/spec/lutaml/xml/line_ending_spec.rb +66 -0
  1538. data/spec/lutaml/xml/mapping_finalization_guard_spec.rb +83 -0
  1539. data/spec/lutaml/xml/mapping_rule_spec.rb +98 -0
  1540. data/spec/lutaml/xml/mapping_spec.rb +1152 -0
  1541. data/spec/lutaml/xml/model_transform_guard_spec.rb +126 -0
  1542. data/spec/lutaml/{model/xml → xml}/namespace/nested_with_explicit_namespace_spec.rb +8 -5
  1543. data/spec/lutaml/xml/namespace/w3c_reserved_warning_spec.rb +152 -0
  1544. data/spec/lutaml/xml/namespace_alias_prefix_root_spec.rb +130 -0
  1545. data/spec/lutaml/xml/namespace_alias_spec.rb +263 -0
  1546. data/spec/lutaml/xml/namespace_aware_parsing_spec.rb +219 -0
  1547. data/spec/lutaml/xml/namespace_backward_compatibility_spec.rb +48 -0
  1548. data/spec/lutaml/xml/namespace_bound_element_roundtrip_spec.rb +433 -0
  1549. data/spec/lutaml/xml/namespace_constant_spec.rb +383 -0
  1550. data/spec/lutaml/xml/namespace_force_prefix_spec.rb +113 -0
  1551. data/spec/lutaml/xml/namespace_format_preservation_spec.rb +49 -0
  1552. data/spec/lutaml/xml/namespace_inheritance_deep_spec.rb +162 -0
  1553. data/spec/lutaml/xml/namespace_inheritance_override_spec.rb +316 -0
  1554. data/spec/lutaml/xml/namespace_inheritance_resolver_spec.rb +0 -0
  1555. data/spec/lutaml/xml/namespace_inheritance_spec.rb +966 -0
  1556. data/spec/lutaml/xml/namespace_integration_spec.rb +277 -0
  1557. data/spec/lutaml/xml/namespace_missing_prefix_spec.rb +178 -0
  1558. data/spec/lutaml/xml/namespace_no_hoisting_spec.rb +172 -0
  1559. data/spec/lutaml/xml/namespace_placement_spec.rb +265 -0
  1560. data/spec/lutaml/xml/namespace_preservation_spec.rb +427 -0
  1561. data/spec/lutaml/xml/namespace_principles_spec.rb +909 -0
  1562. data/spec/lutaml/xml/namespace_resolution_strategy_spec.rb +273 -0
  1563. data/spec/lutaml/xml/namespace_scope_declare_spec.rb +205 -0
  1564. data/spec/lutaml/xml/namespace_scope_spec.rb +389 -0
  1565. data/spec/lutaml/xml/namespace_scope_vcard_spec.rb +616 -0
  1566. data/spec/lutaml/xml/namespace_spec.rb +712 -0
  1567. data/spec/lutaml/xml/namespace_three_phase_spec.rb +310 -0
  1568. data/spec/lutaml/xml/nil_optional_element_namespace_spec.rb +84 -0
  1569. data/spec/lutaml/xml/ooxml_namespace_spec.rb +177 -0
  1570. data/spec/lutaml/xml/opal_xml_spec.rb +145 -0
  1571. data/spec/lutaml/xml/ordered_method_spec.rb +109 -0
  1572. data/spec/lutaml/xml/pipeline_integration_spec.rb +145 -0
  1573. data/spec/lutaml/xml/prefix_control_spec.rb +286 -0
  1574. data/spec/lutaml/{model/register/xml_spec.rb → xml/register_spec.rb} +75 -21
  1575. data/spec/lutaml/xml/reusable_mapping_spec.rb +148 -0
  1576. data/spec/lutaml/xml/reused_elements_namespace_spec.rb +85 -0
  1577. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_group_spec.rb +9 -3
  1578. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_spec.rb +11 -7
  1579. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/choice_spec.rb +5 -2
  1580. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_restriction_spec.rb +7 -2
  1581. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_spec.rb +5 -1
  1582. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_type_spec.rb +49 -20
  1583. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/element_spec.rb +9 -4
  1584. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/group_spec.rb +9 -5
  1585. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/restriction_spec.rb +1 -0
  1586. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/sequence_spec.rb +10 -4
  1587. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_content_spec.rb +9 -3
  1588. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_type_spec.rb +10 -7
  1589. data/spec/lutaml/{model/schema/xml_compiler_spec.rb → xml/schema/compiler_spec.rb} +268 -137
  1590. data/spec/lutaml/xml/schema/xsd/errors/error_context_spec.rb +65 -0
  1591. data/spec/lutaml/xml/schema/xsd/errors/suggestion_spec.rb +77 -0
  1592. data/spec/lutaml/xml/schema/xsd/file_validation_result_spec.rb +131 -0
  1593. data/spec/lutaml/xml/schema/xsd/glob_spec.rb +330 -0
  1594. data/spec/lutaml/xml/schema/xsd/liquid_methods/attribute_and_group_spec.rb +76 -0
  1595. data/spec/lutaml/xml/schema/xsd/liquid_methods/complex_type_spec.rb +159 -0
  1596. data/spec/lutaml/xml/schema/xsd/liquid_methods/containers_spec.rb +104 -0
  1597. data/spec/lutaml/xml/schema/xsd/liquid_methods/element_spec.rb +139 -0
  1598. data/spec/lutaml/xml/schema/xsd/liquid_methods/schema_spec.rb +75 -0
  1599. data/spec/lutaml/xml/schema/xsd/liquid_methods/simple_content_spec.rb +79 -0
  1600. data/spec/lutaml/xml/schema/xsd/namespace_uri_remapping_spec.rb +246 -0
  1601. data/spec/lutaml/xml/schema/xsd/schema_helper_methods_spec.rb +237 -0
  1602. data/spec/lutaml/xml/schema/xsd/schema_mapping_spec.rb +777 -0
  1603. data/spec/lutaml/xml/schema/xsd/schema_validator_spec.rb +228 -0
  1604. data/spec/lutaml/xml/schema/xsd/spec_helper.rb +27 -0
  1605. data/spec/lutaml/xml/schema/xsd/validation_error_spec.rb +189 -0
  1606. data/spec/lutaml/xml/schema/xsd/validation_result_spec.rb +276 -0
  1607. data/spec/lutaml/xml/schema/xsd/xsd_spec.rb +51 -0
  1608. data/spec/lutaml/xml/schema_primer_spec.rb +393 -0
  1609. data/spec/lutaml/xml/serializable_namespace_spec.rb +125 -0
  1610. data/spec/lutaml/xml/transformation/custom_method_wrapper_spec.rb +247 -0
  1611. data/spec/lutaml/xml/transformation_spec.rb +439 -0
  1612. data/spec/lutaml/xml/type_namespace/collector_spec.rb +212 -0
  1613. data/spec/lutaml/xml/type_namespace/planner_spec.rb +270 -0
  1614. data/spec/lutaml/xml/type_namespace_examples_spec.rb +521 -0
  1615. data/spec/lutaml/xml/type_namespace_integration_spec.rb +332 -0
  1616. data/spec/lutaml/xml/type_namespace_prefix_spec.rb +370 -0
  1617. data/spec/lutaml/xml/type_namespace_resolver_spec.rb +0 -0
  1618. data/spec/lutaml/xml/type_namespace_roundtrip_spec.rb +580 -0
  1619. data/spec/lutaml/xml/w3c_types_spec.rb +376 -0
  1620. data/spec/lutaml/{model → xml}/xml_adapter_spec.rb +64 -17
  1621. data/spec/lutaml/xml/xml_declaration_spec.rb +568 -0
  1622. data/spec/lutaml/xml/xml_element_guard_spec.rb +138 -0
  1623. data/spec/lutaml/{model/xml → xml}/xml_element_spec.rb +1 -1
  1624. data/spec/lutaml/xml/xml_lang_spec.rb +441 -0
  1625. data/spec/lutaml/xml/xml_space_spec.rb +247 -0
  1626. data/spec/lutaml/xml/xml_space_type_spec.rb +161 -0
  1627. data/spec/lutaml/xml/xml_spec.rb +173 -0
  1628. data/spec/parent_root_spec.rb +63 -0
  1629. data/spec/person_spec.rb +9 -9
  1630. data/spec/spec_helper.rb +69 -6
  1631. data/spec/support/opal.rb +6 -0
  1632. data/spec/support/test_adapter_config.rb +101 -0
  1633. data/spec/support/test_namespaces.rb +185 -0
  1634. data/spec/support/trace_helper.rb +0 -0
  1635. data/spec/support/xml/schema_helper.rb +15 -0
  1636. data/spec/support/xml/xsd/code_example_validator.rb +393 -0
  1637. data/spec/support/xml_mapping_namespaces.rb +176 -0
  1638. metadata +1576 -101
  1639. data/docs/custom_registers.adoc +0 -228
  1640. data/lib/lutaml/model/hash_adapter/mapping.rb +0 -19
  1641. data/lib/lutaml/model/hash_adapter/mapping_rule.rb +0 -9
  1642. data/lib/lutaml/model/hash_adapter/transform.rb +0 -8
  1643. data/lib/lutaml/model/hash_adapter.rb +0 -21
  1644. data/lib/lutaml/model/json/mapping.rb +0 -19
  1645. data/lib/lutaml/model/json/mapping_rule.rb +0 -9
  1646. data/lib/lutaml/model/json/multi_json_adapter.rb +0 -18
  1647. data/lib/lutaml/model/json/standard_adapter.rb +0 -25
  1648. data/lib/lutaml/model/json/transform.rb +0 -8
  1649. data/lib/lutaml/model/jsonl/mapping.rb +0 -19
  1650. data/lib/lutaml/model/jsonl/mapping_rule.rb +0 -9
  1651. data/lib/lutaml/model/jsonl/transform.rb +0 -19
  1652. data/lib/lutaml/model/mapping/key_value_mapping.rb +0 -227
  1653. data/lib/lutaml/model/schema/xsd_schema.rb +0 -62
  1654. data/lib/lutaml/model/toml/mapping.rb +0 -27
  1655. data/lib/lutaml/model/toml/mapping_rule.rb +0 -9
  1656. data/lib/lutaml/model/toml/toml_rb_adapter.rb +0 -18
  1657. data/lib/lutaml/model/toml/tomlib_adapter.rb +0 -19
  1658. data/lib/lutaml/model/toml/transform.rb +0 -8
  1659. data/lib/lutaml/model/xml/builder/nokogiri.rb +0 -101
  1660. data/lib/lutaml/model/xml/builder/oga.rb +0 -183
  1661. data/lib/lutaml/model/xml/builder/ox.rb +0 -121
  1662. data/lib/lutaml/model/xml/document.rb +0 -477
  1663. data/lib/lutaml/model/xml/element.rb +0 -32
  1664. data/lib/lutaml/model/xml/mapping.rb +0 -471
  1665. data/lib/lutaml/model/xml/mapping_rule.rb +0 -149
  1666. data/lib/lutaml/model/xml/nokogiri_adapter.rb +0 -234
  1667. data/lib/lutaml/model/xml/oga/document.rb +0 -20
  1668. data/lib/lutaml/model/xml/oga/element.rb +0 -123
  1669. data/lib/lutaml/model/xml/oga_adapter.rb +0 -172
  1670. data/lib/lutaml/model/xml/ox_adapter.rb +0 -229
  1671. data/lib/lutaml/model/xml/transform.rb +0 -8
  1672. data/lib/lutaml/model/xml/xml_attribute.rb +0 -37
  1673. data/lib/lutaml/model/xml/xml_element.rb +0 -167
  1674. data/lib/lutaml/model/xml/xml_namespace.rb +0 -49
  1675. data/lib/lutaml/model/xml.rb +0 -31
  1676. data/lib/lutaml/model/xml_adapter/element.rb +0 -18
  1677. data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +0 -15
  1678. data/lib/lutaml/model/xml_adapter/oga_adapter.rb +0 -21
  1679. data/lib/lutaml/model/xml_adapter/ox_adapter.rb +0 -18
  1680. data/lib/lutaml/model/xml_adapter.rb +0 -7
  1681. data/lib/lutaml/model/yaml/mapping.rb +0 -19
  1682. data/lib/lutaml/model/yaml/mapping_rule.rb +0 -9
  1683. data/lib/lutaml/model/yaml/standard_adapter.rb +0 -28
  1684. data/lib/lutaml/model/yaml/transform.rb +0 -8
  1685. data/lib/lutaml/model/yamls/mapping.rb +0 -19
  1686. data/lib/lutaml/model/yamls/mapping_rule.rb +0 -9
  1687. data/lib/lutaml/model/yamls/standard_adapter.rb +0 -34
  1688. data/lib/lutaml/model/yamls/transform.rb +0 -19
  1689. data/spec/benchmarks/xml_parsing_benchmark_spec.rb +0 -74
  1690. data/spec/fixtures/liquid_templates/_ceramics.liquid +0 -3
  1691. data/spec/fixtures/xml/advanced_test_schema.xsd +0 -134
  1692. data/spec/lutaml/model/namespace_spec.rb +0 -57
  1693. data/spec/lutaml/model/xml_adapter/nokogiri_adapter_spec.rb +0 -56
  1694. data/spec/lutaml/model/xml_adapter/oga_adapter_spec.rb +0 -60
  1695. data/spec/lutaml/model/xml_adapter/ox_adapter_spec.rb +0 -61
  1696. data/spec/lutaml/model/xml_adapter/xml_namespace_spec.rb +0 -368
  1697. data/spec/lutaml/model/xml_mapping_rule_spec.rb +0 -158
  1698. data/spec/lutaml/model/xml_mapping_spec.rb +0 -1318
  1699. data/spec/lutaml/model/xml_spec.rb +0 -63
  1700. /data/spec/lutaml/{model/xml → xml}/root_mappings/nested_child_mappings_spec.rb +0 -0
@@ -0,0 +1,1081 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module KeyValue
5
+ # KeyValue-specific transformation implementation.
6
+ #
7
+ # Transforms model instances into KeyValueElement trees without
8
+ # serialization concerns. This provides the same architectural
9
+ # pattern as Xml::Transformation but for key-value formats
10
+ # (JSON, YAML, TOML).
11
+ #
12
+ # Architecture:
13
+ # - Content Layer: KeyValueElement defines WHAT to serialize
14
+ # - Presentation Layer: Adapters define HOW to serialize
15
+ #
16
+ # This is a critical step toward symmetric OOP architecture
17
+ # across all serialization formats.
18
+ class Transformation < Lutaml::Model::Transformation
19
+ include Lutaml::Model::RenderPolicy
20
+
21
+ autoload :RuleCompiler, "#{__dir__}/transformation/rule_compiler"
22
+ autoload :ValueSerializer, "#{__dir__}/transformation/value_serializer"
23
+ autoload :CollectionSerializer,
24
+ "#{__dir__}/transformation/collection_serializer"
25
+
26
+ # Initialize serializers before calling super
27
+ # This must happen before super calls freeze
28
+ #
29
+ # @param model_class [Class] The model class to transform
30
+ # @param mapping_dsl [Mapping] The mapping DSL to compile
31
+ # @param format [Symbol] The format (:json, :yaml, :toml)
32
+ # @param register [Register, nil] The register for type resolution
33
+ def initialize(model_class, mapping_dsl, format, register)
34
+ # Extract register_id before super
35
+ register_id = extract_register_id(register)
36
+ transformation_factory = ->(type_class) {
37
+ build_child_transformation(type_class)
38
+ }
39
+
40
+ # Set up serializers before calling super
41
+ # The super will call compile_rules and freeze
42
+ @rule_compiler = RuleCompiler.new(
43
+ model_class: model_class,
44
+ register_id: register_id,
45
+ format: format,
46
+ transformation_factory: transformation_factory,
47
+ )
48
+
49
+ @value_serializer = ValueSerializer.new(
50
+ format: format,
51
+ register_id: register_id,
52
+ model_class: model_class,
53
+ transformation_factory: transformation_factory,
54
+ )
55
+
56
+ @collection_serializer = CollectionSerializer.new(
57
+ format: format,
58
+ register_id: register_id,
59
+ value_serializer: @value_serializer,
60
+ transformation_factory: transformation_factory,
61
+ )
62
+
63
+ super
64
+ end
65
+
66
+ # Extract register_id from register parameter
67
+ #
68
+ # @param register [Register, Symbol, nil] The register
69
+ # @return [Symbol, nil] The register ID
70
+ def extract_register_id(register)
71
+ case register
72
+ when Lutaml::Model::Register
73
+ register.id
74
+ when Symbol
75
+ register
76
+ else
77
+ Lutaml::Model::Config.default_register
78
+ end
79
+ end
80
+
81
+ # Build child transformation for nested model
82
+ #
83
+ # @param type_class [Class] The nested model class
84
+ # @param format [Symbol] The format
85
+ # @param register [Register, nil] The register
86
+ # @return [Transformation, nil] Child transformation or nil
87
+ def build_child_transformation(type_class, format = self.format,
88
+ register = self.register)
89
+ return nil unless type_class.is_a?(Class) &&
90
+ type_class.include?(Lutaml::Model::Serialize)
91
+
92
+ # Prevent infinite recursion for self-referential models
93
+ compilation_stack = Thread.current[:lutaml_compilation_stack] ||= []
94
+ return nil if compilation_stack.include?(type_class)
95
+
96
+ compilation_stack.push(type_class)
97
+ begin
98
+ # Get the mapping for the current format
99
+ mapping = type_class.mappings_for(format,
100
+ extract_register_id(register))
101
+
102
+ # Create a new Transformation instance with the mapping
103
+ self.class.new(type_class, mapping, format, register)
104
+ ensure
105
+ compilation_stack.pop
106
+ end
107
+ end
108
+
109
+ private
110
+
111
+ # Get the register ID, handling both Symbol and Register objects
112
+ # This normalizes the register to an ID for backward compatibility
113
+ #
114
+ # @return [Symbol, nil] The register ID
115
+ def register_id
116
+ return @register if @register.is_a?(Symbol)
117
+
118
+ @register_id
119
+ end
120
+
121
+ # Compile key-value mapping DSL into pre-compiled rules
122
+ #
123
+ # @param mapping_dsl [Mapping::KeyValueMapping] The mapping to compile
124
+ # @return [Array<CompiledRule>] Array of compiled transformation rules
125
+ def compile_rules(mapping_dsl)
126
+ rule_compiler.compile(mapping_dsl)
127
+ end
128
+
129
+ # Get the rule compiler instance
130
+ #
131
+ # @return [RuleCompiler] The rule compiler
132
+ def rule_compiler
133
+ @rule_compiler
134
+ end
135
+
136
+ # Get the value serializer instance
137
+ #
138
+ # @return [ValueSerializer] The value serializer
139
+ def value_serializer
140
+ @value_serializer
141
+ end
142
+
143
+ # Get the collection serializer instance
144
+ #
145
+ # @return [CollectionSerializer] The collection serializer
146
+ def collection_serializer
147
+ @collection_serializer
148
+ end
149
+
150
+ # Check if a mapping rule should be applied based on only/except options
151
+ #
152
+ # @param rule [CompiledRule] The rule to check
153
+ # @param options [Hash] Transformation options (may contain :only, :except)
154
+ # @return [Boolean] true if the rule should be applied
155
+ def valid_mapping?(rule, options)
156
+ rule_compiler.valid_mapping?(rule, options)
157
+ end
158
+
159
+ public
160
+
161
+ # Transform a model instance into KeyValueElement tree
162
+ #
163
+ # @param model_instance [Object] The model instance to transform
164
+ # @param options [Hash] Transformation options (supports :only, :except for filtering)
165
+ # @return [Lutaml::KeyValue::DataModel::Element] The root element
166
+ def transform(model_instance, options = {})
167
+ # For key-value formats, we typically don't have a named root
168
+ # Instead, we create an anonymous root that holds all attributes
169
+ root = Lutaml::KeyValue::DataModel::Element.new("__root__")
170
+
171
+ # Apply each compiled rule (with filtering support)
172
+ compiled_rules.each do |rule|
173
+ # Check if this rule should be applied based on only/except options
174
+ next unless valid_mapping?(rule, options)
175
+
176
+ apply_rule(root, rule, model_instance, options)
177
+ end
178
+
179
+ if ENV["DEBUG_KEYED_COLLECTION"]
180
+ puts "=== TRANSFORM COMPLETE ==="
181
+ puts "root.children.count: #{root.children.count}"
182
+ root.children.each do |child|
183
+ puts " child key=#{child.key.inspect}, value=#{child.value.inspect}, to_hash=#{child.to_hash.inspect}"
184
+ end
185
+ puts "root.to_hash: #{root.to_hash.inspect}"
186
+ end
187
+
188
+ root
189
+ end
190
+
191
+ private
192
+
193
+ # Apply a single transformation rule
194
+ #
195
+ # @param parent [Lutaml::KeyValue::DataModel::Element] Parent element
196
+ # @param rule [CompiledRule] The rule to apply
197
+ # @param model_instance [Object] The model instance
198
+ # @param options [Hash] Transformation options
199
+ def apply_rule(parent, rule, model_instance, options)
200
+ # DEBUG for keyed collections
201
+ if ENV["DEBUG_KEYED_COLLECTION"]
202
+ puts "apply_rule: #{rule.serialized_name}, collection?: #{rule.collection?}"
203
+ if rule.collection?
204
+ puts " collection_info: #{rule.collection_info.inspect}"
205
+ puts " child_mappings: #{rule.collection_info && rule.collection_info[:child_mappings].inspect}"
206
+ end
207
+ end
208
+
209
+ # Handle custom serialization methods (e.g., with: { to: ... })
210
+ if rule.has_custom_methods? && rule.custom_methods[:to]
211
+ # Call custom method which directly modifies the parent element
212
+ return model_instance.public_send(rule.custom_methods[:to],
213
+ model_instance, parent)
214
+ end
215
+
216
+ # Handle delegation - extract value from delegated object
217
+ delegate = rule.option(:delegate)
218
+ if delegate
219
+ # Get the delegated object
220
+ delegated_object = model_instance.public_send(delegate)
221
+
222
+ # Initialize delegated object if nil/uninitialized (like legacy does)
223
+ if delegated_object.nil? || Lutaml::Model::Utils.uninitialized?(delegated_object)
224
+ # Get the delegate attribute from model to create a new instance
225
+ delegate_attr = model_class.attributes(register_id)&.[](delegate)
226
+ if delegate_attr
227
+ delegated_object = delegate_attr.type(register_id).new
228
+ model_instance.public_send(:"#{delegate}=", delegated_object)
229
+ end
230
+ end
231
+
232
+ # Extract value from delegated object
233
+ value = delegated_object&.public_send(rule.attribute_name)
234
+ else
235
+ # Get attribute value directly
236
+ value = model_instance.public_send(rule.attribute_name)
237
+ end
238
+
239
+ # Handle raw mapping (map_all directive)
240
+ # Raw mappings parse the stored content and merge it directly into the parent
241
+ if rule.option(:mapping_type) == :raw
242
+ return handle_raw_mapping(parent, value, options)
243
+ end
244
+
245
+ # Check if value should be skipped
246
+ skip_result = should_skip_value?(value, rule, model_instance,
247
+ delegate)
248
+
249
+ return if skip_result
250
+
251
+ # Apply export transformation if present
252
+ if rule.value_transformer
253
+ value = rule.transform_value(value, :export)
254
+ end
255
+
256
+ # Create element for this attribute
257
+ if rule.collection?
258
+ # For collections, apply value_map conversion with tracking flags
259
+ # so the collection serializer knows the original intent
260
+ converted_from_empty_to_nil = false
261
+ converted_from_nil_to_empty = false
262
+ value_map = rule.option(:value_map) || {}
263
+ to_map = value_map[:to] || {}
264
+
265
+ if value.nil?
266
+ to_nil = to_map[:nil]
267
+ if to_nil == :empty
268
+ converted_from_nil_to_empty = true
269
+ end
270
+ elsif Lutaml::Model::Utils.empty?(value)
271
+ to_empty = to_map[:empty] # nil → no conversion (default: omit)
272
+ if to_empty == :nil
273
+ value = nil
274
+ converted_from_empty_to_nil = true
275
+ end
276
+ end
277
+
278
+ collection_serializer.serialize(parent, value, rule, options,
279
+ converted_from_empty_to_nil: converted_from_empty_to_nil,
280
+ converted_from_nil_to_empty: converted_from_nil_to_empty)
281
+ else
282
+ # For non-collections, pass original value directly.
283
+ # create_value_element handles all value_map conversions with full context.
284
+ create_value_element(parent, rule, value, options)
285
+ end
286
+ end
287
+
288
+ # Check if value should be skipped based on render options
289
+ #
290
+ # Delegates to the shared RenderPolicy module for consistent
291
+ # behavior across XML and KeyValue formats.
292
+ #
293
+ # @param value [Object] The value to check
294
+ # @param rule [CompiledRule] The rule
295
+ # @param model_instance [Object] The model instance
296
+ # @param delegate [Symbol, nil] The delegate attribute name if present
297
+ # @return [Boolean] true if should skip
298
+ def should_skip_value?(value, rule, model_instance, delegate = nil)
299
+ if delegate
300
+ delegate_obj = model_instance.public_send(delegate)
301
+ should_skip_delegated_value?(value, rule, delegate_obj)
302
+ else
303
+ super(value, rule, model_instance)
304
+ end
305
+ end
306
+
307
+ # Create a collection element
308
+ #
309
+ # @param parent [Lutaml::KeyValue::DataModel::Element] Parent element
310
+ # @param rule [CompiledRule] The rule
311
+ # @param collection [Array] The collection value
312
+ # @param options [Hash] Options
313
+ # @param converted_from_empty_to_nil [Boolean] True if value was converted from empty to nil
314
+ # @param converted_from_nil_to_empty [Boolean] True if value should be converted from nil to empty
315
+ def create_collection_element(parent, rule, collection, options,
316
+ converted_from_empty_to_nil: false, converted_from_nil_to_empty: false)
317
+ # Handle nil collection - skip if nil unless should render
318
+ if collection.nil?
319
+ to_map = (rule.option(:value_map) || {})[:to] || {}
320
+ nil_mapping = to_map[:nil]
321
+ if nil_mapping == :empty || converted_from_nil_to_empty
322
+ # Render as empty collection
323
+ element = Lutaml::KeyValue::DataModel::Element.new(
324
+ rule.serialized_name, []
325
+ )
326
+ parent.add_child(element)
327
+ elsif nil_mapping == :nil || converted_from_empty_to_nil
328
+ # Render nil collection as nil value
329
+ element = Lutaml::KeyValue::DataModel::Element.new(
330
+ rule.serialized_name, nil
331
+ )
332
+ parent.add_child(element)
333
+ else
334
+ # Skip nil collection
335
+ end
336
+ return
337
+ end
338
+
339
+ # Convert to array for consistent handling
340
+ items = Array(collection)
341
+
342
+ # Check if this has root_mappings - merge directly into parent
343
+ root_mappings = rule.option(:root_mappings)
344
+ if root_mappings
345
+ # For root_mappings, the collection items are keyed and merged directly into parent
346
+ # Find the attribute to use as key
347
+ key_attribute = root_mappings.key(:key)
348
+ # Find the attribute to use as value (optional - if not provided, serialize all attributes)
349
+ value_attribute = root_mappings.key(:value)
350
+
351
+ # Initialize parent's value as a hash if it's nil
352
+ parent.value ||= {} if parent.value.nil?
353
+
354
+ # Case 1: Both key and value attributes specified
355
+ if key_attribute && value_attribute
356
+ items.each do |item|
357
+ next if item.nil?
358
+
359
+ # Get the key value from the item
360
+ key_value = if item.is_a?(Lutaml::Model::Serialize) && item.class.attributes.key?(key_attribute)
361
+ item.public_send(key_attribute)
362
+ end
363
+ next if key_value.nil?
364
+
365
+ # Get the value from the item
366
+ attr_value = if item.is_a?(Lutaml::Model::Serialize) && item.class.attributes.key?(value_attribute)
367
+ item.public_send(value_attribute)
368
+ end
369
+ next if attr_value.nil? || Lutaml::Model::Utils.uninitialized?(attr_value)
370
+
371
+ # For the value, we need to transform it appropriately
372
+ # First, check if it's a single nested model
373
+ item_class = item.class
374
+ attr_def = item_class.attributes(register_id)&.[](value_attribute)
375
+
376
+ if attr_def && attr_value.is_a?(Lutaml::Model::Serialize)
377
+ # Single nested model - transform it to a hash
378
+ attr_type = attr_def.type(register_id)
379
+ if attr_type.is_a?(Class) && attr_type < Lutaml::Model::Serialize
380
+ # Get the mapping for the value's class
381
+ value_class_mapping = attr_value.class.mappings_for(format,
382
+ register_id)
383
+
384
+ # Build a transformation for the value's class
385
+ value_transformation = self.class.new(attr_value.class,
386
+ value_class_mapping, format, register)
387
+
388
+ # Transform the value to a KeyValueElement
389
+ value_root = value_transformation.transform(attr_value,
390
+ options)
391
+ value_hash = value_root.to_hash
392
+
393
+ # Extract the value from the __root__ wrapper
394
+ parent.value[key_value.to_s] = value_hash["__root__"]
395
+ next
396
+ end
397
+ end
398
+
399
+ # Check if it's a collection
400
+ if attr_value.is_a?(Array) || attr_value.is_a?(Lutaml::Model::Collection)
401
+ # Get the attribute definition for the value attribute from the item's class
402
+ item_class = item.class
403
+ attr_def = item_class.attributes(register_id)&.[](value_attribute)
404
+ next unless attr_def
405
+
406
+ # Get the type of items in the collection
407
+ item_type = attr_def.type(register_id)
408
+
409
+ # Get the child transformation for the collection item type
410
+ if item_type.is_a?(Class) && item_type < Lutaml::Model::Serialize
411
+ # Create a temporary parent KeyValueElement to hold the collection
412
+ temp_parent = Lutaml::KeyValue::DataModel::Element.new("__temp__")
413
+
414
+ # Convert to array
415
+ coll_items = Array(attr_value)
416
+
417
+ # Get the mapping for the item's class
418
+ item_class_mapping = item_class.mappings_for(format,
419
+ register_id)
420
+
421
+ # Build a temporary transformation for the item's class
422
+ item_class_transformation = self.class.new(item_class,
423
+ item_class_mapping, format, register)
424
+
425
+ # Find the rule for the value_attribute in the item's class mapping
426
+ item_rule = item_class_transformation.compiled_rules.find do |r|
427
+ r.attribute_name == value_attribute
428
+ end
429
+
430
+ if item_rule&.collection_info && item_rule.collection_info[:child_mappings]
431
+ # Use the keyed collection handling
432
+ child_mappings = item_rule.collection_info[:child_mappings]
433
+ coll_key_attr = keyed_collection_key_attribute(child_mappings)
434
+
435
+ if coll_key_attr
436
+ # Create a keyed collection directly
437
+ create_keyed_collection_element(temp_parent, item_rule,
438
+ coll_items, coll_key_attr, child_mappings, options)
439
+ else
440
+ create_array_collection_element(temp_parent, item_rule,
441
+ coll_items, options)
442
+ end
443
+ elsif item_rule
444
+ # No child_mappings - serialize as array
445
+ create_array_collection_element(temp_parent, item_rule,
446
+ coll_items, options)
447
+ end
448
+
449
+ # Extract the value from temp_parent
450
+ temp_hash = temp_parent.to_hash
451
+ inner_value = temp_hash["__temp__"]
452
+ coll_value = inner_value&.[](value_attribute.to_s) if inner_value
453
+
454
+ parent.value[key_value.to_s] = coll_value
455
+ next
456
+ end
457
+ end
458
+
459
+ # Fallback: just use the value directly
460
+ parent.value[key_value.to_s] = attr_value
461
+ end
462
+ # Case 2: Only key attribute specified - serialize all other attributes
463
+ elsif key_attribute
464
+ items.each do |item|
465
+ next if item.nil?
466
+
467
+ key_value = if item.is_a?(Lutaml::Model::Serialize) && item.class.attributes.key?(key_attribute)
468
+ item.public_send(key_attribute)
469
+ end
470
+ next if key_value.nil?
471
+
472
+ # Serialize all attributes except the key
473
+ item_hash = {}
474
+ item_class = item.class
475
+
476
+ # Get the mapping for the item's class to find serialized names
477
+ if item_class.is_a?(Class) && item_class.include?(Lutaml::Model::Serialize)
478
+ item_class_mapping = item_class.mappings_for(format,
479
+ register_id)
480
+
481
+ item_class.attributes(register_id).each do |attr_name, attr_def|
482
+ # Skip the key attribute since it's used as the hash key
483
+ next if attr_name == key_attribute
484
+
485
+ attr_value = item.public_send(attr_name)
486
+ next if attr_value.nil? || Lutaml::Model::Utils.uninitialized?(attr_value)
487
+
488
+ # Serialize the attribute value
489
+ serialized_value = serialize_collection_item_value(
490
+ attr_value, attr_def, options
491
+ )
492
+
493
+ # Determine the path for this attribute based on root_mappings
494
+ # root_mappings format: { attr_name => path_spec }
495
+ # where path_spec can be:
496
+ # - :key (used as hash key, already skipped above)
497
+ # - "string" (single key, use the string)
498
+ # - [:path, :to, :nested] (array of path segments)
499
+ path_spec = root_mappings[attr_name]
500
+
501
+ # Use the path_spec if present, otherwise use the serialized name from mapping
502
+ if path_spec
503
+ if path_spec.is_a?(Array)
504
+ # Build nested structure: [:path, :to, :nested] -> item_hash["path"]["to"]["nested"] = value
505
+ current = item_hash
506
+ path_spec[0...-1].each do |key|
507
+ key_str = key.to_s
508
+ current[key_str] ||= {}
509
+ current = current[key_str]
510
+ end
511
+ current[path_spec.last.to_s] = serialized_value
512
+ elsif path_spec == :key
513
+ # Skip - key is used as the hash key
514
+ next
515
+ else
516
+ # Use the path_spec as a single key
517
+ item_hash[path_spec.to_s] = serialized_value
518
+ end
519
+ else
520
+ # No path_spec in root_mappings - use the serialized name from the mapping
521
+ serialized_name = attr_name.to_s
522
+ if item_class_mapping
523
+ mapping_rule = item_class_mapping.mappings.find do |m|
524
+ m.to == attr_name
525
+ end
526
+ serialized_name = mapping_rule.name.to_s if mapping_rule&.name
527
+ end
528
+
529
+ item_hash[serialized_name] = serialized_value
530
+ end
531
+ end
532
+ end
533
+
534
+ parent.value[key_value.to_s] = item_hash unless item_hash.empty?
535
+ end
536
+ end
537
+
538
+ return
539
+ end
540
+
541
+ # Check if this is a keyed collection (map_key feature)
542
+ child_mappings = rule.collection_info && rule.collection_info[:child_mappings]
543
+ key_attribute = keyed_collection_key_attribute(child_mappings)
544
+
545
+ if key_attribute
546
+ # Serialize as hash keyed by the key attribute
547
+ create_keyed_collection_element(parent, rule, items, key_attribute,
548
+ child_mappings, options)
549
+ else
550
+ # Serialize as array (default)
551
+ create_array_collection_element(parent, rule, items, options)
552
+ end
553
+ end
554
+
555
+ # Create a keyed collection element (map_key feature)
556
+ #
557
+ # @param parent [Lutaml::KeyValue::DataModel::Element] Parent element
558
+ # @param rule [CompiledRule] The rule
559
+ # @param items [Array] The collection items
560
+ # @param key_attribute [Symbol] The attribute to use as hash key
561
+ # @param child_mappings [Hash] The child mappings configuration
562
+ # @param options [Hash] Options
563
+ def create_keyed_collection_element(parent, rule, items, key_attribute,
564
+ child_mappings, options)
565
+ # Create hash to hold keyed items
566
+ keyed_hash = {}
567
+
568
+ # Check if there's a value mapping (map_value as_attribute: :name)
569
+ # This means we should serialize just the specified attribute value, not the full item hash
570
+ value_attribute = nil
571
+ child_mappings&.each do |attr_name, mapping_type|
572
+ value_attribute = attr_name if mapping_type == :value
573
+ end
574
+
575
+ if ENV["DEBUG_KEYED_COLLECTION"]
576
+ puts "create_keyed_collection_element: items.count=#{items.count}, key_attribute=#{key_attribute}, value_attribute=#{value_attribute.inspect}"
577
+ end
578
+
579
+ items.each do |item|
580
+ # Get the key value from the item
581
+ key_value = if item.is_a?(Lutaml::Model::Serialize) && item.class.attributes.key?(key_attribute)
582
+ item.public_send(key_attribute)
583
+ end
584
+
585
+ if ENV["DEBUG_KEYED_COLLECTION"]
586
+ puts " item: #{item.inspect}, key_value=#{key_value.inspect}"
587
+ end
588
+
589
+ next if key_value.nil?
590
+
591
+ # If there's a value mapping, serialize just that attribute value
592
+ if value_attribute
593
+ attr_value = if item.is_a?(Lutaml::Model::Serialize) && item.class.attributes.key?(value_attribute)
594
+ item.public_send(value_attribute)
595
+ end
596
+ next if attr_value.nil? || Lutaml::Model::Utils.uninitialized?(attr_value)
597
+
598
+ # Get the attribute definition for proper serialization
599
+ attr_def = nil
600
+ item_class = item.class
601
+ if item_class.is_a?(Class) && item_class.include?(Lutaml::Model::Serialize)
602
+ attr_def = item_class.attributes(register_id)&.[](value_attribute)
603
+ end
604
+
605
+ # Serialize the attribute value
606
+ serialized_value = if attr_def
607
+ serialize_collection_item_value(attr_value,
608
+ attr_def, options)
609
+ else
610
+ attr_value
611
+ end
612
+
613
+ unless serialized_value.nil?
614
+ keyed_hash[key_value.to_s] =
615
+ serialized_value
616
+ end
617
+ else
618
+ # No value mapping - serialize all attributes as a hash
619
+ item_hash = {}
620
+
621
+ # Check if child_mappings only contains :key/:value (no nested paths)
622
+ # In that case, we should also serialize other attributes not in child_mappings
623
+ has_nested_paths = child_mappings&.any? do |_, path_spec|
624
+ path_spec.is_a?(Array)
625
+ end
626
+
627
+ # Use child_mappings to determine where each attribute goes in the nested hash
628
+ if child_mappings && (has_nested_paths || child_mappings.any? do |_, path_spec|
629
+ path_spec != :key && path_spec != :value
630
+ end)
631
+ # child_mappings format: { attr_name => path_spec }
632
+ # where path_spec can be:
633
+ # - :key (used as hash key, already handled)
634
+ # - :value (use the value directly)
635
+ # - [:path, :to, :nested] (nested path)
636
+ # - :simple (single key, same as attr_name)
637
+
638
+ if ENV["DEBUG_KEYED_COLLECTION"]
639
+ puts " Using child_mappings: #{child_mappings.inspect}"
640
+ end
641
+
642
+ child_mappings.each do |attr_name, path_spec|
643
+ # Skip :key mappings - they're used as the hash key
644
+ next if path_spec == :key
645
+ # Skip :value mappings - handled separately
646
+ next if path_spec == :value
647
+
648
+ # Get the attribute value
649
+ attr_value = if item.is_a?(Lutaml::Model::Serialize) && item.class.attributes.key?(attr_name)
650
+ item.public_send(attr_name)
651
+ end
652
+
653
+ if ENV["DEBUG_KEYED_COLLECTION"]
654
+ puts " #{attr_name}: path_spec=#{path_spec.inspect}, attr_value=#{attr_value.inspect}"
655
+ end
656
+
657
+ next if attr_value.nil? || Lutaml::Model::Utils.uninitialized?(attr_value)
658
+
659
+ # Get the attribute definition for proper serialization
660
+ attr_def = nil
661
+ item_class = item.class
662
+ if item_class.is_a?(Class) && item_class.include?(Lutaml::Model::Serialize)
663
+ attr_def = item_class.attributes(register_id)&.[](attr_name)
664
+ end
665
+
666
+ # Serialize the attribute value
667
+ serialized_value = if attr_def
668
+ serialize_collection_item_value(
669
+ attr_value, attr_def, options
670
+ )
671
+ else
672
+ attr_value
673
+ end
674
+
675
+ next if serialized_value.nil?
676
+
677
+ # Build the nested hash structure based on path_spec
678
+ # path_spec can be:
679
+ # - [:path, :to, :nested] - array of path segments
680
+ # - :simple - single key
681
+ if path_spec.is_a?(Array)
682
+ # Build nested structure: [:path, :to, :nested] -> item_hash["path"]["to"]["nested"] = value
683
+ current = item_hash
684
+ path_spec[0...-1].each do |key|
685
+ key_str = key.to_s
686
+ current[key_str] ||= {}
687
+ current = current[key_str]
688
+ end
689
+ current[path_spec.last.to_s] = serialized_value
690
+ else
691
+ # Single key - use attr_name as key
692
+ item_hash[attr_name.to_s] = serialized_value
693
+ end
694
+ end
695
+ end
696
+
697
+ # Always serialize all attributes (as fallback) for keyed collections
698
+ # This handles the case where child_mappings only has :key mapping
699
+ item_class = item.class
700
+ if item_class.is_a?(Class) && item_class.include?(Lutaml::Model::Serialize)
701
+ if ENV["DEBUG_KEYED_COLLECTION"]
702
+ puts " item_class.attributes(#{register_id}): #{item_class.attributes(register_id).inspect}"
703
+ end
704
+ item_class.attributes(register_id).each do |attr_name, attr_def|
705
+ # Skip the key attribute since it's used as the hash key
706
+ next if attr_name == key_attribute
707
+ # Skip attributes already processed by child_mappings
708
+ next if child_mappings&.key?(attr_name)
709
+
710
+ attr_value = item.public_send(attr_name)
711
+
712
+ if ENV["DEBUG_KEYED_COLLECTION"]
713
+ puts " #{attr_name}: attr_value=#{attr_value.inspect}"
714
+ end
715
+
716
+ next if attr_value.nil? || Lutaml::Model::Utils.uninitialized?(attr_value)
717
+
718
+ # Serialize the attribute value
719
+ serialized_value = serialize_collection_item_value(attr_value,
720
+ attr_def, options)
721
+ if ENV["DEBUG_KEYED_COLLECTION"]
722
+ puts " serialized_value=#{serialized_value.inspect}"
723
+ end
724
+ unless serialized_value.nil?
725
+ item_hash[attr_name.to_s] =
726
+ serialized_value
727
+ end
728
+ end
729
+ end
730
+
731
+ if ENV["DEBUG_KEYED_COLLECTION"]
732
+ puts " item_hash: #{item_hash.inspect}"
733
+ end
734
+
735
+ # Add to keyed hash
736
+ keyed_hash[key_value.to_s] = item_hash unless item_hash.empty?
737
+ end
738
+ end
739
+
740
+ if ENV["DEBUG_KEYED_COLLECTION"]
741
+ puts " keyed_hash: #{keyed_hash.inspect}"
742
+ end
743
+
744
+ # Create element with hash value
745
+ element = Lutaml::KeyValue::DataModel::Element.new(
746
+ rule.serialized_name, keyed_hash
747
+ )
748
+
749
+ if ENV["DEBUG_KEYED_COLLECTION"]
750
+ puts " element created: key=#{element.key.inspect}, value=#{element.value.inspect}, children.count=#{element.children.count}"
751
+ puts " element.to_hash: #{element.to_hash.inspect}"
752
+ end
753
+
754
+ parent.add_child(element)
755
+ end
756
+
757
+ # Create an array collection element (default)
758
+ #
759
+ # @param parent [Lutaml::KeyValue::DataModel::Element] Parent element
760
+ # @param rule [CompiledRule] The rule
761
+ # @param items [Array] The collection items
762
+ # @param options [Hash] Options
763
+ def create_array_collection_element(parent, rule, items, options)
764
+ # Create an element for the collection
765
+ coll_element = Lutaml::KeyValue::DataModel::Element.new(rule.serialized_name)
766
+
767
+ if items.empty?
768
+ # For empty collections, set value to empty array explicitly
769
+ coll_element.value = []
770
+ else
771
+ # Add each item as a child
772
+ items.each do |item|
773
+ child_value = create_value_for_item(rule, item, options)
774
+ # Use explicit nil check - `if child_value` would fail for boolean false!
775
+ coll_element.add_child(child_value) unless child_value.nil?
776
+ end
777
+ end
778
+
779
+ # Always add collection element
780
+ parent.add_child(coll_element)
781
+ end
782
+
783
+ # Get the key attribute for a keyed collection from child_mappings
784
+ #
785
+ # @param child_mappings [Hash] The child mappings (e.g., { id: :key })
786
+ # @return [Symbol, nil] The attribute name to use as key, or nil
787
+ def keyed_collection_key_attribute(child_mappings)
788
+ return nil unless child_mappings
789
+
790
+ # Find the attribute mapped to :key
791
+ child_mappings.each do |attr_name, mapping|
792
+ return attr_name.to_sym if mapping == :key
793
+ end
794
+
795
+ nil
796
+ end
797
+
798
+ # Serialize a collection item value (for keyed collections)
799
+ #
800
+ # @param value [Object] The value to serialize
801
+ # @param attr_def [Attribute] The attribute definition
802
+ # @param options [Hash] Options
803
+ # @return [Object] The serialized value
804
+ def serialize_collection_item_value(value, attr_def, options)
805
+ return nil if value.nil? || Lutaml::Model::Utils.uninitialized?(value)
806
+
807
+ # Check if this is a collection attribute
808
+ attr_type = attr_def.type(register_id)
809
+ if attr_def.collection?
810
+ # For collections, check if it's a collection of Serialize models
811
+ if attr_type.is_a?(Class) && attr_type < Lutaml::Model::Serialize
812
+ # Create child transformation for the item type
813
+ mapping = attr_type.mappings_for(format, register_id)
814
+ child_transformation = self.class.new(attr_type, mapping, format,
815
+ register)
816
+
817
+ # Serialize each item in the collection
818
+ items = Array(value)
819
+ if items.empty?
820
+ []
821
+ else
822
+ # For keyed collections (with child_mappings), serialize as hash
823
+ # For regular collections, serialize as array
824
+ # We need to check if the mapping has child_mappings for this attribute
825
+ # Since we don't have direct access to the parent mapping here,
826
+ # serialize as array for now (default behavior)
827
+ items.map do |item|
828
+ child_root = child_transformation.transform(item, options)
829
+ child_hash = child_root.to_hash
830
+ child_hash["__root__"]
831
+ end
832
+ end
833
+ else
834
+ # Primitive collection - return as-is (already an array)
835
+ value
836
+ end
837
+ elsif attr_type.is_a?(Class) && attr_type < Lutaml::Model::Serialize
838
+ # Single value - check if it's a nested model
839
+ mapping = attr_type.mappings_for(format, register_id)
840
+ child_transformation = self.class.new(attr_type, mapping, format,
841
+ register)
842
+ child_root = child_transformation.transform(value,
843
+ options)
844
+ child_hash = child_root.to_hash
845
+ child_hash["__root__"]
846
+ # Use the transformation to serialize the nested model
847
+ elsif attr_type.is_a?(Class) && attr_type < Lutaml::Model::Type::Value
848
+ wrapped_value = attr_type.new(value)
849
+ wrapped_value.public_send(:"to_#{format}")
850
+ else
851
+ value
852
+ end
853
+ end
854
+
855
+ # Create a value element
856
+ #
857
+ # @param parent [Lutaml::KeyValue::DataModel::Element] Parent element
858
+ # @param rule [CompiledRule] The rule
859
+ # @param value [Object] The value
860
+ # @param options [Hash] Options
861
+ def create_value_element(parent, rule, value, options)
862
+ to_map = (rule.option(:value_map) || {})[:to] || {}
863
+
864
+ # Handle value_map conversions for nil/uninitialized/empty values.
865
+ # Skip logic (should_skip_value?) already filters omitted cases,
866
+ # so here we only handle render directives.
867
+ if value.nil?
868
+ nil_mapping = to_map[:nil]
869
+ case nil_mapping
870
+ when :omitted
871
+ return
872
+ when :nil
873
+ element = Lutaml::KeyValue::DataModel::Element.new(
874
+ rule.serialized_name, nil
875
+ )
876
+ parent.add_child(element)
877
+ return
878
+ when :empty
879
+ element = Lutaml::KeyValue::DataModel::Element.new(
880
+ rule.serialized_name, ""
881
+ )
882
+ parent.add_child(element)
883
+ return
884
+ end
885
+
886
+ # nil with no mapping → skip (default behavior)
887
+ return
888
+ elsif Lutaml::Model::Utils.uninitialized?(value)
889
+ omitted_mapping = to_map[:omitted]
890
+ if omitted_mapping == :nil
891
+ element = Lutaml::KeyValue::DataModel::Element.new(
892
+ rule.serialized_name, nil
893
+ )
894
+ parent.add_child(element)
895
+ return
896
+ elsif omitted_mapping == :empty
897
+ element = Lutaml::KeyValue::DataModel::Element.new(
898
+ rule.serialized_name, ""
899
+ )
900
+ parent.add_child(element)
901
+ return
902
+ end
903
+ # uninitialized with no/omitted mapping → skip (default behavior)
904
+ return
905
+ elsif Lutaml::Model::Utils.empty?(value)
906
+ empty_mapping = to_map[:empty]
907
+ if empty_mapping == :nil
908
+ element = Lutaml::KeyValue::DataModel::Element.new(
909
+ rule.serialized_name, nil
910
+ )
911
+ parent.add_child(element)
912
+ return
913
+ elsif empty_mapping == :omitted
914
+ return
915
+ end
916
+ # empty with :empty or no mapping → fall through to normal serialization
917
+ end
918
+
919
+ # Normal value serialization
920
+ child_value = create_value_for_item(rule, value, options)
921
+
922
+ unless child_value.nil?
923
+ element = Lutaml::KeyValue::DataModel::Element.new(
924
+ rule.serialized_name, child_value
925
+ )
926
+ parent.add_child(element)
927
+ end
928
+ end
929
+
930
+ # Create value for an item (handles nested models and primitives)
931
+ #
932
+ # @param rule [CompiledRule] The rule
933
+ # @param value [Object] The value
934
+ # @param options [Hash] Options
935
+ # @return [Object] The value (could be Hash, primitive, or KeyValueElement)
936
+ def create_value_for_item(rule, value, options)
937
+ return nil if value.nil?
938
+
939
+ # Check if this is a nested model
940
+ is_nested_model = rule.attribute_type.is_a?(Class) &&
941
+ rule.attribute_type < Lutaml::Model::Serialize
942
+
943
+ if is_nested_model
944
+ # Validate that value matches the expected type
945
+ # There are three valid cases:
946
+ # 1. attribute_type is a mapper class (has model method) and value is an instance of that model
947
+ # 2. attribute_type is a regular Serializable class and value is an instance of it (or subclass)
948
+ # 3. value's class is a registered type substitution for attribute_type
949
+ context = Lutaml::Model::GlobalContext.context(register_id)
950
+ subs = context.substitution_for(rule.attribute_type)
951
+ uses_type_substitution = subs.any? { |s| s.to_type == value.class }
952
+
953
+ if rule.attribute_type.is_a?(Class) && rule.attribute_type.include?(Lutaml::Model::Serialize) && rule.attribute_type.model
954
+ # Mapper class: value should be an instance of the mapped model
955
+ # or a valid substituted type
956
+ unless value.is_a?(rule.attribute_type.model) || uses_type_substitution
957
+ msg = "attribute '#{rule.attribute_name}' value is a '#{value.class}' but should be a '#{rule.attribute_type.model}'"
958
+ raise Lutaml::Model::IncorrectModelError, msg
959
+ end
960
+ else
961
+ # Regular Serializable class: value should be a Serialize instance
962
+ # or a valid substituted type
963
+ unless value.is_a?(Lutaml::Model::Serialize) || uses_type_substitution
964
+ msg = "attribute '#{rule.attribute_name}' value is a '#{value.class}' but should be a kind of 'Lutaml::Model::Serialize'"
965
+ raise Lutaml::Model::IncorrectModelError, msg
966
+ end
967
+ end
968
+
969
+ # Use the actual runtime type for polymorphism support
970
+ # If value is a subclass of the declared type, use its mappings instead
971
+ # Also handle type substitution the same way
972
+ actual_type = value.class
973
+ uses_polymorphism = (actual_type != rule.attribute_type &&
974
+ actual_type < rule.attribute_type) || uses_type_substitution
975
+
976
+ # Get child transformation - may be cached or need to create
977
+ child_transformation = rule.child_transformation
978
+
979
+ # If not cached (e.g., due to cycles) or using polymorphism, create it now
980
+ if !child_transformation || uses_polymorphism
981
+ # For polymorphic types, use the actual runtime type's mappings
982
+ type_for_mapping = uses_polymorphism ? actual_type : rule.attribute_type
983
+ mapping = type_for_mapping.mappings_for(format, register_id)
984
+ child_transformation = self.class.new(type_for_mapping, mapping,
985
+ format, register)
986
+ end
987
+
988
+ if child_transformation
989
+ child_root = child_transformation.transform(value, options)
990
+ # Return the hash representation of the child
991
+ # Remove the __root__ wrapper and return just the content
992
+ child_hash = child_root.to_hash
993
+ result = child_hash["__root__"]
994
+ # If the nested model serialized to empty hash, return nil
995
+ # This allows render_nil: false to work correctly for nested models
996
+ result.nil? || result.empty? ? nil : result
997
+ else
998
+ # Fallback: serialize as primitive
999
+ serialize_value(value, rule)
1000
+ end
1001
+ else
1002
+ # Serialize primitive value
1003
+ serialize_value(value, rule)
1004
+ end
1005
+ end
1006
+
1007
+ # Handle raw mapping (map_all directive)
1008
+ #
1009
+ # Raw mappings parse the stored content (JSON/YAML/TOML string) and merge it
1010
+ # directly into the parent element, rather than creating a child element.
1011
+ #
1012
+ # @param parent [Lutaml::KeyValue::DataModel::Element] Parent element
1013
+ # @param value [String] The raw content (JSON/YAML/TOML string)
1014
+ # @param options [Hash] Options
1015
+ def handle_raw_mapping(parent, value, options)
1016
+ return if value.nil? || Lutaml::Model::Utils.uninitialized?(value)
1017
+ return if Lutaml::Model::Utils.empty?(value)
1018
+
1019
+ # Get the adapter for the current format and parse the raw content
1020
+ adapter = Lutaml::Model::Config.adapter_for(format)
1021
+ parsed_content = adapter.parse(value, options)
1022
+
1023
+ # Merge the parsed content into the parent element
1024
+ # For each key-value pair in the parsed content, add as a child element
1025
+ if parsed_content.is_a?(::Hash)
1026
+ parsed_content.each do |key, val|
1027
+ element = Lutaml::KeyValue::DataModel::Element.new(key.to_s, val)
1028
+ parent.add_child(element)
1029
+ end
1030
+ elsif parsed_content.is_a?(::Array)
1031
+ # If the parsed content is an array, we can't merge it directly
1032
+ # This shouldn't happen with valid map_all usage, but handle it gracefully
1033
+ element = Lutaml::KeyValue::DataModel::Element.new("__root__",
1034
+ parsed_content)
1035
+ parent.add_child(element)
1036
+ end
1037
+ end
1038
+
1039
+ # Serialize a value to appropriate representation
1040
+ #
1041
+ # @param value [Object] The value to serialize
1042
+ # @param rule [CompiledRule] The rule
1043
+ # @return [Object] Serialized value
1044
+ def serialize_value(value, rule)
1045
+ return nil if value.nil?
1046
+ return nil if Lutaml::Model::Utils.uninitialized?(value)
1047
+
1048
+ # For Reference types, use attribute's serialize method which handles reference_key extraction
1049
+ # Check the attribute's unresolved_type to match the condition in Attribute#serialize
1050
+ # Try to get attribute from model_class (with register first, then without)
1051
+ attr = model_class.attributes(register_id)&.[](rule.attribute_name)
1052
+ attr ||= model_class.attributes&.[](rule.attribute_name)
1053
+
1054
+ if attr && attr.unresolved_type == Lutaml::Model::Type::Reference
1055
+ return attr.serialize(value, format, register_id, {})
1056
+ end
1057
+
1058
+ # Validate that value is an instance of the expected Serializable type
1059
+ # When attribute_type is a Serializable class, value must be an instance of that class
1060
+ if rule.attribute_type.is_a?(Class) && rule.attribute_type < Lutaml::Model::Serialize
1061
+ unless value.is_a?(rule.attribute_type)
1062
+ msg = "attribute '#{rule.attribute_name}' value is a '#{value.class}' but should be a '#{rule.attribute_type}'"
1063
+ raise Lutaml::Model::IncorrectModelError, msg
1064
+ end
1065
+
1066
+ # Value is a valid Serialize instance - serialize it using its own to_#{format} method
1067
+ return value.public_send(:"to_#{format}")
1068
+ end
1069
+
1070
+ # Wrap value in type and call to_#{format} instance method (like legacy Attribute#serialize_value)
1071
+ # This allows custom type subclasses to override to_json, to_yaml, etc.
1072
+ if rule.attribute_type.is_a?(Class) && rule.attribute_type < Lutaml::Model::Type::Value
1073
+ wrapped_value = rule.attribute_type.new(value)
1074
+ wrapped_value.public_send(:"to_#{format}")
1075
+ else
1076
+ value
1077
+ end
1078
+ end
1079
+ end
1080
+ end
1081
+ end