lutaml-model 0.7.7 → 0.8.0

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 (1573) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependent-tests.yml +4 -0
  3. data/.github/workflows/docs.yml +59 -0
  4. data/.github/workflows/downstream-performance.yml +156 -0
  5. data/.github/workflows/performance.yml +33 -0
  6. data/.github/workflows/rake.yml +13 -0
  7. data/.github/workflows/release.yml +5 -0
  8. data/.gitignore +27 -1
  9. data/.rubocop.yml +14 -2
  10. data/.rubocop_todo.yml +574 -88
  11. data/Gemfile +15 -9
  12. data/README.adoc +13522 -6905
  13. data/RELEASE_NOTES.adoc +51 -0
  14. data/Rakefile +2 -0
  15. data/bench/baselines/.gitkeep +0 -0
  16. data/bench/bench_all.rb +52 -0
  17. data/bench/bench_common.rb +147 -0
  18. data/bench/bench_compare.rb +195 -0
  19. data/bench/bench_mml.rb +53 -0
  20. data/bench/bench_niso.rb +54 -0
  21. data/bench/bench_sts.rb +49 -0
  22. data/bench/bench_unitsml.rb +43 -0
  23. data/bench/bench_uniword.rb +69 -0
  24. data/bench/bench_xmi.rb +51 -0
  25. data/bench/gate_config.rb +127 -0
  26. data/benchmark/quick_benchmark.rb +297 -0
  27. data/benchmark/serialization_benchmark.rb +619 -0
  28. data/docs/.rubocop.yml +1 -0
  29. data/docs/.rubocop_todo.yml +7 -0
  30. data/docs/Gemfile +13 -0
  31. data/docs/PERFORMANCE_METHODOLOGY.md +645 -0
  32. data/docs/_config.yml +145 -0
  33. data/docs/_guides/advanced-mapping.adoc +564 -0
  34. data/docs/_guides/character-encoding.adoc +342 -0
  35. data/docs/_guides/collection-serialization.adoc +349 -0
  36. data/docs/_guides/creating-xsd.adoc +1221 -0
  37. data/docs/_guides/index.adoc +71 -0
  38. data/docs/_guides/keyvalue-serialization.adoc +1156 -0
  39. data/docs/_guides/liquid-templates.adoc +505 -0
  40. data/docs/_guides/missing-values-handling.adoc +1531 -0
  41. data/docs/_guides/ooxml-examples.adoc +755 -0
  42. data/docs/{schema_generation.adoc → _guides/schema-generation.adoc} +5 -0
  43. data/docs/{schema_import.adoc → _guides/schema-import.adoc} +276 -4
  44. data/docs/_guides/value-transformations.adoc +1388 -0
  45. data/docs/_guides/xml/namespace-presentation.adoc +476 -0
  46. data/docs/_guides/xml/namespace-semantics.adoc +677 -0
  47. data/docs/_guides/xml/reusable-mapping-classes.adoc +181 -0
  48. data/docs/_guides/xml/schema-location.adoc +245 -0
  49. data/docs/_guides/xml/type-namespaces.adoc +1011 -0
  50. data/docs/_guides/xml-mapping.adoc +1847 -0
  51. data/docs/_guides/xml-mappings-guide.adoc +21 -0
  52. data/docs/_guides/xml-namespace-declarations.adoc +662 -0
  53. data/docs/_guides/xml-namespace-qualification.adoc +720 -0
  54. data/docs/_guides/xml-namespaces.adoc +2613 -0
  55. data/docs/_guides/xml_mappings/01_introduction.adoc +65 -0
  56. data/docs/_guides/xml_mappings/02_core_concepts.adoc +177 -0
  57. data/docs/_guides/xml_mappings/03_architecture.adoc +205 -0
  58. data/docs/_guides/xml_mappings/04_xml_namespace_class.adoc +1754 -0
  59. data/docs/_guides/xml_mappings/05_common_patterns.adoc +1803 -0
  60. data/docs/_guides/xml_mappings/06_migration_guide.adoc +523 -0
  61. data/docs/_guides/xml_mappings/07_best_practices.adoc +959 -0
  62. data/docs/_guides/xml_mappings/08_troubleshooting.adoc +934 -0
  63. data/docs/_migrations/0-1-0-migrate-from-shale.adoc +304 -0
  64. data/docs/_migrations/0-8-0-namespace-restructuring.adoc +1572 -0
  65. data/docs/_migrations/0-8-0-xsd-features.adoc +729 -0
  66. data/docs/_migrations/index.adoc +18 -0
  67. data/docs/_migrations/xsd-type-migration.adoc +1294 -0
  68. data/docs/_pages/attributes.adoc +1156 -0
  69. data/docs/_pages/breaking-changes.adoc +154 -0
  70. data/docs/_pages/collections.adoc +1664 -0
  71. data/docs/_pages/comparison-with-shale.adoc +139 -0
  72. data/docs/_pages/configuration.adoc +192 -0
  73. data/docs/_pages/consolidation-mapping.adoc +252 -0
  74. data/docs/_pages/importable_models.adoc +591 -0
  75. data/docs/_pages/index.adoc +46 -0
  76. data/docs/_pages/installation.adoc +35 -0
  77. data/docs/_pages/models.adoc +332 -0
  78. data/docs/_pages/quick-start.adoc +124 -0
  79. data/docs/_pages/serialization_adapters.adoc +268 -0
  80. data/docs/_pages/troubleshooting.adoc +104 -0
  81. data/docs/_pages/validation.adoc +171 -0
  82. data/docs/_pages/value_types.adoc +1514 -0
  83. data/docs/_pages/xml-conformance.adoc +143 -0
  84. data/docs/_references/architecture.adoc +189 -0
  85. data/docs/{custom_adapters.adoc → _references/custom_adapters.adoc} +6 -1
  86. data/docs/_references/custom_registers.adoc +1026 -0
  87. data/docs/_references/data-modeling-in-a-nutshell.adoc +207 -0
  88. data/docs/_references/format-independent-features.adoc +713 -0
  89. data/docs/_references/index.adoc +47 -0
  90. data/docs/_references/instance-serialization.adoc +120 -0
  91. data/docs/_references/lutaml-namespace-planning.md +120 -0
  92. data/docs/_references/parent-root-context.adoc +122 -0
  93. data/docs/_references/reference_type.adoc +302 -0
  94. data/docs/_references/serialization-model-mappings.adoc +102 -0
  95. data/docs/_references/three-phase-namespace-architecture.adoc +470 -0
  96. data/docs/_references/xml-w3c-namespace-qualification.adoc +66 -0
  97. data/docs/_references/xsd-generation-with-namespace-support.adoc +449 -0
  98. data/docs/_references/xsd-schema-parsing.adoc +1260 -0
  99. data/docs/_references/xsd-type-architecture.adoc +534 -0
  100. data/docs/_tutorials/basic-model-definition.adoc +157 -0
  101. data/docs/_tutorials/custom-types-tutorial.adoc +258 -0
  102. data/docs/_tutorials/first-json-serialization.adoc +192 -0
  103. data/docs/_tutorials/first-xml-serialization.adoc +223 -0
  104. data/docs/_tutorials/index.adoc +60 -0
  105. data/docs/_tutorials/lutaml-xml-architecture.adoc +1354 -0
  106. data/docs/_tutorials/polymorphic-models-tutorial.adoc +253 -0
  107. data/docs/_tutorials/schema-compiler-module-namespaces.adoc +497 -0
  108. data/docs/_tutorials/validation-basics.adoc +232 -0
  109. data/docs/_tutorials/working-with-collections.adoc +201 -0
  110. data/docs/_tutorials/xml-element-attribute-namespace-guide.adoc +279 -0
  111. data/docs/_tutorials/xml-namespaces-basics.adoc +315 -0
  112. data/docs/_tutorials/xml-schema-primer-style-guide.adoc +1394 -0
  113. data/docs/architecture.md +424 -0
  114. data/docs/bugreports/BUGREPORT_element_order_render_empty.md +99 -0
  115. data/docs/cli_compare.adoc +249 -0
  116. data/docs/collection_validation.adoc +366 -0
  117. data/docs/index.adoc +106 -0
  118. data/docs/key_value_data_model.adoc +1229 -0
  119. data/docs/model_transforms.adoc +769 -0
  120. data/docs/namespace-management.adoc +1051 -0
  121. data/docs/xml-schema-qualification.md +171 -0
  122. data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/document.rb +3 -4
  123. data/lib/lutaml/hash_format/adapter/mapping.rb +19 -0
  124. data/lib/lutaml/hash_format/adapter/mapping_rule.rb +9 -0
  125. data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/standard_adapter.rb +3 -3
  126. data/lib/lutaml/hash_format/adapter/transform.rb +9 -0
  127. data/lib/lutaml/hash_format/adapter.rb +13 -0
  128. data/lib/lutaml/hash_format/type/serializers.rb +24 -0
  129. data/lib/lutaml/hash_format.rb +25 -0
  130. data/lib/lutaml/{model/json → json/adapter}/document.rb +3 -3
  131. data/lib/lutaml/json/adapter/mapping.rb +19 -0
  132. data/lib/lutaml/json/adapter/mapping_rule.rb +9 -0
  133. data/lib/lutaml/json/adapter/multi_json_adapter.rb +38 -0
  134. data/lib/lutaml/json/adapter/oj_adapter.rb +38 -0
  135. data/lib/lutaml/json/adapter/standard_adapter.rb +36 -0
  136. data/lib/lutaml/json/adapter/transform.rb +9 -0
  137. data/lib/lutaml/json/adapter.rb +20 -0
  138. data/lib/lutaml/json/schema/json_schema.rb +62 -0
  139. data/lib/lutaml/json/schema.rb +9 -0
  140. data/lib/lutaml/json/type/serializers.rb +72 -0
  141. data/lib/lutaml/json.rb +58 -0
  142. data/lib/lutaml/{model/jsonl → jsonl/adapter}/document.rb +2 -2
  143. data/lib/lutaml/jsonl/adapter/mapping.rb +19 -0
  144. data/lib/lutaml/jsonl/adapter/mapping_rule.rb +9 -0
  145. data/lib/lutaml/{model/jsonl → jsonl/adapter}/standard_adapter.rb +5 -4
  146. data/lib/lutaml/jsonl/adapter/transform.rb +26 -0
  147. data/lib/lutaml/jsonl/adapter.rb +13 -0
  148. data/lib/lutaml/jsonl.rb +21 -0
  149. data/lib/lutaml/key_value/adapter/hash/document.rb +13 -0
  150. data/lib/lutaml/key_value/adapter/hash/mapping.rb +19 -0
  151. data/lib/lutaml/key_value/adapter/hash/mapping_rule.rb +9 -0
  152. data/lib/lutaml/key_value/adapter/hash/standard_adapter.rb +19 -0
  153. data/lib/lutaml/key_value/adapter/hash/transform.rb +10 -0
  154. data/lib/lutaml/key_value/adapter/hash.rb +15 -0
  155. data/lib/lutaml/key_value/adapter/json/document.rb +16 -0
  156. data/lib/lutaml/key_value/adapter/json/mapping.rb +24 -0
  157. data/lib/lutaml/key_value/adapter/json/mapping_rule.rb +14 -0
  158. data/lib/lutaml/key_value/adapter/json/multi_json_adapter.rb +43 -0
  159. data/lib/lutaml/key_value/adapter/json/oj_adapter.rb +43 -0
  160. data/lib/lutaml/key_value/adapter/json/standard_adapter.rb +41 -0
  161. data/lib/lutaml/key_value/adapter/json/transform.rb +14 -0
  162. data/lib/lutaml/key_value/adapter/json.rb +24 -0
  163. data/lib/lutaml/key_value/adapter/jsonl/document.rb +16 -0
  164. data/lib/lutaml/key_value/adapter/jsonl/mapping.rb +19 -0
  165. data/lib/lutaml/key_value/adapter/jsonl/mapping_rule.rb +9 -0
  166. data/lib/lutaml/key_value/adapter/jsonl/standard_adapter.rb +36 -0
  167. data/lib/lutaml/key_value/adapter/jsonl/transform.rb +26 -0
  168. data/lib/lutaml/key_value/adapter/jsonl.rb +17 -0
  169. data/lib/lutaml/key_value/adapter/toml/document.rb +13 -0
  170. data/lib/lutaml/key_value/adapter/toml/mapping.rb +28 -0
  171. data/lib/lutaml/key_value/adapter/toml/mapping_rule.rb +9 -0
  172. data/lib/lutaml/key_value/adapter/toml/toml_rb_adapter.rb +40 -0
  173. data/lib/lutaml/key_value/adapter/toml/tomlib_adapter.rb +46 -0
  174. data/lib/lutaml/key_value/adapter/toml/transform.rb +10 -0
  175. data/lib/lutaml/key_value/adapter/toml.rb +21 -0
  176. data/lib/lutaml/key_value/adapter/yaml/document.rb +12 -0
  177. data/lib/lutaml/key_value/adapter/yaml/mapping.rb +19 -0
  178. data/lib/lutaml/key_value/adapter/yaml/mapping_rule.rb +9 -0
  179. data/lib/lutaml/key_value/adapter/yaml/standard_adapter.rb +41 -0
  180. data/lib/lutaml/key_value/adapter/yaml/transform.rb +10 -0
  181. data/lib/lutaml/key_value/adapter/yaml.rb +17 -0
  182. data/lib/lutaml/key_value/adapter/yamls/document.rb +16 -0
  183. data/lib/lutaml/key_value/adapter/yamls/mapping.rb +19 -0
  184. data/lib/lutaml/key_value/adapter/yamls/mapping_rule.rb +9 -0
  185. data/lib/lutaml/key_value/adapter/yamls/standard_adapter.rb +37 -0
  186. data/lib/lutaml/key_value/adapter/yamls/transform.rb +26 -0
  187. data/lib/lutaml/key_value/adapter/yamls.rb +17 -0
  188. data/lib/lutaml/key_value/adapter.rb +14 -0
  189. data/lib/lutaml/key_value/data_model/element.rb +222 -0
  190. data/lib/lutaml/key_value/data_model.rb +14 -0
  191. data/lib/lutaml/{model/key_value_document.rb → key_value/document.rb} +2 -2
  192. data/lib/lutaml/{model/mapping/key_value_mapping.rb → key_value/mapping.rb} +81 -43
  193. data/lib/lutaml/{model/mapping/key_value_mapping_rule.rb → key_value/mapping_rule.rb} +9 -10
  194. data/lib/lutaml/{model/transform/key_value_transform.rb → key_value/transform.rb} +111 -65
  195. data/lib/lutaml/key_value/transformation/collection_serializer.rb +575 -0
  196. data/lib/lutaml/key_value/transformation/rule_compiler.rb +294 -0
  197. data/lib/lutaml/key_value/transformation/value_serializer.rb +268 -0
  198. data/lib/lutaml/key_value/transformation.rb +1071 -0
  199. data/lib/lutaml/key_value/transformation_builder.rb +30 -0
  200. data/lib/lutaml/key_value.rb +24 -0
  201. data/lib/lutaml/model/attribute.rb +515 -121
  202. data/lib/lutaml/model/attribute_validator.rb +288 -0
  203. data/lib/lutaml/model/cached_type_resolver/concurrent_map_cache.rb +46 -0
  204. data/lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb +51 -0
  205. data/lib/lutaml/model/cached_type_resolver.rb +144 -0
  206. data/lib/lutaml/model/choice.rb +230 -13
  207. data/lib/lutaml/model/cli.rb +75 -121
  208. data/lib/lutaml/model/collection.rb +510 -43
  209. data/lib/lutaml/model/collection_handler.rb +106 -0
  210. data/lib/lutaml/model/comparable_model.rb +11 -3
  211. data/lib/lutaml/model/comparable_nil.rb +0 -2
  212. data/lib/lutaml/model/compiled_rule.rb +208 -0
  213. data/lib/lutaml/model/config.rb +56 -88
  214. data/lib/lutaml/model/configuration.rb +323 -0
  215. data/lib/lutaml/model/consolidation/attribute_grouper.rb +44 -0
  216. data/lib/lutaml/model/consolidation/dispatcher.rb +45 -0
  217. data/lib/lutaml/model/consolidation/engine.rb +33 -0
  218. data/lib/lutaml/model/consolidation/pattern_chunker.rb +87 -0
  219. data/lib/lutaml/model/consolidation_map.rb +68 -0
  220. data/lib/lutaml/model/consolidation_rule/dispatch_block.rb +34 -0
  221. data/lib/lutaml/model/consolidation_rule/gather_rule.rb +17 -0
  222. data/lib/lutaml/model/consolidation_rule/pattern_content_rule.rb +15 -0
  223. data/lib/lutaml/model/consolidation_rule/pattern_element_rule.rb +17 -0
  224. data/lib/lutaml/model/consolidation_rule.rb +27 -0
  225. data/lib/lutaml/model/constants.rb +5 -3
  226. data/lib/lutaml/model/context_registry.rb +208 -0
  227. data/lib/lutaml/model/error/element_count_out_of_range_error.rb +13 -7
  228. data/lib/lutaml/model/error/format_adapter_not_specified_error.rb +25 -0
  229. data/lib/lutaml/model/error/invalid_attribute_type_error.rb +98 -0
  230. data/lib/lutaml/model/error/invalid_format_error.rb +11 -0
  231. data/lib/lutaml/model/error/liquid_class_not_found_error.rb +9 -0
  232. data/lib/lutaml/model/error/mapping_already_exists_error.rb +6 -0
  233. data/lib/lutaml/model/error/mapping_attribute_missing_error.rb +6 -0
  234. data/lib/lutaml/model/error/mapping_attribute_type_error.rb +6 -0
  235. data/lib/lutaml/model/error/mixed_content_collection_error.rb +17 -0
  236. data/lib/lutaml/model/error/no_attributes_defined_liquid_error.rb +9 -0
  237. data/lib/lutaml/model/error/no_mapping_found_error.rb +9 -0
  238. data/lib/lutaml/model/error/required_attribute_missing_error.rb +9 -0
  239. data/lib/lutaml/model/error/reverse_transform_block_not_defined_error.rb +6 -0
  240. data/lib/lutaml/model/error/reverse_transformation_declaration_error.rb +6 -0
  241. data/lib/lutaml/model/error/sorting_configuration_conflict_error.rb +9 -0
  242. data/lib/lutaml/model/error/transform_block_not_defined_error.rb +6 -0
  243. data/lib/lutaml/model/error/type.rb +17 -0
  244. data/lib/lutaml/model/error/undefined_attribute_error.rb +9 -0
  245. data/lib/lutaml/model/error/unknown_adapter_type_error.rb +82 -3
  246. data/lib/lutaml/model/error/unknown_type_error.rb +25 -2
  247. data/lib/lutaml/model/error/unresolvable_type_error.rb +27 -0
  248. data/lib/lutaml/model/error.rb +2 -33
  249. data/lib/lutaml/model/errors.rb +4 -2
  250. data/lib/lutaml/model/finalization_cache.rb +51 -0
  251. data/lib/lutaml/model/format_registry.rb +236 -2
  252. data/lib/lutaml/model/global_context.rb +446 -0
  253. data/lib/lutaml/model/global_register.rb +106 -5
  254. data/lib/lutaml/model/hash.rb +15 -0
  255. data/lib/lutaml/model/import_registry.rb +250 -0
  256. data/lib/lutaml/model/instrumentation.rb +304 -0
  257. data/lib/lutaml/model/json.rb +17 -13
  258. data/lib/lutaml/model/jsonl.rb +7 -13
  259. data/lib/lutaml/model/liquefiable.rb +100 -12
  260. data/lib/lutaml/model/liquid/mapping.rb +30 -0
  261. data/lib/lutaml/model/liquid.rb +9 -0
  262. data/lib/lutaml/model/mapping/listener.rb +124 -0
  263. data/lib/lutaml/model/mapping/mapping.rb +99 -1
  264. data/lib/lutaml/model/mapping/mapping_rule.rb +172 -17
  265. data/lib/lutaml/model/mapping/model_mapping.rb +133 -0
  266. data/lib/lutaml/model/mapping/model_mapping_rule.rb +57 -0
  267. data/lib/lutaml/model/mapping_hash.rb +3 -1
  268. data/lib/lutaml/model/model_transformer.rb +101 -0
  269. data/lib/lutaml/model/one_entry_cache.rb +57 -0
  270. data/lib/lutaml/model/organization.rb +29 -0
  271. data/lib/lutaml/model/register/model_tree_importer.rb +88 -0
  272. data/lib/lutaml/model/register/namespace_binding.rb +92 -0
  273. data/lib/lutaml/model/register.rb +500 -35
  274. data/lib/lutaml/model/registrable.rb +2 -0
  275. data/lib/lutaml/model/render_policy.rb +154 -0
  276. data/lib/lutaml/model/runtime_compatibility.rb +95 -0
  277. data/lib/lutaml/model/schema/base_schema.rb +1 -3
  278. data/lib/lutaml/model/schema/decorators/attribute.rb +3 -1
  279. data/lib/lutaml/model/schema/decorators/choices.rb +0 -2
  280. data/lib/lutaml/model/schema/decorators/class_definition.rb +4 -5
  281. data/lib/lutaml/model/schema/decorators/definition_collection.rb +7 -7
  282. data/lib/lutaml/model/schema/decorators.rb +15 -0
  283. data/lib/lutaml/model/schema/generator/definition.rb +4 -3
  284. data/lib/lutaml/model/schema/generator/definitions_collection.rb +4 -3
  285. data/lib/lutaml/model/schema/generator/properties_collection.rb +7 -5
  286. data/lib/lutaml/model/schema/generator/property.rb +5 -1
  287. data/lib/lutaml/model/schema/generator.rb +15 -0
  288. data/lib/lutaml/model/schema/helpers.rb +11 -0
  289. data/lib/lutaml/model/schema/json_schema.rb +9 -53
  290. data/lib/lutaml/model/schema/renderer.rb +19 -17
  291. data/lib/lutaml/model/schema/schema_builder/nokogiri.rb +41 -0
  292. data/lib/lutaml/model/schema/schema_builder/oga.rb +92 -0
  293. data/lib/lutaml/model/schema/shared_methods.rb +2 -2
  294. data/lib/lutaml/model/schema/xml_compiler/attribute.rb +33 -12
  295. data/lib/lutaml/model/schema/xml_compiler/attribute_group.rb +3 -1
  296. data/lib/lutaml/model/schema/xml_compiler/choice.rb +4 -2
  297. data/lib/lutaml/model/schema/xml_compiler/complex_type.rb +73 -36
  298. data/lib/lutaml/model/schema/xml_compiler/element.rb +18 -1
  299. data/lib/lutaml/model/schema/xml_compiler/group.rb +20 -4
  300. data/lib/lutaml/model/schema/xml_compiler/registry_generator.rb +127 -0
  301. data/lib/lutaml/model/schema/xml_compiler/restriction.rb +5 -2
  302. data/lib/lutaml/model/schema/xml_compiler/sequence.rb +6 -2
  303. data/lib/lutaml/model/schema/xml_compiler/simple_content.rb +7 -3
  304. data/lib/lutaml/model/schema/xml_compiler/simple_type.rb +127 -51
  305. data/lib/lutaml/model/schema/xml_compiler/xml_namespace_class.rb +110 -0
  306. data/lib/lutaml/model/schema/xml_compiler.rb +256 -82
  307. data/lib/lutaml/model/schema/yaml_schema.rb +10 -50
  308. data/lib/lutaml/model/schema.rb +49 -14
  309. data/lib/lutaml/model/schema_location.rb +12 -60
  310. data/lib/lutaml/model/sequence.rb +102 -30
  311. data/lib/lutaml/model/serializable.rb +1 -3
  312. data/lib/lutaml/model/serialization_adapter.rb +2 -0
  313. data/lib/lutaml/model/serialize/attribute_definition.rb +229 -0
  314. data/lib/lutaml/model/serialize/builder.rb +169 -0
  315. data/lib/lutaml/model/serialize/enum_handling.rb +124 -0
  316. data/lib/lutaml/model/serialize/format_conversion.rb +298 -0
  317. data/lib/lutaml/model/serialize/initialization.rb +308 -0
  318. data/lib/lutaml/model/serialize/model_import.rb +357 -0
  319. data/lib/lutaml/model/serialize/transformation_builder.rb +127 -0
  320. data/lib/lutaml/model/serialize/value_mapping.rb +200 -0
  321. data/lib/lutaml/model/serialize.rb +175 -580
  322. data/lib/lutaml/model/services/base.rb +2 -2
  323. data/lib/lutaml/model/services/default_value_resolver.rb +60 -0
  324. data/lib/lutaml/model/services/logger.rb +10 -7
  325. data/lib/lutaml/model/services/rule_value_extractor.rb +22 -36
  326. data/lib/lutaml/model/services/transformer.rb +50 -9
  327. data/lib/lutaml/model/services/type/validator/string.rb +3 -2
  328. data/lib/lutaml/model/services/type/validator/symbol.rb +30 -0
  329. data/lib/lutaml/model/services/type/validator.rb +5 -2
  330. data/lib/lutaml/model/services/type.rb +9 -0
  331. data/lib/lutaml/model/services/validator.rb +1 -3
  332. data/lib/lutaml/model/services.rb +12 -5
  333. data/lib/lutaml/model/store.rb +59 -0
  334. data/lib/lutaml/model/toml.rb +24 -18
  335. data/lib/lutaml/model/transform/xml_transform.rb +4 -227
  336. data/lib/lutaml/model/transform.rb +49 -17
  337. data/lib/lutaml/model/transformation.rb +84 -0
  338. data/lib/lutaml/model/transformation_builder.rb +55 -0
  339. data/lib/lutaml/model/transformation_registry.rb +314 -0
  340. data/lib/lutaml/model/type/base64_binary.rb +58 -0
  341. data/lib/lutaml/model/type/boolean.rb +9 -16
  342. data/lib/lutaml/model/type/date.rb +49 -9
  343. data/lib/lutaml/model/type/date_time.rb +30 -18
  344. data/lib/lutaml/model/type/decimal.rb +28 -9
  345. data/lib/lutaml/model/type/duration.rb +82 -0
  346. data/lib/lutaml/model/type/float.rb +12 -13
  347. data/lib/lutaml/model/type/hash.rb +10 -17
  348. data/lib/lutaml/model/type/hex_binary.rb +56 -0
  349. data/lib/lutaml/model/type/integer.rb +19 -1
  350. data/lib/lutaml/model/type/qname.rb +85 -0
  351. data/lib/lutaml/model/type/reference.rb +76 -0
  352. data/lib/lutaml/model/type/string.rb +18 -35
  353. data/lib/lutaml/model/type/symbol.rb +67 -0
  354. data/lib/lutaml/model/type/time.rb +19 -22
  355. data/lib/lutaml/model/type/time_without_date.rb +18 -18
  356. data/lib/lutaml/model/type/uninitialized_class_guard.rb +36 -0
  357. data/lib/lutaml/model/type/uri.rb +51 -0
  358. data/lib/lutaml/model/type/value.rb +52 -5
  359. data/lib/lutaml/model/type.rb +98 -13
  360. data/lib/lutaml/model/type_context.rb +279 -0
  361. data/lib/lutaml/model/type_registry.rb +165 -0
  362. data/lib/lutaml/model/type_resolver.rb +185 -0
  363. data/lib/lutaml/model/type_substitution.rb +117 -0
  364. data/lib/lutaml/model/uninitialized_class.rb +1 -1
  365. data/lib/lutaml/model/utils.rb +110 -9
  366. data/lib/lutaml/model/validation.rb +50 -7
  367. data/lib/lutaml/model/value_transformer.rb +25 -0
  368. data/lib/lutaml/model/version.rb +1 -1
  369. data/lib/lutaml/model/yaml.rb +7 -13
  370. data/lib/lutaml/model/yamls.rb +7 -13
  371. data/lib/lutaml/model.rb +227 -25
  372. data/lib/lutaml/{model/toml → toml/adapter}/document.rb +3 -4
  373. data/lib/lutaml/{model/toml → toml/adapter}/mapping.rb +7 -6
  374. data/lib/lutaml/toml/adapter/mapping_rule.rb +9 -0
  375. data/lib/lutaml/toml/adapter/toml_rb_adapter.rb +38 -0
  376. data/lib/lutaml/toml/adapter/tomlib_adapter.rb +54 -0
  377. data/lib/lutaml/toml/adapter/transform.rb +9 -0
  378. data/lib/lutaml/toml/adapter.rb +19 -0
  379. data/lib/lutaml/toml/type/serializers.rb +71 -0
  380. data/lib/lutaml/toml.rb +41 -0
  381. data/lib/lutaml/xml/adapter/adapter_helpers.rb +149 -0
  382. data/lib/lutaml/xml/adapter/base_adapter.rb +672 -0
  383. data/lib/lutaml/xml/adapter/namespace_data.rb +73 -0
  384. data/lib/lutaml/xml/adapter/nokogiri_adapter.rb +1115 -0
  385. data/lib/lutaml/xml/adapter/oga_adapter.rb +849 -0
  386. data/lib/lutaml/xml/adapter/ox_adapter.rb +891 -0
  387. data/lib/lutaml/xml/adapter/rexml_adapter.rb +869 -0
  388. data/lib/lutaml/xml/adapter/xml_serialization.rb +145 -0
  389. data/lib/lutaml/xml/adapter.rb +20 -0
  390. data/lib/lutaml/xml/adapter_element.rb +185 -0
  391. data/lib/lutaml/xml/adapter_loader.rb +53 -0
  392. data/lib/lutaml/xml/attribute_namespace_resolver.rb +139 -0
  393. data/lib/lutaml/xml/blank_namespace.rb +51 -0
  394. data/lib/lutaml/xml/blank_namespace_handler.rb +50 -0
  395. data/lib/lutaml/xml/builder/base.rb +215 -0
  396. data/lib/lutaml/xml/builder/nokogiri.rb +12 -0
  397. data/lib/lutaml/xml/builder/oga.rb +15 -0
  398. data/lib/lutaml/xml/builder/ox.rb +15 -0
  399. data/lib/lutaml/xml/builder/rexml.rb +15 -0
  400. data/lib/lutaml/xml/builder.rb +16 -0
  401. data/lib/lutaml/xml/configurable.rb +214 -0
  402. data/lib/lutaml/xml/data_model.rb +257 -0
  403. data/lib/lutaml/xml/decisions/decision.rb +103 -0
  404. data/lib/lutaml/xml/decisions/decision_context.rb +225 -0
  405. data/lib/lutaml/xml/decisions/decision_engine.rb +67 -0
  406. data/lib/lutaml/xml/decisions/decision_rule.rb +54 -0
  407. data/lib/lutaml/xml/decisions/element_prefix_resolver.rb +85 -0
  408. data/lib/lutaml/xml/decisions/rules/attribute_usage_rule.rb +37 -0
  409. data/lib/lutaml/xml/decisions/rules/default_preference_rule.rb +62 -0
  410. data/lib/lutaml/xml/decisions/rules/element_form_default_rule.rb +66 -0
  411. data/lib/lutaml/xml/decisions/rules/element_form_default_unqualified_rule.rb +73 -0
  412. data/lib/lutaml/xml/decisions/rules/element_form_option_rule.rb +83 -0
  413. data/lib/lutaml/xml/decisions/rules/explicit_option_rule.rb +57 -0
  414. data/lib/lutaml/xml/decisions/rules/format_preservation_rule.rb +74 -0
  415. data/lib/lutaml/xml/decisions/rules/hoisted_on_parent_rule.rb +60 -0
  416. data/lib/lutaml/xml/decisions/rules/inherit_from_parent_rule.rb +52 -0
  417. data/lib/lutaml/xml/decisions/rules/inherit_parent_prefix_rule.rb +69 -0
  418. data/lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb +54 -0
  419. data/lib/lutaml/xml/decisions/rules/reuse_parent_prefix_rule.rb +78 -0
  420. data/lib/lutaml/xml/decisions/rules/used_prefix_rule.rb +70 -0
  421. data/lib/lutaml/xml/decisions/rules.rb +39 -0
  422. data/lib/lutaml/xml/decisions.rb +15 -0
  423. data/lib/lutaml/xml/declaration_handler.rb +217 -0
  424. data/lib/lutaml/xml/declaration_plan/attribute_node.rb +81 -0
  425. data/lib/lutaml/xml/declaration_plan/element_node.rb +101 -0
  426. data/lib/lutaml/xml/declaration_plan.rb +480 -0
  427. data/lib/lutaml/xml/declaration_plan_query.rb +105 -0
  428. data/lib/lutaml/xml/declaration_planner.rb +1849 -0
  429. data/lib/lutaml/xml/doctype_extractor.rb +51 -0
  430. data/lib/lutaml/xml/document.rb +380 -0
  431. data/lib/lutaml/xml/element.rb +93 -0
  432. data/lib/lutaml/xml/element_prefix_resolver.rb +50 -0
  433. data/lib/lutaml/xml/encoding_normalizer.rb +54 -0
  434. data/lib/lutaml/xml/error/invalid_namespace_error.rb +46 -0
  435. data/lib/lutaml/xml/error/invalid_xsd_type_error.rb +43 -0
  436. data/lib/lutaml/xml/error/namespace_mismatch_error.rb +53 -0
  437. data/lib/lutaml/xml/error/xml_configuration_error.rb +17 -0
  438. data/lib/lutaml/xml/error/xml_error.rb +21 -0
  439. data/lib/lutaml/xml/format_chooser.rb +214 -0
  440. data/lib/lutaml/xml/hoisting_algorithm.rb +234 -0
  441. data/lib/lutaml/xml/listener.rb +33 -0
  442. data/lib/lutaml/xml/mapping.rb +1470 -0
  443. data/lib/lutaml/xml/mapping_rule.rb +565 -0
  444. data/lib/lutaml/xml/model_transform.rb +944 -0
  445. data/lib/lutaml/xml/namespace.rb +435 -0
  446. data/lib/lutaml/xml/namespace_class_registry.rb +144 -0
  447. data/lib/lutaml/xml/namespace_collector.rb +611 -0
  448. data/lib/lutaml/xml/namespace_declaration.rb +202 -0
  449. data/lib/lutaml/xml/namespace_declaration_builder.rb +67 -0
  450. data/lib/lutaml/xml/namespace_declaration_data.rb +182 -0
  451. data/lib/lutaml/xml/namespace_inheritance_resolver.rb +142 -0
  452. data/lib/lutaml/xml/namespace_inheritance_strategy.rb +26 -0
  453. data/lib/lutaml/xml/namespace_needs.rb +213 -0
  454. data/lib/lutaml/xml/namespace_resolution_strategy.rb +230 -0
  455. data/lib/lutaml/xml/namespace_resolver.rb +219 -0
  456. data/lib/lutaml/xml/namespace_scope_config.rb +109 -0
  457. data/lib/lutaml/xml/namespace_type_resolver.rb +135 -0
  458. data/lib/lutaml/xml/namespace_usage.rb +121 -0
  459. data/lib/lutaml/xml/nokogiri/element.rb +34 -0
  460. data/lib/lutaml/xml/nokogiri.rb +10 -0
  461. data/lib/lutaml/xml/oga/element.rb +15 -0
  462. data/lib/lutaml/xml/oga.rb +10 -0
  463. data/lib/lutaml/xml/ox/element.rb +15 -0
  464. data/lib/lutaml/xml/ox.rb +10 -0
  465. data/lib/lutaml/xml/parsed_namespace_declaration.rb +129 -0
  466. data/lib/lutaml/xml/parsed_namespace_set.rb +149 -0
  467. data/lib/lutaml/xml/polymorphic_value_handler.rb +41 -0
  468. data/lib/lutaml/xml/qualified_inheritance_strategy.rb +27 -0
  469. data/lib/lutaml/xml/rexml/element.rb +15 -0
  470. data/lib/lutaml/xml/rexml.rb +10 -0
  471. data/lib/lutaml/xml/schema/builder/nokogiri.rb +41 -0
  472. data/lib/lutaml/xml/schema/builder/oga.rb +92 -0
  473. data/lib/lutaml/xml/schema/builder.rb +59 -0
  474. data/lib/lutaml/xml/schema/builtin_types.rb +112 -0
  475. data/lib/lutaml/{model → xml}/schema/relaxng_schema.rb +9 -4
  476. data/lib/lutaml/xml/schema/xsd/all.rb +31 -0
  477. data/lib/lutaml/xml/schema/xsd/annotation.rb +31 -0
  478. data/lib/lutaml/xml/schema/xsd/any.rb +33 -0
  479. data/lib/lutaml/xml/schema/xsd/any_attribute.rb +29 -0
  480. data/lib/lutaml/xml/schema/xsd/appinfo.rb +25 -0
  481. data/lib/lutaml/xml/schema/xsd/attribute.rb +78 -0
  482. data/lib/lutaml/xml/schema/xsd/attribute_group.rb +89 -0
  483. data/lib/lutaml/xml/schema/xsd/base.rb +267 -0
  484. data/lib/lutaml/xml/schema/xsd/choice.rb +68 -0
  485. data/lib/lutaml/xml/schema/xsd/complex_content.rb +39 -0
  486. data/lib/lutaml/xml/schema/xsd/complex_type.rb +157 -0
  487. data/lib/lutaml/xml/schema/xsd/documentation.rb +26 -0
  488. data/lib/lutaml/xml/schema/xsd/element.rb +117 -0
  489. data/lib/lutaml/xml/schema/xsd/enumeration.rb +25 -0
  490. data/lib/lutaml/xml/schema/xsd/errors/enhanced_error.rb +142 -0
  491. data/lib/lutaml/xml/schema/xsd/errors/error_context.rb +67 -0
  492. data/lib/lutaml/xml/schema/xsd/errors/message_builder.rb +103 -0
  493. data/lib/lutaml/xml/schema/xsd/errors/suggestion.rb +67 -0
  494. data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/namespace_troubleshooter.rb +96 -0
  495. data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/troubleshooting_handler.rb +70 -0
  496. data/lib/lutaml/xml/schema/xsd/errors.rb +148 -0
  497. data/lib/lutaml/xml/schema/xsd/extension_complex_content.rb +63 -0
  498. data/lib/lutaml/xml/schema/xsd/extension_simple_content.rb +48 -0
  499. data/lib/lutaml/xml/schema/xsd/field.rb +25 -0
  500. data/lib/lutaml/xml/schema/xsd/file_validation_result.rb +55 -0
  501. data/lib/lutaml/xml/schema/xsd/fraction_digits.rb +29 -0
  502. data/lib/lutaml/xml/schema/xsd/glob.rb +105 -0
  503. data/lib/lutaml/xml/schema/xsd/group.rb +79 -0
  504. data/lib/lutaml/xml/schema/xsd/import.rb +33 -0
  505. data/lib/lutaml/xml/schema/xsd/include.rb +31 -0
  506. data/lib/lutaml/xml/schema/xsd/key.rb +32 -0
  507. data/lib/lutaml/xml/schema/xsd/keyref.rb +33 -0
  508. data/lib/lutaml/xml/schema/xsd/length.rb +27 -0
  509. data/lib/lutaml/xml/schema/xsd/list.rb +28 -0
  510. data/lib/lutaml/xml/schema/xsd/max_exclusive.rb +25 -0
  511. data/lib/lutaml/xml/schema/xsd/max_inclusive.rb +23 -0
  512. data/lib/lutaml/xml/schema/xsd/max_length.rb +25 -0
  513. data/lib/lutaml/xml/schema/xsd/min_exclusive.rb +25 -0
  514. data/lib/lutaml/xml/schema/xsd/min_inclusive.rb +23 -0
  515. data/lib/lutaml/xml/schema/xsd/min_length.rb +25 -0
  516. data/lib/lutaml/xml/schema/xsd/namespace_mapping.rb +37 -0
  517. data/lib/lutaml/xml/schema/xsd/namespace_uri_remapping.rb +79 -0
  518. data/lib/lutaml/xml/schema/xsd/notation.rb +31 -0
  519. data/lib/lutaml/xml/schema/xsd/pattern.rb +25 -0
  520. data/lib/lutaml/xml/schema/xsd/redefine.rb +35 -0
  521. data/lib/lutaml/xml/schema/xsd/restriction_complex_content.rb +56 -0
  522. data/lib/lutaml/xml/schema/xsd/restriction_simple_content.rb +84 -0
  523. data/lib/lutaml/xml/schema/xsd/restriction_simple_type.rb +64 -0
  524. data/lib/lutaml/xml/schema/xsd/schema.rb +373 -0
  525. data/lib/lutaml/xml/schema/xsd/schema_file_validation_results.rb +55 -0
  526. data/lib/lutaml/xml/schema/xsd/schema_location_mapping.rb +74 -0
  527. data/lib/lutaml/xml/schema/xsd/schema_name_resolver.rb +32 -0
  528. data/lib/lutaml/xml/schema/xsd/schema_path.rb +196 -0
  529. data/lib/lutaml/xml/schema/xsd/schema_validator.rb +256 -0
  530. data/lib/lutaml/xml/schema/xsd/selector.rb +27 -0
  531. data/lib/lutaml/xml/schema/xsd/sequence.rb +68 -0
  532. data/lib/lutaml/xml/schema/xsd/serialized_schema.rb +185 -0
  533. data/lib/lutaml/xml/schema/xsd/simple_content.rb +61 -0
  534. data/lib/lutaml/xml/schema/xsd/simple_type.rb +37 -0
  535. data/lib/lutaml/xml/schema/xsd/total_digits.rb +29 -0
  536. data/lib/lutaml/xml/schema/xsd/type_index_entry.rb +40 -0
  537. data/lib/lutaml/xml/schema/xsd/type_resolution_result.rb +112 -0
  538. data/lib/lutaml/xml/schema/xsd/union.rb +30 -0
  539. data/lib/lutaml/xml/schema/xsd/unique.rb +31 -0
  540. data/lib/lutaml/xml/schema/xsd/validation_error.rb +48 -0
  541. data/lib/lutaml/xml/schema/xsd/validation_result.rb +86 -0
  542. data/lib/lutaml/xml/schema/xsd/version.rb +11 -0
  543. data/lib/lutaml/xml/schema/xsd/white_space.rb +27 -0
  544. data/lib/lutaml/xml/schema/xsd.rb +165 -0
  545. data/lib/lutaml/xml/schema/xsd_namespace.rb +29 -0
  546. data/lib/lutaml/xml/schema/xsd_schema.rb +536 -0
  547. data/lib/lutaml/xml/schema.rb +13 -0
  548. data/lib/lutaml/xml/schema_location.rb +155 -0
  549. data/lib/lutaml/xml/serialization/collection_ext.rb +61 -0
  550. data/lib/lutaml/xml/serialization/format_conversion.rb +402 -0
  551. data/lib/lutaml/xml/serialization/instance_methods.rb +297 -0
  552. data/lib/lutaml/xml/serialization/model_import_ext.rb +40 -0
  553. data/lib/lutaml/xml/serialization.rb +15 -0
  554. data/lib/lutaml/xml/shared_dsl.rb +119 -0
  555. data/lib/lutaml/xml/transform.rb +6 -0
  556. data/lib/lutaml/xml/transformation/custom_method_wrapper.rb +262 -0
  557. data/lib/lutaml/xml/transformation/element_builder.rb +586 -0
  558. data/lib/lutaml/xml/transformation/ordered_applier.rb +329 -0
  559. data/lib/lutaml/xml/transformation/rule_applier.rb +379 -0
  560. data/lib/lutaml/xml/transformation/rule_compiler.rb +543 -0
  561. data/lib/lutaml/xml/transformation/skip_logic.rb +70 -0
  562. data/lib/lutaml/xml/transformation/value_serializer.rb +139 -0
  563. data/lib/lutaml/xml/transformation.rb +340 -0
  564. data/lib/lutaml/xml/transformation_builder.rb +28 -0
  565. data/lib/lutaml/xml/transformation_support.rb +14 -0
  566. data/lib/lutaml/xml/type/configurable.rb +157 -0
  567. data/lib/lutaml/xml/type/serializers.rb +98 -0
  568. data/lib/lutaml/xml/type/value_xml_mapping.rb +94 -0
  569. data/lib/lutaml/xml/type_namespace/collector.rb +101 -0
  570. data/lib/lutaml/xml/type_namespace/declaration.rb +61 -0
  571. data/lib/lutaml/xml/type_namespace/planner.rb +121 -0
  572. data/lib/lutaml/xml/type_namespace/reference.rb +71 -0
  573. data/lib/lutaml/xml/type_namespace/resolver.rb +43 -0
  574. data/lib/lutaml/xml/type_namespace.rb +13 -0
  575. data/lib/lutaml/xml/type_namespace_resolver.rb +76 -0
  576. data/lib/lutaml/xml/unqualified_inheritance_strategy.rb +34 -0
  577. data/lib/lutaml/xml/w3c/registration.rb +66 -0
  578. data/lib/lutaml/xml/w3c.rb +398 -0
  579. data/lib/lutaml/xml/xml_attribute.rb +38 -0
  580. data/lib/lutaml/xml/xml_element.rb +447 -0
  581. data/lib/lutaml/xml/xml_namespace.rb +72 -0
  582. data/lib/lutaml/xml.rb +295 -0
  583. data/lib/lutaml/{model/yaml → yaml/adapter}/document.rb +3 -3
  584. data/lib/lutaml/yaml/adapter/mapping.rb +19 -0
  585. data/lib/lutaml/yaml/adapter/mapping_rule.rb +9 -0
  586. data/lib/lutaml/yaml/adapter/standard_adapter.rb +39 -0
  587. data/lib/lutaml/yaml/adapter/transform.rb +9 -0
  588. data/lib/lutaml/yaml/adapter.rb +13 -0
  589. data/lib/lutaml/yaml/schema/yaml_schema.rb +65 -0
  590. data/lib/lutaml/yaml/schema.rb +9 -0
  591. data/lib/lutaml/yaml/type/serializers.rb +60 -0
  592. data/lib/lutaml/yaml.rb +26 -0
  593. data/lib/lutaml/{model/yamls → yamls/adapter}/document.rb +2 -2
  594. data/lib/lutaml/yamls/adapter/mapping.rb +19 -0
  595. data/lib/lutaml/yamls/adapter/mapping_rule.rb +9 -0
  596. data/lib/lutaml/{model/yamls → yamls/adapter}/standard_adapter.rb +6 -5
  597. data/lib/lutaml/yamls/adapter/transform.rb +26 -0
  598. data/lib/lutaml/yamls/adapter.rb +13 -0
  599. data/lib/lutaml/yamls.rb +21 -0
  600. data/lib/tasks/benchmark_runner.rb +161 -0
  601. data/lib/tasks/memory_profile.rb +176 -0
  602. data/lib/tasks/performance.rake +75 -0
  603. data/lib/tasks/performance_benchmark.rb +499 -0
  604. data/lib/tasks/performance_comparator.rb +114 -0
  605. data/lib/tasks/performance_helpers.rb +149 -0
  606. data/lib/tasks/xml_compiler_benchmark.rb +226 -0
  607. data/lib/tasks/xml_optimization_benchmark.rb +178 -0
  608. data/lutaml-model.gemspec +11 -1
  609. data/reference-docs/XML Entity Definitions for Characters (3rd Edition).html +595 -0
  610. data/scripts-xmi-profile/profile_xmi.rb +192 -0
  611. data/scripts-xmi-profile/profile_xmi_simple.rb +210 -0
  612. data/spec/address_person_spec.rb +436 -0
  613. data/spec/address_spec.rb +20 -18
  614. data/spec/ceramic_spec.rb +25 -7
  615. data/spec/fixtures/address.rb +2 -2
  616. data/spec/fixtures/ceramic.rb +6 -2
  617. data/spec/fixtures/person.rb +14 -13
  618. data/spec/fixtures/sample_model.rb +3 -3
  619. data/spec/fixtures/vase.rb +3 -3
  620. data/spec/fixtures/xml/address_example_260.xsd +8 -4
  621. data/spec/fixtures/xml/examples/nested_categories.xml +45 -51
  622. data/spec/fixtures/xml/examples/valid_catalog.xml +27 -41
  623. data/spec/fixtures/xml/math_document_schema.xsd +7 -5
  624. data/spec/fixtures/xml/product_catalog.xsd +19 -138
  625. data/spec/fixtures/xml/schema/xsd/build_test_package.rb +19 -0
  626. data/spec/fixtures/xml/schema/xsd/citygml/2.0/cityGMLBase.xsd +339 -0
  627. data/spec/fixtures/xml/schema/xsd/citygml/appearance/2.0/appearance.xsd +332 -0
  628. data/spec/fixtures/xml/schema/xsd/citygml/bridge/2.0/bridge.xsd +578 -0
  629. data/spec/fixtures/xml/schema/xsd/citygml/building/2.0/building.xsd +535 -0
  630. data/spec/fixtures/xml/schema/xsd/citygml/cityfurniture/2.0/cityFurniture.xsd +57 -0
  631. data/spec/fixtures/xml/schema/xsd/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd +84 -0
  632. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/noise-ade/CityGML-NoiseADE.xsd +174 -0
  633. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/stdOp.xsd +46 -0
  634. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/unr.xsd +46 -0
  635. data/spec/fixtures/xml/schema/xsd/citygml/generics/2.0/generics.xsd +184 -0
  636. data/spec/fixtures/xml/schema/xsd/citygml/landuse/2.0/landUse.xsd +50 -0
  637. data/spec/fixtures/xml/schema/xsd/citygml/profiles/base/2.0/CityGML.xsd +30 -0
  638. data/spec/fixtures/xml/schema/xsd/citygml/relief/2.0/relief.xsd +186 -0
  639. data/spec/fixtures/xml/schema/xsd/citygml/texturedsurface/2.0/texturedSurface.xsd +157 -0
  640. data/spec/fixtures/xml/schema/xsd/citygml/transportation/2.0/transportation.xsd +224 -0
  641. data/spec/fixtures/xml/schema/xsd/citygml/tunnel/2.0/tunnel.xsd +530 -0
  642. data/spec/fixtures/xml/schema/xsd/citygml/vegetation/2.0/vegetation.xsd +108 -0
  643. data/spec/fixtures/xml/schema/xsd/citygml/waterbody/2.0/waterBody.xsd +171 -0
  644. data/spec/fixtures/xml/schema/xsd/citygml/xAL/xAL.xsd +1680 -0
  645. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/basicTypes.xsd +262 -0
  646. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateOperations.xsd +519 -0
  647. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateReferenceSystems.xsd +367 -0
  648. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateSystems.xsd +291 -0
  649. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coverage.xsd +287 -0
  650. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/datums.xsd +281 -0
  651. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/defaultStyle.xsd +447 -0
  652. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/deprecatedTypes.xsd +1128 -0
  653. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dictionary.xsd +84 -0
  654. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/direction.xsd +78 -0
  655. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dynamicFeature.xsd +103 -0
  656. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/feature.xsd +88 -0
  657. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryAggregates.xsd +191 -0
  658. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic0d1d.xsd +271 -0
  659. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic2d.xsd +118 -0
  660. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryComplexes.xsd +89 -0
  661. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryPrimitives.xsd +841 -0
  662. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gml.xsd +15 -0
  663. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gmlBase.xsd +179 -0
  664. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/grids.xsd +58 -0
  665. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/measures.xsd +63 -0
  666. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/observation.xsd +90 -0
  667. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/referenceSystems.xsd +64 -0
  668. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporal.xsd +263 -0
  669. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalReferenceSystems.xsd +183 -0
  670. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalTopology.xsd +113 -0
  671. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/topology.xsd +380 -0
  672. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/units.xsd +156 -0
  673. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/valueObjects.xsd +199 -0
  674. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/basicTypes.xsd +429 -0
  675. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gco.xsd +12 -0
  676. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gcoBase.xsd +61 -0
  677. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/applicationSchema.xsd +42 -0
  678. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/citation.xsd +275 -0
  679. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/constraints.xsd +106 -0
  680. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/content.xsd +188 -0
  681. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/dataQuality.xsd +554 -0
  682. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/distribution.xsd +202 -0
  683. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/extent.xsd +205 -0
  684. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/freeText.xsd +122 -0
  685. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/gmd.xsd +12 -0
  686. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/identification.xsd +348 -0
  687. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/maintenance.xsd +86 -0
  688. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataApplication.xsd +175 -0
  689. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataEntity.xsd +70 -0
  690. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataExtension.xsd +99 -0
  691. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/portrayalCatalogue.xsd +36 -0
  692. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/referenceSystem.xsd +100 -0
  693. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/spatialRepresentation.xsd +237 -0
  694. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/catalogues.xsd +112 -0
  695. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/codelistItem.xsd +168 -0
  696. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/crsItem.xsd +1030 -0
  697. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/extendedTypes.xsd +75 -0
  698. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmx.xsd +2 -0
  699. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmxUsage.xsd +127 -0
  700. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/uomItem.xsd +162 -0
  701. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/gsr.xsd +12 -0
  702. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/spatialReferencing.xsd +24 -0
  703. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/geometry.xsd +35 -0
  704. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/gss.xsd +12 -0
  705. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/gts.xsd +12 -0
  706. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/temporalObjects.xsd +34 -0
  707. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/xlink/1.0.0/xlinks.xsd +122 -0
  708. data/spec/fixtures/xml/schema/xsd/i-ur/urbanFunction.xsd +2772 -0
  709. data/spec/fixtures/xml/schema/xsd/i-ur/urbanObject.xsd +3344 -0
  710. data/spec/fixtures/xml/schema/xsd/import-without-location.xsd +9 -0
  711. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/baseTypes.xsd +775 -0
  712. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/gco.xsd +17 -0
  713. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/baseTypes.xsd +775 -0
  714. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/gco.xsd +17 -0
  715. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/extendedTypes.xsd +151 -0
  716. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/gcx.xsd +16 -0
  717. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/extendedTypes.xsd +151 -0
  718. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/gcx.xsd +16 -0
  719. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/coordinateGeometry.xsd +1078 -0
  720. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricAggregates.xsd +141 -0
  721. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricComplex.xsd +177 -0
  722. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricPrimative.xsd +526 -0
  723. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometry.xsd +9 -0
  724. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometryRoot.xsd +59 -0
  725. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/gss.xsd +26 -0
  726. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoComplex.xsd +33 -0
  727. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoPrimative.xsd +432 -0
  728. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoRoot.xsd +9 -0
  729. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topology.xsd +15 -0
  730. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/coordinates.xsd +15 -0
  731. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/curves.xsd +22 -0
  732. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/geometry.xsd +41 -0
  733. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/gss.xsd +21 -0
  734. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/simplicialGeometry.xsd +63 -0
  735. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/solids.xsd +21 -0
  736. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/surfaces.xsd +15 -0
  737. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/topology.xsd +21 -0
  738. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/abstract.xsd +47 -0
  739. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/fcc.xsd +12 -0
  740. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/abstract.xsd +45 -0
  741. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/fcc.xsd +11 -0
  742. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/abstract.xsd +45 -0
  743. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/fcc.xsd +11 -0
  744. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/1.0/gfc.xsd +497 -0
  745. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/featureCatalogue.xsd +673 -0
  746. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/gfc.xsd +19 -0
  747. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/featureCatalogue.xsd +798 -0
  748. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/gfc.xsd +19 -0
  749. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/featureCatalogue.xsd +798 -0
  750. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/gfc.xsd +19 -0
  751. data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/abstract.xsd +49 -0
  752. data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/fcc.xsd +9 -0
  753. data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/featureCatalogue.xsd +671 -0
  754. data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/gfc.xsd +13 -0
  755. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbc.xsd +13 -0
  756. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbcStubs.xsd +195 -0
  757. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbc.xsd +13 -0
  758. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbcStubs.xsd +195 -0
  759. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/AbstractCommonClasses.xsd +282 -0
  760. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/commonClasses.xsd +127 -0
  761. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordOps.xsd +676 -0
  762. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordRefSys.xsd +498 -0
  763. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordSys.xsd +844 -0
  764. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordinates.xsd +101 -0
  765. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/datum.xsd +474 -0
  766. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/rbc.xsd +18 -0
  767. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/cit.xsd +12 -0
  768. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/citation.xsd +445 -0
  769. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/cit.xsd +12 -0
  770. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/citation.xsd +445 -0
  771. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/extent.xsd +243 -0
  772. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/gex.xsd +16 -0
  773. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/extent.xsd +243 -0
  774. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/gex.xsd +16 -0
  775. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/extent.xsd +244 -0
  776. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/gex.xsd +15 -0
  777. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/lan.xsd +13 -0
  778. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/language.xsd +152 -0
  779. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/lan.xsd +13 -0
  780. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/language.xsd +152 -0
  781. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/applicationSchema.xsd +58 -0
  782. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/mas.xsd +16 -0
  783. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/applicationSchema.xsd +58 -0
  784. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/mas.xsd +16 -0
  785. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/AbstractCommonClasses.xsd +378 -0
  786. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/commonClasses.xsd +205 -0
  787. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/mcc.xsd +12 -0
  788. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/AbstractCommonClasses.xsd +378 -0
  789. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/commonClasses.xsd +205 -0
  790. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/mcc.xsd +12 -0
  791. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/constraints.xsd +171 -0
  792. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/mco.xsd +14 -0
  793. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/constraints.xsd +171 -0
  794. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/mco.xsd +14 -0
  795. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/mda.xsd +13 -0
  796. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/metadataApplication.xsd +207 -0
  797. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/mda.xsd +13 -0
  798. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/metadataApplication.xsd +207 -0
  799. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/mda.xsd +13 -0
  800. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/metadataApplication.xsd +247 -0
  801. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/mdb.xsd +11 -0
  802. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBase.xsd +117 -0
  803. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBaseMDAerror.xsd +116 -0
  804. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/mdb.xsd +11 -0
  805. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBase.xsd +117 -0
  806. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBaseMDAerror.xsd +116 -0
  807. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/mdb.xsd +11 -0
  808. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/metadataBase.xsd +144 -0
  809. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/metadataExtension.xsd +138 -0
  810. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/mex.xsd +15 -0
  811. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/metadataExtension.xsd +138 -0
  812. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/mex.xsd +15 -0
  813. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/maintenance.xsd +70 -0
  814. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/mmi.xsd +14 -0
  815. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/maintenance.xsd +70 -0
  816. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/mmi.xsd +14 -0
  817. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/mpc.xsd +14 -0
  818. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/portrayalCatalogue.xsd +40 -0
  819. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/mpc.xsd +14 -0
  820. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/portrayalCatalogue.xsd +40 -0
  821. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/content.xsd +368 -0
  822. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/mrc.xsd +19 -0
  823. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/content.xsd +368 -0
  824. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/mrc.xsd +19 -0
  825. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/content.xsd +366 -0
  826. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/mrc.xsd +13 -0
  827. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/distribution.xsd +232 -0
  828. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/mrd.xsd +13 -0
  829. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/distribution.xsd +232 -0
  830. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/mrd.xsd +13 -0
  831. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/identification.xsd +425 -0
  832. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/mri.xsd +16 -0
  833. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/identification.xsd +425 -0
  834. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/mri.xsd +16 -0
  835. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/lineage.xsd +130 -0
  836. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/mrl.xsd +15 -0
  837. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/lineage.xsd +130 -0
  838. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/mrl.xsd +15 -0
  839. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/mrs.xsd +16 -0
  840. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/referenceSystem.xsd +67 -0
  841. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/mrs.xsd +16 -0
  842. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/referenceSystem.xsd +67 -0
  843. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/mrs.xsd +16 -0
  844. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/referenceSystem.xsd +66 -0
  845. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/msr.xsd +17 -0
  846. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/spatialRepresentation.xsd +326 -0
  847. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/msr.xsd +17 -0
  848. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/spatialRepresentation.xsd +326 -0
  849. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/msr.xsd +15 -0
  850. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/spatialRepresentation.xsd +326 -0
  851. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/serviceInformation.xsd +252 -0
  852. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/srv.xsd +14 -0
  853. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/serviceInformation.xsd +252 -0
  854. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/srv.xsd +14 -0
  855. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/acquisitionInformation.xsd +415 -0
  856. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/contentInformation.xsd +147 -0
  857. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/dataQualityInformation.xsd +214 -0
  858. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/gmi.xsd +23 -0
  859. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/metadataEntitySet.xsd +43 -0
  860. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/spatialRepresentationInformation.xsd +140 -0
  861. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/acquisitionInformation.xsd +415 -0
  862. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/contentInformation.xsd +147 -0
  863. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/dataQualityInformation.xsd +214 -0
  864. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/gmi.xsd +24 -0
  865. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/metadataEntitySet.xsd +43 -0
  866. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/spatialRepresentationInformation.xsd +142 -0
  867. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/acquisitionInformationImagery.xsd +796 -0
  868. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/mac.xsd +11 -0
  869. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/acquisitionInformationImagery.xsd +796 -0
  870. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/mac.xsd +11 -0
  871. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/acquisitionInformationImagery.xsd +799 -0
  872. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/mac.xsd +10 -0
  873. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2/contentInformationImagery.xsd +161 -0
  874. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.0/contentInformationImagery.xsd +161 -0
  875. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.1/contentInformationImagery.xsd +159 -0
  876. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2/lineageImagery.xsd +312 -0
  877. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2.0/lineageImagery.xsd +312 -0
  878. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2/spatialRepresentationImagery.xsd +138 -0
  879. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.0/spatialRepresentationImagery.xsd +138 -0
  880. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.1/spatialRepresentationImagery.xsd +145 -0
  881. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/cat.xsd +16 -0
  882. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/catalogues.xsd +59 -0
  883. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/codelistItem.xsd +63 -0
  884. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/crsItem.xsd +188 -0
  885. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/uomItem.xsd +45 -0
  886. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/cit.xsd +11 -0
  887. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/citation.xsd +400 -0
  888. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/cit.xsd +11 -0
  889. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/citation.xsd +402 -0
  890. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes.xsd +532 -0
  891. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes2014.xsd +531 -0
  892. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/gco.xsd +16 -0
  893. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/extendedTypes.xsd +97 -0
  894. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/gcx.xsd +11 -0
  895. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/extent.xsd +207 -0
  896. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/gex.xsd +15 -0
  897. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes.xsd +147 -0
  898. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes2014.xsd +147 -0
  899. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmw.xsd +17 -0
  900. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/lan.xsd +13 -0
  901. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/language.xsd +141 -0
  902. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/acquisitionInformationImagery.xsd +424 -0
  903. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/mac.xsd +14 -0
  904. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/acquisitionInformationImagery.xsd +473 -0
  905. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/event.xsd +106 -0
  906. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/mac.xsd +15 -0
  907. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/metadataEntitySet.xsd +46 -0
  908. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/applicationSchema.xsd +53 -0
  909. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/mas.xsd +15 -0
  910. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/AbstractCommonClasses.xsd +362 -0
  911. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/commonClasses.xsd +179 -0
  912. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/mcc.xsd +12 -0
  913. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/constraints.xsd +152 -0
  914. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/mco.xsd +13 -0
  915. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/md1.xsd +19 -0
  916. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/metadataWExtendedType.xsd +10 -0
  917. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/md1.xsd +19 -0
  918. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/metadataWExtendedType.xsd +10 -0
  919. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/md2.xsd +27 -0
  920. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/metadataWithExtensions.xsd +10 -0
  921. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/md2.xsd +27 -0
  922. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/metadataWithExtensions.xsd +10 -0
  923. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/mda.xsd +13 -0
  924. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/metadataApplication.xsd +188 -0
  925. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/mda.xsd +13 -0
  926. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/metadataApplication.xsd +189 -0
  927. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/mdb.xsd +23 -0
  928. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/metadataBase.xsd +97 -0
  929. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/mdb.xsd +23 -0
  930. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/metadataBase.xsd +105 -0
  931. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/mds.xsd +59 -0
  932. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/metadataDataServices.xsd +10 -0
  933. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/mds.xsd +44 -0
  934. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/metadataDataServices.xsd +10 -0
  935. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/mdt.xsd +17 -0
  936. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/metadataTransfer.xsd +121 -0
  937. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/mdt.xsd +17 -0
  938. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/metadataTransfer.xsd +121 -0
  939. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/metadataExtension.xsd +122 -0
  940. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/mex.xsd +13 -0
  941. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/maintenance.xsd +63 -0
  942. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/mmi.xsd +13 -0
  943. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/mpc.xsd +13 -0
  944. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/portrayalCatalogue.xsd +35 -0
  945. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/content.xsd +330 -0
  946. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/contentInformationImagery.xsd +160 -0
  947. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/mrc.xsd +18 -0
  948. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/content.xsd +334 -0
  949. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/contentInformationImagery.xsd +143 -0
  950. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/mrc.xsd +21 -0
  951. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/distribution.xsd +212 -0
  952. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/mrd.xsd +13 -0
  953. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/identification.xsd +385 -0
  954. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/mri.xsd +15 -0
  955. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineage.xsd +117 -0
  956. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineageImagery.xsd +168 -0
  957. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/mrl.xsd +14 -0
  958. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineage.xsd +118 -0
  959. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineageImagery.xsd +250 -0
  960. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/mrl.xsd +14 -0
  961. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/mrs.xsd +13 -0
  962. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/referenceSystem.xsd +47 -0
  963. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/msr.xsd +16 -0
  964. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentation.xsd +288 -0
  965. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentationImagery.xsd +113 -0
  966. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/msr.xsd +16 -0
  967. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentation.xsd +296 -0
  968. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentationImagery.xsd +114 -0
  969. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/serviceInformation.xsd +217 -0
  970. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/srv.xsd +14 -0
  971. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/serviceInformation.xsd +220 -0
  972. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/srv.xsd +14 -0
  973. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceMetadata.xsd +204 -0
  974. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceModel.xsd +230 -0
  975. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/srv.xsd +13 -0
  976. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceMetadata.xsd +204 -0
  977. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceModel.xsd +238 -0
  978. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/srv.xsd +13 -0
  979. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/cis-0.xsd +17 -0
  980. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/codeLists.xsd +68 -0
  981. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/gridPoint.xsd +47 -0
  982. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/cis-0.xsd +17 -0
  983. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/codeLists.xsd +68 -0
  984. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/gridPoint.xsd +47 -0
  985. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/codeLists.xsd +68 -0
  986. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/gridPoint.xsd +47 -0
  987. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/coverage.xsd +185 -0
  988. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/gmlcovAll.xsd +21 -0
  989. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/grids.xsd +115 -0
  990. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/coverage.xsd +188 -0
  991. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/gmlcovAll.xsd +25 -0
  992. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/grids.xsd +119 -0
  993. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/coverage.xsd +188 -0
  994. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/gmlcovAll.xsd +25 -0
  995. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/grids.xsd +119 -0
  996. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/coverage.xsd +188 -0
  997. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/gmlcovAll.xsd +23 -0
  998. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/grids.xsd +119 -0
  999. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/codeList.xsd +134 -0
  1000. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/groundControlPoints.xsd +239 -0
  1001. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/nonPhysicalSensorModel.xsd +321 -0
  1002. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/physicalSensorModel.xsd +62 -0
  1003. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorModel.xsd +65 -0
  1004. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorParameters.xsd +762 -0
  1005. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/spatialElements.xsd +497 -0
  1006. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/codeList.xsd +129 -0
  1007. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/groundControlPoints.xsd +235 -0
  1008. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/nonPhysicalSensorModel.xsd +321 -0
  1009. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/physicalSensorModel.xsd +62 -0
  1010. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorModel.xsd +65 -0
  1011. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorParameters.xsd +762 -0
  1012. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/spatialElements.xsd +496 -0
  1013. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/codeList.xsd +349 -0
  1014. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorModel.xsd +53 -0
  1015. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorParameters.xsd +681 -0
  1016. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/spatialElements.xsd +902 -0
  1017. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/codeList.xsd +344 -0
  1018. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorModel.xsd +49 -0
  1019. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorParameters.xsd +676 -0
  1020. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/spatialElements.xsd +897 -0
  1021. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1/smi.xsd +42 -0
  1022. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.0/smi.xsd +42 -0
  1023. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.1/smi.xsd +42 -0
  1024. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0/dps.xsd +1344 -0
  1025. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0.0/dps.xsd +1344 -0
  1026. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2/dps.xsd +1522 -0
  1027. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.0/dps.xsd +1522 -0
  1028. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.1/dps.xsd +1522 -0
  1029. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.0/dps.xsd +1339 -0
  1030. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.2.0/dps.xsd +1540 -0
  1031. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/core.xsd +349 -0
  1032. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/extended.xsd +1074 -0
  1033. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/hierarchy.xsd +57 -0
  1034. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/pir.xsd +13 -0
  1035. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/core.xsd +344 -0
  1036. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/extended.xsd +1076 -0
  1037. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/hierarchy.xsd +58 -0
  1038. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/pir.xsd +15 -0
  1039. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/core.xsd +344 -0
  1040. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/extended.xsd +1076 -0
  1041. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/hierarchy.xsd +58 -0
  1042. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/pir.xsd +15 -0
  1043. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/abstract.xsd +42 -0
  1044. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/pre.xsd +4 -0
  1045. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/abstract.xsd +44 -0
  1046. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/pre.xsd +11 -0
  1047. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/reg.xsd +8 -0
  1048. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/registration.xsd +562 -0
  1049. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/reg.xsd +22 -0
  1050. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/registration.xsd +590 -0
  1051. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/basicTypes.xsd +275 -0
  1052. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateOperations.xsd +534 -0
  1053. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateReferenceSystems.xsd +379 -0
  1054. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateSystems.xsd +303 -0
  1055. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coverage.xsd +298 -0
  1056. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/datums.xsd +293 -0
  1057. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/defaultStyle.xsd +462 -0
  1058. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/deprecatedTypes.xsd +1139 -0
  1059. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dictionary.xsd +95 -0
  1060. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/direction.xsd +90 -0
  1061. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dynamicFeature.xsd +114 -0
  1062. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/feature.xsd +99 -0
  1063. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryAggregates.xsd +203 -0
  1064. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic0d1d.xsd +283 -0
  1065. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic2d.xsd +130 -0
  1066. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryComplexes.xsd +101 -0
  1067. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryPrimitives.xsd +852 -0
  1068. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gml.xsd +25 -0
  1069. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gmlBase.xsd +191 -0
  1070. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/grids.xsd +70 -0
  1071. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/measures.xsd +74 -0
  1072. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/observation.xsd +100 -0
  1073. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/referenceSystems.xsd +78 -0
  1074. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporal.xsd +274 -0
  1075. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalReferenceSystems.xsd +194 -0
  1076. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalTopology.xsd +124 -0
  1077. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/topology.xsd +391 -0
  1078. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/units.xsd +168 -0
  1079. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/valueObjects.xsd +210 -0
  1080. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmlWrapperTypes.xsd +160 -0
  1081. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmw.xsd +27 -0
  1082. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmlWrapperTypes.xsd +160 -0
  1083. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmw.xsd +27 -0
  1084. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/cat.xsd +18 -0
  1085. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/catalogues.xsd +63 -0
  1086. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/codelistItem.xsd +64 -0
  1087. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/crsItem.xsd +200 -0
  1088. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/uomItem.xsd +49 -0
  1089. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/cat.xsd +18 -0
  1090. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/catalogues.xsd +63 -0
  1091. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/codelistItem.xsd +64 -0
  1092. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/crsItem.xsd +200 -0
  1093. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/uomItem.xsd +49 -0
  1094. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/basicTypes.xsd +439 -0
  1095. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gco.xsd +18 -0
  1096. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gcoBase.xsd +71 -0
  1097. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/applicationSchema.xsd +50 -0
  1098. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/citation.xsd +283 -0
  1099. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/constraints.xsd +114 -0
  1100. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/content.xsd +197 -0
  1101. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/dataQuality.xsd +563 -0
  1102. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/distribution.xsd +210 -0
  1103. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/extent.xsd +216 -0
  1104. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/freeText.xsd +130 -0
  1105. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/gmd.xsd +18 -0
  1106. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/identification.xsd +356 -0
  1107. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/maintenance.xsd +95 -0
  1108. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataApplication.xsd +183 -0
  1109. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataEntity.xsd +78 -0
  1110. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataExtension.xsd +107 -0
  1111. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/portrayalCatalogue.xsd +44 -0
  1112. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/referenceSystem.xsd +108 -0
  1113. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/spatialRepresentation.xsd +246 -0
  1114. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/catalogues.xsd +121 -0
  1115. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/codelistItem.xsd +179 -0
  1116. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/crsItem.xsd +1041 -0
  1117. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/extendedTypes.xsd +83 -0
  1118. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmx.xsd +18 -0
  1119. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmxUsage.xsd +136 -0
  1120. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/uomItem.xsd +173 -0
  1121. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/gsr.xsd +18 -0
  1122. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/spatialReferencing.xsd +34 -0
  1123. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/geometry.xsd +45 -0
  1124. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/gss.xsd +18 -0
  1125. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/gts.xsd +18 -0
  1126. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/temporalObjects.xsd +44 -0
  1127. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/gpi.xsd +16 -0
  1128. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/placeIdentifier.xsd +75 -0
  1129. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/sampleGMLApplicationSchema.xsd +83 -0
  1130. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/abstract.xsd +44 -0
  1131. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/dqc.xsd +16 -0
  1132. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/abstract.xsd +44 -0
  1133. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/dqc.xsd +16 -0
  1134. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/dqm.xsd +19 -0
  1135. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/qualityMeasures.xsd +332 -0
  1136. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/dqm.xsd +19 -0
  1137. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/qualityMeasures.xsd +332 -0
  1138. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityElement.xsd +583 -0
  1139. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityEvaluation.xsd +199 -0
  1140. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityImagery.xsd +75 -0
  1141. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityResult.xsd +213 -0
  1142. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/mdq.xsd +22 -0
  1143. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/metaquality.xsd +93 -0
  1144. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityElement.xsd +583 -0
  1145. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityEvaluation.xsd +199 -0
  1146. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityImagery.xsd +75 -0
  1147. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityResult.xsd +213 -0
  1148. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/mdq.xsd +22 -0
  1149. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/metaquality.xsd +93 -0
  1150. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dataQualityCommon.xsd +33 -0
  1151. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dqc.xsd +14 -0
  1152. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dataQualityCommon.xsd +43 -0
  1153. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dqc.xsd +17 -0
  1154. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dataQualityMeasure.xsd +376 -0
  1155. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dqm.xsd +11 -0
  1156. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dataQualityMeasure.xsd +367 -0
  1157. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dqm.xsd +11 -0
  1158. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQuality.xsd +570 -0
  1159. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityEvaluation.xsd +227 -0
  1160. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityResult.xsd +191 -0
  1161. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/mdq.xsd +14 -0
  1162. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/metaquality.xsd +106 -0
  1163. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQuality.xsd +581 -0
  1164. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityEvaluation.xsd +227 -0
  1165. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityResult.xsd +198 -0
  1166. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/mdq.xsd +14 -0
  1167. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/metaquality.xsd +102 -0
  1168. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/abstract.xsd +43 -0
  1169. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/dqc.xsd +15 -0
  1170. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/dqm.xsd +15 -0
  1171. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/qualityMeasures.xsd +303 -0
  1172. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityElement.xsd +554 -0
  1173. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityEvaluation.xsd +182 -0
  1174. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityImagery.xsd +72 -0
  1175. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityResult.xsd +140 -0
  1176. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/mdq.xsd +21 -0
  1177. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/metaquality.xsd +89 -0
  1178. data/spec/fixtures/xml/schema/xsd/isotc211/19160/-4/patdl/2.7.3/PATDL.v.2.7.3.xsd +517 -0
  1179. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_Imagery.xsd +520 -0
  1180. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ImageryAndGriddedData.xsd +222 -0
  1181. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ThematicGriddedData.xsd +117 -0
  1182. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/igd.xsd +14 -0
  1183. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_Imagery.xsd +520 -0
  1184. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ImageryAndGriddedData.xsd +222 -0
  1185. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ThematicGriddedData.xsd +117 -0
  1186. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/igd.xsd +14 -0
  1187. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_Imagery.xsd +518 -0
  1188. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ImageryAndGriddedData.xsd +213 -0
  1189. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ThematicGriddedData.xsd +116 -0
  1190. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/igd.xsd +15 -0
  1191. data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/geospatialPreservationMetadata.xsd +872 -0
  1192. data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/gpm.xsd +11 -0
  1193. data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/geospatialPreservationMetadata.xsd +385 -0
  1194. data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/gpm.xsd +8 -0
  1195. data/spec/fixtures/xml/schema/xsd/metaschema-datatypes.xsd +263 -0
  1196. data/spec/fixtures/xml/schema/xsd/metaschema-markup-line.xsd +9 -0
  1197. data/spec/fixtures/xml/schema/xsd/metaschema-markup-multiline.xsd +135 -0
  1198. data/spec/fixtures/xml/schema/xsd/metaschema-meta-constraints.xsd +39 -0
  1199. data/spec/fixtures/xml/schema/xsd/metaschema-prose-base.xsd +82 -0
  1200. data/spec/fixtures/xml/schema/xsd/metaschema-prose-module.xsd +5 -0
  1201. data/spec/fixtures/xml/schema/xsd/metaschema.xsd +1344 -0
  1202. data/spec/fixtures/xml/schema/xsd/omml_schema.xsd +1528 -0
  1203. data/spec/fixtures/xml/schema/xsd/smil20/rdf.xsd +16 -0
  1204. data/spec/fixtures/xml/schema/xsd/smil20/smil20-AccessKeyTiming.xsd +33 -0
  1205. data/spec/fixtures/xml/schema/xsd/smil20/smil20-AudioLayout.xsd +32 -0
  1206. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicAnimation.xsd +35 -0
  1207. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicContentControl.xsd +49 -0
  1208. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicInlineTiming.xsd +34 -0
  1209. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLayout.xsd +34 -0
  1210. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLinking.xsd +34 -0
  1211. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicMedia.xsd +39 -0
  1212. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTimeContainers.xsd +37 -0
  1213. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTransitions.xsd +36 -0
  1214. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BrushMedia.xsd +32 -0
  1215. data/spec/fixtures/xml/schema/xsd/smil20/smil20-CustomTestAttributes.xsd +33 -0
  1216. data/spec/fixtures/xml/schema/xsd/smil20/smil20-EventTiming.xsd +33 -0
  1217. data/spec/fixtures/xml/schema/xsd/smil20/smil20-ExclTimeContainers.xsd +37 -0
  1218. data/spec/fixtures/xml/schema/xsd/smil20/smil20-FillDefault.xsd +32 -0
  1219. data/spec/fixtures/xml/schema/xsd/smil20/smil20-HierarchicalLayout.xsd +46 -0
  1220. data/spec/fixtures/xml/schema/xsd/smil20/smil20-HostLanguage.xsd +85 -0
  1221. data/spec/fixtures/xml/schema/xsd/smil20/smil20-InlineTransitions.xsd +35 -0
  1222. data/spec/fixtures/xml/schema/xsd/smil20/smil20-IntegrationSet.xsd +72 -0
  1223. data/spec/fixtures/xml/schema/xsd/smil20/smil20-LinkingAttributes.xsd +40 -0
  1224. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaAccessibility.xsd +34 -0
  1225. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipMarkers.xsd +35 -0
  1226. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipping.xsd +35 -0
  1227. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaDescription.xsd +35 -0
  1228. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaMarkerTiming.xsd +33 -0
  1229. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaParam.xsd +34 -0
  1230. data/spec/fixtures/xml/schema/xsd/smil20/smil20-Metainformation.xsd +33 -0
  1231. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MinMaxTiming.xsd +33 -0
  1232. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiArcTiming.xsd +33 -0
  1233. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiWindowLayout.xsd +32 -0
  1234. data/spec/fixtures/xml/schema/xsd/smil20/smil20-ObjectLinking.xsd +33 -0
  1235. data/spec/fixtures/xml/schema/xsd/smil20/smil20-PrefetchControl.xsd +31 -0
  1236. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatTiming.xsd +34 -0
  1237. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatValueTiming.xsd +33 -0
  1238. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartDefault.xsd +32 -0
  1239. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartTiming.xsd +32 -0
  1240. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SkipContentControl.xsd +32 -0
  1241. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SplineAnimation.xsd +34 -0
  1242. data/spec/fixtures/xml/schema/xsd/smil20/smil20-Structure.xsd +34 -0
  1243. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehavior.xsd +33 -0
  1244. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehaviorDefault.xsd +33 -0
  1245. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncMaster.xsd +32 -0
  1246. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncbaseTiming.xsd +33 -0
  1247. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeContainerAttributes.xsd +35 -0
  1248. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeManipulations.xsd +35 -0
  1249. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TransitionModifiers.xsd +37 -0
  1250. data/spec/fixtures/xml/schema/xsd/smil20/smil20-WallclockTiming.xsd +33 -0
  1251. data/spec/fixtures/xml/schema/xsd/smil20/smil20-animate.xsd +229 -0
  1252. data/spec/fixtures/xml/schema/xsd/smil20/smil20-content.xsd +148 -0
  1253. data/spec/fixtures/xml/schema/xsd/smil20/smil20-language.xsd +834 -0
  1254. data/spec/fixtures/xml/schema/xsd/smil20/smil20-layout.xsd +211 -0
  1255. data/spec/fixtures/xml/schema/xsd/smil20/smil20-linking.xsd +117 -0
  1256. data/spec/fixtures/xml/schema/xsd/smil20/smil20-media.xsd +175 -0
  1257. data/spec/fixtures/xml/schema/xsd/smil20/smil20-meta.xsd +44 -0
  1258. data/spec/fixtures/xml/schema/xsd/smil20/smil20-struct.xsd +47 -0
  1259. data/spec/fixtures/xml/schema/xsd/smil20/smil20-timemanip.xsd +34 -0
  1260. data/spec/fixtures/xml/schema/xsd/smil20/smil20-timing.xsd +344 -0
  1261. data/spec/fixtures/xml/schema/xsd/smil20/smil20-transitions.xsd +138 -0
  1262. data/spec/fixtures/xml/schema/xsd/smil20/smil20-utility.xsd +57 -0
  1263. data/spec/fixtures/xml/schema/xsd/smil20/smil20.xsd +86 -0
  1264. data/spec/fixtures/xml/schema/xsd/smil20/xml-mod.xsd +25 -0
  1265. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/advanced_encodings.xsd +186 -0
  1266. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/basic_types.xsd +147 -0
  1267. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/block_components.xsd +163 -0
  1268. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/choice_components.xsd +56 -0
  1269. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/examples/security.xsd +15 -0
  1270. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/record_components.xsd +95 -0
  1271. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_components.xsd +536 -0
  1272. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_encodings.xsd +93 -0
  1273. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/swe.xsd +14 -0
  1274. data/spec/fixtures/xml/schema/xsd/test_schema.lxr +0 -0
  1275. data/spec/fixtures/xml/schema/xsd/test_schema.xsd +24 -0
  1276. data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd03.xsd +1333 -0
  1277. data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd04.xsd +1334 -0
  1278. data/spec/fixtures/xml/schema/xsd/validation_config.yml +14 -0
  1279. data/spec/fixtures/xml/special_char.xml +3 -4
  1280. data/spec/fixtures/xml/user.xsd +14 -10
  1281. data/spec/lutaml/key_value/transformation/collection_serializer_spec.rb +213 -0
  1282. data/spec/lutaml/key_value/transformation/rule_compiler_spec.rb +229 -0
  1283. data/spec/lutaml/key_value/transformation/value_serializer_spec.rb +216 -0
  1284. data/spec/lutaml/key_value/transformation_spec.rb +292 -0
  1285. data/spec/lutaml/model/attribute_collection_spec.rb +9 -6
  1286. data/spec/lutaml/model/attribute_form_default_spec.rb +252 -0
  1287. data/spec/lutaml/model/attribute_spec.rb +328 -38
  1288. data/spec/lutaml/model/cached_type_resolver_spec.rb +362 -0
  1289. data/spec/lutaml/model/cdata_spec.rb +180 -102
  1290. data/spec/lutaml/model/choice_spec.rb +37 -7
  1291. data/spec/lutaml/model/cli_spec.rb +452 -0
  1292. data/spec/lutaml/model/collection_index_spec.rb +347 -0
  1293. data/spec/lutaml/model/collection_mutation_spec.rb +124 -0
  1294. data/spec/lutaml/model/collection_spec.rb +580 -155
  1295. data/spec/lutaml/model/collection_validation_spec.rb +736 -0
  1296. data/spec/lutaml/model/comparable_model_spec.rb +75 -0
  1297. data/spec/lutaml/model/compiled_rule_spec.rb +364 -0
  1298. data/spec/lutaml/model/consolidation_spec.rb +295 -0
  1299. data/spec/lutaml/model/context_registry_spec.rb +269 -0
  1300. data/spec/lutaml/model/custom_bibtex_adapter_spec.rb +21 -7
  1301. data/spec/lutaml/model/custom_collection_spec.rb +321 -27
  1302. data/spec/lutaml/model/custom_model_spec.rb +13 -10
  1303. data/spec/lutaml/model/custom_serialization_spec.rb +12 -14
  1304. data/spec/lutaml/model/custom_vobject_adapter_spec.rb +36 -16
  1305. data/spec/lutaml/model/default_register_spec.rb +852 -0
  1306. data/spec/lutaml/model/defaults_spec.rb +57 -6
  1307. data/spec/lutaml/model/delegation_spec.rb +184 -110
  1308. data/spec/lutaml/model/derived_attribute_serialization_spec.rb +33 -0
  1309. data/spec/lutaml/model/dynamic_attribute_spec.rb +112 -0
  1310. data/spec/lutaml/model/encoding_spec.rb +281 -0
  1311. data/spec/lutaml/model/enum_spec.rb +46 -2
  1312. data/spec/lutaml/model/except_spec.rb +240 -0
  1313. data/spec/lutaml/model/finalization_cache_spec.rb +88 -0
  1314. data/spec/lutaml/model/global_context_spec.rb +421 -0
  1315. data/spec/lutaml/model/global_register_spec.rb +153 -36
  1316. data/spec/lutaml/model/group_spec.rb +193 -54
  1317. data/spec/lutaml/model/hash/adapter_spec.rb +5 -3
  1318. data/spec/lutaml/model/import_registry_spec.rb +295 -0
  1319. data/spec/lutaml/model/included_spec.rb +10 -17
  1320. data/spec/lutaml/model/inheritance_spec.rb +6 -6
  1321. data/spec/lutaml/model/json_adapter_spec.rb +13 -6
  1322. data/spec/lutaml/model/json_spec.rb +33 -0
  1323. data/spec/lutaml/model/key_value_data_model/key_value_element_spec.rb +320 -0
  1324. data/spec/lutaml/model/key_value_mapping_spec.rb +12 -2
  1325. data/spec/lutaml/model/lazy_collection_spec.rb +208 -0
  1326. data/spec/lutaml/model/liquefiable_spec.rb +263 -24
  1327. data/spec/lutaml/model/logger_spec.rb +68 -0
  1328. data/spec/lutaml/model/map_all_spec.rb +36 -11
  1329. data/spec/lutaml/model/map_content_spec.rb +4 -4
  1330. data/spec/lutaml/model/mapping_rule_perf_guard_spec.rb +71 -0
  1331. data/spec/lutaml/model/mixed_content_spec.rb +481 -171
  1332. data/spec/lutaml/model/model_transformer_spec.rb +678 -0
  1333. data/spec/lutaml/model/multiple_mapping_spec.rb +71 -39
  1334. data/spec/lutaml/model/namespace_versioning_spec.rb +390 -0
  1335. data/spec/lutaml/model/one_entry_cache_spec.rb +114 -0
  1336. data/spec/lutaml/model/ordered_content_spec.rb +115 -24
  1337. data/spec/lutaml/model/polymorphic_spec.rb +29 -6
  1338. data/spec/lutaml/model/processing_instruction_spec.rb +375 -0
  1339. data/spec/lutaml/model/{register/key_value_spec.rb → register_key_value_spec.rb} +57 -5
  1340. data/spec/lutaml/model/register_spec.rb +235 -5
  1341. data/spec/lutaml/model/render_empty_spec.rb +143 -6
  1342. data/spec/lutaml/model/render_nil_spec.rb +15 -10
  1343. data/spec/lutaml/model/root_mappings_spec.rb +16 -6
  1344. data/spec/lutaml/model/rule_value_extractor_spec.rb +13 -44
  1345. data/spec/lutaml/model/runtime_compatibility_spec.rb +36 -0
  1346. data/spec/lutaml/model/schema/generator/definitions_collection_spec.rb +4 -0
  1347. data/spec/lutaml/model/schema/json_schema_spec.rb +7 -1
  1348. data/spec/lutaml/model/schema/relaxng_schema_spec.rb +1 -1
  1349. data/spec/lutaml/model/schema/renderer_spec.rb +128 -0
  1350. data/spec/lutaml/model/schema/xsd_schema_spec.rb +1 -1
  1351. data/spec/lutaml/model/sequence_spec.rb +460 -15
  1352. data/spec/lutaml/model/serializable_spec.rb +212 -12
  1353. data/spec/lutaml/model/serializable_validation_spec.rb +3 -2
  1354. data/spec/lutaml/model/serialize_perf_guard_spec.rb +100 -0
  1355. data/spec/lutaml/model/services/default_value_resolver_spec.rb +162 -0
  1356. data/spec/lutaml/model/simple_model_spec.rb +4 -4
  1357. data/spec/lutaml/model/toml_adapter_spec.rb +11 -4
  1358. data/spec/lutaml/model/toml_spec.rb +46 -2
  1359. data/spec/lutaml/model/transformation_builder_spec.rb +283 -0
  1360. data/spec/lutaml/model/transformation_spec.rb +165 -236
  1361. data/spec/lutaml/model/type/base64_binary_spec.rb +202 -0
  1362. data/spec/lutaml/model/type/date_spec.rb +132 -0
  1363. data/spec/lutaml/model/type/date_time_spec.rb +54 -2
  1364. data/spec/lutaml/model/type/decimal_spec.rb +1 -1
  1365. data/spec/lutaml/model/type/duration_spec.rb +185 -0
  1366. data/spec/lutaml/model/type/hex_binary_spec.rb +225 -0
  1367. data/spec/lutaml/model/type/integer_spec.rb +1 -1
  1368. data/spec/lutaml/model/type/qname_spec.rb +246 -0
  1369. data/spec/lutaml/model/type/reference_integration_spec.rb +532 -0
  1370. data/spec/lutaml/model/type/reference_spec.rb +293 -0
  1371. data/spec/lutaml/model/type/symbol_spec.rb +322 -0
  1372. data/spec/lutaml/model/type/time_spec.rb +6 -5
  1373. data/spec/lutaml/model/type/time_without_date_spec.rb +1 -1
  1374. data/spec/lutaml/model/type/uninitialized_class_spec.rb +110 -0
  1375. data/spec/lutaml/model/type/uri_spec.rb +176 -0
  1376. data/spec/lutaml/model/type/value_xml_mapping_spec.rb +162 -0
  1377. data/spec/lutaml/model/type_context_spec.rb +370 -0
  1378. data/spec/lutaml/model/type_registry_spec.rb +313 -0
  1379. data/spec/lutaml/model/type_resolver_spec.rb +278 -0
  1380. data/spec/lutaml/model/type_spec.rb +7 -8
  1381. data/spec/lutaml/model/type_substitution_spec.rb +172 -0
  1382. data/spec/lutaml/model/utils_spec.rb +39 -24
  1383. data/spec/lutaml/model/value_map_spec.rb +2 -2
  1384. data/spec/lutaml/model/value_transformation_comprehensive_spec.rb +676 -0
  1385. data/spec/lutaml/model/with_child_mapping_spec.rb +1 -1
  1386. data/spec/lutaml/model/xml_decoupling_spec.rb +435 -0
  1387. data/spec/lutaml/model/xsd_form_default_patterns_spec.rb +664 -0
  1388. data/spec/lutaml/model/xsd_patterns_spec.rb +278 -0
  1389. data/spec/lutaml/model/xsd_type_spec.rb +345 -0
  1390. data/spec/lutaml/model/xsd_type_validation_spec.rb +442 -0
  1391. data/spec/lutaml/model/yamls/standard_adapter_spec.rb +2 -2
  1392. data/spec/lutaml/xml/adapter/nokogiri_adapter_spec.rb +130 -0
  1393. data/spec/lutaml/xml/adapter/oga_adapter_spec.rb +135 -0
  1394. data/spec/lutaml/xml/adapter/ox_adapter_spec.rb +101 -0
  1395. data/spec/lutaml/xml/adapter/rexml_adapter_spec.rb +101 -0
  1396. data/spec/lutaml/xml/adapter/xml_namespace_spec.rb +531 -0
  1397. data/spec/lutaml/xml/builder/builder_spec.rb +216 -0
  1398. data/spec/lutaml/xml/compiled_rule_namespace_spec.rb +405 -0
  1399. data/spec/lutaml/xml/conformance/xml_namespaces_spec.rb +580 -0
  1400. data/spec/lutaml/xml/conformance/xml_schema_instance_spec.rb +266 -0
  1401. data/spec/lutaml/xml/data_model_spec.rb +300 -0
  1402. data/spec/lutaml/xml/decisions/decision_engine_spec.rb +242 -0
  1403. data/spec/lutaml/xml/decisions/decision_spec.rb +217 -0
  1404. data/spec/lutaml/xml/decisions/element_prefix_resolver_spec.rb +198 -0
  1405. data/spec/lutaml/xml/declaration_planner_spec.rb +524 -0
  1406. data/spec/lutaml/xml/default_namespace_spec.rb +190 -0
  1407. data/spec/lutaml/{model/xml → xml}/derived_attributes_spec.rb +2 -2
  1408. data/spec/lutaml/xml/doctype_preservation_spec.rb +323 -0
  1409. data/spec/lutaml/xml/doubly_defined_namespace_spec.rb +415 -0
  1410. data/spec/lutaml/xml/dual_namespace_element_spec.rb +181 -0
  1411. data/spec/lutaml/xml/element_spec.rb +28 -0
  1412. data/spec/lutaml/xml/encoding_normalizer_spec.rb +215 -0
  1413. data/spec/lutaml/xml/enhanced_mapping_spec.rb +692 -0
  1414. data/spec/lutaml/xml/entity_fragmentation_spec.rb +583 -0
  1415. data/spec/lutaml/xml/format_chooser_spec.rb +0 -0
  1416. data/spec/lutaml/xml/fpi_namespace_spec.rb +145 -0
  1417. data/spec/lutaml/{model/xml/namespace_spec.rb → xml/general_namespace_spec.rb} +6 -5
  1418. data/spec/lutaml/xml/mapping_finalization_guard_spec.rb +83 -0
  1419. data/spec/lutaml/xml/mapping_rule_spec.rb +98 -0
  1420. data/spec/lutaml/xml/mapping_spec.rb +1147 -0
  1421. data/spec/lutaml/xml/model_transform_guard_spec.rb +126 -0
  1422. data/spec/lutaml/{model/xml → xml}/namespace/nested_with_explicit_namespace_spec.rb +8 -5
  1423. data/spec/lutaml/xml/namespace/w3c_reserved_warning_spec.rb +152 -0
  1424. data/spec/lutaml/xml/namespace_alias_prefix_root_spec.rb +130 -0
  1425. data/spec/lutaml/xml/namespace_alias_spec.rb +263 -0
  1426. data/spec/lutaml/xml/namespace_aware_parsing_spec.rb +219 -0
  1427. data/spec/lutaml/xml/namespace_backward_compatibility_spec.rb +48 -0
  1428. data/spec/lutaml/xml/namespace_bound_element_roundtrip_spec.rb +433 -0
  1429. data/spec/lutaml/xml/namespace_constant_spec.rb +383 -0
  1430. data/spec/lutaml/xml/namespace_force_prefix_spec.rb +113 -0
  1431. data/spec/lutaml/xml/namespace_format_preservation_spec.rb +49 -0
  1432. data/spec/lutaml/xml/namespace_inheritance_deep_spec.rb +162 -0
  1433. data/spec/lutaml/xml/namespace_inheritance_override_spec.rb +316 -0
  1434. data/spec/lutaml/xml/namespace_inheritance_resolver_spec.rb +0 -0
  1435. data/spec/lutaml/xml/namespace_inheritance_spec.rb +966 -0
  1436. data/spec/lutaml/xml/namespace_integration_spec.rb +277 -0
  1437. data/spec/lutaml/xml/namespace_missing_prefix_spec.rb +178 -0
  1438. data/spec/lutaml/xml/namespace_no_hoisting_spec.rb +172 -0
  1439. data/spec/lutaml/xml/namespace_placement_spec.rb +265 -0
  1440. data/spec/lutaml/xml/namespace_preservation_spec.rb +427 -0
  1441. data/spec/lutaml/xml/namespace_principles_spec.rb +909 -0
  1442. data/spec/lutaml/xml/namespace_resolution_strategy_spec.rb +273 -0
  1443. data/spec/lutaml/xml/namespace_scope_declare_spec.rb +205 -0
  1444. data/spec/lutaml/xml/namespace_scope_spec.rb +389 -0
  1445. data/spec/lutaml/xml/namespace_scope_vcard_spec.rb +616 -0
  1446. data/spec/lutaml/xml/namespace_spec.rb +712 -0
  1447. data/spec/lutaml/xml/namespace_three_phase_spec.rb +310 -0
  1448. data/spec/lutaml/xml/nil_optional_element_namespace_spec.rb +84 -0
  1449. data/spec/lutaml/xml/ooxml_namespace_spec.rb +177 -0
  1450. data/spec/lutaml/xml/ordered_method_spec.rb +109 -0
  1451. data/spec/lutaml/xml/prefix_control_spec.rb +286 -0
  1452. data/spec/lutaml/{model/register/xml_spec.rb → xml/register_spec.rb} +75 -21
  1453. data/spec/lutaml/xml/reusable_mapping_spec.rb +148 -0
  1454. data/spec/lutaml/xml/reused_elements_namespace_spec.rb +85 -0
  1455. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_group_spec.rb +9 -3
  1456. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_spec.rb +11 -7
  1457. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/choice_spec.rb +5 -2
  1458. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_restriction_spec.rb +7 -2
  1459. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_spec.rb +5 -1
  1460. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_type_spec.rb +49 -20
  1461. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/element_spec.rb +9 -4
  1462. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/group_spec.rb +9 -5
  1463. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/restriction_spec.rb +1 -0
  1464. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/sequence_spec.rb +10 -4
  1465. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_content_spec.rb +9 -3
  1466. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_type_spec.rb +10 -7
  1467. data/spec/lutaml/{model/schema/xml_compiler_spec.rb → xml/schema/compiler_spec.rb} +219 -94
  1468. data/spec/lutaml/xml/schema/xsd/errors/error_context_spec.rb +65 -0
  1469. data/spec/lutaml/xml/schema/xsd/errors/suggestion_spec.rb +77 -0
  1470. data/spec/lutaml/xml/schema/xsd/file_validation_result_spec.rb +131 -0
  1471. data/spec/lutaml/xml/schema/xsd/glob_spec.rb +318 -0
  1472. data/spec/lutaml/xml/schema/xsd/liquid_methods/attribute_and_group_spec.rb +76 -0
  1473. data/spec/lutaml/xml/schema/xsd/liquid_methods/complex_type_spec.rb +159 -0
  1474. data/spec/lutaml/xml/schema/xsd/liquid_methods/containers_spec.rb +104 -0
  1475. data/spec/lutaml/xml/schema/xsd/liquid_methods/element_spec.rb +139 -0
  1476. data/spec/lutaml/xml/schema/xsd/liquid_methods/schema_spec.rb +75 -0
  1477. data/spec/lutaml/xml/schema/xsd/liquid_methods/simple_content_spec.rb +79 -0
  1478. data/spec/lutaml/xml/schema/xsd/namespace_uri_remapping_spec.rb +246 -0
  1479. data/spec/lutaml/xml/schema/xsd/schema_helper_methods_spec.rb +237 -0
  1480. data/spec/lutaml/xml/schema/xsd/schema_mapping_spec.rb +742 -0
  1481. data/spec/lutaml/xml/schema/xsd/schema_validator_spec.rb +228 -0
  1482. data/spec/lutaml/xml/schema/xsd/spec_helper.rb +26 -0
  1483. data/spec/lutaml/xml/schema/xsd/validation_error_spec.rb +189 -0
  1484. data/spec/lutaml/xml/schema/xsd/validation_result_spec.rb +276 -0
  1485. data/spec/lutaml/xml/schema/xsd/xsd_spec.rb +51 -0
  1486. data/spec/lutaml/xml/schema_primer_spec.rb +393 -0
  1487. data/spec/lutaml/xml/serializable_namespace_spec.rb +125 -0
  1488. data/spec/lutaml/xml/transformation/custom_method_wrapper_spec.rb +48 -0
  1489. data/spec/lutaml/xml/transformation_spec.rb +439 -0
  1490. data/spec/lutaml/xml/type_namespace/collector_spec.rb +212 -0
  1491. data/spec/lutaml/xml/type_namespace/planner_spec.rb +270 -0
  1492. data/spec/lutaml/xml/type_namespace_examples_spec.rb +521 -0
  1493. data/spec/lutaml/xml/type_namespace_integration_spec.rb +332 -0
  1494. data/spec/lutaml/xml/type_namespace_prefix_spec.rb +370 -0
  1495. data/spec/lutaml/xml/type_namespace_resolver_spec.rb +0 -0
  1496. data/spec/lutaml/xml/type_namespace_roundtrip_spec.rb +580 -0
  1497. data/spec/lutaml/xml/w3c_types_spec.rb +376 -0
  1498. data/spec/lutaml/{model → xml}/xml_adapter_spec.rb +64 -17
  1499. data/spec/lutaml/xml/xml_declaration_spec.rb +568 -0
  1500. data/spec/lutaml/xml/xml_element_guard_spec.rb +138 -0
  1501. data/spec/lutaml/{model/xml → xml}/xml_element_spec.rb +1 -1
  1502. data/spec/lutaml/xml/xml_lang_spec.rb +441 -0
  1503. data/spec/lutaml/xml/xml_space_spec.rb +247 -0
  1504. data/spec/lutaml/xml/xml_space_type_spec.rb +161 -0
  1505. data/spec/lutaml/xml/xml_spec.rb +122 -0
  1506. data/spec/parent_root_spec.rb +63 -0
  1507. data/spec/person_spec.rb +9 -9
  1508. data/spec/spec_helper.rb +64 -6
  1509. data/spec/support/test_adapter_config.rb +101 -0
  1510. data/spec/support/test_namespaces.rb +185 -0
  1511. data/spec/support/trace_helper.rb +0 -0
  1512. data/spec/support/xml/schema_helper.rb +15 -0
  1513. data/spec/support/xml/xsd/code_example_validator.rb +393 -0
  1514. data/spec/support/xml_mapping_namespaces.rb +176 -0
  1515. metadata +1465 -100
  1516. data/docs/custom_registers.adoc +0 -228
  1517. data/lib/lutaml/model/hash_adapter/mapping.rb +0 -19
  1518. data/lib/lutaml/model/hash_adapter/mapping_rule.rb +0 -9
  1519. data/lib/lutaml/model/hash_adapter/transform.rb +0 -8
  1520. data/lib/lutaml/model/hash_adapter.rb +0 -21
  1521. data/lib/lutaml/model/json/mapping.rb +0 -19
  1522. data/lib/lutaml/model/json/mapping_rule.rb +0 -9
  1523. data/lib/lutaml/model/json/multi_json_adapter.rb +0 -18
  1524. data/lib/lutaml/model/json/standard_adapter.rb +0 -25
  1525. data/lib/lutaml/model/json/transform.rb +0 -8
  1526. data/lib/lutaml/model/jsonl/mapping.rb +0 -19
  1527. data/lib/lutaml/model/jsonl/mapping_rule.rb +0 -9
  1528. data/lib/lutaml/model/jsonl/transform.rb +0 -19
  1529. data/lib/lutaml/model/schema/xsd_schema.rb +0 -62
  1530. data/lib/lutaml/model/toml/mapping_rule.rb +0 -9
  1531. data/lib/lutaml/model/toml/toml_rb_adapter.rb +0 -18
  1532. data/lib/lutaml/model/toml/tomlib_adapter.rb +0 -19
  1533. data/lib/lutaml/model/toml/transform.rb +0 -8
  1534. data/lib/lutaml/model/xml/builder/nokogiri.rb +0 -101
  1535. data/lib/lutaml/model/xml/builder/oga.rb +0 -183
  1536. data/lib/lutaml/model/xml/builder/ox.rb +0 -121
  1537. data/lib/lutaml/model/xml/document.rb +0 -477
  1538. data/lib/lutaml/model/xml/element.rb +0 -32
  1539. data/lib/lutaml/model/xml/mapping.rb +0 -471
  1540. data/lib/lutaml/model/xml/mapping_rule.rb +0 -149
  1541. data/lib/lutaml/model/xml/nokogiri_adapter.rb +0 -234
  1542. data/lib/lutaml/model/xml/oga/document.rb +0 -20
  1543. data/lib/lutaml/model/xml/oga/element.rb +0 -123
  1544. data/lib/lutaml/model/xml/oga_adapter.rb +0 -172
  1545. data/lib/lutaml/model/xml/ox_adapter.rb +0 -229
  1546. data/lib/lutaml/model/xml/transform.rb +0 -8
  1547. data/lib/lutaml/model/xml/xml_attribute.rb +0 -37
  1548. data/lib/lutaml/model/xml/xml_element.rb +0 -167
  1549. data/lib/lutaml/model/xml/xml_namespace.rb +0 -49
  1550. data/lib/lutaml/model/xml.rb +0 -31
  1551. data/lib/lutaml/model/xml_adapter/element.rb +0 -18
  1552. data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +0 -15
  1553. data/lib/lutaml/model/xml_adapter/oga_adapter.rb +0 -21
  1554. data/lib/lutaml/model/xml_adapter/ox_adapter.rb +0 -18
  1555. data/lib/lutaml/model/xml_adapter.rb +0 -7
  1556. data/lib/lutaml/model/yaml/mapping.rb +0 -19
  1557. data/lib/lutaml/model/yaml/mapping_rule.rb +0 -9
  1558. data/lib/lutaml/model/yaml/standard_adapter.rb +0 -28
  1559. data/lib/lutaml/model/yaml/transform.rb +0 -8
  1560. data/lib/lutaml/model/yamls/mapping.rb +0 -19
  1561. data/lib/lutaml/model/yamls/mapping_rule.rb +0 -9
  1562. data/lib/lutaml/model/yamls/transform.rb +0 -19
  1563. data/spec/benchmarks/xml_parsing_benchmark_spec.rb +0 -74
  1564. data/spec/fixtures/xml/advanced_test_schema.xsd +0 -134
  1565. data/spec/lutaml/model/namespace_spec.rb +0 -57
  1566. data/spec/lutaml/model/xml_adapter/nokogiri_adapter_spec.rb +0 -56
  1567. data/spec/lutaml/model/xml_adapter/oga_adapter_spec.rb +0 -60
  1568. data/spec/lutaml/model/xml_adapter/ox_adapter_spec.rb +0 -61
  1569. data/spec/lutaml/model/xml_adapter/xml_namespace_spec.rb +0 -368
  1570. data/spec/lutaml/model/xml_mapping_rule_spec.rb +0 -158
  1571. data/spec/lutaml/model/xml_mapping_spec.rb +0 -1318
  1572. data/spec/lutaml/model/xml_spec.rb +0 -63
  1573. /data/spec/lutaml/{model/xml → xml}/root_mappings/nested_child_mappings_spec.rb +0 -0
@@ -0,0 +1,1026 @@
1
+ ---
2
+ title: Custom Registers
3
+ nav_order: 4
4
+ ---
5
+
6
+ = LutaML Registers
7
+
8
+ == Introduction
9
+
10
+ There are three types of registers in Lutaml::Model:
11
+
12
+ 1. *TypeRegister*
13
+ 2. *ModelRegister*
14
+ 3. *GlobalRegister*
15
+
16
+ === TypeRegister
17
+
18
+ The TypeRegister is a registry class that registers and looks up the `Lutaml::Model::Type::Value` classes only.
19
+
20
+ ==== Register a Type::Value class
21
+
22
+ The following syntax registers a `Type::Value` class:
23
+ ```ruby
24
+ # assuming we have a `CustomString` class that inherits from Lutaml::Model::Type::Value
25
+ Lutaml::Model::Type.register(:custom_string, Lutaml::Model::Type::CustomString)
26
+ ```
27
+ NOTE: `TypeError` is raised if the class does not inherit from `Lutaml::Model::Type::Value`.
28
+
29
+ ==== Lookup a *Type::Value* class
30
+ Lookup a `Type::Value` class using the assigned name:
31
+ ```ruby
32
+ Lutaml::Model::Type.lookup(:custom_string) # returns Lutaml::Model::Type::CustomString
33
+ ```
34
+
35
+ NOTE: `Lutaml::Model::Type::UnknownTypeError` is raised if the name is not found in the registry.
36
+
37
+ When looking up a class, the class is returned without looking up in the registry.
38
+
39
+ ```ruby
40
+ Lutaml::Model::Type.lookup(Lutaml::Model::Type::CustomString) # returns Lutaml::Model::Type::CustomString even if it's not registered in the registry
41
+ ```
42
+
43
+ ==== Lazy type registration with Ruby autoload
44
+
45
+ For large schema libraries with many model classes, you can defer loading until a type is actually needed by registering a *Proc* instead of a class. The Proc is resolved on first `lookup`, and Ruby's `autoload` triggers the file load at that point.
46
+
47
+ ```ruby
48
+ # Declare autoload so Ruby loads the file when the constant is first referenced
49
+ autoload :Divergence, "mml/v3/vector_calculus"
50
+
51
+ # Register a Proc — the file is NOT loaded yet
52
+ Lutaml::Model::Type.register(:divergence, -> { Mml::V3::Divergence })
53
+
54
+ # The first lookup triggers autoload and resolves the class
55
+ Lutaml::Model::Type.lookup(:divergence)
56
+ # => Mml::V3::Divergence (file loaded now, Proc result cached)
57
+
58
+ # Subsequent lookups return the cached class directly
59
+ Lutaml::Model::Type.lookup(:divergence)
60
+ # => Mml::V3::Divergence (no Proc call)
61
+ ```
62
+
63
+ Why a Proc and not a bare Symbol? A Symbol (`:Divergence`) has no namespace context. A Proc captures the full constant path (`Mml::V3::Divergence`) and triggers `autoload` when called.
64
+
65
+ This pattern is especially useful in library entry points where you declare many types but only a subset is used at runtime. It pairs naturally with Ruby's built-in `autoload` for lazy file loading.
66
+
67
+ If the Proc raises (e.g., `NameError` from a missing constant), the error propagates naturally and the registry is not mutated, so a retry is possible after the autoload path is configured.
68
+
69
+ === ModelRegister
70
+
71
+ The *ModelRegister* is a registry class that registers and looks up the `Lutaml::Model::Registrable` classes (by default, `Lutaml::Model::Serializable` classes are `Registrable` classes). For consistency, the `Lutaml::Model::Type::Value` classes are registered similarly, but within the TypeRegister registry, as referenced in the <<TypeRegister, previous section>>.
72
+
73
+ NOTE: Make sure to register the ModelRegister in GlobalRegister before using it.
74
+
75
+ ==== Register a Class
76
+
77
+ Register a Model class using the following syntax:
78
+ ```ruby
79
+ # assuming we have a `CustomModel` class that inherits from Lutaml::Model::Serializable
80
+ Lutaml::Model::Register.register_model(Lutaml::Model::CustomModel, id: :custom_model)
81
+ ```
82
+ This method `register_model` registers the class and assigns it the passed ID, which is `:custom_model` in this case. But if a model is registered without an ID, the class name is used as the ID. For example:
83
+ ```ruby
84
+ Lutaml::Model::Register.register_model(Lutaml::Model::AnotherCustomModel)
85
+ ```
86
+
87
+ This will register the class `AnotherCustomModel` with the ID `:another_custom_model`.
88
+
89
+ ==== Register model tree
90
+
91
+ The `register_model_tree` method registers all the classes in the provided Model's hierarchy. For example:
92
+ ```ruby
93
+ register = Lutaml::Model::Register.new(:v1)
94
+
95
+ module Mathml
96
+ class Mrow < Lutaml::Model::Serializable
97
+ attribute :mstyle, Mstyle
98
+ end
99
+
100
+ class Mstyle < Lutaml::Model::Serializable
101
+ attribute :mi, :string
102
+ end
103
+
104
+ class Math < Lutaml::Model::Serializable
105
+ attribute :mrow, Mrow
106
+ attribute :mstyle, Mstyle
107
+ end
108
+ end
109
+
110
+ register.register_model_tree(Mathml::Math) # registers all the classes in the Mathml::Math model tree, in this case Mathml::Mstyle and Mathml::Mrow
111
+ ```
112
+
113
+ ==== Lookup a Class
114
+
115
+ Lookup a Model class using the assigned name:
116
+ ```ruby
117
+ register = Lutaml::Model::Register.new(:v1)
118
+ register.get_class(:custom_model) # returns Lutaml::Model::CustomModel
119
+ ```
120
+ The class returned from the `get_class` method is also aware of the *ModelRegister* it was registered in. This is useful when you want to use the class directly. For example:
121
+
122
+ ```ruby
123
+ register = Lutaml::Model::Register.new(:v1)
124
+ json_hash = {
125
+ "mstyle": {
126
+ "mrow": {
127
+ "mi": "x",
128
+ "mo": "+"
129
+ }
130
+ },
131
+ "mrow": {
132
+ "mi": "z",
133
+ }
134
+ }
135
+ module Mathml
136
+ class Mrow < Lutaml::Model::Serializable
137
+ attribute :mi, :string
138
+ attribute :mo, :string
139
+ end
140
+ class Mstyle < Lutaml::Model::Serializable
141
+ attribute :mrow, Mrow
142
+ attribute :mi, :string
143
+ attribute :mo, :string
144
+ end
145
+ class Math < Lutaml::Model::Serializable
146
+ attribute :mrow, Mrow
147
+ attribute :mstyle, Mstyle
148
+ end
149
+ end
150
+ register.register_model_tree(Mathml::Math) # registers all the classes in the Mathml::Math model tree, in this case Mstyle and Mrow
151
+ # lookup the class and call the desired method, in current case from_json
152
+ register.get_class(:math).from_json(json_hash.to_json)
153
+ > #<Testing::Math:0x00000002ccd5a678
154
+ @mrow=#<Testing::Mrow:0x00000002cc50a1f8 @mi="z", @mo=nil>,
155
+ @mstyle=#<Testing::Mstyle:0x00000002cc50a108 @mi=nil, @mo=nil, @mrow=#<Testing::Mrow:0x00000002cc509fc8 @mi="x", @mo="+">>>
156
+ ```
157
+
158
+ NOTE: If the class is not found in either the `ModelRegister` or the `TypeRegister`, a `Lutaml::Model::UnknownTypeError` is raised.
159
+
160
+ ==== Global Type substitution
161
+
162
+ The `Lutaml::Model::Register` class also provides a method to substitute a type globally. This is useful when you want to replace a type with another type in the entire model tree. For example:
163
+
164
+ ```ruby
165
+ register = Lutaml::Model::Register.new(:v1)
166
+ json_hash = {
167
+ "mstyle": {
168
+ "mrow": {
169
+ "mi": "x",
170
+ "mo": "+"
171
+ }
172
+ },
173
+ "mrow": {
174
+ "mi": "z",
175
+ "mstyle": {
176
+ "mrow": {
177
+ "mi": "x",
178
+ "mo": "+"
179
+ }
180
+ }
181
+ }
182
+ }
183
+ module Mathml
184
+ class String < Lutaml::Model::Type::Value
185
+ def to_json(*args)
186
+ "custom-string: #{super(*args).to_json}"
187
+ end
188
+ end
189
+
190
+ class Mrow < Lutaml::Model::Serializable
191
+ attribute :mi, :string
192
+ attribute :mo, :string
193
+ end
194
+ class Mstyle < Lutaml::Model::Serializable
195
+ attribute :mrow, Mrow
196
+ attribute :mi, :string
197
+ attribute :mo, :string
198
+ end
199
+ class Math < Lutaml::Model::Serializable
200
+ attribute :mrow, Mrow
201
+ attribute :mstyle, Mstyle
202
+ end
203
+
204
+ class ExtendedMrow < Mrow
205
+ attribute :mstyle, :mstyle
206
+ end
207
+ end
208
+ register.register_model_tree(Mathml::Math) # registers all the classes in the Mathml::Math model tree, in this case Mstyle and Mrow
209
+ # Substitute the Mrow class with the ExtendedMrow class globally
210
+ register.register_global_type_substitution(
211
+ from_type: Mathml::Mrow,
212
+ to_type: Mathml::ExtendedMrow
213
+ ) # this will replace all instances of Mrow with ExtendedMrow in the entire model tree for this register
214
+ register.register_global_type_substitution(
215
+ from_type: Lutaml::Model::Type::String,
216
+ to_type: Mathml::String
217
+ )
218
+ # lookup the class and call the desired method, in current case from_json
219
+ models = register.get_class(:math).from_json(json_hash.to_json)
220
+ models.to_json
221
+ > "{\"mrow\":{\"mi\":\"custom-string: \\\"z\\\"\",\"mstyle\":{\"mrow\":{\"mi\":\"custom-string: \\\"x\\\"\",\"mo\":\"custom-string: \\\"+\\\"\"}}},\"mstyle\":{\"mrow\":{\"mi\":\"custom-string: \\\"x\\\"\",\"mo\":\"custom-string: \\\"+\\\"\"}}}"
222
+ ```
223
+
224
+ ==== Resolve a class
225
+
226
+ The `resolve` method resolves a class passed as a string if registered in the ModelRegister. For example:
227
+
228
+ ```ruby
229
+ register = Lutaml::Model::Register.new(:v1)
230
+ register.register_model(Mathml::Math, id: :math)
231
+ register.resolve("Mathml::Math") # returns Lutaml::Model::Math
232
+ ```
233
+
234
+ === GlobalRegister
235
+
236
+ The GlobalRegister is a singleton that registers all the ModelRegisters.
237
+ Model registers can be registered using the following syntax:
238
+
239
+ ```ruby
240
+ v1_register = Lutaml::Model::Register.new(:v1)
241
+ global_register = Lutaml::Model::GlobalRegister
242
+ global_register.register(v1_register) # register a Model register
243
+ # OR
244
+ global_register.instance.register(v1_register) # register a Model register
245
+ ```
246
+
247
+ The `register` method registers the ModelRegister based on its ID. The ID is used to look up the ModelRegister using the following syntax:
248
+ ```ruby
249
+ global_register.lookup(:v2) # fetch a Model register
250
+ # OR
251
+ global_register.instance.lookup(:v2) # fetch a Model register
252
+ ```
253
+
254
+ If a register is not needed anymore, it can be removed using the following syntax:
255
+ ```ruby
256
+ global_register.remove(:v1) # remove a ModelRegister using the its ID
257
+ # OR
258
+ global_register.instance.remove(:v1) # remove a ModelRegister using the it's ID
259
+ ```
260
+
261
+ == Register resolution fallback
262
+
263
+ === General
264
+
265
+ Model registers support hierarchical fallback register resolution, which allows
266
+ registers to depend on other registers for type resolution.
267
+
268
+ The following use cases benefit from this feature:
269
+
270
+ * Shared types: Common types like `xs:annotation`, `xs:documentation` can
271
+ resolved from parent registers without duplicating them in every register
272
+
273
+ * Isolation: Registers can disable fallback for strict schema isolation
274
+
275
+ * Inheritance: Specialized schemas can extend base schemas by falling back to
276
+ core registers
277
+
278
+ === Default behavior
279
+
280
+ By default, all custom registers (except `:default`) automatically fall back to
281
+ the `:default` (global) register.
282
+
283
+ This means if a type is not found in a custom register, it will be searched in
284
+ the `:default` register.
285
+
286
+ [source,ruby]
287
+ ----
288
+ register = Lutaml::Model::Register.new(:my_schema)
289
+ register.fallback # => [:default]
290
+ ----
291
+
292
+ The `:default` register itself has no fallback chain:
293
+
294
+ [source,ruby]
295
+ ----
296
+ default_register = Lutaml::Model::GlobalRegister.lookup(:default)
297
+ default_register.fallback # => []
298
+ ----
299
+
300
+ === Isolated registers
301
+
302
+ To create a register that does not fall back to any other register (complete
303
+ isolation), pass an empty array as the `fallback` parameter:
304
+
305
+ [source,ruby]
306
+ ----
307
+ isolated = Lutaml::Model::Register.new(:pristine, fallback: [])
308
+ isolated.fallback # => []
309
+ ----
310
+
311
+ Isolated registers will only resolve models explicitly registered within them.
312
+
313
+ This is useful for:
314
+
315
+ * Testing schema isolation
316
+ * Ensuring no dependency on external types
317
+ * Strict schema validation
318
+
319
+ === Explicit fallback chains
320
+
321
+ For complex schema hierarchies, you can specify an explicit fallback chain:
322
+
323
+ [source,ruby]
324
+ ----
325
+ # Multi-level fallback: :profile → :core → :default
326
+ profile = Lutaml::Model::Register.new(
327
+ :gml_profile,
328
+ fallback: [:gml_core, :iso_types, :default]
329
+ )
330
+
331
+ profile.fallback # => [:gml_core, :iso_types, :default]
332
+ ----
333
+
334
+ Resolution order is by the order of the fallback array.
335
+
336
+ For example, when resolving a type in the `:gml_profile` register:
337
+
338
+ . Search in local register (`:gml_profile`)
339
+ . If not found, search in first fallback (`:gml_core`)
340
+ . If not found, search in second fallback (`:iso_types`)
341
+ . If not found, search in third fallback (`:default`)
342
+ . If still not found, raise `UnknownTypeError`
343
+
344
+
345
+ === Use cases
346
+
347
+ ==== Vertical separation (schema profiles)
348
+
349
+ Use fallback chains when specialized schemas extend base schemas:
350
+
351
+ .GML Profile extending GML Core
352
+ [example]
353
+ ====
354
+ [source,ruby]
355
+ ----
356
+ # Base schema with core types
357
+ core_register = Lutaml::Model::Register.new(:gml_core)
358
+ Lutaml::Model::GlobalRegister.instance.register(core_register)
359
+ core_register.register_model(GeometryType, id: :geometry_type)
360
+ core_register.register_model(CoordinateType, id: :coordinate_type)
361
+
362
+ # Specialized profile extends core
363
+ profile_register = Lutaml::Model::Register.new(
364
+ :gml_profile,
365
+ fallback: [:gml_core, :default]
366
+ )
367
+ Lutaml::Model::GlobalRegister.instance.register(profile_register)
368
+ profile_register.register_model(ProfileGeometryType, id: :profile_geometry)
369
+
370
+ # Profile models can use both profile-specific and core types
371
+ class ProfileDocument < Lutaml::Model::Serializable
372
+ @register = profile_register
373
+
374
+ attribute :geometry, :profile_geometry # From :gml_profile
375
+ attribute :coordinate, :coordinate_type # From :gml_core (fallback)
376
+ end
377
+ ----
378
+ ====
379
+
380
+ ==== Multi-version schema support
381
+
382
+ Use fallback when newer schema versions build on older versions:
383
+
384
+ .UnitsML v0.9.19 falling back to common types
385
+ [example]
386
+ ====
387
+ [source,ruby]
388
+ ----
389
+ # Generate UnitsML schema with module namespace
390
+ Lutaml::Model::Schema::XmlCompiler.to_models(
391
+ xsd_content,
392
+ module_namespace: "UnitsMLV0919",
393
+ register_id: :unitsmlv0919, # Implicitly falls back to :default
394
+ output_dir: "lib/unitsml",
395
+ create_files: true
396
+ )
397
+
398
+ # Load models
399
+ require "unitsml/unitsmlv0919_registry"
400
+ UnitsMLV0919.register_all
401
+
402
+ # UnitsMLV0919 models resolve:
403
+ # 1. Domain-specific types from :unitsmlv0919 register
404
+ # 2. Common types (annotation, documentation) from :default register (fallback)
405
+ doc = UnitsMLV0919::UnitsMLType.from_xml(xml)
406
+ ----
407
+ ====
408
+
409
+ [[per-class-default-register]]
410
+ == Per-class default register
411
+
412
+ When using versioned schemas (e.g., MathML v2, v3, v4), each version may have its own
413
+ register context. The `lutaml_default_register` class method allows a Serializable
414
+ subclass to specify its preferred default register context.
415
+
416
+ === The problem
417
+
418
+ Without `lutaml_default_register`, when you instantiate a class without an explicit
419
+ `register:` option, it falls back to `Config.default_register` (`:default`):
420
+
421
+ [source,ruby]
422
+ ----
423
+ # :mml_v2 context has different type mappings than :default
424
+ math = Mml::V2::Math.new # Falls back to :default register
425
+ # => UnknownTypeError because :default doesn't have MML types
426
+ ----
427
+
428
+ You must explicitly pass `register: :mml_v2`:
429
+
430
+ [source,ruby]
431
+ ----
432
+ math = Mml::V2::Math.new({}, register: :mml_v2) # Works
433
+ ----
434
+
435
+ === The solution
436
+
437
+ Define `lutaml_default_register` in a base class for your version:
438
+
439
+ [source,ruby]
440
+ ----
441
+ module Mml
442
+ class V2Base < Lutaml::Model::Serializable
443
+ def self.lutaml_default_register
444
+ :mml_v2
445
+ end
446
+ end
447
+
448
+ class Math < V2Base
449
+ attribute :mrow, Mrow
450
+
451
+ xml do
452
+ root "math"
453
+ end
454
+ end
455
+ end
456
+ ----
457
+
458
+ Now `Mml::Math.new` automatically uses `:mml_v2` as the default register:
459
+
460
+ [source,ruby]
461
+ ----
462
+ math = Mml::Math.new # Uses :mml_v2 by default
463
+ math.to_xml # Works correctly with v2 types
464
+ ----
465
+
466
+ === Resolution order
467
+
468
+ The register ID is resolved in this order:
469
+
470
+ 1. **Explicit `register:` option** - passed to `new` or `from_xml` etc.
471
+ 2. **`lutaml_default_register`** - class method returning Symbol or nil
472
+ 3. **`@register` instance variable** - set by `register_model_tree`
473
+ 4. **`Config.default_register`** - global fallback (`:default`)
474
+
475
+ [source,ruby]
476
+ ----
477
+ # Resolution examples for a class with lutaml_default_register = :mml_v2
478
+ math = Math.new # => :mml_v2 (from lutaml_default_register)
479
+ math = Math.new({}, register: :mml_v3) # => :mml_v3 (explicit option wins)
480
+ math = Math.new({}, register: nil) # => :mml_v2 (lutaml_default_register still used)
481
+ math = Math.new({}, register: false) # => :default (false is falsy)
482
+ ----
483
+
484
+ === Using with versioned base classes
485
+
486
+ This pattern is especially useful for schema libraries with multiple versions:
487
+
488
+ [source,ruby]
489
+ ----
490
+ module Mml
491
+ # Base class for v2
492
+ class V2Base < Lutaml::Model::Serializable
493
+ def self.lutaml_default_register
494
+ :mml_v2
495
+ end
496
+ end
497
+
498
+ # Base class for v3
499
+ class V3Base < Lutaml::Model::Serializable
500
+ def self.lutaml_default_register
501
+ :mml_v3
502
+ end
503
+ end
504
+
505
+ # V2-specific classes
506
+ class V2::Math < V2Base
507
+ # Uses :mml_v2 by default
508
+ end
509
+
510
+ class V2::Factorof < V2Base
511
+ # Uses :mml_v2 by default
512
+ end
513
+
514
+ # V3-specific classes
515
+ class V3::Math < V3Base
516
+ # Uses :mml_v3 by default
517
+ end
518
+ end
519
+ ----
520
+
521
+ Each version's classes automatically use their correct register without requiring
522
+ explicit `register:` options everywhere.
523
+
524
+ === Thread safety
525
+
526
+ `lutaml_default_register` is a class method that returns a constant value, so it is
527
+ thread-safe. Unlike modifying `Config.default_register` (which is global state),
528
+ each class specifies its own default independently.
529
+
530
+ [[instance-level-register-context]]
531
+ === Instance-level register context during XML parsing
532
+
533
+ When parsing XML documents with nested elements, the parser must determine which
534
+ register context to use for each element's type resolution. The key insight is that
535
+ when a Serializable model instance has a `lutaml_register` (set during instantiation),
536
+ that instance-level register is used for all child element processing.
537
+
538
+ ==== The problem
539
+
540
+ Consider a document that embeds MathML v2 elements:
541
+
542
+ [source,ruby]
543
+ ----
544
+ class MyDocument < Lutaml::Model::Serializable
545
+ attribute :math, Mml::V2::Math # Has lutaml_default_register = :mml_v2
546
+
547
+ xml do
548
+ root "document"
549
+ map_element "math", to: :math
550
+ end
551
+ end
552
+ ----
553
+
554
+ When parsing:
555
+ [source,xml]
556
+ ----
557
+ <document>
558
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
559
+ <mmultiscripts><mi>x</mi></mmultiscripts>
560
+ </math>
561
+ </document>
562
+ ----
563
+
564
+ Without proper instance-level register context:
565
+
566
+ 1. `MyDocument` is in `:default` register
567
+ 2. Parser creates `Mml::V2::Math` instance with `lutaml_register = :mml_v2` (correct)
568
+ 3. When processing `<mmultiscripts>`, the parser was using `:default` (parent's register)
569
+ 4. `:mmultiscripts` only exists in `:mml_v2` → `UnknownTypeError`
570
+
571
+ ==== The solution: effective_register
572
+
573
+ The XML parsing infrastructure uses an `effective_register` computed from the
574
+ instance being populated, not the Transform object:
575
+
576
+ [source,ruby]
577
+ ----
578
+ effective_register = if instance.is_a?(::Lutaml::Model::Serialize) &&
579
+ instance.respond_to?(:lutaml_register) &&
580
+ instance.lutaml_register
581
+ instance.lutaml_register
582
+ else
583
+ lutaml_register
584
+ end
585
+ ----
586
+
587
+ This `effective_register` is then used for:
588
+
589
+ * Mapping resolution (`mappings_for(:xml, effective_register)`)
590
+ * Type resolution (`attr.type(effective_register)`)
591
+ * Nested element casting (`attr.cast(child, :xml, effective_register, options)`)
592
+ * Namespace-aware type resolution
593
+
594
+ ==== Requirements
595
+
596
+ For this to work correctly:
597
+
598
+ 1. **The child class must have `lutaml_default_register`** declared, OR
599
+ 2. **The child instance must be created with the correct `lutaml_register`**
600
+
601
+ When both conditions are met, the instance's `lutaml_register` takes precedence,
602
+ ensuring child elements are resolved in the correct context.
603
+
604
+ [source,ruby]
605
+ ----
606
+ # Versioned base class declares its default register
607
+ module Mml
608
+ class V2Base < Lutaml::Model::Serializable
609
+ def self.lutaml_default_register
610
+ :mml_v2
611
+ end
612
+ end
613
+
614
+ class Math < V2Base
615
+ attribute :mmultiscripts_value, Mmultiscripts, collection: true
616
+ end
617
+ end
618
+
619
+ # When parsing, the Math instance uses its lutaml_register (:mml_v2)
620
+ # for all child element resolution
621
+ doc = MyDocument.from_xml(xml)
622
+ doc.math.lutaml_register # => :mml_v2
623
+ doc.math.mmultiscripts_value.first.class # => Mml::V2::Mmultiscripts
624
+ ----
625
+
626
+ ==== Complete example: embedding versioned schemas
627
+
628
+ [source,ruby]
629
+ ----
630
+ # 1. Define versioned base class
631
+ module Mml
632
+ class V2Base < Lutaml::Model::Serializable
633
+ def self.lutaml_default_register
634
+ :mml_v2
635
+ end
636
+ end
637
+
638
+ class Mmultiscripts < V2Base
639
+ attribute :mi_value, :string
640
+
641
+ xml do
642
+ root "mmultiscripts"
643
+ map_element "mi", to: :mi_value
644
+ end
645
+ end
646
+
647
+ class Math < V2Base
648
+ attribute :mmultiscripts_value, Mmultiscripts, collection: true
649
+
650
+ xml do
651
+ root "math"
652
+ map_element "mmultiscripts", to: :mmultiscripts_value
653
+ end
654
+ end
655
+ end
656
+
657
+ # 2. Register in the versioned register
658
+ mml_v2_register = Lutaml::Model::Register.new(:mml_v2)
659
+ mml_v2_register.register_model_tree(Mml::Math)
660
+ Lutaml::Model::GlobalRegister.instance.register(mml_v2_register)
661
+
662
+ # 3. Use in a document with different register context
663
+ class MyDocument < Lutaml::Model::Serializable
664
+ attribute :id, :string
665
+ attribute :math, Mml::Math
666
+
667
+ xml do
668
+ root "document"
669
+ map_attribute "id", to: :id
670
+ map_element "math", to: :math
671
+ end
672
+ end
673
+
674
+ # 4. Parse works regardless of MyDocument's register
675
+ xml = <<~XML
676
+ <document id="test">
677
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
678
+ <mmultiscripts><mi>x</mi></mmultiscripts>
679
+ </math>
680
+ </document>
681
+ XML
682
+
683
+ doc = MyDocument.from_xml(xml)
684
+ doc.math.lutaml_register # => :mml_v2 (from lutaml_default_register)
685
+ doc.math.mmultiscripts_value.first.mi_value # => "x"
686
+ ----
687
+
688
+ [[cross-register-resolution]]
689
+ == Cross-register child resolution
690
+
691
+ When a parent model in one register embeds a child model from a different register,
692
+ the child's types must resolve in the child's register context — not the parent's.
693
+ This is handled automatically by `Register.resolve_for_child`.
694
+
695
+ === The problem
696
+
697
+ A `:default`-register parent that embeds a `:mml_v2` child encounters
698
+ `UnknownTypeError` when the child's symbol types (e.g., `:mmultiscripts`) are
699
+ looked up in `:default` instead of `:mml_v2`:
700
+
701
+ [source,ruby]
702
+ ----
703
+ class MyDocument < Lutaml::Model::Serializable
704
+ attribute :math, Mml::V2::Math # Has lutaml_default_register = :mml_v2
705
+
706
+ xml do
707
+ root "document"
708
+ map_element "math", to: :math
709
+ end
710
+ end
711
+
712
+ # Without Register.resolve_for_child:
713
+ # UnknownTypeError: Unknown type 'mmultiscripts' in context 'default'
714
+ ----
715
+
716
+ === The solution: `Register.resolve_for_child`
717
+
718
+ `Register.resolve_for_child(child_class, parent_register)` is the canonical API
719
+ for determining which register to use for a child type. It is called automatically
720
+ at every model entry point:
721
+
722
+ * `transformation_for` — transformation compilation
723
+ * `mappings_for` — mapping resolution
724
+ * `DeclarationPlanner` — XML serialization namespace planning
725
+ * `NamespaceCollector` — XML serialization namespace collection
726
+ * `TypeNamespaceResolver` — type namespace reference resolution
727
+
728
+ You should rarely need to call it directly. The resolution policy is:
729
+
730
+ [cols="1,4"]
731
+ |===
732
+ | Rule | Resolution
733
+
734
+ | Child has no `lutaml_default_register`
735
+ | Use `parent_register`
736
+
737
+ | `parent_register` is nil
738
+ | Use child's default
739
+
740
+ | `parent_register` matches child's default
741
+ | Use child's default (no conflict)
742
+
743
+ | `parent_register` is `:default` (global)
744
+ | Use child's default (child knows better)
745
+
746
+ | `parent_register`'s fallback chain includes child's default
747
+ | Use `parent_register` (has substitutions)
748
+
749
+ | Otherwise
750
+ | Use child's default (child is self-contained)
751
+ |===
752
+
753
+ === MML use case: versioned MathML schemas
754
+
755
+ The `mml` gem defines MathML v2 and v3 as separate registers, each with their
756
+ own type set. A document embedding MathML uses `lutaml_default_register` on the
757
+ version-specific base class:
758
+
759
+ [source,ruby]
760
+ ----
761
+ module Mml
762
+ class V2Base < Lutaml::Model::Serializable
763
+ def self.lutaml_default_register
764
+ :mml_v2
765
+ end
766
+ end
767
+
768
+ class Math < V2Base
769
+ attribute :mmultiscripts, Mmultiscripts, collection: true
770
+ # :mmultiscripts type symbol resolves in :mml_v2 context
771
+ end
772
+ end
773
+
774
+ # Any document can embed Mml::V2::Math and it "just works"
775
+ class Article < Lutaml::Model::Serializable
776
+ attribute :formula, Mml::V2::Math
777
+
778
+ xml do
779
+ root "article"
780
+ map_element "math", to: :formula
781
+ end
782
+ end
783
+
784
+ doc = Article.from_xml(xml) # No explicit register needed
785
+ doc.formula.mmultiscripts.first.mi_value # => "x"
786
+ ----
787
+
788
+ === XMI use case: namespace-bound version registers
789
+
790
+ The `xmi` gem defines registers for each XMI version (20131001, 20161101),
791
+ bound to XML namespace URIs. A mixed-version XMI document may use types from
792
+ multiple registers simultaneously.
793
+
794
+ When the XMI parser detects namespace versions at parse time, it may need to
795
+ dynamically extend the fallback chain. Use `Register#add_fallback` for this —
796
+ it coordinates both the Register-level fallback array AND the frozen
797
+ `TypeContext`, and invalidates caches:
798
+
799
+ [source,ruby]
800
+ ----
801
+ # Dynamically add a fallback at runtime (e.g., for mixed-version documents)
802
+ register.add_fallback(:xmi_20161101)
803
+
804
+ # This is equivalent to but safer than:
805
+ # register.fallback << :xmi_20161101 # UNSAFE: doesn't update TypeContext
806
+ ----
807
+
808
+ WARNING: Never mutate `register.fallback` directly. Always use `add_fallback`
809
+ to keep the Register and TypeContext in sync.
810
+
811
+ [[namespace-bound-registers]]
812
+ == Namespace-bound registers
813
+
814
+ A `Register` manages models and type resolution in a format-agnostic way — it has no
815
+ knowledge of the serialization format (XML, YAML, JSON, etc.). However, the
816
+ `NamespaceBinding` mechanism specifically works with `Lutaml::Xml::Namespace` subclasses.
817
+ The format-agnostic design allows this to be extended in the future; for now, the
818
+ binding API accepts XML namespace classes.
819
+
820
+ Namespace binding enables *version-aware type resolution*: the same type name can resolve
821
+ to different classes depending on the namespace in the document. This is essential when
822
+ different versions of a specification share the same type name but with different
823
+ structures.
824
+
825
+ === Core concept
826
+
827
+ A register can be *bound* to one or more `Lutaml::Xml::Namespace` subclasses. When
828
+ resolving a type, the register checks whether the current XML namespace URI is one it
829
+ handles and resolves accordingly. The binding is mediated by `Lutaml::Model::NamespaceBinding`,
830
+ which stores the namespace class and its URI.
831
+
832
+ [source,ruby]
833
+ ----
834
+ # Define namespace classes inheriting from Lutaml::Xml::Namespace
835
+ class Xmi20131001 < Lutaml::Xml::Namespace
836
+ uri "http://www.omg.org/spec/XMI/20131001"
837
+ prefix :xmi
838
+ element_form_default :qualified
839
+ end
840
+
841
+ # Create and bind a register to the namespace
842
+ register = Lutaml::Model::Register.new(:spec_20131001)
843
+ register.bind_namespace(Xmi20131001)
844
+
845
+ register.handles_namespace?("http://www.omg.org/spec/XMI/20131001")
846
+ # => true
847
+
848
+ Once bound, the register becomes the authoritative register for that namespace.
849
+ `GlobalContext` maintains a bidirectional mapping so that namespace URIs can be
850
+ looked up to find the correct register, and vice versa.
851
+
852
+ === Bind a register to namespaces
853
+
854
+ Use `Register#bind_namespace` to bind multiple `Lutaml::Xml::Namespace` subclasses to the
855
+ same register. Each namespace class contributes its URI to the register's binding map:
856
+
857
+ [source,ruby]
858
+ ----
859
+ register.bind_namespace(Xmi20131001)
860
+ register.bind_namespace(Uml20131001)
861
+ register.bind_namespace(UmlDi20131001)
862
+ register.bind_namespace(UmlDc20131001)
863
+
864
+ # Each namespace URI maps to a binding in the register
865
+ register.bound_namespace_uris
866
+ # => [
867
+ # "http://www.omg.org/spec/XMI/20131001",
868
+ # "http://www.omg.org/spec/UML/20131001",
869
+ # "http://www.omg.org/spec/UML/20131001/UMLDI",
870
+ # "http://www.omg.org/spec/UML/20131001/UMLDC"
871
+ # ]
872
+ ----
873
+
874
+ === Namespace-aware type resolution
875
+
876
+ Use `resolve_in_namespace` to resolve a type given an XML namespace URI. The XML parsing
877
+ infrastructure supplies the namespace URI at parse time when building model objects,
878
+ ensuring the correct version-specific class is instantiated:
879
+
880
+ [source,ruby]
881
+ ----
882
+ # Resolve :documentation in the context of the XMI 20131001 namespace
883
+ klass = register.resolve_in_namespace(:documentation, "http://www.omg.org/spec/XMI/20131001")
884
+ # Returns the class registered under :documentation in this register
885
+
886
+ # Without a namespace, falls back to normal resolution through the fallback chain
887
+ register.resolve_in_namespace(:documentation, nil)
888
+ ----
889
+
890
+ === Hierarchical fallback with namespace bindings
891
+
892
+ When a newer specification version extends an older one (e.g., XMI 20161101
893
+ extends XMI 20131001), the newer register falls back to the older register:
894
+
895
+ [source,ruby]
896
+ ----
897
+ # Older version
898
+ v20131001 = Lutaml::Model::Register.new(:xmi_20131001)
899
+ v20131001.bind_namespace(Xmi20131001)
900
+ v20131001.register_model(V20131001::Documentation, id: :documentation)
901
+
902
+ # Newer version extends older version
903
+ v20161101 = Lutaml::Model::Register.new(:xmi_20161101, fallback: [:xmi_20131001])
904
+ v20161101.bind_namespace(Xmi20161101)
905
+ v20161101.register_model(V20161101::Extension, id: :extension)
906
+
907
+ # V20161101::Extension is registered locally; V20131001::Documentation is
908
+ # found via fallback chain resolution
909
+ ----
910
+
911
+ WARNING: Do not create circular fallback chains. If register A falls back to B,
912
+ and B already falls back to A (directly or indirectly), type resolution will
913
+ enter an infinite loop. Always verify the fallback chain before use.
914
+
915
+ === Mixed namespace documents
916
+
917
+ Some XML documents use different namespace versions for XMI, UML, UMLDI, and
918
+ UMLDC. For example, an XMI document may declare:
919
+
920
+ [source,xml]
921
+ ----
922
+ <xmi:XMI xmlns:xmi="http://www.omg.org/spec/XMI/20131001"
923
+ xmlns:uml="http://www.omg.org/spec/UML/20161101">
924
+ ----
925
+
926
+ Here the XMI namespace is version 20131001, but the UML namespace is 20161101.
927
+ When parsing this document, the XMI register must:
928
+
929
+ 1. Handle the XMI 20131001 namespace (primary)
930
+ 2. Also handle the UML 20161101 namespace (additional)
931
+ 3. Fall back to the UML 20161101 register for types specific to that version
932
+
933
+ This is handled by *extending the fallback chain* for additional namespace
934
+ versions. Given a primary register and a list of all detected versions:
935
+
936
+ [source,ruby]
937
+ ----
938
+ # Detect all namespace versions from the document
939
+ versions = NamespaceDetector.detect_versions(xml_content)
940
+ # => { xmi: "20131001", uml: "20161101", umldi: nil, umldc: nil }
941
+
942
+ primary_register = register_for_version(versions[:xmi]) # xmi_20131001
943
+ all_versions = [versions[:xmi], versions[:uml]].compact.uniq
944
+
945
+ # For each additional version, bind its namespace URIs and extend the fallback
946
+ all_versions.drop(1).each do |ver|
947
+ reg = register_for_version(ver) # xmi_20161101
948
+ reg.bound_namespace_uris.each do |uri|
949
+ primary_register.bind_namespace(resolve_namespace_class(uri))
950
+ end
951
+ primary_register.fallback << reg.id unless reg.fallback.include?(primary_register.id)
952
+ end
953
+ ----
954
+
955
+ This ensures:
956
+
957
+ * The primary register handles all namespace URIs present in the document
958
+ * Type resolution searches the fallback chain for version-specific types
959
+ * No cycles are introduced (guarded by checking whether the additional
960
+ register's fallback already includes the primary register)
961
+
962
+ === GlobalContext namespace registry
963
+
964
+ `GlobalContext` maintains the global namespace-to-register mapping:
965
+
966
+ [source,ruby]
967
+ ----
968
+ # Bind a register to a namespace in GlobalContext
969
+ register.bind_namespace(XmiNamespace)
970
+ # This also calls GlobalContext.bind_register_to_namespace internally
971
+
972
+ # Look up which register handles a namespace
973
+ Lutaml::Model::GlobalContext.register_for_namespace(
974
+ "http://www.omg.org/spec/XMI/20131001"
975
+ )
976
+ # => the register bound to XmiNamespace
977
+ ----
978
+
979
+ The `GlobalContext#register_for_namespace` method is the central lookup used by
980
+ the parsing infrastructure to route XML elements to the correct register based
981
+ on their namespace URI.
982
+
983
+ === Complete example: versioned schema with XML namespace bindings
984
+
985
+ Here is a complete example showing how to set up a registry hierarchy with
986
+ namespace bindings, suitable for a multi-version XML specification:
987
+
988
+ [source,ruby]
989
+ ----
990
+ # 1. Define Xml::Namespace subclasses for each version
991
+ class Xmi20131001 < Lutaml::Xml::Namespace
992
+ uri "http://www.omg.org/spec/XMI/20131001"
993
+ prefix :xmi
994
+ end
995
+
996
+ class Xmi20161101 < Lutaml::Xml::Namespace
997
+ uri "http://www.omg.org/spec/XMI/20161101"
998
+ prefix :xmi
999
+ end
1000
+
1001
+ # 2. Create version-specific registers with fallback chains
1002
+ v20131001 = Lutaml::Model::Register.new(:spec_20131001)
1003
+ v20131001.bind_namespace(Xmi20131001)
1004
+
1005
+ v20161101 = Lutaml::Model::Register.new(:spec_20161101, fallback: [:spec_20131001])
1006
+ v20161101.bind_namespace(Xmi20161101)
1007
+
1008
+ # 3. Register models in each version
1009
+ v20131001.register_model(V20131001::Documentation, id: :documentation)
1010
+ v20131001.register_model(V20131001::Extension, id: :extension)
1011
+
1012
+ v20161101.register_model(V20161101::Extension, id: :extension) # different structure
1013
+
1014
+ # 4. Register in GlobalRegister for global lookup
1015
+ Lutaml::Model::GlobalRegister.instance.register(v20131001)
1016
+ Lutaml::Model::GlobalRegister.instance.register(v20161101)
1017
+
1018
+ # 5. Parse with the appropriate register
1019
+ doc = MyModel.from_xml(xml_content, register: v20161101)
1020
+
1021
+ # 6. Detect the right register from document content
1022
+ detected = MyVersionRegistry.detect_register(xml_content)
1023
+ # Returns the appropriate register, with namespaces and fallbacks
1024
+ # already configured for the document
1025
+ doc = MyModel.from_xml(xml_content, register: detected)
1026
+ ----