lutaml-model 0.7.7 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1585) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependent-repos.json +9 -0
  3. data/.github/workflows/dependent-tests.yml +4 -0
  4. data/.github/workflows/docs.yml +59 -0
  5. data/.github/workflows/downstream-performance.yml +153 -0
  6. data/.github/workflows/performance.yml +33 -0
  7. data/.github/workflows/rake.yml +13 -0
  8. data/.github/workflows/release.yml +5 -0
  9. data/.gitignore +27 -1
  10. data/.rubocop.yml +14 -2
  11. data/.rubocop_todo.yml +408 -88
  12. data/Gemfile +15 -9
  13. data/README.adoc +13736 -6922
  14. data/RELEASE_NOTES.adoc +51 -0
  15. data/Rakefile +2 -0
  16. data/bench/baselines/.gitkeep +0 -0
  17. data/bench/bench_all.rb +52 -0
  18. data/bench/bench_common.rb +147 -0
  19. data/bench/bench_compare.rb +195 -0
  20. data/bench/bench_mml.rb +53 -0
  21. data/bench/bench_niso.rb +54 -0
  22. data/bench/bench_sts.rb +49 -0
  23. data/bench/bench_unitsml.rb +43 -0
  24. data/bench/bench_xmi.rb +51 -0
  25. data/bench/gate_config.rb +120 -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 +306 -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 +319 -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 +108 -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/docs/yamls_sequence.adoc +335 -0
  123. data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/document.rb +3 -4
  124. data/lib/lutaml/hash_format/adapter/mapping.rb +19 -0
  125. data/lib/lutaml/hash_format/adapter/mapping_rule.rb +9 -0
  126. data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/standard_adapter.rb +3 -3
  127. data/lib/lutaml/hash_format/adapter/transform.rb +9 -0
  128. data/lib/lutaml/hash_format/adapter.rb +13 -0
  129. data/lib/lutaml/hash_format/type/serializers.rb +24 -0
  130. data/lib/lutaml/hash_format.rb +29 -0
  131. data/lib/lutaml/{model/json → json/adapter}/document.rb +3 -3
  132. data/lib/lutaml/json/adapter/mapping.rb +19 -0
  133. data/lib/lutaml/json/adapter/mapping_rule.rb +9 -0
  134. data/lib/lutaml/json/adapter/multi_json_adapter.rb +38 -0
  135. data/lib/lutaml/json/adapter/oj_adapter.rb +38 -0
  136. data/lib/lutaml/json/adapter/standard_adapter.rb +36 -0
  137. data/lib/lutaml/json/adapter/transform.rb +9 -0
  138. data/lib/lutaml/json/adapter.rb +20 -0
  139. data/lib/lutaml/json/schema/json_schema.rb +62 -0
  140. data/lib/lutaml/json/schema.rb +9 -0
  141. data/lib/lutaml/json/type/serializers.rb +72 -0
  142. data/lib/lutaml/json.rb +62 -0
  143. data/lib/lutaml/{model/jsonl → jsonl/adapter}/document.rb +2 -2
  144. data/lib/lutaml/jsonl/adapter/mapping.rb +19 -0
  145. data/lib/lutaml/jsonl/adapter/mapping_rule.rb +9 -0
  146. data/lib/lutaml/{model/jsonl → jsonl/adapter}/standard_adapter.rb +5 -4
  147. data/lib/lutaml/jsonl/adapter/transform.rb +26 -0
  148. data/lib/lutaml/jsonl/adapter.rb +13 -0
  149. data/lib/lutaml/jsonl.rb +21 -0
  150. data/lib/lutaml/key_value/adapter/hash/document.rb +13 -0
  151. data/lib/lutaml/key_value/adapter/hash/mapping.rb +19 -0
  152. data/lib/lutaml/key_value/adapter/hash/mapping_rule.rb +9 -0
  153. data/lib/lutaml/key_value/adapter/hash/standard_adapter.rb +19 -0
  154. data/lib/lutaml/key_value/adapter/hash/transform.rb +10 -0
  155. data/lib/lutaml/key_value/adapter/hash.rb +15 -0
  156. data/lib/lutaml/key_value/adapter/json/document.rb +16 -0
  157. data/lib/lutaml/key_value/adapter/json/mapping.rb +24 -0
  158. data/lib/lutaml/key_value/adapter/json/mapping_rule.rb +14 -0
  159. data/lib/lutaml/key_value/adapter/json/multi_json_adapter.rb +43 -0
  160. data/lib/lutaml/key_value/adapter/json/oj_adapter.rb +43 -0
  161. data/lib/lutaml/key_value/adapter/json/standard_adapter.rb +41 -0
  162. data/lib/lutaml/key_value/adapter/json/transform.rb +14 -0
  163. data/lib/lutaml/key_value/adapter/json.rb +24 -0
  164. data/lib/lutaml/key_value/adapter/jsonl/document.rb +16 -0
  165. data/lib/lutaml/key_value/adapter/jsonl/mapping.rb +19 -0
  166. data/lib/lutaml/key_value/adapter/jsonl/mapping_rule.rb +9 -0
  167. data/lib/lutaml/key_value/adapter/jsonl/standard_adapter.rb +36 -0
  168. data/lib/lutaml/key_value/adapter/jsonl/transform.rb +26 -0
  169. data/lib/lutaml/key_value/adapter/jsonl.rb +17 -0
  170. data/lib/lutaml/key_value/adapter/toml/document.rb +13 -0
  171. data/lib/lutaml/key_value/adapter/toml/mapping.rb +28 -0
  172. data/lib/lutaml/key_value/adapter/toml/mapping_rule.rb +9 -0
  173. data/lib/lutaml/key_value/adapter/toml/toml_rb_adapter.rb +40 -0
  174. data/lib/lutaml/key_value/adapter/toml/tomlib_adapter.rb +46 -0
  175. data/lib/lutaml/key_value/adapter/toml/transform.rb +10 -0
  176. data/lib/lutaml/key_value/adapter/toml.rb +21 -0
  177. data/lib/lutaml/key_value/adapter/yaml/document.rb +12 -0
  178. data/lib/lutaml/key_value/adapter/yaml/mapping.rb +19 -0
  179. data/lib/lutaml/key_value/adapter/yaml/mapping_rule.rb +9 -0
  180. data/lib/lutaml/key_value/adapter/yaml/standard_adapter.rb +41 -0
  181. data/lib/lutaml/key_value/adapter/yaml/transform.rb +10 -0
  182. data/lib/lutaml/key_value/adapter/yaml.rb +17 -0
  183. data/lib/lutaml/key_value/adapter/yamls/document.rb +16 -0
  184. data/lib/lutaml/key_value/adapter/yamls/mapping.rb +19 -0
  185. data/lib/lutaml/key_value/adapter/yamls/mapping_rule.rb +9 -0
  186. data/lib/lutaml/key_value/adapter/yamls/standard_adapter.rb +37 -0
  187. data/lib/lutaml/key_value/adapter/yamls/transform.rb +26 -0
  188. data/lib/lutaml/key_value/adapter/yamls.rb +17 -0
  189. data/lib/lutaml/key_value/adapter.rb +14 -0
  190. data/lib/lutaml/key_value/data_model/element.rb +222 -0
  191. data/lib/lutaml/key_value/data_model.rb +14 -0
  192. data/lib/lutaml/{model/key_value_document.rb → key_value/document.rb} +2 -2
  193. data/lib/lutaml/{model/mapping/key_value_mapping.rb → key_value/mapping.rb} +81 -43
  194. data/lib/lutaml/{model/mapping/key_value_mapping_rule.rb → key_value/mapping_rule.rb} +9 -10
  195. data/lib/lutaml/{model/transform/key_value_transform.rb → key_value/transform.rb} +111 -65
  196. data/lib/lutaml/key_value/transformation/collection_serializer.rb +575 -0
  197. data/lib/lutaml/key_value/transformation/rule_compiler.rb +294 -0
  198. data/lib/lutaml/key_value/transformation/value_serializer.rb +268 -0
  199. data/lib/lutaml/key_value/transformation.rb +1071 -0
  200. data/lib/lutaml/key_value/transformation_builder.rb +30 -0
  201. data/lib/lutaml/key_value.rb +24 -0
  202. data/lib/lutaml/model/adapter_resolver.rb +410 -0
  203. data/lib/lutaml/model/adapter_scope.rb +64 -0
  204. data/lib/lutaml/model/attribute.rb +515 -121
  205. data/lib/lutaml/model/attribute_validator.rb +288 -0
  206. data/lib/lutaml/model/cached_type_resolver/concurrent_map_cache.rb +46 -0
  207. data/lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb +51 -0
  208. data/lib/lutaml/model/cached_type_resolver.rb +144 -0
  209. data/lib/lutaml/model/choice.rb +230 -13
  210. data/lib/lutaml/model/cli.rb +75 -121
  211. data/lib/lutaml/model/collection.rb +510 -43
  212. data/lib/lutaml/model/collection_handler.rb +106 -0
  213. data/lib/lutaml/model/comparable_model.rb +11 -3
  214. data/lib/lutaml/model/comparable_nil.rb +0 -2
  215. data/lib/lutaml/model/compiled_rule.rb +208 -0
  216. data/lib/lutaml/model/config.rb +111 -80
  217. data/lib/lutaml/model/configuration.rb +91 -0
  218. data/lib/lutaml/model/consolidation/attribute_grouper.rb +44 -0
  219. data/lib/lutaml/model/consolidation/dispatcher.rb +45 -0
  220. data/lib/lutaml/model/consolidation/engine.rb +33 -0
  221. data/lib/lutaml/model/consolidation/pattern_chunker.rb +87 -0
  222. data/lib/lutaml/model/consolidation_map.rb +68 -0
  223. data/lib/lutaml/model/consolidation_rule/dispatch_block.rb +34 -0
  224. data/lib/lutaml/model/consolidation_rule/gather_rule.rb +17 -0
  225. data/lib/lutaml/model/consolidation_rule/pattern_content_rule.rb +15 -0
  226. data/lib/lutaml/model/consolidation_rule/pattern_element_rule.rb +17 -0
  227. data/lib/lutaml/model/consolidation_rule.rb +27 -0
  228. data/lib/lutaml/model/constants.rb +5 -3
  229. data/lib/lutaml/model/context_registry.rb +208 -0
  230. data/lib/lutaml/model/error/element_count_out_of_range_error.rb +13 -7
  231. data/lib/lutaml/model/error/format_adapter_not_specified_error.rb +25 -0
  232. data/lib/lutaml/model/error/invalid_attribute_type_error.rb +98 -0
  233. data/lib/lutaml/model/error/invalid_format_error.rb +11 -0
  234. data/lib/lutaml/model/error/liquid_class_not_found_error.rb +9 -0
  235. data/lib/lutaml/model/error/mapping_already_exists_error.rb +6 -0
  236. data/lib/lutaml/model/error/mapping_attribute_missing_error.rb +6 -0
  237. data/lib/lutaml/model/error/mapping_attribute_type_error.rb +6 -0
  238. data/lib/lutaml/model/error/mixed_content_collection_error.rb +17 -0
  239. data/lib/lutaml/model/error/no_attributes_defined_liquid_error.rb +9 -0
  240. data/lib/lutaml/model/error/no_mapping_found_error.rb +9 -0
  241. data/lib/lutaml/model/error/required_attribute_missing_error.rb +9 -0
  242. data/lib/lutaml/model/error/reverse_transform_block_not_defined_error.rb +6 -0
  243. data/lib/lutaml/model/error/reverse_transformation_declaration_error.rb +6 -0
  244. data/lib/lutaml/model/error/sorting_configuration_conflict_error.rb +9 -0
  245. data/lib/lutaml/model/error/transform_block_not_defined_error.rb +6 -0
  246. data/lib/lutaml/model/error/type.rb +17 -0
  247. data/lib/lutaml/model/error/undefined_attribute_error.rb +9 -0
  248. data/lib/lutaml/model/error/unknown_adapter_type_error.rb +82 -3
  249. data/lib/lutaml/model/error/unknown_type_error.rb +25 -2
  250. data/lib/lutaml/model/error/unresolvable_type_error.rb +27 -0
  251. data/lib/lutaml/model/error.rb +2 -33
  252. data/lib/lutaml/model/errors.rb +4 -2
  253. data/lib/lutaml/model/finalization_cache.rb +51 -0
  254. data/lib/lutaml/model/format_registry.rb +170 -9
  255. data/lib/lutaml/model/global_context.rb +446 -0
  256. data/lib/lutaml/model/global_register.rb +106 -5
  257. data/lib/lutaml/model/hash.rb +15 -0
  258. data/lib/lutaml/model/import_registry.rb +250 -0
  259. data/lib/lutaml/model/instrumentation.rb +304 -0
  260. data/lib/lutaml/model/json.rb +17 -13
  261. data/lib/lutaml/model/jsonl.rb +7 -13
  262. data/lib/lutaml/model/liquefiable.rb +100 -12
  263. data/lib/lutaml/model/liquid/mapping.rb +30 -0
  264. data/lib/lutaml/model/liquid.rb +9 -0
  265. data/lib/lutaml/model/mapping/listener.rb +124 -0
  266. data/lib/lutaml/model/mapping/mapping.rb +99 -1
  267. data/lib/lutaml/model/mapping/mapping_rule.rb +172 -17
  268. data/lib/lutaml/model/mapping/model_mapping.rb +133 -0
  269. data/lib/lutaml/model/mapping/model_mapping_rule.rb +57 -0
  270. data/lib/lutaml/model/mapping_hash.rb +3 -1
  271. data/lib/lutaml/model/model_transformer.rb +101 -0
  272. data/lib/lutaml/model/one_entry_cache.rb +57 -0
  273. data/lib/lutaml/model/organization.rb +29 -0
  274. data/lib/lutaml/model/register/model_tree_importer.rb +88 -0
  275. data/lib/lutaml/model/register/namespace_binding.rb +92 -0
  276. data/lib/lutaml/model/register.rb +500 -35
  277. data/lib/lutaml/model/registrable.rb +2 -0
  278. data/lib/lutaml/model/render_policy.rb +154 -0
  279. data/lib/lutaml/model/runtime_compatibility.rb +95 -0
  280. data/lib/lutaml/model/schema/base_schema.rb +1 -3
  281. data/lib/lutaml/model/schema/decorators/attribute.rb +3 -1
  282. data/lib/lutaml/model/schema/decorators/choices.rb +0 -2
  283. data/lib/lutaml/model/schema/decorators/class_definition.rb +4 -5
  284. data/lib/lutaml/model/schema/decorators/definition_collection.rb +7 -7
  285. data/lib/lutaml/model/schema/decorators.rb +15 -0
  286. data/lib/lutaml/model/schema/generator/definition.rb +4 -3
  287. data/lib/lutaml/model/schema/generator/definitions_collection.rb +4 -3
  288. data/lib/lutaml/model/schema/generator/properties_collection.rb +7 -5
  289. data/lib/lutaml/model/schema/generator/property.rb +5 -1
  290. data/lib/lutaml/model/schema/generator.rb +15 -0
  291. data/lib/lutaml/model/schema/helpers.rb +11 -0
  292. data/lib/lutaml/model/schema/json_schema.rb +9 -53
  293. data/lib/lutaml/model/schema/renderer.rb +19 -17
  294. data/lib/lutaml/model/schema/schema_builder/nokogiri.rb +41 -0
  295. data/lib/lutaml/model/schema/schema_builder/oga.rb +92 -0
  296. data/lib/lutaml/model/schema/shared_methods.rb +2 -2
  297. data/lib/lutaml/model/schema/xml_compiler/attribute.rb +33 -12
  298. data/lib/lutaml/model/schema/xml_compiler/attribute_group.rb +3 -1
  299. data/lib/lutaml/model/schema/xml_compiler/choice.rb +4 -2
  300. data/lib/lutaml/model/schema/xml_compiler/complex_type.rb +73 -36
  301. data/lib/lutaml/model/schema/xml_compiler/element.rb +18 -1
  302. data/lib/lutaml/model/schema/xml_compiler/group.rb +20 -4
  303. data/lib/lutaml/model/schema/xml_compiler/registry_generator.rb +127 -0
  304. data/lib/lutaml/model/schema/xml_compiler/restriction.rb +5 -2
  305. data/lib/lutaml/model/schema/xml_compiler/sequence.rb +6 -2
  306. data/lib/lutaml/model/schema/xml_compiler/simple_content.rb +7 -3
  307. data/lib/lutaml/model/schema/xml_compiler/simple_type.rb +127 -51
  308. data/lib/lutaml/model/schema/xml_compiler/xml_namespace_class.rb +110 -0
  309. data/lib/lutaml/model/schema/xml_compiler.rb +256 -82
  310. data/lib/lutaml/model/schema/yaml_schema.rb +10 -50
  311. data/lib/lutaml/model/schema.rb +49 -14
  312. data/lib/lutaml/model/schema_location.rb +12 -60
  313. data/lib/lutaml/model/sequence.rb +102 -30
  314. data/lib/lutaml/model/serializable.rb +1 -3
  315. data/lib/lutaml/model/serialization_adapter.rb +2 -0
  316. data/lib/lutaml/model/serialize/attribute_definition.rb +229 -0
  317. data/lib/lutaml/model/serialize/builder.rb +169 -0
  318. data/lib/lutaml/model/serialize/enum_handling.rb +124 -0
  319. data/lib/lutaml/model/serialize/format_conversion.rb +337 -0
  320. data/lib/lutaml/model/serialize/initialization.rb +308 -0
  321. data/lib/lutaml/model/serialize/model_import.rb +357 -0
  322. data/lib/lutaml/model/serialize/transformation_builder.rb +127 -0
  323. data/lib/lutaml/model/serialize/value_mapping.rb +200 -0
  324. data/lib/lutaml/model/serialize.rb +175 -578
  325. data/lib/lutaml/model/services/base.rb +2 -2
  326. data/lib/lutaml/model/services/default_value_resolver.rb +60 -0
  327. data/lib/lutaml/model/services/logger.rb +10 -7
  328. data/lib/lutaml/model/services/rule_value_extractor.rb +22 -36
  329. data/lib/lutaml/model/services/transformer.rb +50 -9
  330. data/lib/lutaml/model/services/type/validator/string.rb +3 -2
  331. data/lib/lutaml/model/services/type/validator/symbol.rb +30 -0
  332. data/lib/lutaml/model/services/type/validator.rb +5 -2
  333. data/lib/lutaml/model/services/type.rb +9 -0
  334. data/lib/lutaml/model/services/validator.rb +1 -3
  335. data/lib/lutaml/model/services.rb +12 -5
  336. data/lib/lutaml/model/store.rb +59 -0
  337. data/lib/lutaml/model/toml.rb +24 -18
  338. data/lib/lutaml/model/transform/xml_transform.rb +4 -227
  339. data/lib/lutaml/model/transform.rb +49 -17
  340. data/lib/lutaml/model/transformation.rb +84 -0
  341. data/lib/lutaml/model/transformation_builder.rb +55 -0
  342. data/lib/lutaml/model/transformation_registry.rb +314 -0
  343. data/lib/lutaml/model/type/base64_binary.rb +58 -0
  344. data/lib/lutaml/model/type/boolean.rb +9 -16
  345. data/lib/lutaml/model/type/date.rb +49 -9
  346. data/lib/lutaml/model/type/date_time.rb +30 -18
  347. data/lib/lutaml/model/type/decimal.rb +28 -9
  348. data/lib/lutaml/model/type/duration.rb +82 -0
  349. data/lib/lutaml/model/type/float.rb +12 -13
  350. data/lib/lutaml/model/type/hash.rb +10 -17
  351. data/lib/lutaml/model/type/hex_binary.rb +56 -0
  352. data/lib/lutaml/model/type/integer.rb +19 -1
  353. data/lib/lutaml/model/type/qname.rb +85 -0
  354. data/lib/lutaml/model/type/reference.rb +76 -0
  355. data/lib/lutaml/model/type/string.rb +18 -35
  356. data/lib/lutaml/model/type/symbol.rb +67 -0
  357. data/lib/lutaml/model/type/time.rb +19 -22
  358. data/lib/lutaml/model/type/time_without_date.rb +18 -18
  359. data/lib/lutaml/model/type/uninitialized_class_guard.rb +36 -0
  360. data/lib/lutaml/model/type/uri.rb +51 -0
  361. data/lib/lutaml/model/type/value.rb +52 -5
  362. data/lib/lutaml/model/type.rb +98 -13
  363. data/lib/lutaml/model/type_context.rb +279 -0
  364. data/lib/lutaml/model/type_registry.rb +165 -0
  365. data/lib/lutaml/model/type_resolver.rb +185 -0
  366. data/lib/lutaml/model/type_substitution.rb +117 -0
  367. data/lib/lutaml/model/uninitialized_class.rb +1 -1
  368. data/lib/lutaml/model/utils.rb +110 -9
  369. data/lib/lutaml/model/validation.rb +50 -7
  370. data/lib/lutaml/model/value_transformer.rb +25 -0
  371. data/lib/lutaml/model/version.rb +1 -1
  372. data/lib/lutaml/model/yaml.rb +7 -13
  373. data/lib/lutaml/model/yamls.rb +7 -13
  374. data/lib/lutaml/model.rb +229 -25
  375. data/lib/lutaml/{model/toml → toml/adapter}/document.rb +3 -4
  376. data/lib/lutaml/{model/toml → toml/adapter}/mapping.rb +7 -6
  377. data/lib/lutaml/toml/adapter/mapping_rule.rb +9 -0
  378. data/lib/lutaml/toml/adapter/toml_rb_adapter.rb +38 -0
  379. data/lib/lutaml/toml/adapter/tomlib_adapter.rb +54 -0
  380. data/lib/lutaml/toml/adapter/transform.rb +9 -0
  381. data/lib/lutaml/toml/adapter.rb +19 -0
  382. data/lib/lutaml/toml/type/serializers.rb +71 -0
  383. data/lib/lutaml/toml.rb +48 -0
  384. data/lib/lutaml/xml/adapter/adapter_helpers.rb +149 -0
  385. data/lib/lutaml/xml/adapter/base_adapter.rb +672 -0
  386. data/lib/lutaml/xml/adapter/namespace_data.rb +73 -0
  387. data/lib/lutaml/xml/adapter/nokogiri_adapter.rb +1115 -0
  388. data/lib/lutaml/xml/adapter/oga_adapter.rb +849 -0
  389. data/lib/lutaml/xml/adapter/ox_adapter.rb +891 -0
  390. data/lib/lutaml/xml/adapter/rexml_adapter.rb +869 -0
  391. data/lib/lutaml/xml/adapter/xml_serialization.rb +145 -0
  392. data/lib/lutaml/xml/adapter.rb +20 -0
  393. data/lib/lutaml/xml/adapter_element.rb +185 -0
  394. data/lib/lutaml/xml/adapter_loader.rb +53 -0
  395. data/lib/lutaml/xml/attribute_namespace_resolver.rb +139 -0
  396. data/lib/lutaml/xml/blank_namespace.rb +51 -0
  397. data/lib/lutaml/xml/blank_namespace_handler.rb +50 -0
  398. data/lib/lutaml/xml/builder/base.rb +215 -0
  399. data/lib/lutaml/xml/builder/nokogiri.rb +12 -0
  400. data/lib/lutaml/xml/builder/oga.rb +15 -0
  401. data/lib/lutaml/xml/builder/ox.rb +15 -0
  402. data/lib/lutaml/xml/builder/rexml.rb +15 -0
  403. data/lib/lutaml/xml/builder.rb +16 -0
  404. data/lib/lutaml/xml/configurable.rb +214 -0
  405. data/lib/lutaml/xml/data_model.rb +257 -0
  406. data/lib/lutaml/xml/decisions/decision.rb +103 -0
  407. data/lib/lutaml/xml/decisions/decision_context.rb +225 -0
  408. data/lib/lutaml/xml/decisions/decision_engine.rb +67 -0
  409. data/lib/lutaml/xml/decisions/decision_rule.rb +54 -0
  410. data/lib/lutaml/xml/decisions/element_prefix_resolver.rb +85 -0
  411. data/lib/lutaml/xml/decisions/rules/attribute_usage_rule.rb +37 -0
  412. data/lib/lutaml/xml/decisions/rules/default_preference_rule.rb +62 -0
  413. data/lib/lutaml/xml/decisions/rules/element_form_default_rule.rb +66 -0
  414. data/lib/lutaml/xml/decisions/rules/element_form_default_unqualified_rule.rb +73 -0
  415. data/lib/lutaml/xml/decisions/rules/element_form_option_rule.rb +83 -0
  416. data/lib/lutaml/xml/decisions/rules/explicit_option_rule.rb +57 -0
  417. data/lib/lutaml/xml/decisions/rules/format_preservation_rule.rb +74 -0
  418. data/lib/lutaml/xml/decisions/rules/hoisted_on_parent_rule.rb +60 -0
  419. data/lib/lutaml/xml/decisions/rules/inherit_from_parent_rule.rb +52 -0
  420. data/lib/lutaml/xml/decisions/rules/inherit_parent_prefix_rule.rb +69 -0
  421. data/lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb +54 -0
  422. data/lib/lutaml/xml/decisions/rules/reuse_parent_prefix_rule.rb +78 -0
  423. data/lib/lutaml/xml/decisions/rules/used_prefix_rule.rb +70 -0
  424. data/lib/lutaml/xml/decisions/rules.rb +39 -0
  425. data/lib/lutaml/xml/decisions.rb +15 -0
  426. data/lib/lutaml/xml/declaration_handler.rb +217 -0
  427. data/lib/lutaml/xml/declaration_plan/attribute_node.rb +81 -0
  428. data/lib/lutaml/xml/declaration_plan/element_node.rb +101 -0
  429. data/lib/lutaml/xml/declaration_plan.rb +480 -0
  430. data/lib/lutaml/xml/declaration_plan_query.rb +105 -0
  431. data/lib/lutaml/xml/declaration_planner.rb +1849 -0
  432. data/lib/lutaml/xml/doctype_extractor.rb +51 -0
  433. data/lib/lutaml/xml/document.rb +380 -0
  434. data/lib/lutaml/xml/element.rb +93 -0
  435. data/lib/lutaml/xml/element_prefix_resolver.rb +50 -0
  436. data/lib/lutaml/xml/encoding_normalizer.rb +54 -0
  437. data/lib/lutaml/xml/error/invalid_namespace_error.rb +46 -0
  438. data/lib/lutaml/xml/error/invalid_xsd_type_error.rb +43 -0
  439. data/lib/lutaml/xml/error/namespace_mismatch_error.rb +53 -0
  440. data/lib/lutaml/xml/error/xml_configuration_error.rb +17 -0
  441. data/lib/lutaml/xml/error/xml_error.rb +21 -0
  442. data/lib/lutaml/xml/format_chooser.rb +214 -0
  443. data/lib/lutaml/xml/hoisting_algorithm.rb +234 -0
  444. data/lib/lutaml/xml/listener.rb +33 -0
  445. data/lib/lutaml/xml/mapping.rb +1470 -0
  446. data/lib/lutaml/xml/mapping_rule.rb +565 -0
  447. data/lib/lutaml/xml/model_transform.rb +944 -0
  448. data/lib/lutaml/xml/namespace.rb +435 -0
  449. data/lib/lutaml/xml/namespace_class_registry.rb +144 -0
  450. data/lib/lutaml/xml/namespace_collector.rb +611 -0
  451. data/lib/lutaml/xml/namespace_declaration.rb +202 -0
  452. data/lib/lutaml/xml/namespace_declaration_builder.rb +67 -0
  453. data/lib/lutaml/xml/namespace_declaration_data.rb +182 -0
  454. data/lib/lutaml/xml/namespace_inheritance_resolver.rb +142 -0
  455. data/lib/lutaml/xml/namespace_inheritance_strategy.rb +26 -0
  456. data/lib/lutaml/xml/namespace_needs.rb +213 -0
  457. data/lib/lutaml/xml/namespace_resolution_strategy.rb +230 -0
  458. data/lib/lutaml/xml/namespace_resolver.rb +219 -0
  459. data/lib/lutaml/xml/namespace_scope_config.rb +109 -0
  460. data/lib/lutaml/xml/namespace_type_resolver.rb +135 -0
  461. data/lib/lutaml/xml/namespace_usage.rb +121 -0
  462. data/lib/lutaml/xml/nokogiri/element.rb +34 -0
  463. data/lib/lutaml/xml/nokogiri.rb +10 -0
  464. data/lib/lutaml/xml/oga/element.rb +15 -0
  465. data/lib/lutaml/xml/oga.rb +10 -0
  466. data/lib/lutaml/xml/ox/element.rb +15 -0
  467. data/lib/lutaml/xml/ox.rb +10 -0
  468. data/lib/lutaml/xml/parsed_namespace_declaration.rb +129 -0
  469. data/lib/lutaml/xml/parsed_namespace_set.rb +149 -0
  470. data/lib/lutaml/xml/polymorphic_value_handler.rb +41 -0
  471. data/lib/lutaml/xml/qualified_inheritance_strategy.rb +27 -0
  472. data/lib/lutaml/xml/rexml/element.rb +15 -0
  473. data/lib/lutaml/xml/rexml.rb +10 -0
  474. data/lib/lutaml/xml/schema/builder/nokogiri.rb +41 -0
  475. data/lib/lutaml/xml/schema/builder/oga.rb +92 -0
  476. data/lib/lutaml/xml/schema/builder.rb +59 -0
  477. data/lib/lutaml/xml/schema/builtin_types.rb +112 -0
  478. data/lib/lutaml/{model → xml}/schema/relaxng_schema.rb +9 -4
  479. data/lib/lutaml/xml/schema/xsd/all.rb +31 -0
  480. data/lib/lutaml/xml/schema/xsd/annotation.rb +31 -0
  481. data/lib/lutaml/xml/schema/xsd/any.rb +33 -0
  482. data/lib/lutaml/xml/schema/xsd/any_attribute.rb +29 -0
  483. data/lib/lutaml/xml/schema/xsd/appinfo.rb +25 -0
  484. data/lib/lutaml/xml/schema/xsd/attribute.rb +78 -0
  485. data/lib/lutaml/xml/schema/xsd/attribute_group.rb +89 -0
  486. data/lib/lutaml/xml/schema/xsd/base.rb +267 -0
  487. data/lib/lutaml/xml/schema/xsd/choice.rb +68 -0
  488. data/lib/lutaml/xml/schema/xsd/complex_content.rb +39 -0
  489. data/lib/lutaml/xml/schema/xsd/complex_type.rb +157 -0
  490. data/lib/lutaml/xml/schema/xsd/documentation.rb +26 -0
  491. data/lib/lutaml/xml/schema/xsd/element.rb +117 -0
  492. data/lib/lutaml/xml/schema/xsd/enumeration.rb +25 -0
  493. data/lib/lutaml/xml/schema/xsd/errors/enhanced_error.rb +142 -0
  494. data/lib/lutaml/xml/schema/xsd/errors/error_context.rb +67 -0
  495. data/lib/lutaml/xml/schema/xsd/errors/message_builder.rb +103 -0
  496. data/lib/lutaml/xml/schema/xsd/errors/suggestion.rb +67 -0
  497. data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/namespace_troubleshooter.rb +96 -0
  498. data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/troubleshooting_handler.rb +70 -0
  499. data/lib/lutaml/xml/schema/xsd/errors.rb +148 -0
  500. data/lib/lutaml/xml/schema/xsd/extension_complex_content.rb +63 -0
  501. data/lib/lutaml/xml/schema/xsd/extension_simple_content.rb +48 -0
  502. data/lib/lutaml/xml/schema/xsd/field.rb +25 -0
  503. data/lib/lutaml/xml/schema/xsd/file_validation_result.rb +55 -0
  504. data/lib/lutaml/xml/schema/xsd/fraction_digits.rb +29 -0
  505. data/lib/lutaml/xml/schema/xsd/glob.rb +105 -0
  506. data/lib/lutaml/xml/schema/xsd/group.rb +79 -0
  507. data/lib/lutaml/xml/schema/xsd/import.rb +33 -0
  508. data/lib/lutaml/xml/schema/xsd/include.rb +31 -0
  509. data/lib/lutaml/xml/schema/xsd/key.rb +32 -0
  510. data/lib/lutaml/xml/schema/xsd/keyref.rb +33 -0
  511. data/lib/lutaml/xml/schema/xsd/length.rb +27 -0
  512. data/lib/lutaml/xml/schema/xsd/list.rb +28 -0
  513. data/lib/lutaml/xml/schema/xsd/max_exclusive.rb +25 -0
  514. data/lib/lutaml/xml/schema/xsd/max_inclusive.rb +23 -0
  515. data/lib/lutaml/xml/schema/xsd/max_length.rb +25 -0
  516. data/lib/lutaml/xml/schema/xsd/min_exclusive.rb +25 -0
  517. data/lib/lutaml/xml/schema/xsd/min_inclusive.rb +23 -0
  518. data/lib/lutaml/xml/schema/xsd/min_length.rb +25 -0
  519. data/lib/lutaml/xml/schema/xsd/namespace_mapping.rb +37 -0
  520. data/lib/lutaml/xml/schema/xsd/namespace_uri_remapping.rb +79 -0
  521. data/lib/lutaml/xml/schema/xsd/notation.rb +31 -0
  522. data/lib/lutaml/xml/schema/xsd/pattern.rb +25 -0
  523. data/lib/lutaml/xml/schema/xsd/redefine.rb +35 -0
  524. data/lib/lutaml/xml/schema/xsd/restriction_complex_content.rb +56 -0
  525. data/lib/lutaml/xml/schema/xsd/restriction_simple_content.rb +84 -0
  526. data/lib/lutaml/xml/schema/xsd/restriction_simple_type.rb +64 -0
  527. data/lib/lutaml/xml/schema/xsd/schema.rb +373 -0
  528. data/lib/lutaml/xml/schema/xsd/schema_file_validation_results.rb +55 -0
  529. data/lib/lutaml/xml/schema/xsd/schema_location_mapping.rb +74 -0
  530. data/lib/lutaml/xml/schema/xsd/schema_name_resolver.rb +32 -0
  531. data/lib/lutaml/xml/schema/xsd/schema_path.rb +196 -0
  532. data/lib/lutaml/xml/schema/xsd/schema_validator.rb +256 -0
  533. data/lib/lutaml/xml/schema/xsd/selector.rb +27 -0
  534. data/lib/lutaml/xml/schema/xsd/sequence.rb +68 -0
  535. data/lib/lutaml/xml/schema/xsd/serialized_schema.rb +185 -0
  536. data/lib/lutaml/xml/schema/xsd/simple_content.rb +61 -0
  537. data/lib/lutaml/xml/schema/xsd/simple_type.rb +37 -0
  538. data/lib/lutaml/xml/schema/xsd/total_digits.rb +29 -0
  539. data/lib/lutaml/xml/schema/xsd/type_index_entry.rb +40 -0
  540. data/lib/lutaml/xml/schema/xsd/type_resolution_result.rb +112 -0
  541. data/lib/lutaml/xml/schema/xsd/union.rb +30 -0
  542. data/lib/lutaml/xml/schema/xsd/unique.rb +31 -0
  543. data/lib/lutaml/xml/schema/xsd/validation_error.rb +48 -0
  544. data/lib/lutaml/xml/schema/xsd/validation_result.rb +86 -0
  545. data/lib/lutaml/xml/schema/xsd/version.rb +11 -0
  546. data/lib/lutaml/xml/schema/xsd/white_space.rb +27 -0
  547. data/lib/lutaml/xml/schema/xsd.rb +165 -0
  548. data/lib/lutaml/xml/schema/xsd_namespace.rb +29 -0
  549. data/lib/lutaml/xml/schema/xsd_schema.rb +536 -0
  550. data/lib/lutaml/xml/schema.rb +13 -0
  551. data/lib/lutaml/xml/schema_location.rb +155 -0
  552. data/lib/lutaml/xml/serialization/collection_ext.rb +61 -0
  553. data/lib/lutaml/xml/serialization/format_conversion.rb +402 -0
  554. data/lib/lutaml/xml/serialization/instance_methods.rb +303 -0
  555. data/lib/lutaml/xml/serialization/model_import_ext.rb +40 -0
  556. data/lib/lutaml/xml/serialization.rb +15 -0
  557. data/lib/lutaml/xml/shared_dsl.rb +119 -0
  558. data/lib/lutaml/xml/transform.rb +6 -0
  559. data/lib/lutaml/xml/transformation/custom_method_wrapper.rb +262 -0
  560. data/lib/lutaml/xml/transformation/element_builder.rb +586 -0
  561. data/lib/lutaml/xml/transformation/ordered_applier.rb +329 -0
  562. data/lib/lutaml/xml/transformation/rule_applier.rb +379 -0
  563. data/lib/lutaml/xml/transformation/rule_compiler.rb +543 -0
  564. data/lib/lutaml/xml/transformation/skip_logic.rb +70 -0
  565. data/lib/lutaml/xml/transformation/value_serializer.rb +139 -0
  566. data/lib/lutaml/xml/transformation.rb +340 -0
  567. data/lib/lutaml/xml/transformation_builder.rb +28 -0
  568. data/lib/lutaml/xml/transformation_support.rb +14 -0
  569. data/lib/lutaml/xml/type/configurable.rb +157 -0
  570. data/lib/lutaml/xml/type/serializers.rb +98 -0
  571. data/lib/lutaml/xml/type/value_xml_mapping.rb +94 -0
  572. data/lib/lutaml/xml/type_namespace/collector.rb +101 -0
  573. data/lib/lutaml/xml/type_namespace/declaration.rb +61 -0
  574. data/lib/lutaml/xml/type_namespace/planner.rb +121 -0
  575. data/lib/lutaml/xml/type_namespace/reference.rb +71 -0
  576. data/lib/lutaml/xml/type_namespace/resolver.rb +43 -0
  577. data/lib/lutaml/xml/type_namespace.rb +13 -0
  578. data/lib/lutaml/xml/type_namespace_resolver.rb +76 -0
  579. data/lib/lutaml/xml/unqualified_inheritance_strategy.rb +34 -0
  580. data/lib/lutaml/xml/w3c/registration.rb +66 -0
  581. data/lib/lutaml/xml/w3c.rb +398 -0
  582. data/lib/lutaml/xml/xml_attribute.rb +38 -0
  583. data/lib/lutaml/xml/xml_element.rb +447 -0
  584. data/lib/lutaml/xml/xml_namespace.rb +72 -0
  585. data/lib/lutaml/xml.rb +294 -0
  586. data/lib/lutaml/{model/yaml → yaml/adapter}/document.rb +3 -3
  587. data/lib/lutaml/yaml/adapter/mapping.rb +19 -0
  588. data/lib/lutaml/yaml/adapter/mapping_rule.rb +9 -0
  589. data/lib/lutaml/yaml/adapter/standard_adapter.rb +39 -0
  590. data/lib/lutaml/yaml/adapter/transform.rb +9 -0
  591. data/lib/lutaml/yaml/adapter.rb +13 -0
  592. data/lib/lutaml/yaml/schema/yaml_schema.rb +65 -0
  593. data/lib/lutaml/yaml/schema.rb +9 -0
  594. data/lib/lutaml/yaml/type/serializers.rb +60 -0
  595. data/lib/lutaml/yaml.rb +30 -0
  596. data/lib/lutaml/{model/yamls → yamls/adapter}/document.rb +2 -2
  597. data/lib/lutaml/yamls/adapter/mapping.rb +26 -0
  598. data/lib/lutaml/yamls/adapter/mapping_rule.rb +9 -0
  599. data/lib/lutaml/yamls/adapter/standard_adapter.rb +56 -0
  600. data/lib/lutaml/yamls/adapter/transform.rb +124 -0
  601. data/lib/lutaml/yamls/adapter/yamls_sequence.rb +20 -0
  602. data/lib/lutaml/yamls/adapter/yamls_sequence_rule.rb +48 -0
  603. data/lib/lutaml/yamls/adapter.rb +15 -0
  604. data/lib/lutaml/yamls.rb +21 -0
  605. data/lib/tasks/benchmark_runner.rb +161 -0
  606. data/lib/tasks/memory_profile.rb +176 -0
  607. data/lib/tasks/performance.rake +75 -0
  608. data/lib/tasks/performance_benchmark.rb +499 -0
  609. data/lib/tasks/performance_comparator.rb +114 -0
  610. data/lib/tasks/performance_helpers.rb +149 -0
  611. data/lib/tasks/xml_compiler_benchmark.rb +226 -0
  612. data/lib/tasks/xml_optimization_benchmark.rb +178 -0
  613. data/lutaml-model.gemspec +11 -1
  614. data/reference-docs/XML Entity Definitions for Characters (3rd Edition).html +595 -0
  615. data/scripts-xmi-profile/profile_xmi.rb +192 -0
  616. data/scripts-xmi-profile/profile_xmi_simple.rb +210 -0
  617. data/spec/address_person_spec.rb +436 -0
  618. data/spec/address_spec.rb +20 -18
  619. data/spec/ceramic_spec.rb +25 -7
  620. data/spec/fixtures/address.rb +2 -2
  621. data/spec/fixtures/ceramic.rb +6 -2
  622. data/spec/fixtures/geolexica_v2_concept.rb +136 -0
  623. data/spec/fixtures/geolexica_v2_sample.yaml +36 -0
  624. data/spec/fixtures/geolexica_v2_sample2.yaml +38 -0
  625. data/spec/fixtures/person.rb +14 -13
  626. data/spec/fixtures/sample_model.rb +3 -3
  627. data/spec/fixtures/vase.rb +3 -3
  628. data/spec/fixtures/xml/address_example_260.xsd +8 -4
  629. data/spec/fixtures/xml/examples/nested_categories.xml +45 -51
  630. data/spec/fixtures/xml/examples/valid_catalog.xml +27 -41
  631. data/spec/fixtures/xml/math_document_schema.xsd +7 -5
  632. data/spec/fixtures/xml/product_catalog.xsd +19 -138
  633. data/spec/fixtures/xml/schema/xsd/build_test_package.rb +19 -0
  634. data/spec/fixtures/xml/schema/xsd/citygml/2.0/cityGMLBase.xsd +339 -0
  635. data/spec/fixtures/xml/schema/xsd/citygml/appearance/2.0/appearance.xsd +332 -0
  636. data/spec/fixtures/xml/schema/xsd/citygml/bridge/2.0/bridge.xsd +578 -0
  637. data/spec/fixtures/xml/schema/xsd/citygml/building/2.0/building.xsd +535 -0
  638. data/spec/fixtures/xml/schema/xsd/citygml/cityfurniture/2.0/cityFurniture.xsd +57 -0
  639. data/spec/fixtures/xml/schema/xsd/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd +84 -0
  640. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/noise-ade/CityGML-NoiseADE.xsd +174 -0
  641. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/stdOp.xsd +46 -0
  642. data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/unr.xsd +46 -0
  643. data/spec/fixtures/xml/schema/xsd/citygml/generics/2.0/generics.xsd +184 -0
  644. data/spec/fixtures/xml/schema/xsd/citygml/landuse/2.0/landUse.xsd +50 -0
  645. data/spec/fixtures/xml/schema/xsd/citygml/profiles/base/2.0/CityGML.xsd +30 -0
  646. data/spec/fixtures/xml/schema/xsd/citygml/relief/2.0/relief.xsd +186 -0
  647. data/spec/fixtures/xml/schema/xsd/citygml/texturedsurface/2.0/texturedSurface.xsd +157 -0
  648. data/spec/fixtures/xml/schema/xsd/citygml/transportation/2.0/transportation.xsd +224 -0
  649. data/spec/fixtures/xml/schema/xsd/citygml/tunnel/2.0/tunnel.xsd +530 -0
  650. data/spec/fixtures/xml/schema/xsd/citygml/vegetation/2.0/vegetation.xsd +108 -0
  651. data/spec/fixtures/xml/schema/xsd/citygml/waterbody/2.0/waterBody.xsd +171 -0
  652. data/spec/fixtures/xml/schema/xsd/citygml/xAL/xAL.xsd +1680 -0
  653. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/basicTypes.xsd +262 -0
  654. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateOperations.xsd +519 -0
  655. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateReferenceSystems.xsd +367 -0
  656. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateSystems.xsd +291 -0
  657. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coverage.xsd +287 -0
  658. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/datums.xsd +281 -0
  659. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/defaultStyle.xsd +447 -0
  660. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/deprecatedTypes.xsd +1128 -0
  661. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dictionary.xsd +84 -0
  662. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/direction.xsd +78 -0
  663. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dynamicFeature.xsd +103 -0
  664. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/feature.xsd +88 -0
  665. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryAggregates.xsd +191 -0
  666. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic0d1d.xsd +271 -0
  667. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic2d.xsd +118 -0
  668. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryComplexes.xsd +89 -0
  669. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryPrimitives.xsd +841 -0
  670. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gml.xsd +15 -0
  671. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gmlBase.xsd +179 -0
  672. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/grids.xsd +58 -0
  673. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/measures.xsd +63 -0
  674. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/observation.xsd +90 -0
  675. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/referenceSystems.xsd +64 -0
  676. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporal.xsd +263 -0
  677. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalReferenceSystems.xsd +183 -0
  678. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalTopology.xsd +113 -0
  679. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/topology.xsd +380 -0
  680. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/units.xsd +156 -0
  681. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/valueObjects.xsd +199 -0
  682. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/basicTypes.xsd +429 -0
  683. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gco.xsd +12 -0
  684. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gcoBase.xsd +61 -0
  685. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/applicationSchema.xsd +42 -0
  686. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/citation.xsd +275 -0
  687. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/constraints.xsd +106 -0
  688. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/content.xsd +188 -0
  689. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/dataQuality.xsd +554 -0
  690. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/distribution.xsd +202 -0
  691. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/extent.xsd +205 -0
  692. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/freeText.xsd +122 -0
  693. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/gmd.xsd +12 -0
  694. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/identification.xsd +348 -0
  695. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/maintenance.xsd +86 -0
  696. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataApplication.xsd +175 -0
  697. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataEntity.xsd +70 -0
  698. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataExtension.xsd +99 -0
  699. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/portrayalCatalogue.xsd +36 -0
  700. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/referenceSystem.xsd +100 -0
  701. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/spatialRepresentation.xsd +237 -0
  702. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/catalogues.xsd +112 -0
  703. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/codelistItem.xsd +168 -0
  704. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/crsItem.xsd +1030 -0
  705. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/extendedTypes.xsd +75 -0
  706. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmx.xsd +2 -0
  707. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmxUsage.xsd +127 -0
  708. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/uomItem.xsd +162 -0
  709. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/gsr.xsd +12 -0
  710. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/spatialReferencing.xsd +24 -0
  711. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/geometry.xsd +35 -0
  712. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/gss.xsd +12 -0
  713. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/gts.xsd +12 -0
  714. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/temporalObjects.xsd +34 -0
  715. data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/xlink/1.0.0/xlinks.xsd +122 -0
  716. data/spec/fixtures/xml/schema/xsd/i-ur/urbanFunction.xsd +2772 -0
  717. data/spec/fixtures/xml/schema/xsd/i-ur/urbanObject.xsd +3344 -0
  718. data/spec/fixtures/xml/schema/xsd/import-without-location.xsd +9 -0
  719. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/baseTypes.xsd +775 -0
  720. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/gco.xsd +17 -0
  721. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/baseTypes.xsd +775 -0
  722. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/gco.xsd +17 -0
  723. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/extendedTypes.xsd +151 -0
  724. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/gcx.xsd +16 -0
  725. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/extendedTypes.xsd +151 -0
  726. data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/gcx.xsd +16 -0
  727. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/coordinateGeometry.xsd +1078 -0
  728. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricAggregates.xsd +141 -0
  729. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricComplex.xsd +177 -0
  730. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricPrimative.xsd +526 -0
  731. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometry.xsd +9 -0
  732. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometryRoot.xsd +59 -0
  733. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/gss.xsd +26 -0
  734. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoComplex.xsd +33 -0
  735. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoPrimative.xsd +432 -0
  736. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoRoot.xsd +9 -0
  737. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topology.xsd +15 -0
  738. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/coordinates.xsd +15 -0
  739. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/curves.xsd +22 -0
  740. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/geometry.xsd +41 -0
  741. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/gss.xsd +21 -0
  742. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/simplicialGeometry.xsd +63 -0
  743. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/solids.xsd +21 -0
  744. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/surfaces.xsd +15 -0
  745. data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/topology.xsd +21 -0
  746. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/abstract.xsd +47 -0
  747. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/fcc.xsd +12 -0
  748. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/abstract.xsd +45 -0
  749. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/fcc.xsd +11 -0
  750. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/abstract.xsd +45 -0
  751. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/fcc.xsd +11 -0
  752. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/1.0/gfc.xsd +497 -0
  753. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/featureCatalogue.xsd +673 -0
  754. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/gfc.xsd +19 -0
  755. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/featureCatalogue.xsd +798 -0
  756. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/gfc.xsd +19 -0
  757. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/featureCatalogue.xsd +798 -0
  758. data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/gfc.xsd +19 -0
  759. data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/abstract.xsd +49 -0
  760. data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/fcc.xsd +9 -0
  761. data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/featureCatalogue.xsd +671 -0
  762. data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/gfc.xsd +13 -0
  763. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbc.xsd +13 -0
  764. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbcStubs.xsd +195 -0
  765. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbc.xsd +13 -0
  766. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbcStubs.xsd +195 -0
  767. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/AbstractCommonClasses.xsd +282 -0
  768. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/commonClasses.xsd +127 -0
  769. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordOps.xsd +676 -0
  770. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordRefSys.xsd +498 -0
  771. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordSys.xsd +844 -0
  772. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordinates.xsd +101 -0
  773. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/datum.xsd +474 -0
  774. data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/rbc.xsd +18 -0
  775. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/cit.xsd +12 -0
  776. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/citation.xsd +445 -0
  777. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/cit.xsd +12 -0
  778. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/citation.xsd +445 -0
  779. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/extent.xsd +243 -0
  780. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/gex.xsd +16 -0
  781. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/extent.xsd +243 -0
  782. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/gex.xsd +16 -0
  783. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/extent.xsd +244 -0
  784. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/gex.xsd +15 -0
  785. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/lan.xsd +13 -0
  786. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/language.xsd +152 -0
  787. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/lan.xsd +13 -0
  788. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/language.xsd +152 -0
  789. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/applicationSchema.xsd +58 -0
  790. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/mas.xsd +16 -0
  791. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/applicationSchema.xsd +58 -0
  792. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/mas.xsd +16 -0
  793. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/AbstractCommonClasses.xsd +378 -0
  794. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/commonClasses.xsd +205 -0
  795. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/mcc.xsd +12 -0
  796. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/AbstractCommonClasses.xsd +378 -0
  797. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/commonClasses.xsd +205 -0
  798. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/mcc.xsd +12 -0
  799. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/constraints.xsd +171 -0
  800. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/mco.xsd +14 -0
  801. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/constraints.xsd +171 -0
  802. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/mco.xsd +14 -0
  803. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/mda.xsd +13 -0
  804. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/metadataApplication.xsd +207 -0
  805. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/mda.xsd +13 -0
  806. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/metadataApplication.xsd +207 -0
  807. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/mda.xsd +13 -0
  808. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/metadataApplication.xsd +247 -0
  809. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/mdb.xsd +11 -0
  810. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBase.xsd +117 -0
  811. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBaseMDAerror.xsd +116 -0
  812. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/mdb.xsd +11 -0
  813. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBase.xsd +117 -0
  814. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBaseMDAerror.xsd +116 -0
  815. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/mdb.xsd +11 -0
  816. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/metadataBase.xsd +144 -0
  817. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/metadataExtension.xsd +138 -0
  818. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/mex.xsd +15 -0
  819. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/metadataExtension.xsd +138 -0
  820. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/mex.xsd +15 -0
  821. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/maintenance.xsd +70 -0
  822. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/mmi.xsd +14 -0
  823. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/maintenance.xsd +70 -0
  824. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/mmi.xsd +14 -0
  825. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/mpc.xsd +14 -0
  826. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/portrayalCatalogue.xsd +40 -0
  827. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/mpc.xsd +14 -0
  828. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/portrayalCatalogue.xsd +40 -0
  829. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/content.xsd +368 -0
  830. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/mrc.xsd +19 -0
  831. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/content.xsd +368 -0
  832. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/mrc.xsd +19 -0
  833. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/content.xsd +366 -0
  834. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/mrc.xsd +13 -0
  835. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/distribution.xsd +232 -0
  836. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/mrd.xsd +13 -0
  837. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/distribution.xsd +232 -0
  838. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/mrd.xsd +13 -0
  839. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/identification.xsd +425 -0
  840. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/mri.xsd +16 -0
  841. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/identification.xsd +425 -0
  842. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/mri.xsd +16 -0
  843. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/lineage.xsd +130 -0
  844. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/mrl.xsd +15 -0
  845. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/lineage.xsd +130 -0
  846. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/mrl.xsd +15 -0
  847. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/mrs.xsd +16 -0
  848. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/referenceSystem.xsd +67 -0
  849. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/mrs.xsd +16 -0
  850. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/referenceSystem.xsd +67 -0
  851. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/mrs.xsd +16 -0
  852. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/referenceSystem.xsd +66 -0
  853. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/msr.xsd +17 -0
  854. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/spatialRepresentation.xsd +326 -0
  855. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/msr.xsd +17 -0
  856. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/spatialRepresentation.xsd +326 -0
  857. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/msr.xsd +15 -0
  858. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/spatialRepresentation.xsd +326 -0
  859. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/serviceInformation.xsd +252 -0
  860. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/srv.xsd +14 -0
  861. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/serviceInformation.xsd +252 -0
  862. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/srv.xsd +14 -0
  863. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/acquisitionInformation.xsd +415 -0
  864. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/contentInformation.xsd +147 -0
  865. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/dataQualityInformation.xsd +214 -0
  866. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/gmi.xsd +23 -0
  867. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/metadataEntitySet.xsd +43 -0
  868. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/spatialRepresentationInformation.xsd +140 -0
  869. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/acquisitionInformation.xsd +415 -0
  870. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/contentInformation.xsd +147 -0
  871. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/dataQualityInformation.xsd +214 -0
  872. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/gmi.xsd +24 -0
  873. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/metadataEntitySet.xsd +43 -0
  874. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/spatialRepresentationInformation.xsd +142 -0
  875. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/acquisitionInformationImagery.xsd +796 -0
  876. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/mac.xsd +11 -0
  877. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/acquisitionInformationImagery.xsd +796 -0
  878. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/mac.xsd +11 -0
  879. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/acquisitionInformationImagery.xsd +799 -0
  880. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/mac.xsd +10 -0
  881. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2/contentInformationImagery.xsd +161 -0
  882. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.0/contentInformationImagery.xsd +161 -0
  883. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.1/contentInformationImagery.xsd +159 -0
  884. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2/lineageImagery.xsd +312 -0
  885. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2.0/lineageImagery.xsd +312 -0
  886. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2/spatialRepresentationImagery.xsd +138 -0
  887. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.0/spatialRepresentationImagery.xsd +138 -0
  888. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.1/spatialRepresentationImagery.xsd +145 -0
  889. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/cat.xsd +16 -0
  890. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/catalogues.xsd +59 -0
  891. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/codelistItem.xsd +63 -0
  892. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/crsItem.xsd +188 -0
  893. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/uomItem.xsd +45 -0
  894. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/cit.xsd +11 -0
  895. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/citation.xsd +400 -0
  896. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/cit.xsd +11 -0
  897. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/citation.xsd +402 -0
  898. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes.xsd +532 -0
  899. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes2014.xsd +531 -0
  900. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/gco.xsd +16 -0
  901. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/extendedTypes.xsd +97 -0
  902. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/gcx.xsd +11 -0
  903. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/extent.xsd +207 -0
  904. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/gex.xsd +15 -0
  905. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes.xsd +147 -0
  906. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes2014.xsd +147 -0
  907. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmw.xsd +17 -0
  908. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/lan.xsd +13 -0
  909. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/language.xsd +141 -0
  910. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/acquisitionInformationImagery.xsd +424 -0
  911. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/mac.xsd +14 -0
  912. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/acquisitionInformationImagery.xsd +473 -0
  913. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/event.xsd +106 -0
  914. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/mac.xsd +15 -0
  915. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/metadataEntitySet.xsd +46 -0
  916. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/applicationSchema.xsd +53 -0
  917. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/mas.xsd +15 -0
  918. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/AbstractCommonClasses.xsd +362 -0
  919. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/commonClasses.xsd +179 -0
  920. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/mcc.xsd +12 -0
  921. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/constraints.xsd +152 -0
  922. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/mco.xsd +13 -0
  923. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/md1.xsd +19 -0
  924. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/metadataWExtendedType.xsd +10 -0
  925. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/md1.xsd +19 -0
  926. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/metadataWExtendedType.xsd +10 -0
  927. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/md2.xsd +27 -0
  928. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/metadataWithExtensions.xsd +10 -0
  929. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/md2.xsd +27 -0
  930. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/metadataWithExtensions.xsd +10 -0
  931. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/mda.xsd +13 -0
  932. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/metadataApplication.xsd +188 -0
  933. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/mda.xsd +13 -0
  934. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/metadataApplication.xsd +189 -0
  935. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/mdb.xsd +23 -0
  936. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/metadataBase.xsd +97 -0
  937. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/mdb.xsd +23 -0
  938. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/metadataBase.xsd +105 -0
  939. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/mds.xsd +59 -0
  940. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/metadataDataServices.xsd +10 -0
  941. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/mds.xsd +44 -0
  942. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/metadataDataServices.xsd +10 -0
  943. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/mdt.xsd +17 -0
  944. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/metadataTransfer.xsd +121 -0
  945. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/mdt.xsd +17 -0
  946. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/metadataTransfer.xsd +121 -0
  947. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/metadataExtension.xsd +122 -0
  948. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/mex.xsd +13 -0
  949. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/maintenance.xsd +63 -0
  950. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/mmi.xsd +13 -0
  951. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/mpc.xsd +13 -0
  952. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/portrayalCatalogue.xsd +35 -0
  953. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/content.xsd +330 -0
  954. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/contentInformationImagery.xsd +160 -0
  955. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/mrc.xsd +18 -0
  956. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/content.xsd +334 -0
  957. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/contentInformationImagery.xsd +143 -0
  958. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/mrc.xsd +21 -0
  959. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/distribution.xsd +212 -0
  960. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/mrd.xsd +13 -0
  961. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/identification.xsd +385 -0
  962. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/mri.xsd +15 -0
  963. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineage.xsd +117 -0
  964. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineageImagery.xsd +168 -0
  965. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/mrl.xsd +14 -0
  966. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineage.xsd +118 -0
  967. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineageImagery.xsd +250 -0
  968. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/mrl.xsd +14 -0
  969. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/mrs.xsd +13 -0
  970. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/referenceSystem.xsd +47 -0
  971. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/msr.xsd +16 -0
  972. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentation.xsd +288 -0
  973. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentationImagery.xsd +113 -0
  974. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/msr.xsd +16 -0
  975. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentation.xsd +296 -0
  976. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentationImagery.xsd +114 -0
  977. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/serviceInformation.xsd +217 -0
  978. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/srv.xsd +14 -0
  979. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/serviceInformation.xsd +220 -0
  980. data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/srv.xsd +14 -0
  981. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceMetadata.xsd +204 -0
  982. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceModel.xsd +230 -0
  983. data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/srv.xsd +13 -0
  984. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceMetadata.xsd +204 -0
  985. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceModel.xsd +238 -0
  986. data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/srv.xsd +13 -0
  987. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/cis-0.xsd +17 -0
  988. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/codeLists.xsd +68 -0
  989. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/gridPoint.xsd +47 -0
  990. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/cis-0.xsd +17 -0
  991. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/codeLists.xsd +68 -0
  992. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/gridPoint.xsd +47 -0
  993. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/codeLists.xsd +68 -0
  994. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/gridPoint.xsd +47 -0
  995. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/coverage.xsd +185 -0
  996. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/gmlcovAll.xsd +21 -0
  997. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/grids.xsd +115 -0
  998. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/coverage.xsd +188 -0
  999. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/gmlcovAll.xsd +25 -0
  1000. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/grids.xsd +119 -0
  1001. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/coverage.xsd +188 -0
  1002. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/gmlcovAll.xsd +25 -0
  1003. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/grids.xsd +119 -0
  1004. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/coverage.xsd +188 -0
  1005. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/gmlcovAll.xsd +23 -0
  1006. data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/grids.xsd +119 -0
  1007. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/codeList.xsd +134 -0
  1008. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/groundControlPoints.xsd +239 -0
  1009. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/nonPhysicalSensorModel.xsd +321 -0
  1010. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/physicalSensorModel.xsd +62 -0
  1011. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorModel.xsd +65 -0
  1012. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorParameters.xsd +762 -0
  1013. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/spatialElements.xsd +497 -0
  1014. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/codeList.xsd +129 -0
  1015. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/groundControlPoints.xsd +235 -0
  1016. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/nonPhysicalSensorModel.xsd +321 -0
  1017. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/physicalSensorModel.xsd +62 -0
  1018. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorModel.xsd +65 -0
  1019. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorParameters.xsd +762 -0
  1020. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/spatialElements.xsd +496 -0
  1021. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/codeList.xsd +349 -0
  1022. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorModel.xsd +53 -0
  1023. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorParameters.xsd +681 -0
  1024. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/spatialElements.xsd +902 -0
  1025. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/codeList.xsd +344 -0
  1026. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorModel.xsd +49 -0
  1027. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorParameters.xsd +676 -0
  1028. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/spatialElements.xsd +897 -0
  1029. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1/smi.xsd +42 -0
  1030. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.0/smi.xsd +42 -0
  1031. data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.1/smi.xsd +42 -0
  1032. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0/dps.xsd +1344 -0
  1033. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0.0/dps.xsd +1344 -0
  1034. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2/dps.xsd +1522 -0
  1035. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.0/dps.xsd +1522 -0
  1036. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.1/dps.xsd +1522 -0
  1037. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.0/dps.xsd +1339 -0
  1038. data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.2.0/dps.xsd +1540 -0
  1039. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/core.xsd +349 -0
  1040. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/extended.xsd +1074 -0
  1041. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/hierarchy.xsd +57 -0
  1042. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/pir.xsd +13 -0
  1043. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/core.xsd +344 -0
  1044. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/extended.xsd +1076 -0
  1045. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/hierarchy.xsd +58 -0
  1046. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/pir.xsd +15 -0
  1047. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/core.xsd +344 -0
  1048. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/extended.xsd +1076 -0
  1049. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/hierarchy.xsd +58 -0
  1050. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/pir.xsd +15 -0
  1051. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/abstract.xsd +42 -0
  1052. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/pre.xsd +4 -0
  1053. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/abstract.xsd +44 -0
  1054. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/pre.xsd +11 -0
  1055. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/reg.xsd +8 -0
  1056. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/registration.xsd +562 -0
  1057. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/reg.xsd +22 -0
  1058. data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/registration.xsd +590 -0
  1059. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/basicTypes.xsd +275 -0
  1060. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateOperations.xsd +534 -0
  1061. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateReferenceSystems.xsd +379 -0
  1062. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateSystems.xsd +303 -0
  1063. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coverage.xsd +298 -0
  1064. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/datums.xsd +293 -0
  1065. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/defaultStyle.xsd +462 -0
  1066. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/deprecatedTypes.xsd +1139 -0
  1067. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dictionary.xsd +95 -0
  1068. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/direction.xsd +90 -0
  1069. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dynamicFeature.xsd +114 -0
  1070. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/feature.xsd +99 -0
  1071. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryAggregates.xsd +203 -0
  1072. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic0d1d.xsd +283 -0
  1073. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic2d.xsd +130 -0
  1074. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryComplexes.xsd +101 -0
  1075. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryPrimitives.xsd +852 -0
  1076. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gml.xsd +25 -0
  1077. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gmlBase.xsd +191 -0
  1078. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/grids.xsd +70 -0
  1079. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/measures.xsd +74 -0
  1080. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/observation.xsd +100 -0
  1081. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/referenceSystems.xsd +78 -0
  1082. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporal.xsd +274 -0
  1083. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalReferenceSystems.xsd +194 -0
  1084. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalTopology.xsd +124 -0
  1085. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/topology.xsd +391 -0
  1086. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/units.xsd +168 -0
  1087. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/valueObjects.xsd +210 -0
  1088. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmlWrapperTypes.xsd +160 -0
  1089. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmw.xsd +27 -0
  1090. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmlWrapperTypes.xsd +160 -0
  1091. data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmw.xsd +27 -0
  1092. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/cat.xsd +18 -0
  1093. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/catalogues.xsd +63 -0
  1094. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/codelistItem.xsd +64 -0
  1095. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/crsItem.xsd +200 -0
  1096. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/uomItem.xsd +49 -0
  1097. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/cat.xsd +18 -0
  1098. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/catalogues.xsd +63 -0
  1099. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/codelistItem.xsd +64 -0
  1100. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/crsItem.xsd +200 -0
  1101. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/uomItem.xsd +49 -0
  1102. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/basicTypes.xsd +439 -0
  1103. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gco.xsd +18 -0
  1104. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gcoBase.xsd +71 -0
  1105. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/applicationSchema.xsd +50 -0
  1106. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/citation.xsd +283 -0
  1107. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/constraints.xsd +114 -0
  1108. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/content.xsd +197 -0
  1109. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/dataQuality.xsd +563 -0
  1110. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/distribution.xsd +210 -0
  1111. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/extent.xsd +216 -0
  1112. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/freeText.xsd +130 -0
  1113. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/gmd.xsd +18 -0
  1114. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/identification.xsd +356 -0
  1115. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/maintenance.xsd +95 -0
  1116. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataApplication.xsd +183 -0
  1117. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataEntity.xsd +78 -0
  1118. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataExtension.xsd +107 -0
  1119. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/portrayalCatalogue.xsd +44 -0
  1120. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/referenceSystem.xsd +108 -0
  1121. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/spatialRepresentation.xsd +246 -0
  1122. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/catalogues.xsd +121 -0
  1123. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/codelistItem.xsd +179 -0
  1124. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/crsItem.xsd +1041 -0
  1125. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/extendedTypes.xsd +83 -0
  1126. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmx.xsd +18 -0
  1127. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmxUsage.xsd +136 -0
  1128. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/uomItem.xsd +173 -0
  1129. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/gsr.xsd +18 -0
  1130. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/spatialReferencing.xsd +34 -0
  1131. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/geometry.xsd +45 -0
  1132. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/gss.xsd +18 -0
  1133. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/gts.xsd +18 -0
  1134. data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/temporalObjects.xsd +44 -0
  1135. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/gpi.xsd +16 -0
  1136. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/placeIdentifier.xsd +75 -0
  1137. data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/sampleGMLApplicationSchema.xsd +83 -0
  1138. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/abstract.xsd +44 -0
  1139. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/dqc.xsd +16 -0
  1140. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/abstract.xsd +44 -0
  1141. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/dqc.xsd +16 -0
  1142. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/dqm.xsd +19 -0
  1143. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/qualityMeasures.xsd +332 -0
  1144. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/dqm.xsd +19 -0
  1145. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/qualityMeasures.xsd +332 -0
  1146. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityElement.xsd +583 -0
  1147. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityEvaluation.xsd +199 -0
  1148. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityImagery.xsd +75 -0
  1149. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityResult.xsd +213 -0
  1150. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/mdq.xsd +22 -0
  1151. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/metaquality.xsd +93 -0
  1152. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityElement.xsd +583 -0
  1153. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityEvaluation.xsd +199 -0
  1154. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityImagery.xsd +75 -0
  1155. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityResult.xsd +213 -0
  1156. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/mdq.xsd +22 -0
  1157. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/metaquality.xsd +93 -0
  1158. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dataQualityCommon.xsd +33 -0
  1159. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dqc.xsd +14 -0
  1160. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dataQualityCommon.xsd +43 -0
  1161. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dqc.xsd +17 -0
  1162. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dataQualityMeasure.xsd +376 -0
  1163. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dqm.xsd +11 -0
  1164. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dataQualityMeasure.xsd +367 -0
  1165. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dqm.xsd +11 -0
  1166. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQuality.xsd +570 -0
  1167. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityEvaluation.xsd +227 -0
  1168. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityResult.xsd +191 -0
  1169. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/mdq.xsd +14 -0
  1170. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/metaquality.xsd +106 -0
  1171. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQuality.xsd +581 -0
  1172. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityEvaluation.xsd +227 -0
  1173. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityResult.xsd +198 -0
  1174. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/mdq.xsd +14 -0
  1175. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/metaquality.xsd +102 -0
  1176. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/abstract.xsd +43 -0
  1177. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/dqc.xsd +15 -0
  1178. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/dqm.xsd +15 -0
  1179. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/qualityMeasures.xsd +303 -0
  1180. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityElement.xsd +554 -0
  1181. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityEvaluation.xsd +182 -0
  1182. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityImagery.xsd +72 -0
  1183. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityResult.xsd +140 -0
  1184. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/mdq.xsd +21 -0
  1185. data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/metaquality.xsd +89 -0
  1186. data/spec/fixtures/xml/schema/xsd/isotc211/19160/-4/patdl/2.7.3/PATDL.v.2.7.3.xsd +517 -0
  1187. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_Imagery.xsd +520 -0
  1188. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ImageryAndGriddedData.xsd +222 -0
  1189. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ThematicGriddedData.xsd +117 -0
  1190. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/igd.xsd +14 -0
  1191. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_Imagery.xsd +520 -0
  1192. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ImageryAndGriddedData.xsd +222 -0
  1193. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ThematicGriddedData.xsd +117 -0
  1194. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/igd.xsd +14 -0
  1195. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_Imagery.xsd +518 -0
  1196. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ImageryAndGriddedData.xsd +213 -0
  1197. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ThematicGriddedData.xsd +116 -0
  1198. data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/igd.xsd +15 -0
  1199. data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/geospatialPreservationMetadata.xsd +872 -0
  1200. data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/gpm.xsd +11 -0
  1201. data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/geospatialPreservationMetadata.xsd +385 -0
  1202. data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/gpm.xsd +8 -0
  1203. data/spec/fixtures/xml/schema/xsd/metaschema-datatypes.xsd +263 -0
  1204. data/spec/fixtures/xml/schema/xsd/metaschema-markup-line.xsd +9 -0
  1205. data/spec/fixtures/xml/schema/xsd/metaschema-markup-multiline.xsd +135 -0
  1206. data/spec/fixtures/xml/schema/xsd/metaschema-meta-constraints.xsd +39 -0
  1207. data/spec/fixtures/xml/schema/xsd/metaschema-prose-base.xsd +82 -0
  1208. data/spec/fixtures/xml/schema/xsd/metaschema-prose-module.xsd +5 -0
  1209. data/spec/fixtures/xml/schema/xsd/metaschema.xsd +1344 -0
  1210. data/spec/fixtures/xml/schema/xsd/omml_schema.xsd +1528 -0
  1211. data/spec/fixtures/xml/schema/xsd/smil20/rdf.xsd +16 -0
  1212. data/spec/fixtures/xml/schema/xsd/smil20/smil20-AccessKeyTiming.xsd +33 -0
  1213. data/spec/fixtures/xml/schema/xsd/smil20/smil20-AudioLayout.xsd +32 -0
  1214. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicAnimation.xsd +35 -0
  1215. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicContentControl.xsd +49 -0
  1216. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicInlineTiming.xsd +34 -0
  1217. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLayout.xsd +34 -0
  1218. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLinking.xsd +34 -0
  1219. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicMedia.xsd +39 -0
  1220. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTimeContainers.xsd +37 -0
  1221. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTransitions.xsd +36 -0
  1222. data/spec/fixtures/xml/schema/xsd/smil20/smil20-BrushMedia.xsd +32 -0
  1223. data/spec/fixtures/xml/schema/xsd/smil20/smil20-CustomTestAttributes.xsd +33 -0
  1224. data/spec/fixtures/xml/schema/xsd/smil20/smil20-EventTiming.xsd +33 -0
  1225. data/spec/fixtures/xml/schema/xsd/smil20/smil20-ExclTimeContainers.xsd +37 -0
  1226. data/spec/fixtures/xml/schema/xsd/smil20/smil20-FillDefault.xsd +32 -0
  1227. data/spec/fixtures/xml/schema/xsd/smil20/smil20-HierarchicalLayout.xsd +46 -0
  1228. data/spec/fixtures/xml/schema/xsd/smil20/smil20-HostLanguage.xsd +85 -0
  1229. data/spec/fixtures/xml/schema/xsd/smil20/smil20-InlineTransitions.xsd +35 -0
  1230. data/spec/fixtures/xml/schema/xsd/smil20/smil20-IntegrationSet.xsd +72 -0
  1231. data/spec/fixtures/xml/schema/xsd/smil20/smil20-LinkingAttributes.xsd +40 -0
  1232. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaAccessibility.xsd +34 -0
  1233. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipMarkers.xsd +35 -0
  1234. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipping.xsd +35 -0
  1235. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaDescription.xsd +35 -0
  1236. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaMarkerTiming.xsd +33 -0
  1237. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaParam.xsd +34 -0
  1238. data/spec/fixtures/xml/schema/xsd/smil20/smil20-Metainformation.xsd +33 -0
  1239. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MinMaxTiming.xsd +33 -0
  1240. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiArcTiming.xsd +33 -0
  1241. data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiWindowLayout.xsd +32 -0
  1242. data/spec/fixtures/xml/schema/xsd/smil20/smil20-ObjectLinking.xsd +33 -0
  1243. data/spec/fixtures/xml/schema/xsd/smil20/smil20-PrefetchControl.xsd +31 -0
  1244. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatTiming.xsd +34 -0
  1245. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatValueTiming.xsd +33 -0
  1246. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartDefault.xsd +32 -0
  1247. data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartTiming.xsd +32 -0
  1248. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SkipContentControl.xsd +32 -0
  1249. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SplineAnimation.xsd +34 -0
  1250. data/spec/fixtures/xml/schema/xsd/smil20/smil20-Structure.xsd +34 -0
  1251. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehavior.xsd +33 -0
  1252. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehaviorDefault.xsd +33 -0
  1253. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncMaster.xsd +32 -0
  1254. data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncbaseTiming.xsd +33 -0
  1255. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeContainerAttributes.xsd +35 -0
  1256. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeManipulations.xsd +35 -0
  1257. data/spec/fixtures/xml/schema/xsd/smil20/smil20-TransitionModifiers.xsd +37 -0
  1258. data/spec/fixtures/xml/schema/xsd/smil20/smil20-WallclockTiming.xsd +33 -0
  1259. data/spec/fixtures/xml/schema/xsd/smil20/smil20-animate.xsd +229 -0
  1260. data/spec/fixtures/xml/schema/xsd/smil20/smil20-content.xsd +148 -0
  1261. data/spec/fixtures/xml/schema/xsd/smil20/smil20-language.xsd +834 -0
  1262. data/spec/fixtures/xml/schema/xsd/smil20/smil20-layout.xsd +211 -0
  1263. data/spec/fixtures/xml/schema/xsd/smil20/smil20-linking.xsd +117 -0
  1264. data/spec/fixtures/xml/schema/xsd/smil20/smil20-media.xsd +175 -0
  1265. data/spec/fixtures/xml/schema/xsd/smil20/smil20-meta.xsd +44 -0
  1266. data/spec/fixtures/xml/schema/xsd/smil20/smil20-struct.xsd +47 -0
  1267. data/spec/fixtures/xml/schema/xsd/smil20/smil20-timemanip.xsd +34 -0
  1268. data/spec/fixtures/xml/schema/xsd/smil20/smil20-timing.xsd +344 -0
  1269. data/spec/fixtures/xml/schema/xsd/smil20/smil20-transitions.xsd +138 -0
  1270. data/spec/fixtures/xml/schema/xsd/smil20/smil20-utility.xsd +57 -0
  1271. data/spec/fixtures/xml/schema/xsd/smil20/smil20.xsd +86 -0
  1272. data/spec/fixtures/xml/schema/xsd/smil20/xml-mod.xsd +25 -0
  1273. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/advanced_encodings.xsd +186 -0
  1274. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/basic_types.xsd +147 -0
  1275. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/block_components.xsd +163 -0
  1276. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/choice_components.xsd +56 -0
  1277. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/examples/security.xsd +15 -0
  1278. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/record_components.xsd +95 -0
  1279. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_components.xsd +536 -0
  1280. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_encodings.xsd +93 -0
  1281. data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/swe.xsd +14 -0
  1282. data/spec/fixtures/xml/schema/xsd/test_schema.lxr +0 -0
  1283. data/spec/fixtures/xml/schema/xsd/test_schema.xsd +24 -0
  1284. data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd03.xsd +1333 -0
  1285. data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd04.xsd +1334 -0
  1286. data/spec/fixtures/xml/schema/xsd/validation_config.yml +14 -0
  1287. data/spec/fixtures/xml/special_char.xml +3 -4
  1288. data/spec/fixtures/xml/user.xsd +14 -10
  1289. data/spec/fixtures/yamls_range_concept.rb +139 -0
  1290. data/spec/lutaml/key_value/transformation/collection_serializer_spec.rb +213 -0
  1291. data/spec/lutaml/key_value/transformation/rule_compiler_spec.rb +229 -0
  1292. data/spec/lutaml/key_value/transformation/value_serializer_spec.rb +216 -0
  1293. data/spec/lutaml/key_value/transformation_spec.rb +292 -0
  1294. data/spec/lutaml/model/attribute_collection_spec.rb +9 -6
  1295. data/spec/lutaml/model/attribute_form_default_spec.rb +252 -0
  1296. data/spec/lutaml/model/attribute_spec.rb +328 -38
  1297. data/spec/lutaml/model/cached_type_resolver_spec.rb +362 -0
  1298. data/spec/lutaml/model/cdata_spec.rb +180 -102
  1299. data/spec/lutaml/model/choice_spec.rb +37 -7
  1300. data/spec/lutaml/model/cli_spec.rb +452 -0
  1301. data/spec/lutaml/model/collection_index_spec.rb +347 -0
  1302. data/spec/lutaml/model/collection_mutation_spec.rb +124 -0
  1303. data/spec/lutaml/model/collection_spec.rb +580 -155
  1304. data/spec/lutaml/model/collection_validation_spec.rb +736 -0
  1305. data/spec/lutaml/model/comparable_model_spec.rb +75 -0
  1306. data/spec/lutaml/model/compiled_rule_spec.rb +364 -0
  1307. data/spec/lutaml/model/consolidation_spec.rb +295 -0
  1308. data/spec/lutaml/model/context_registry_spec.rb +269 -0
  1309. data/spec/lutaml/model/custom_bibtex_adapter_spec.rb +21 -7
  1310. data/spec/lutaml/model/custom_collection_spec.rb +321 -27
  1311. data/spec/lutaml/model/custom_model_spec.rb +13 -10
  1312. data/spec/lutaml/model/custom_serialization_spec.rb +12 -14
  1313. data/spec/lutaml/model/custom_vobject_adapter_spec.rb +36 -16
  1314. data/spec/lutaml/model/default_register_spec.rb +852 -0
  1315. data/spec/lutaml/model/defaults_spec.rb +57 -6
  1316. data/spec/lutaml/model/delegation_spec.rb +184 -110
  1317. data/spec/lutaml/model/derived_attribute_serialization_spec.rb +33 -0
  1318. data/spec/lutaml/model/dynamic_attribute_spec.rb +112 -0
  1319. data/spec/lutaml/model/encoding_spec.rb +281 -0
  1320. data/spec/lutaml/model/enum_spec.rb +46 -2
  1321. data/spec/lutaml/model/except_spec.rb +240 -0
  1322. data/spec/lutaml/model/finalization_cache_spec.rb +88 -0
  1323. data/spec/lutaml/model/global_context_spec.rb +421 -0
  1324. data/spec/lutaml/model/global_register_spec.rb +153 -36
  1325. data/spec/lutaml/model/group_spec.rb +193 -54
  1326. data/spec/lutaml/model/hash/adapter_spec.rb +5 -3
  1327. data/spec/lutaml/model/import_registry_spec.rb +295 -0
  1328. data/spec/lutaml/model/included_spec.rb +10 -17
  1329. data/spec/lutaml/model/inheritance_spec.rb +6 -6
  1330. data/spec/lutaml/model/json_adapter_spec.rb +13 -6
  1331. data/spec/lutaml/model/json_spec.rb +33 -0
  1332. data/spec/lutaml/model/key_value_data_model/key_value_element_spec.rb +320 -0
  1333. data/spec/lutaml/model/key_value_mapping_spec.rb +12 -2
  1334. data/spec/lutaml/model/lazy_collection_spec.rb +208 -0
  1335. data/spec/lutaml/model/liquefiable_spec.rb +263 -24
  1336. data/spec/lutaml/model/logger_spec.rb +68 -0
  1337. data/spec/lutaml/model/map_all_spec.rb +36 -11
  1338. data/spec/lutaml/model/map_content_spec.rb +4 -4
  1339. data/spec/lutaml/model/mapping_rule_perf_guard_spec.rb +71 -0
  1340. data/spec/lutaml/model/mixed_content_spec.rb +481 -171
  1341. data/spec/lutaml/model/model_transformer_spec.rb +678 -0
  1342. data/spec/lutaml/model/multiple_mapping_spec.rb +71 -39
  1343. data/spec/lutaml/model/namespace_versioning_spec.rb +390 -0
  1344. data/spec/lutaml/model/one_entry_cache_spec.rb +114 -0
  1345. data/spec/lutaml/model/ordered_content_spec.rb +115 -24
  1346. data/spec/lutaml/model/polymorphic_spec.rb +29 -6
  1347. data/spec/lutaml/model/processing_instruction_spec.rb +375 -0
  1348. data/spec/lutaml/model/{register/key_value_spec.rb → register_key_value_spec.rb} +57 -5
  1349. data/spec/lutaml/model/register_spec.rb +235 -5
  1350. data/spec/lutaml/model/render_empty_spec.rb +143 -6
  1351. data/spec/lutaml/model/render_nil_spec.rb +15 -10
  1352. data/spec/lutaml/model/root_mappings_spec.rb +16 -6
  1353. data/spec/lutaml/model/rule_value_extractor_spec.rb +13 -44
  1354. data/spec/lutaml/model/runtime_compatibility_spec.rb +36 -0
  1355. data/spec/lutaml/model/schema/generator/definitions_collection_spec.rb +4 -0
  1356. data/spec/lutaml/model/schema/json_schema_spec.rb +7 -1
  1357. data/spec/lutaml/model/schema/relaxng_schema_spec.rb +1 -1
  1358. data/spec/lutaml/model/schema/renderer_spec.rb +128 -0
  1359. data/spec/lutaml/model/schema/xsd_schema_spec.rb +1 -1
  1360. data/spec/lutaml/model/sequence_spec.rb +460 -15
  1361. data/spec/lutaml/model/serializable_spec.rb +212 -12
  1362. data/spec/lutaml/model/serializable_validation_spec.rb +3 -2
  1363. data/spec/lutaml/model/serialize_perf_guard_spec.rb +100 -0
  1364. data/spec/lutaml/model/services/default_value_resolver_spec.rb +162 -0
  1365. data/spec/lutaml/model/simple_model_spec.rb +4 -4
  1366. data/spec/lutaml/model/toml_adapter_spec.rb +11 -4
  1367. data/spec/lutaml/model/toml_spec.rb +46 -2
  1368. data/spec/lutaml/model/transformation_builder_spec.rb +283 -0
  1369. data/spec/lutaml/model/transformation_spec.rb +165 -236
  1370. data/spec/lutaml/model/type/base64_binary_spec.rb +202 -0
  1371. data/spec/lutaml/model/type/date_spec.rb +132 -0
  1372. data/spec/lutaml/model/type/date_time_spec.rb +54 -2
  1373. data/spec/lutaml/model/type/decimal_spec.rb +1 -1
  1374. data/spec/lutaml/model/type/duration_spec.rb +185 -0
  1375. data/spec/lutaml/model/type/hex_binary_spec.rb +225 -0
  1376. data/spec/lutaml/model/type/integer_spec.rb +1 -1
  1377. data/spec/lutaml/model/type/qname_spec.rb +246 -0
  1378. data/spec/lutaml/model/type/reference_integration_spec.rb +532 -0
  1379. data/spec/lutaml/model/type/reference_spec.rb +293 -0
  1380. data/spec/lutaml/model/type/symbol_spec.rb +322 -0
  1381. data/spec/lutaml/model/type/time_spec.rb +6 -5
  1382. data/spec/lutaml/model/type/time_without_date_spec.rb +1 -1
  1383. data/spec/lutaml/model/type/uninitialized_class_spec.rb +110 -0
  1384. data/spec/lutaml/model/type/uri_spec.rb +176 -0
  1385. data/spec/lutaml/model/type/value_xml_mapping_spec.rb +162 -0
  1386. data/spec/lutaml/model/type_context_spec.rb +370 -0
  1387. data/spec/lutaml/model/type_registry_spec.rb +313 -0
  1388. data/spec/lutaml/model/type_resolver_spec.rb +278 -0
  1389. data/spec/lutaml/model/type_spec.rb +7 -8
  1390. data/spec/lutaml/model/type_substitution_spec.rb +172 -0
  1391. data/spec/lutaml/model/utils_spec.rb +39 -24
  1392. data/spec/lutaml/model/value_map_spec.rb +2 -2
  1393. data/spec/lutaml/model/value_transformation_comprehensive_spec.rb +676 -0
  1394. data/spec/lutaml/model/with_child_mapping_spec.rb +1 -1
  1395. data/spec/lutaml/model/xml_decoupling_spec.rb +436 -0
  1396. data/spec/lutaml/model/xsd_form_default_patterns_spec.rb +664 -0
  1397. data/spec/lutaml/model/xsd_patterns_spec.rb +278 -0
  1398. data/spec/lutaml/model/xsd_type_spec.rb +345 -0
  1399. data/spec/lutaml/model/xsd_type_validation_spec.rb +442 -0
  1400. data/spec/lutaml/model/yamls/standard_adapter_spec.rb +2 -2
  1401. data/spec/lutaml/model/yamls_range_spec.rb +393 -0
  1402. data/spec/lutaml/model/yamls_sequence_spec.rb +245 -0
  1403. data/spec/lutaml/xml/adapter/nokogiri_adapter_spec.rb +130 -0
  1404. data/spec/lutaml/xml/adapter/oga_adapter_spec.rb +135 -0
  1405. data/spec/lutaml/xml/adapter/ox_adapter_spec.rb +101 -0
  1406. data/spec/lutaml/xml/adapter/rexml_adapter_spec.rb +101 -0
  1407. data/spec/lutaml/xml/adapter/xml_namespace_spec.rb +531 -0
  1408. data/spec/lutaml/xml/builder/builder_spec.rb +216 -0
  1409. data/spec/lutaml/xml/compiled_rule_namespace_spec.rb +405 -0
  1410. data/spec/lutaml/xml/conformance/xml_namespaces_spec.rb +580 -0
  1411. data/spec/lutaml/xml/conformance/xml_schema_instance_spec.rb +266 -0
  1412. data/spec/lutaml/xml/data_model_spec.rb +300 -0
  1413. data/spec/lutaml/xml/decisions/decision_engine_spec.rb +242 -0
  1414. data/spec/lutaml/xml/decisions/decision_spec.rb +217 -0
  1415. data/spec/lutaml/xml/decisions/element_prefix_resolver_spec.rb +198 -0
  1416. data/spec/lutaml/xml/declaration_planner_spec.rb +524 -0
  1417. data/spec/lutaml/xml/default_namespace_spec.rb +190 -0
  1418. data/spec/lutaml/{model/xml → xml}/derived_attributes_spec.rb +2 -2
  1419. data/spec/lutaml/xml/doctype_preservation_spec.rb +323 -0
  1420. data/spec/lutaml/xml/doubly_defined_namespace_spec.rb +415 -0
  1421. data/spec/lutaml/xml/dual_namespace_element_spec.rb +181 -0
  1422. data/spec/lutaml/xml/element_spec.rb +28 -0
  1423. data/spec/lutaml/xml/encoding_normalizer_spec.rb +215 -0
  1424. data/spec/lutaml/xml/enhanced_mapping_spec.rb +692 -0
  1425. data/spec/lutaml/xml/entity_fragmentation_spec.rb +583 -0
  1426. data/spec/lutaml/xml/format_chooser_spec.rb +0 -0
  1427. data/spec/lutaml/xml/fpi_namespace_spec.rb +145 -0
  1428. data/spec/lutaml/{model/xml/namespace_spec.rb → xml/general_namespace_spec.rb} +6 -5
  1429. data/spec/lutaml/xml/mapping_finalization_guard_spec.rb +83 -0
  1430. data/spec/lutaml/xml/mapping_rule_spec.rb +98 -0
  1431. data/spec/lutaml/xml/mapping_spec.rb +1147 -0
  1432. data/spec/lutaml/xml/model_transform_guard_spec.rb +126 -0
  1433. data/spec/lutaml/{model/xml → xml}/namespace/nested_with_explicit_namespace_spec.rb +8 -5
  1434. data/spec/lutaml/xml/namespace/w3c_reserved_warning_spec.rb +152 -0
  1435. data/spec/lutaml/xml/namespace_alias_prefix_root_spec.rb +130 -0
  1436. data/spec/lutaml/xml/namespace_alias_spec.rb +263 -0
  1437. data/spec/lutaml/xml/namespace_aware_parsing_spec.rb +219 -0
  1438. data/spec/lutaml/xml/namespace_backward_compatibility_spec.rb +48 -0
  1439. data/spec/lutaml/xml/namespace_bound_element_roundtrip_spec.rb +433 -0
  1440. data/spec/lutaml/xml/namespace_constant_spec.rb +383 -0
  1441. data/spec/lutaml/xml/namespace_force_prefix_spec.rb +113 -0
  1442. data/spec/lutaml/xml/namespace_format_preservation_spec.rb +49 -0
  1443. data/spec/lutaml/xml/namespace_inheritance_deep_spec.rb +162 -0
  1444. data/spec/lutaml/xml/namespace_inheritance_override_spec.rb +316 -0
  1445. data/spec/lutaml/xml/namespace_inheritance_resolver_spec.rb +0 -0
  1446. data/spec/lutaml/xml/namespace_inheritance_spec.rb +966 -0
  1447. data/spec/lutaml/xml/namespace_integration_spec.rb +277 -0
  1448. data/spec/lutaml/xml/namespace_missing_prefix_spec.rb +178 -0
  1449. data/spec/lutaml/xml/namespace_no_hoisting_spec.rb +172 -0
  1450. data/spec/lutaml/xml/namespace_placement_spec.rb +265 -0
  1451. data/spec/lutaml/xml/namespace_preservation_spec.rb +427 -0
  1452. data/spec/lutaml/xml/namespace_principles_spec.rb +909 -0
  1453. data/spec/lutaml/xml/namespace_resolution_strategy_spec.rb +273 -0
  1454. data/spec/lutaml/xml/namespace_scope_declare_spec.rb +205 -0
  1455. data/spec/lutaml/xml/namespace_scope_spec.rb +389 -0
  1456. data/spec/lutaml/xml/namespace_scope_vcard_spec.rb +616 -0
  1457. data/spec/lutaml/xml/namespace_spec.rb +712 -0
  1458. data/spec/lutaml/xml/namespace_three_phase_spec.rb +310 -0
  1459. data/spec/lutaml/xml/nil_optional_element_namespace_spec.rb +84 -0
  1460. data/spec/lutaml/xml/ooxml_namespace_spec.rb +177 -0
  1461. data/spec/lutaml/xml/ordered_method_spec.rb +109 -0
  1462. data/spec/lutaml/xml/prefix_control_spec.rb +286 -0
  1463. data/spec/lutaml/{model/register/xml_spec.rb → xml/register_spec.rb} +75 -21
  1464. data/spec/lutaml/xml/reusable_mapping_spec.rb +148 -0
  1465. data/spec/lutaml/xml/reused_elements_namespace_spec.rb +85 -0
  1466. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_group_spec.rb +9 -3
  1467. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_spec.rb +11 -7
  1468. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/choice_spec.rb +5 -2
  1469. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_restriction_spec.rb +7 -2
  1470. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_spec.rb +5 -1
  1471. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_type_spec.rb +49 -20
  1472. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/element_spec.rb +9 -4
  1473. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/group_spec.rb +9 -5
  1474. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/restriction_spec.rb +1 -0
  1475. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/sequence_spec.rb +10 -4
  1476. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_content_spec.rb +9 -3
  1477. data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_type_spec.rb +10 -7
  1478. data/spec/lutaml/{model/schema/xml_compiler_spec.rb → xml/schema/compiler_spec.rb} +219 -94
  1479. data/spec/lutaml/xml/schema/xsd/errors/error_context_spec.rb +65 -0
  1480. data/spec/lutaml/xml/schema/xsd/errors/suggestion_spec.rb +77 -0
  1481. data/spec/lutaml/xml/schema/xsd/file_validation_result_spec.rb +131 -0
  1482. data/spec/lutaml/xml/schema/xsd/glob_spec.rb +318 -0
  1483. data/spec/lutaml/xml/schema/xsd/liquid_methods/attribute_and_group_spec.rb +76 -0
  1484. data/spec/lutaml/xml/schema/xsd/liquid_methods/complex_type_spec.rb +159 -0
  1485. data/spec/lutaml/xml/schema/xsd/liquid_methods/containers_spec.rb +104 -0
  1486. data/spec/lutaml/xml/schema/xsd/liquid_methods/element_spec.rb +139 -0
  1487. data/spec/lutaml/xml/schema/xsd/liquid_methods/schema_spec.rb +75 -0
  1488. data/spec/lutaml/xml/schema/xsd/liquid_methods/simple_content_spec.rb +79 -0
  1489. data/spec/lutaml/xml/schema/xsd/namespace_uri_remapping_spec.rb +246 -0
  1490. data/spec/lutaml/xml/schema/xsd/schema_helper_methods_spec.rb +237 -0
  1491. data/spec/lutaml/xml/schema/xsd/schema_mapping_spec.rb +742 -0
  1492. data/spec/lutaml/xml/schema/xsd/schema_validator_spec.rb +228 -0
  1493. data/spec/lutaml/xml/schema/xsd/spec_helper.rb +26 -0
  1494. data/spec/lutaml/xml/schema/xsd/validation_error_spec.rb +189 -0
  1495. data/spec/lutaml/xml/schema/xsd/validation_result_spec.rb +276 -0
  1496. data/spec/lutaml/xml/schema/xsd/xsd_spec.rb +51 -0
  1497. data/spec/lutaml/xml/schema_primer_spec.rb +393 -0
  1498. data/spec/lutaml/xml/serializable_namespace_spec.rb +125 -0
  1499. data/spec/lutaml/xml/transformation/custom_method_wrapper_spec.rb +48 -0
  1500. data/spec/lutaml/xml/transformation_spec.rb +439 -0
  1501. data/spec/lutaml/xml/type_namespace/collector_spec.rb +212 -0
  1502. data/spec/lutaml/xml/type_namespace/planner_spec.rb +270 -0
  1503. data/spec/lutaml/xml/type_namespace_examples_spec.rb +521 -0
  1504. data/spec/lutaml/xml/type_namespace_integration_spec.rb +332 -0
  1505. data/spec/lutaml/xml/type_namespace_prefix_spec.rb +370 -0
  1506. data/spec/lutaml/xml/type_namespace_resolver_spec.rb +0 -0
  1507. data/spec/lutaml/xml/type_namespace_roundtrip_spec.rb +580 -0
  1508. data/spec/lutaml/xml/w3c_types_spec.rb +376 -0
  1509. data/spec/lutaml/{model → xml}/xml_adapter_spec.rb +64 -17
  1510. data/spec/lutaml/xml/xml_declaration_spec.rb +568 -0
  1511. data/spec/lutaml/xml/xml_element_guard_spec.rb +138 -0
  1512. data/spec/lutaml/{model/xml → xml}/xml_element_spec.rb +1 -1
  1513. data/spec/lutaml/xml/xml_lang_spec.rb +441 -0
  1514. data/spec/lutaml/xml/xml_space_spec.rb +247 -0
  1515. data/spec/lutaml/xml/xml_space_type_spec.rb +161 -0
  1516. data/spec/lutaml/xml/xml_spec.rb +122 -0
  1517. data/spec/parent_root_spec.rb +63 -0
  1518. data/spec/person_spec.rb +9 -9
  1519. data/spec/spec_helper.rb +69 -6
  1520. data/spec/support/test_adapter_config.rb +101 -0
  1521. data/spec/support/test_namespaces.rb +185 -0
  1522. data/spec/support/trace_helper.rb +0 -0
  1523. data/spec/support/xml/schema_helper.rb +15 -0
  1524. data/spec/support/xml/xsd/code_example_validator.rb +393 -0
  1525. data/spec/support/xml_mapping_namespaces.rb +176 -0
  1526. metadata +1475 -100
  1527. data/docs/custom_registers.adoc +0 -228
  1528. data/lib/lutaml/model/hash_adapter/mapping.rb +0 -19
  1529. data/lib/lutaml/model/hash_adapter/mapping_rule.rb +0 -9
  1530. data/lib/lutaml/model/hash_adapter/transform.rb +0 -8
  1531. data/lib/lutaml/model/hash_adapter.rb +0 -21
  1532. data/lib/lutaml/model/json/mapping.rb +0 -19
  1533. data/lib/lutaml/model/json/mapping_rule.rb +0 -9
  1534. data/lib/lutaml/model/json/multi_json_adapter.rb +0 -18
  1535. data/lib/lutaml/model/json/standard_adapter.rb +0 -25
  1536. data/lib/lutaml/model/json/transform.rb +0 -8
  1537. data/lib/lutaml/model/jsonl/mapping.rb +0 -19
  1538. data/lib/lutaml/model/jsonl/mapping_rule.rb +0 -9
  1539. data/lib/lutaml/model/jsonl/transform.rb +0 -19
  1540. data/lib/lutaml/model/schema/xsd_schema.rb +0 -62
  1541. data/lib/lutaml/model/toml/mapping_rule.rb +0 -9
  1542. data/lib/lutaml/model/toml/toml_rb_adapter.rb +0 -18
  1543. data/lib/lutaml/model/toml/tomlib_adapter.rb +0 -19
  1544. data/lib/lutaml/model/toml/transform.rb +0 -8
  1545. data/lib/lutaml/model/xml/builder/nokogiri.rb +0 -101
  1546. data/lib/lutaml/model/xml/builder/oga.rb +0 -183
  1547. data/lib/lutaml/model/xml/builder/ox.rb +0 -121
  1548. data/lib/lutaml/model/xml/document.rb +0 -477
  1549. data/lib/lutaml/model/xml/element.rb +0 -32
  1550. data/lib/lutaml/model/xml/mapping.rb +0 -471
  1551. data/lib/lutaml/model/xml/mapping_rule.rb +0 -149
  1552. data/lib/lutaml/model/xml/nokogiri_adapter.rb +0 -234
  1553. data/lib/lutaml/model/xml/oga/document.rb +0 -20
  1554. data/lib/lutaml/model/xml/oga/element.rb +0 -123
  1555. data/lib/lutaml/model/xml/oga_adapter.rb +0 -172
  1556. data/lib/lutaml/model/xml/ox_adapter.rb +0 -229
  1557. data/lib/lutaml/model/xml/transform.rb +0 -8
  1558. data/lib/lutaml/model/xml/xml_attribute.rb +0 -37
  1559. data/lib/lutaml/model/xml/xml_element.rb +0 -167
  1560. data/lib/lutaml/model/xml/xml_namespace.rb +0 -49
  1561. data/lib/lutaml/model/xml.rb +0 -31
  1562. data/lib/lutaml/model/xml_adapter/element.rb +0 -18
  1563. data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +0 -15
  1564. data/lib/lutaml/model/xml_adapter/oga_adapter.rb +0 -21
  1565. data/lib/lutaml/model/xml_adapter/ox_adapter.rb +0 -18
  1566. data/lib/lutaml/model/xml_adapter.rb +0 -7
  1567. data/lib/lutaml/model/yaml/mapping.rb +0 -19
  1568. data/lib/lutaml/model/yaml/mapping_rule.rb +0 -9
  1569. data/lib/lutaml/model/yaml/standard_adapter.rb +0 -28
  1570. data/lib/lutaml/model/yaml/transform.rb +0 -8
  1571. data/lib/lutaml/model/yamls/mapping.rb +0 -19
  1572. data/lib/lutaml/model/yamls/mapping_rule.rb +0 -9
  1573. data/lib/lutaml/model/yamls/standard_adapter.rb +0 -34
  1574. data/lib/lutaml/model/yamls/transform.rb +0 -19
  1575. data/spec/benchmarks/xml_parsing_benchmark_spec.rb +0 -74
  1576. data/spec/fixtures/xml/advanced_test_schema.xsd +0 -134
  1577. data/spec/lutaml/model/namespace_spec.rb +0 -57
  1578. data/spec/lutaml/model/xml_adapter/nokogiri_adapter_spec.rb +0 -56
  1579. data/spec/lutaml/model/xml_adapter/oga_adapter_spec.rb +0 -60
  1580. data/spec/lutaml/model/xml_adapter/ox_adapter_spec.rb +0 -61
  1581. data/spec/lutaml/model/xml_adapter/xml_namespace_spec.rb +0 -368
  1582. data/spec/lutaml/model/xml_mapping_rule_spec.rb +0 -158
  1583. data/spec/lutaml/model/xml_mapping_spec.rb +0 -1318
  1584. data/spec/lutaml/model/xml_spec.rb +0 -63
  1585. /data/spec/lutaml/{model/xml → xml}/root_mappings/nested_child_mappings_spec.rb +0 -0
@@ -0,0 +1,1531 @@
1
+ ---
2
+ title: Missing Values Handling
3
+ nav_order: 10
4
+ ---
5
+
6
+ = Handling missing values
7
+ :toc:
8
+ :toclevels: 3
9
+
10
+
11
+ === General
12
+
13
+ Different information models define different primitive value types,
14
+ and the same goes for the notions of the "missing values" family:
15
+
16
+ the empty value:: the value is present but empty
17
+ the non-existent value:: the value is not present
18
+ the undefined value:: the value is not defined
19
+
20
+ There are also different ways to represent these missing values
21
+ when the attribute accepts a single value or a collection of values.
22
+
23
+ .Support of missing value types in different technologies
24
+ |===
25
+ | Technology | Missing value type | Realized as
26
+
27
+ .3+| Lutaml::Model
28
+ | empty value | Ruby empty string (`""`)
29
+ | non-existent value | Ruby `NilClass` (`nil`)
30
+ | undefined value | `class Uninitialized`
31
+
32
+ .3+| XML element
33
+ | empty value | XML blank element: `<status></status>` or `<status/>`
34
+ | non-existent value | XML blank element with attribute `xsi:nil`: `<status xsi:nil="true"/>`
35
+ | undefined value | the XML element is omitted
36
+
37
+ .3+| XML attribute
38
+ | empty value | XML blank attribute: `status=""`
39
+ | non-existent value | the XML attribute is omitted
40
+ | undefined value | the XML attribute is omitted
41
+
42
+ .3+| JSON
43
+ | empty value | JSON empty string (`""`)
44
+ | non-existent value | JSON `null` value
45
+ | undefined value | the JSON key is omitted
46
+
47
+ .3+| TOML
48
+ | empty value | TOML empty string
49
+ | non-existent value | the TOML key is omitted since TOML does not support the concept of null.
50
+ | undefined value | the TOML key is omitted
51
+
52
+ |===
53
+
54
+ NOTE: The `Uninitialized` class is a special Lutaml::Model construct, it is not
55
+ supported by normal Ruby objects.
56
+
57
+ The challenge for the developer is how to represent fully compatible semantics
58
+ using interoperable data models across different technologies.
59
+
60
+ Lutaml::Model provides you with several mechanisms to retain the missing values
61
+ semantics. An example mapping is shown in the following diagram.
62
+
63
+ .Mapping of missing value types between Lutaml::Model and YAML
64
+ [source]
65
+ ----
66
+ ┌─────────────────────────────────────────────────────────────────────────────┐
67
+ │ ╔════════════════════════╗ ╔════════════════════════╗ │
68
+ │ ║ Lutaml::Model Values ║ ║ YAML Values ║ │
69
+ │ ╠════════════════════════╣ ╠════════════════════════╣ │
70
+ │ ║ ║ mapping ║ ║ │
71
+ │ ║ "empty" ║◀──────────────────▶║ "empty" ║ │
72
+ │ ║ (empty string, []) ║ to empty ║ (empty string, []) ║ │
73
+ │ ║ ║ ║ ║ │
74
+ │ ╟────────────────────────╢ ╟────────────────────────╢ │
75
+ │ ║ ║ mapping ║ ║ │
76
+ │ ║ "non-existent" ║◀──────────────────▶║ "non-existent" ║ │
77
+ │ ║ (nil) ║ to non-existent ║ (null) ║ │
78
+ │ ║ ║ ║ ║ │
79
+ │ ╟────────────────────────╢ ╟────────────────────────╢ │
80
+ │ ║ ║ mapping ║ ║ │
81
+ │ ║ "undefined" ║◀──────────────────▶║ "undefined" ║ │
82
+ │ ║ (uninitialized) ║ to undefined ║ (key omitted) ║ │
83
+ │ ║ ║ ║ ║ │
84
+ │ ╚════════════════════════╝ ╚════════════════════════╝ │
85
+ └─────────────────────────────────────────────────────────────────────────────┘
86
+ ----
87
+
88
+ In the case where the interoperating technologies do not support the full spectrum
89
+ of missing value types, it is necessary for the developer to understand any
90
+ such behavior and relevant handling.
91
+
92
+ .Mapping of missing value types between Lutaml::Model and TOML
93
+ [source]
94
+ ----
95
+ ┌─────────────────────────────────────────────────────────────────────────────┐
96
+ │ ╔════════════════════════╗ ╔════════════════════════╗ │
97
+ │ ║ Lutaml::Model Values ║ ║ TOML Values ║ │
98
+ │ ╠════════════════════════╣ ╠════════════════════════╣ │
99
+ │ ║ ║ mapping ║ ║ │
100
+ │ ║ "empty" ║◀──────────────────▶║ "empty" ║ │
101
+ │ ║ (empty string, []) ║ to empty ║ (empty string, []) ║ │
102
+ │ ║ ║ ║ ║ │
103
+ │ ╟────────────────────────╢ ╟────────────────────────╢ │
104
+ │ ║ ║ mapping ║ ║ │
105
+ │ ║ "non-existent" ║◀──────────────────▶║ ║ │
106
+ │ ║ (nil) ║ to undefined ║ "undefined" ║ │
107
+ │ ║ ║ ║ (key omitted) ║ │
108
+ │ ╟────────────────────────╢ ║ ║ │
109
+ │ ║ ║ mapping ║ ║ │
110
+ │ ║ "undefined" ║─────(one-way)─────▶║ TOML does not ║ │
111
+ │ ║ (uninitialized) ║ to undefined ║ support NULL ║ │
112
+ │ ║ ║ ║ ║ │
113
+ │ ╚════════════════════════╝ ╚════════════════════════╝ │
114
+ └─────────────────────────────────────────────────────────────────────────────┘
115
+ ----
116
+
117
+ There are the following additional challenges that a developer must take into account of:
118
+
119
+ * Single attribute value vs collection attribute value. Different technologies
120
+ treat single/collection values differently.
121
+
122
+ * External schemas and systems that interoperate with serializations from
123
+ Lutaml::Model. Many schemas and systems adopt "different" conventions for
124
+ representing missing value semantics (sometimes very awkward ones).
125
+
126
+ The solution for the first challenge is to understand the behavior of the
127
+ different technologies used. The default mappings are described in <<value_representation_in_lutaml-model>>
128
+ and <<value_representation_in_serialization_formats>>.
129
+
130
+
131
+ [[value_representation_in_lutaml-model]]
132
+ === Value representation in Lutaml::Model
133
+
134
+ The following table summarizes the behavior of the Lutaml::Model
135
+ in regards of the "missing values" family.
136
+
137
+ .Handling of missing value types in Lutaml::Model data types
138
+ [cols="1,1,2,2"]
139
+ |===
140
+ | LutaML value type | Cardinality (1 or n) | Missing value type | Ruby value
141
+
142
+ .3+| Collection attribute
143
+ .3+| collection
144
+ | empty value | `[]` (Array)
145
+ | non-existent value | `nil` (NilClass)
146
+ | undefined value | No assigned value
147
+
148
+ .3+| `:string`
149
+ .3+| single
150
+ | empty value | `""` (String)
151
+ | non-existent value | `nil` (NilClass)
152
+ | undefined value | No assigned value
153
+
154
+ .3+| `:integer`
155
+ .3+| single
156
+ | empty value | N/A
157
+ | non-existent value | `nil` (NilClass)
158
+ | undefined value | No assigned value
159
+
160
+ .3+| `:float`
161
+ .3+| single
162
+ | empty value | N/A
163
+ | non-existent value | `nil` (NilClass)
164
+ | undefined value | No assigned value
165
+
166
+ .3+| `:boolean`
167
+ .3+| single
168
+ | empty value | N/A
169
+ | non-existent value | `nil` (NilClass)
170
+ | undefined value | No assigned value
171
+
172
+ .3+| `:date`
173
+ .3+| single
174
+ | empty value | N/A
175
+ | non-existent value | `nil` (NilClass)
176
+ | undefined value | No assigned value
177
+
178
+ .3+| `:time_without_date`
179
+ .3+| single
180
+ | empty value | N/A
181
+ | non-existent value | `nil` (NilClass)
182
+ | undefined value | No assigned value
183
+
184
+ .3+| `:date_time`
185
+ .3+| single
186
+ | empty value | N/A
187
+ | non-existent value | `nil` (NilClass)
188
+ | undefined value | No assigned value
189
+
190
+ .3+| `:time`
191
+ .3+| single
192
+ | empty value | N/A
193
+ | non-existent value | `nil` (NilClass)
194
+ | undefined value | No assigned value
195
+
196
+ .3+| `:decimal`
197
+ .3+| single
198
+ | empty value | N/A
199
+ | non-existent value | `nil` (NilClass)
200
+ | undefined value | No assigned value
201
+
202
+ .3+| `:hash`
203
+ .3+| single
204
+ | empty value | `{}` (Hash)
205
+ | non-existent value | `nil` (NilClass)
206
+ | undefined value | No assigned value
207
+
208
+ |===
209
+
210
+
211
+ [[value_representation_in_serialization_formats]]
212
+ === Value representation in serialization formats
213
+
214
+ Every serialization format uses a different information model to represent
215
+ these missing values.
216
+
217
+ Some serialization formats support all 3 types of missing values,
218
+ while others only support a subset of them.
219
+
220
+ .Varied handling of missing values in supported serialization formats
221
+ |===
222
+ | Serialization format | Cardinality (1 or n) | Missing value type | Example
223
+
224
+ .6+| XML
225
+ .3+| collection
226
+ | empty collection | the XML blank element: `<status></status>` or `<status/>`
227
+ | non-existent collection | a blank element with attribute `xsi:nil`: `<status xsi:nil="true"/>`
228
+ | undefined collection | the XML element is omitted
229
+ .3+| single
230
+ | empty value | the XML blank element: `<status></status>` or `<status/>`
231
+ | non-existent value | a blank element with attribute `xsi:nil`: `<status xsi:nil="true"/>`
232
+ | undefined value | the XML element is omitted
233
+
234
+ .6+| JSON
235
+ .3+| collection
236
+ | empty collection | an empty array (`[]`)
237
+ | non-existent collection | the value `null`
238
+ | undefined collection | the key is omitted
239
+ .3+| single
240
+ | empty value | an empty string (`""`)
241
+ | non-existent value | the value `null`
242
+ | undefined value | the key is omitted
243
+
244
+ .6+| YAML
245
+ .3+| collection
246
+ | empty collection | an empty array (`[]`)
247
+ | non-existent collection | the value `null`
248
+ | undefined collection | the key is omitted
249
+ .3+| single
250
+ | empty value | an empty string (`""`)
251
+ | non-existent value | the value `null`
252
+ | undefined value | the key is omitted
253
+
254
+ .6+| TOML
255
+ .3+| collection
256
+ | empty collection | an empty array (`[]`)
257
+ | non-existent collection | TOML does not support the concept of "null"
258
+ | undefined collection | the key is omitted
259
+ .3+| single
260
+ | empty value | an empty string (`""`)
261
+ | non-existent value | TOML does not support the concept of "null"
262
+ | undefined value | the key is omitted
263
+
264
+ |===
265
+
266
+
267
+ === Missing value mapping
268
+
269
+ ==== General
270
+
271
+ Lutaml::Model provides a comprehensive way to handle the missing values family
272
+ across different serialization formats.
273
+
274
+ The `value_map` option as applied to serialization mapping rules allow users to
275
+ meticulously define how each and every missing value should be mapped from a
276
+ serialization format to a Lutaml::Model object.
277
+
278
+ The `value_map` option is used to define mappings for both `from` and `to` values:
279
+
280
+ `from` pairs::
281
+ A hash of key-value pairs that determines the mapping of a missing value at the serialization format
282
+ ("from") to a LutaML Model missing value where this mapping applies.
283
+ The key is the missing value type in the serialization format, and the value is
284
+ the missing value type in the LutaML Model.
285
+ +
286
+ NOTE: In other words, used when converting the serialized format into a
287
+ Lutaml::Model Ruby object.
288
+
289
+ `to` pairs::
290
+ A hash of key-value pairs that determines the mapping of a LutaML Model ("to") missing
291
+ to a missing value choice at the serialization format where this mapping applies.
292
+ The key is the missing value type in the LutaML Model, and the value is the
293
+ missing value type in the serialization format.
294
+ +
295
+ NOTE: In other words, used when converting a Lutaml::Model Ruby object into the
296
+ serialized format.
297
+
298
+ Syntax:
299
+
300
+ [source,ruby]
301
+ ----
302
+ {map_command} 'format-key', to: :attribute_name, value_map: { <1>
303
+ from: {
304
+ {format-missing-value-n}: {model-missing-value-n}, <2>
305
+ {format-missing-value-m}: {model-missing-value-m},
306
+ {format-missing-value-o}: {model-missing-value-o}
307
+ },
308
+ to: {
309
+ {model-missing-value-n}: {format-missing-value-n}, <3>
310
+ {model-missing-value-m}: {format-missing-value-m},
311
+ {model-missing-value-o}: {format-missing-value-o}
312
+ }
313
+ }
314
+ ----
315
+ <1> The `{map_command}` is a mapping rule with the actual command depending on
316
+ the serialization format.
317
+ <2> In the `from` mapping, the keys are the missing value types in the
318
+ serialization format.
319
+ <3> In the `to` mapping, the keys are the missing value types in the LutaML
320
+ Model.
321
+
322
+ The missing value type mapping differs per serialization format,
323
+ as serialization formats may not fully support all missing value types.
324
+
325
+ The availability of `from` and `to` keys and values depend on the types of
326
+ missing values supported by that particular serialization format.
327
+
328
+ The available values for `from` and `to` for serialization formats
329
+ are presented below, where the allowed values are to be used in the direction
330
+ of the format. That means if the format supports `:empty`, it can be used
331
+ as a key in `from:` direction, and the value in the `to:` direction (see `{format-missing-value-n}`) in the syntax.
332
+
333
+ .Available missing value types in different mapping commands
334
+ [cols="a,2a"]
335
+ |===
336
+ | Map command | Missing value types available (key in `from:` direction, value in the `to:` direction)
337
+
338
+ | XML element `map_element` | `:empty`, `:omitted`, `:nil`
339
+ | XML attribute `map_attribute` | `:empty`, `:omitted`
340
+ | Hash `map`, `map_content` | `:empty`, `:omitted`, `:nil`
341
+ | JSON `map`, `map_content` | `:empty`, `:omitted`, `:nil`
342
+ | YAML `map`, `map_content` | `:empty`, `:omitted`, `:nil`
343
+ | TOML `map`, `map_content` | `:empty`, `:omitted`
344
+
345
+ |===
346
+
347
+
348
+ [example]
349
+ For instance, TOML does not support the notion of "null" and therefore the
350
+ missing value type of `nil` cannot be used; therefore in a `from:`
351
+ value map, it is not possible to indicate `nil: {model-missing-value}`.
352
+
353
+ [example]
354
+ ====
355
+ In an XML mapping block, it is possible to do the following.
356
+
357
+ [source,ruby]
358
+ ----
359
+ xml do
360
+ map_element 'status', to: :status, value_map: {
361
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
362
+ to: { empty: :nil, omitted: :omitted, nil: :nil }
363
+ }
364
+ end
365
+ ----
366
+ ====
367
+
368
+ Each serialization format has specific behavior when handling values
369
+ such as `empty`, `omitted`, and `nil`.
370
+
371
+ Users can specify the mapping for both `from` and `to` values using the
372
+ `value_map` option in the attribute definition.
373
+
374
+ * The keys that can be used in the `from` and `to` mappings are `empty`,
375
+ `omitted`, and `nil`.
376
+
377
+ * The values in the mappings can also be `empty`, `omitted`, and `nil`.
378
+
379
+ `empty`::
380
+ The `:empty` key is **context-aware**: for scalar attributes, it represents an
381
+ empty value (e.g., empty string `""`). For collection attributes, it represents
382
+ an empty collection (e.g., empty array `[]`). The attribute type determines the
383
+ semantic meaning automatically — no separate key is needed.
384
+
385
+ IMPORTANT: When both DSL options (`render_nil`, `render_empty`) and `value_map`
386
+ entries are provided on the same mapping rule, the **DSL options take
387
+ precedence**. For example, given `render_empty: false` (the default) and
388
+ `value_map: { to: { empty: :empty } }`, the `render_empty: false` wins and empty
389
+ values are omitted. This ensures that the explicit DSL intent is never silently
390
+ overridden by a `value_map` entry.
391
+
392
+ NOTE: Since `nil` is not supported in TOML, so mappings like `nil:
393
+ {any_option}` or `{any_option}: :nil` will not work in TOML.
394
+
395
+ NOTE: In a collection attribute, the values of `value_map` also depend on the
396
+ `initialize_empty` setting, where an omitted value in the serialization format can still lead to a `nil`
397
+ or an empty array `[]` at the attribute-level (instead of the mapping-level).
398
+
399
+
400
+
401
+ ==== Default value maps for serialization formats
402
+
403
+ The table below describes the default `value_map` configurations for supported
404
+ serialization formats.
405
+
406
+ // TODO: Find a place to write this
407
+ // XML Handling::
408
+ // - `<status>new</status>` will be treated as `["new"]`.
409
+ // - `<status>new</status><status>assigned</status>` will be treated as `["new", "assigned"]`.
410
+
411
+ ===== Default value map for XML element (single attribute)
412
+
413
+ [source,ruby]
414
+ ----
415
+ attribute :attr, :string
416
+
417
+ xml do
418
+ map_element 'key', to: :attr, value_map: {
419
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
420
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
421
+ }
422
+ end
423
+ ----
424
+
425
+ .Default missing value mapping configuration for single attributes in XML elements
426
+ [cols="a,a,a,a"]
427
+ |===
428
+
429
+ h| Direction h| Map rule h| XML source h| Model target
430
+
431
+ .3+|`from:`
432
+ | `empty: :nil`
433
+ | blank XML element (`<status/>`)
434
+ | `nil`
435
+
436
+ | `omitted: :omitted`
437
+ | absent XML element
438
+ | omitted from the model
439
+
440
+ | `nil: :nil`
441
+ | blank XML element with attribute `xsi:nil` (`<status xsi:nil=true/>`)
442
+ | `nil` value in the model
443
+
444
+
445
+ h| Direction h| Map rule h| Model source h| XML target
446
+
447
+ .3+|`to:`
448
+ | `empty: :empty`
449
+ | empty string (`""`)
450
+ | blank XML element
451
+
452
+ | `omitted: :omitted`
453
+ | omitted in the model
454
+ | XML element not rendered
455
+
456
+ | `nil: :nil`
457
+ | `nil` value in the model
458
+ | blank XML element with attribute `xsi:nil` (`<status xsi:nil=true/>`)
459
+
460
+ |===
461
+
462
+ ===== Default value map for XML element (collection attribute)
463
+
464
+ [source,ruby]
465
+ ----
466
+ attribute :attr, :string, collection: true
467
+
468
+ xml do
469
+ map_element 'key', to: :attr, value_map: {
470
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
471
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
472
+ }
473
+ end
474
+ ----
475
+
476
+ .Default missing value mapping configuration for collection attributes in XML elements
477
+ [cols="a,a,a,a"]
478
+ |===
479
+
480
+ h| Direction h| Map rule h| XML source h| Model target
481
+
482
+ .3+|`from:`
483
+ | `empty: :empty`
484
+ | blank XML element (`<status/>`)
485
+ | empty array (`[]`)
486
+
487
+ | `omitted: :omitted`
488
+ | absent XML element
489
+ | omitted from the model
490
+
491
+ | `nil: :nil`
492
+ | blank XML element with attribute `xsi:nil` (`<status xsi:nil=true/>`)
493
+ | `nil` value in the model
494
+
495
+
496
+ h| Direction h| Map rule h| Model source h| XML target
497
+
498
+ .3+|`to:`
499
+ | `empty: :empty`
500
+ | empty array (`[]`)
501
+ | no child elements rendered (empty container)
502
+
503
+ | `omitted: :omitted`
504
+ | omitted in the model
505
+ | XML element not rendered
506
+
507
+ | `nil: :nil`
508
+ | `nil` value in the model
509
+ | blank XML element with attribute `xsi:nil` (`<status xsi:nil=true/>`)
510
+
511
+ |===
512
+
513
+ ===== Default value map for XML attribute (single attribute)
514
+
515
+ [source,ruby]
516
+ ----
517
+ attribute :attr, :string
518
+
519
+ xml do
520
+ map_attribute 'attr_name', to: :attr, value_map: {
521
+ from: { empty: :nil, omitted: :omitted },
522
+ to: { empty: :empty, nil: :empty, omitted: :omitted }
523
+ }
524
+ end
525
+ ----
526
+
527
+ .Default missing value mapping configuration for single attributes in XML attributes
528
+ [cols="a,a,a,a"]
529
+ |===
530
+
531
+ h| Direction h| Map rule h| XML source h| Model target
532
+
533
+ .2+|`from:` (source only supports `empty` and `omitted`)
534
+ | `empty: :nil`
535
+ | blank XML attribute (`status=""`)
536
+ | `nil`
537
+
538
+ | `omitted: :omitted`
539
+ | absent XML attribute
540
+ | omitted from the model
541
+
542
+ h| Direction h| Map rule h| Model source h| XML target
543
+
544
+ .3+|`to:` (target only accepts `empty` and `omitted`)
545
+ | `empty: :empty`
546
+ | empty string (`""`)
547
+ | blank XML attribute (`status=""`)
548
+
549
+ | `omitted: :omitted`
550
+ | omitted in the model
551
+ | XML attribute not rendered
552
+
553
+ | `nil: :empty`
554
+ | `nil`
555
+ | blank XML attribute (`status=""`)
556
+
557
+ |===
558
+
559
+ ===== Default value map for XML attribute (collection attribute)
560
+
561
+ [source,ruby]
562
+ ----
563
+ attribute :attr, :string, collection: true
564
+
565
+ xml do
566
+ map_attribute 'attr_name', to: :attr, value_map: {
567
+ from: { empty: :empty, omitted: :omitted },
568
+ to: { empty: :empty, nil: :omitted, omitted: :omitted }
569
+ }
570
+ end
571
+ ----
572
+
573
+ .Default missing value mapping configuration for collection attributes in XML attributes
574
+ [cols="a,a,a,a"]
575
+ |===
576
+
577
+ h| Direction h| Map rule h| XML source h| Model target
578
+
579
+ .2+|`from:` (source only supports `empty` and `omitted`)
580
+ | `empty: :empty`
581
+ | blank XML attribute (`status=""`)
582
+ | empty array (`[]`)
583
+
584
+ | `omitted: :omitted`
585
+ | absent XML attribute
586
+ | omitted from the model
587
+
588
+ h| Direction h| Map rule h| Model source h| XML target
589
+
590
+ .3+|`to:` (target only accepts `empty` and `omitted`)
591
+ | `empty: :empty`
592
+ | empty array (`[]`)
593
+ | XML attribute rendered as empty string
594
+
595
+ | `omitted: :omitted`
596
+ | omitted in the model
597
+ | XML attribute not rendered
598
+
599
+ | `nil: :omitted`
600
+ | `nil`
601
+ | XML attribute not rendered
602
+
603
+ |===
604
+
605
+
606
+
607
+ ===== Default value map for YAML (single attribute)
608
+
609
+ [source,ruby]
610
+ ----
611
+ attribute :attr, :string
612
+
613
+ yaml do
614
+ map 'key', to: :attr, value_map: {
615
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
616
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
617
+ }
618
+ end
619
+ ----
620
+
621
+ .Default missing value mapping configuration for single attributes in YAML
622
+ [cols="a,a,a,a"]
623
+ |===
624
+
625
+ h| Direction h| Map rule h| XML source h| Model target
626
+
627
+ .3+|`from:`
628
+ | `empty: :empty`
629
+ | empty string in YAML (`status:` or `status: ""`)
630
+ | empty string (`""`)
631
+
632
+ | `omitted: :omitted`
633
+ | absent YAML key
634
+ | omitted from the model
635
+
636
+ | `nil: :nil`
637
+ | YAML `null`
638
+ | `nil`
639
+
640
+ h| Direction h| Map rule h| Model source h| XML target
641
+
642
+ .3+|`to:`
643
+ | `empty: :empty`
644
+ | empty string (`""`)
645
+ | empty string in YAML (`status:`)
646
+
647
+ | `omitted: :omitted`
648
+ | omitted in the model
649
+ | YAML key omitted
650
+
651
+ | `nil: :nil`
652
+ | `nil`
653
+ | YAML `null`
654
+
655
+ |===
656
+
657
+ NOTE: In order to treat a YAML value like `status: ''` to `nil`, the mapping of
658
+ `value_map: { from: { empty: :nil } }` can be applied.
659
+
660
+
661
+ ===== Default value map for YAML (collection attribute)
662
+
663
+ [source,ruby]
664
+ ----
665
+ attribute :attr, :string, collection: true
666
+
667
+ yaml do
668
+ map 'key', to: :attr, value_map: {
669
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
670
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
671
+ }
672
+ end
673
+ ----
674
+
675
+ .Default missing value mapping configuration for collection attributes in YAML
676
+ [cols="a,a,a,a"]
677
+ |===
678
+
679
+ h| Direction h| Map rule h| YAML source h| Model target
680
+
681
+ .3+|`from:`
682
+ | `empty: :empty`
683
+ | empty YAML array (`status:` or `status: []`)
684
+ | empty array (`[]`)
685
+
686
+ | `omitted: :omitted`
687
+ | absent YAML key
688
+ | omitted from the model
689
+
690
+ | `nil: :nil`
691
+ | YAML `null`
692
+ | `nil`
693
+
694
+ h| Direction h| Map rule h| Model source h| YAML target
695
+
696
+ .3+|`to:`
697
+ | `empty: :empty`
698
+ | empty array (`[]`)
699
+ | YAML key rendered with empty array
700
+
701
+ | `omitted: :omitted`
702
+ | omitted in the model
703
+ | YAML key omitted
704
+
705
+ | `nil: :nil`
706
+ | `nil`
707
+ | YAML `null`
708
+
709
+ |===
710
+
711
+ NOTE: If the YAML key for the collection attribute is omitted, it will be treated
712
+ as `nil` or an empty array depending on the `initialize_empty` setting.
713
+
714
+
715
+ ===== Default value map for JSON (single attribute)
716
+
717
+ [source,ruby]
718
+ ----
719
+ attribute :attr, :string
720
+
721
+ json do
722
+ map 'key', to: :attr, value_map: {
723
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
724
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
725
+ }
726
+ end
727
+ ----
728
+
729
+ .Default missing value mapping configuration for single attributes in JSON
730
+ [cols="a,a,a,a"]
731
+ |===
732
+
733
+ h| Direction h| Map rule h| JSON source h| Model target
734
+
735
+ .3+|`from:`
736
+ | `empty: :empty`
737
+ | empty string in JSON (`"status" : ""`)
738
+ | empty string (`""`)
739
+
740
+ | `omitted: :omitted`
741
+ | absent JSON key
742
+ | omitted from the model
743
+
744
+ | `nil: :nil`
745
+ | JSON `null`
746
+ | `nil`
747
+
748
+ h| Direction h| Map rule h| Model source h| JSON target
749
+
750
+ .3+|`to:`
751
+ | `empty: :empty`
752
+ | empty string (`""`)
753
+ | empty string in JSON (`"status" : ""`)
754
+
755
+ | `omitted: :omitted`
756
+ | omitted in the model
757
+ | JSON key omitted
758
+
759
+ | `nil: :nil`
760
+ | `nil`
761
+ | JSON `null`
762
+
763
+ |===
764
+
765
+
766
+
767
+ ===== Default value map for JSON (collection attribute)
768
+
769
+ [source,ruby]
770
+ ----
771
+ attribute :attr, :string, collection: true
772
+
773
+ json do
774
+ map 'key', to: :attr, value_map: {
775
+ from: { empty: :empty, omitted: :omitted, nil: :nil },
776
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
777
+ }
778
+ end
779
+ ----
780
+
781
+ .Default missing value mapping configuration for collection attributes in JSON
782
+ [cols="a,a,a,a"]
783
+ |===
784
+
785
+ h| Direction h| Map rule h| JSON source h| Model target
786
+
787
+ .3+|`from:`
788
+ | `empty: :empty`
789
+ | empty JSON array (`"status": []`)
790
+ | empty array (`[]`)
791
+
792
+ | `omitted: :omitted`
793
+ | absent JSON key
794
+ | omitted from the model
795
+
796
+ | `nil: :nil`
797
+ | JSON `null`
798
+ | `nil`
799
+
800
+ h| Direction h| Map rule h| Model source h| JSON target
801
+
802
+ .3+|`to:`
803
+ | `empty: :empty`
804
+ | empty array (`[]`)
805
+ | JSON key rendered with empty array
806
+
807
+ | `omitted: :omitted`
808
+ | omitted in the model
809
+ | JSON key omitted
810
+
811
+ | `nil: :nil`
812
+ | `nil`
813
+ | JSON `null`
814
+
815
+ |===
816
+
817
+ ===== Default value map for TOML (single attribute)
818
+
819
+ TOML does not support the concept of `nil` and therefore the mapping of `from:`
820
+ direction with `nil` to will not work in TOML.
821
+
822
+ The `nil` mapping is only supported in the `to:` direction (model to TOML).
823
+
824
+ [source,ruby]
825
+ ----
826
+ attribute :attr, :string
827
+
828
+ toml do
829
+ map 'key', to: :attr, value_map: {
830
+ from: { empty: :empty, omitted: :omitted },
831
+ to: { empty: :empty, omitted: :omitted, nil: :omitted }
832
+ }
833
+ end
834
+ ----
835
+
836
+ .Default missing value mapping configuration for single attributes in TOML
837
+ [cols="a,a,a,a"]
838
+ |===
839
+
840
+ h| Direction h| Map rule h| TOML source h| Model target
841
+
842
+ .2+|`from:` (source only supports `empty` and `omitted`)
843
+ | `empty: :empty`
844
+ | empty string in TOML (`[status]` with no value)
845
+ | empty string (`""`)
846
+
847
+ | `omitted: :omitted`
848
+ | absent TOML key
849
+ | omitted from the model
850
+
851
+ h| Direction h| Map rule h| Model source h| TOML target
852
+
853
+ .3+|`to:` (source only supports `empty` and `omitted`)
854
+ | `empty: :empty`
855
+ | empty string (`""`)
856
+ | empty string in TOML (`[status]` with no value)
857
+
858
+ | `omitted: :omitted`
859
+ | omitted in the model
860
+ | TOML key omitted
861
+
862
+ | `nil: :omitted`
863
+ | `nil`
864
+ | TOML key omitted
865
+
866
+ |===
867
+
868
+
869
+
870
+ ===== Default value map for TOML (collection attribute)
871
+
872
+ TOML does not support the concept of `nil` and therefore the mapping of `from:`
873
+ direction with `nil` to will not work in TOML.
874
+
875
+ The `nil` mapping is only supported in the `to:` direction (model to TOML).
876
+
877
+ [source,ruby]
878
+ ----
879
+ attribute :attr, :string, collection: true
880
+
881
+ toml do
882
+ map 'key', to: :attr, value_map: {
883
+ from: { empty: :empty, omitted: :omitted },
884
+ to: { empty: :empty, omitted: :omitted, nil: :omitted }
885
+ }
886
+ end
887
+ ----
888
+
889
+ .Default missing value mapping configuration for collection attributes in TOML
890
+ [cols="a,a,a,a"]
891
+ |===
892
+
893
+ h| Direction h| Map rule h| TOML source h| Model target
894
+
895
+ .2+|`from:` (source only supports `empty` and `omitted`)
896
+ | `empty: :empty`
897
+ | empty TOML array (`[status]` with no value)
898
+ | empty array (`[]`)
899
+
900
+ | `omitted: :omitted`
901
+ | absent TOML key
902
+ | omitted from the model
903
+
904
+ h| Direction h| Map rule h| Model source h| TOML target
905
+
906
+ .3+|`to:` (source only supports `empty` and `omitted`)
907
+ | `empty: :empty`
908
+ | empty array (`[]`)
909
+ | TOML key rendered with empty array
910
+
911
+ | `omitted: :omitted`
912
+ | omitted in the model
913
+ | TOML key omitted
914
+
915
+ | `nil: :omitted`
916
+ | `nil`
917
+ | TOML key omitted
918
+
919
+ |===
920
+
921
+
922
+
923
+ ==== Replacing missing values type mapping with `value_map`
924
+
925
+ The `value_map` option can be defined to meticulously map for each serialization
926
+ format as follows.
927
+
928
+ [example]
929
+ ====
930
+ .Using `value_map` with `from` and `to` values
931
+ [source,ruby]
932
+ ----
933
+ class ExampleClass < Lutaml::Model::Serializable
934
+ attribute :status, :string
935
+
936
+ xml do
937
+ map_element 'status', to: :status, value_map: {
938
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
939
+ to: { empty: :nil, omitted: :omitted, nil: :nil }
940
+ }
941
+ end
942
+
943
+ hsh | json | yaml | toml | key_value do
944
+ map 'status', to: :status, value_map: {
945
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
946
+ to: { empty: :nil, omitted: :omitted, nil: :nil }
947
+ }
948
+ end
949
+ end
950
+
951
+ yaml = <<~YAML
952
+ ---
953
+ status: ''
954
+ YAML
955
+
956
+ ExampleClass.from_yaml(yaml)
957
+ # => #<ExampleClass:0x000000011954efb0 @status=nil>
958
+
959
+ yaml1 = <<~YAML
960
+ ---
961
+ YAML
962
+
963
+ ExampleClass.from_yaml(yaml1)
964
+ # => #<ExampleClass:0x000000011954efb0 @status=uninitialized>
965
+
966
+ yaml2 = <<~YAML
967
+ ---
968
+ status:
969
+ YAML
970
+
971
+ ExampleClass.from_yaml(yaml2)
972
+ # => #<ExampleClass:0x000000011954efb0 @status=nil>
973
+ ----
974
+ ====
975
+
976
+
977
+ When defining an attribute with `collection: true`, the attribute will behave as follows:
978
+
979
+ [source,ruby]
980
+ ----
981
+ attribute :status, :string, collection: true
982
+ ----
983
+
984
+ Here's an example of how you can use the `value_map` with a collection attribute.
985
+
986
+ .Using `value_map` with a collection attribute
987
+ [example]
988
+ ====
989
+ [source,ruby]
990
+ ----
991
+ class ExampleClass < Lutaml::Model::Serializable
992
+ attribute :status, :string, collection: true
993
+
994
+ xml do
995
+ map_element 'status', to: :status, value_map: {
996
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
997
+ to: { empty: :nil, omitted: :omitted, nil: :nil }
998
+ }
999
+ end
1000
+
1001
+ hsh | json | yaml | key_value do
1002
+ map 'status', to: :status, value_map: {
1003
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
1004
+ to: { empty: :nil, omitted: :omitted, nil: :nil }
1005
+ }
1006
+ end
1007
+
1008
+ toml do
1009
+ map 'status', to: :status, value_map: {
1010
+ from: { empty: :nil, omitted: :omitted },
1011
+ to: { empty: :nil, omitted: :omitted, nil: :omitted }
1012
+ }
1013
+ end
1014
+ end
1015
+
1016
+ yaml = <<~YAML
1017
+ ---
1018
+ status: ['new', 'assigned']
1019
+ YAML
1020
+
1021
+ y = ExampleClass.from_yaml(yaml)
1022
+ # => #<ExampleClass:0x000000011954efb0 @status=["new", "assigned"]>
1023
+ ----
1024
+ ====
1025
+
1026
+ // TODO: Need to improve this example.
1027
+
1028
+ === Specific overrides of value map (`render_*` and `treat_*`)
1029
+
1030
+ ==== General
1031
+
1032
+ There are times that one may want to simply override handling of selective missing value types
1033
+ rather than re-define the entire value map.
1034
+
1035
+ The `:render_*` and `:treat_*` options are simple switches that override the default
1036
+ value map provided for the different serialization formats.
1037
+
1038
+ Syntax:
1039
+
1040
+ [source,ruby]
1041
+ ----
1042
+ {map_command} 'format-key', to: :attribute_name, <1>
1043
+ :render_{model-value}: :as_{format-value}, <2>
1044
+ # ...
1045
+ :treat_{format-value}: :as_{model-value}, <3>
1046
+ # ...
1047
+ ----
1048
+ <1> The `{map_command}` is a mapping rule with the actual command depending on
1049
+ the serialization format. The attribute of `attribute_name` may be a single or a collection value.
1050
+ <2> The `:render_*` mapping overrides the default value map for missing value types in model-to-serialization.
1051
+ <3> The `:treat_*` mapping overrides the default value map for missing value types in serialization-to-model.
1052
+
1053
+ Specifically,
1054
+
1055
+ * The `:render_{model-value}: :as_{format-value}` options are used to override the default behavior of rendering
1056
+ missing value types into the serialization format.
1057
+ `{model-value}`::: specifies the missing value type in the LutaML Model.
1058
+ `{format-value}`::: specifies the missing value type in the serialization format.
1059
+
1060
+ * The `:treat_{format-value}: :as_{model-value}` options are used to override the default behavior of importing
1061
+ missing value types into the model.
1062
+ `{format-value}`::: specifies the missing value type in the serialization format.
1063
+ `{model-value}`::: specifies the missing value type in the LutaML Model.
1064
+
1065
+ In effect, the default `value_map` is overriden by the `:render_*` and `:treat_*`
1066
+ directives.
1067
+
1068
+ [example]
1069
+ ====
1070
+ Given the default mapping for an XML element, the `:render_*` and `:treat_*`
1071
+ options can be used to selectively override behavior.
1072
+
1073
+ [source,ruby]
1074
+ ----
1075
+ xml do
1076
+ map_element 'key', to: :attr, value_map: {
1077
+ from: { empty: :nil, omitted: :omitted, nil: :nil },
1078
+ to: { empty: :empty, omitted: :omitted, nil: :nil }
1079
+ }
1080
+ end
1081
+ ----
1082
+
1083
+ By changing to this:
1084
+
1085
+ [source,ruby]
1086
+ ----
1087
+ xml do
1088
+ map_element 'key', to: :attr,
1089
+ render_nil: :as_empty, <1>
1090
+ treat_omitted: :as_nil <2>
1091
+ end
1092
+ ----
1093
+ <1> This overrides the `to:` direction `nil: :nil` mapping.
1094
+ <2> This overrides the `from:` direction `omitted: :omitted` mapping
1095
+
1096
+ The resulting value map would be:
1097
+
1098
+ [source,ruby]
1099
+ ----
1100
+ xml do
1101
+ map_element 'status', to: :status, value_map: {
1102
+ from: { empty: :nil, omitted: :omitted, nil: :empty }, <1>
1103
+ to: { empty: :nil, omitted: :nil, nil: :nil } <2>
1104
+ }
1105
+ end
1106
+ ----
1107
+ <1> See that `nil: :nil` is now `nil: :empty`.
1108
+ <2> See that `omitted: :omitted` is now `omitted: :nil`
1109
+ ====
1110
+
1111
+
1112
+ === `render_nil`
1113
+
1114
+ ==== General
1115
+
1116
+ `:render_nil` is a specially handled case of the `:render_*` pattern due to
1117
+ legacy. It is used to override default value map behavior for the `nil` model
1118
+ value.
1119
+
1120
+ ==== Format-specific terminology
1121
+
1122
+ NOTE: The terms `:as_blank` and `:as_empty` are **format-specific** and
1123
+ **not interchangeable**. See <<render_empty>> for detailed explanation.
1124
+
1125
+ `render_nil` accepts these values:
1126
+
1127
+ `:as_empty`::: (key-value formats only) If the value is nil, render as explicit
1128
+ empty value (`[]` or `""`).
1129
+
1130
+ `:as_blank`::: (XML only) If the value is nil, render as blank XML element
1131
+ (`<tag/>`).
1132
+
1133
+ `:as_nil`::: If the value is nil, render as nil (XML: `xsi:nil="true"`,
1134
+ key-value: `null`).
1135
+
1136
+ `:omit`::: If the value is nil, omit the element, attribute, or key entirely.
1137
+
1138
+ `true`::: (legacy) Setting `render_nil: true` will render the attribute as an
1139
+ empty element if the attribute is `nil`. For XML, this behaves like `:as_blank`.
1140
+ For key-value formats, this behaves like `:as_empty`.
1141
+
1142
+ Syntax:
1143
+
1144
+ [source,ruby]
1145
+ ----
1146
+ xml do
1147
+ map_element 'key_value_model_attribute_name', to: :name_of_attribute, render_nil: {option}
1148
+ end
1149
+ ----
1150
+
1151
+ [source,ruby]
1152
+ ----
1153
+ hsh | json | yaml | toml do
1154
+ map 'key_value_model_attribute_name', to: :name_of_attribute, render_nil: {option}
1155
+ end
1156
+ ----
1157
+
1158
+ ==== Render `nil` as `true`
1159
+
1160
+ .Using the `render_nil: true` option to render an attribute value of `nil` as an empty element
1161
+ [example]
1162
+ ====
1163
+ [source,ruby]
1164
+ ----
1165
+ class Ceramic < Lutaml::Model::Serializable
1166
+ attribute :type, :string
1167
+ attribute :glaze, :string
1168
+
1169
+ xml do
1170
+ map_element 'type', to: :type, render_nil: true
1171
+ map_element 'glaze', to: :glaze
1172
+ end
1173
+
1174
+ json do
1175
+ map 'type', to: :type, render_nil: true
1176
+ map 'glaze', to: :glaze
1177
+ end
1178
+ end
1179
+ ----
1180
+
1181
+ [source,ruby]
1182
+ ----
1183
+ > Ceramic.new.to_json
1184
+ > # { 'type': null }
1185
+ > Ceramic.new(type: "Porcelain", glaze: "Clear").to_json
1186
+ > # { 'type': 'Porcelain', 'glaze': 'Clear' }
1187
+ ----
1188
+
1189
+ [source,ruby]
1190
+ ----
1191
+ > Ceramic.new.to_xml
1192
+ > # <Ceramic><type></type></Ceramic>
1193
+ > Ceramic.new(type: "Porcelain", glaze: "Clear").to_xml
1194
+ > # <Ceramic><type>Porcelain</type><glaze>Clear</glaze></Ceramic>
1195
+ ----
1196
+ ====
1197
+
1198
+ .Using the `render_nil: true` option to render an empty attribute collection of `nil` as an empty element
1199
+ [example]
1200
+ ====
1201
+ [source,ruby]
1202
+ ----
1203
+ class Ceramic < Lutaml::Model::Serializable
1204
+ attribute :type, :string
1205
+ attribute :glazes, :string, collection: true
1206
+
1207
+ xml do
1208
+ map_element 'type', to: :type, render_nil: true
1209
+ map_element 'glazes', to: :glazes, render_nil: true
1210
+ end
1211
+
1212
+ json do
1213
+ map 'type', to: :type, render_nil: true
1214
+ map 'glazes', to: :glazes, render_nil: true
1215
+ end
1216
+ end
1217
+ ----
1218
+
1219
+ [source,ruby]
1220
+ ----
1221
+ > Ceramic.new.to_json
1222
+ > # { 'type': null, 'glazes': [] }
1223
+ > Ceramic.new(type: "Porcelain", glazes: ["Clear"]).to_json
1224
+ > # { 'type': 'Porcelain', 'glazes': ['Clear'] }
1225
+ ----
1226
+
1227
+ [source,ruby]
1228
+ ----
1229
+ > Ceramic.new.to_xml
1230
+ > # <Ceramic><type></type><glazes></glazes></Ceramic>
1231
+ > Ceramic.new(type: "Porcelain", glazes: ["Clear"]).to_xml
1232
+ > # <Ceramic><type>Porcelain</type><glazes>Clear</glazes></Ceramic>
1233
+ ----
1234
+ ====
1235
+
1236
+ ==== Render `nil` as `omit`
1237
+
1238
+ Using `render_nil: :omit` with a `nil` value will omit the key from XML and
1239
+ key-value formats.
1240
+
1241
+ [example]
1242
+ ====
1243
+ [source,ruby]
1244
+ ----
1245
+ class SomeModel < Lutaml::Model::Serializable
1246
+ attribute :coll, :string, collection: true
1247
+
1248
+ xml do
1249
+ root "some-model"
1250
+ map_element 'collection', to: :coll, render_nil: :omit
1251
+ end
1252
+
1253
+ key_value do
1254
+ map 'collection', to: :coll, render_nil: :omit
1255
+ end
1256
+ end
1257
+
1258
+ puts SomeModel.new.coll
1259
+ # => nil
1260
+
1261
+ puts SomeModel.new.to_xml
1262
+ # =>
1263
+ # <some-model></some-model>
1264
+
1265
+ puts SomeModel.new.to_yaml
1266
+ # =>
1267
+ # ---
1268
+ ----
1269
+ ====
1270
+
1271
+
1272
+ ==== Render `nil` as `nil`
1273
+
1274
+ Using `render_nil: :as_nil` with a `nil` value will create an empty element with
1275
+ `xsi:nil` attribute in XML and create a key with explicit null value in
1276
+ key-value formats.
1277
+
1278
+ NOTE: `TOML` does not support this option.
1279
+
1280
+ [example]
1281
+ ====
1282
+ [source,ruby]
1283
+ ----
1284
+ class SomeModel < Lutaml::Model::Serializable
1285
+ attribute :coll, :string, collection: true
1286
+
1287
+ xml do
1288
+ root "some-model"
1289
+ map_element 'collection', to: :coll, render_nil: :as_nil
1290
+ end
1291
+
1292
+ hsh | json | yaml do
1293
+ map 'collection', to: :coll, render_nil: :as_nil
1294
+ end
1295
+ end
1296
+
1297
+ puts SomeModel.new.coll
1298
+ # => nil
1299
+
1300
+ puts SomeModel.new.to_xml
1301
+ # =>
1302
+ # <some-model xsi:xmlns="..."><collection xsi:nil="true"/></some-model>
1303
+
1304
+ puts SomeModel.new.to_yaml
1305
+ # =>
1306
+ # ---
1307
+ # coll: null
1308
+ ----
1309
+ ====
1310
+
1311
+
1312
+ ==== Render `nil` as `blank`
1313
+
1314
+ Using `render_nil: :as_blank` in XML mappings will create a blank element, and
1315
+ using `render_nil: :as_empty` in key-value mappings will create a key with an
1316
+ explicit empty array.
1317
+
1318
+ NOTE: `:as_blank` is XML-specific (creates blank XML elements like `<tag/>`),
1319
+ while `:as_empty` is key-value-specific (creates explicit empty values like
1320
+ `[]`). These terms are format-specific and not interchangeable.
1321
+
1322
+ [example]
1323
+ ====
1324
+ [source,ruby]
1325
+ ----
1326
+ class SomeModel < Lutaml::Model::Serializable
1327
+ attribute :coll, :string, collection: true
1328
+
1329
+ xml do
1330
+ root "some-model"
1331
+ map_element 'collection', to: :coll, render_nil: :as_blank # <1>
1332
+ end
1333
+
1334
+ key_value do
1335
+ map 'collection', to: :coll, render_nil: :as_empty # <2>
1336
+ end
1337
+ end
1338
+
1339
+ puts SomeModel.new.coll
1340
+ # => nil
1341
+
1342
+ puts SomeModel.new.to_xml
1343
+ # =>
1344
+ # <some-model><collection/></some-model>
1345
+
1346
+ puts SomeModel.new.to_yaml
1347
+ # =>
1348
+ # ---
1349
+ # coll: []
1350
+ ----
1351
+ <1> XML uses `:as_blank` to create a blank element `<collection/>`
1352
+ <2> Key-value formats use `:as_empty` to create explicit empty array `[]`
1353
+ ====
1354
+
1355
+ [[render_empty]]
1356
+ === `render_empty`
1357
+
1358
+ ==== General
1359
+
1360
+ `:render_empty` is a specially handled case of the `:render_*` pattern due to
1361
+ legacy. It is used to override default value map behavior for empty model
1362
+ values.
1363
+
1364
+ ==== Format-specific terminology
1365
+
1366
+ IMPORTANT: The terms `:as_blank` and `:as_empty` are **format-specific** and
1367
+ **not interchangeable**.
1368
+
1369
+ `:as_blank`::: **XML-specific**. Creates a blank XML element (`<tag/>` or
1370
+ `<tag></tag>`). Only valid in `xml` mapping blocks (`map_element`,
1371
+ `map_attribute`, `map_content`).
1372
+
1373
+ `:as_empty`::: **Key-value-specific**. Creates an explicit empty value (`[]` for
1374
+ arrays, `""` for strings). Only valid in `json`, `yaml`, `toml`, `hsh`, and
1375
+ `key_value` mapping blocks.
1376
+
1377
+ Using the wrong term for a format will raise an
1378
+ `IncorrectMappingArgumentsError`:
1379
+
1380
+ * Using `:as_empty` in XML mappings → Error: "`:as_empty` is not supported for
1381
+ XML mappings. Use `:as_blank` instead." * Using `:as_blank` in key-value
1382
+ mappings → Error: "`:as_blank` is not supported for key-value mappings. Use
1383
+ `:as_empty` instead."
1384
+
1385
+ ==== Supported values
1386
+
1387
+ `render_empty` accepts these values:
1388
+
1389
+ `:as_empty`::: (key-value formats only) Render as explicit empty value.
1390
+
1391
+ `:as_blank`::: (XML only) Render as blank XML element.
1392
+
1393
+ `:as_nil`::: Render as nil (XML: `xsi:nil="true"`, key-value: `null`).
1394
+
1395
+ `:omit`::: Omit the element, attribute, or key entirely.
1396
+
1397
+
1398
+ Syntax:
1399
+
1400
+ [source,ruby]
1401
+ ----
1402
+ xml do
1403
+ map_element 'key_value_model_attribute_name', to: :name_of_attribute, render_empty: {option}
1404
+ end
1405
+ ----
1406
+
1407
+ [source,ruby]
1408
+ ----
1409
+ hsh | json | yaml | toml do
1410
+ map 'key_value_model_attribute_name', to: :name_of_attribute, render_empty: {option}
1411
+ end
1412
+ ----
1413
+
1414
+ ==== Render `empty` as `omit`
1415
+
1416
+ Using `render_empty: :omit` with an empty value or empty collection will omit
1417
+ the key from XML and key-value formats.
1418
+
1419
+ [example]
1420
+ ====
1421
+ [source,ruby]
1422
+ ----
1423
+ class SomeModel < Lutaml::Model::Serializable
1424
+ attribute :coll, :string, collection: true
1425
+
1426
+ xml do
1427
+ root "some-model"
1428
+ map_element 'collection', to: :coll, render_empty: :omit
1429
+ end
1430
+
1431
+ key_value do
1432
+ map 'collection', to: :coll, render_empty: :omit
1433
+ end
1434
+ end
1435
+
1436
+ puts SomeModel.new(coll: []).coll
1437
+ # => []
1438
+
1439
+ puts SomeModel.new.to_xml
1440
+ # =>
1441
+ # <some-model></some-model>
1442
+
1443
+ puts SomeModel.new.to_yaml
1444
+ # =>
1445
+ # ---
1446
+ ----
1447
+ ====
1448
+
1449
+ ==== Render `empty` as `nil`
1450
+
1451
+ Using `render_empty: :as_nil` will create an empty element with the `xsi:nil`
1452
+ attribute in XML, and create a key with explicit null value in key-value formats.
1453
+
1454
+ NOTE: `TOML` does not support this option.
1455
+
1456
+ [example]
1457
+ ====
1458
+ [source,ruby]
1459
+ ----
1460
+ class SomeModel < Lutaml::Model::Serializable
1461
+ attribute :coll, :string, collection: true
1462
+
1463
+ xml do
1464
+ root "some-model"
1465
+ map_element 'collection', to: :coll, render_empty: :as_nil
1466
+ end
1467
+
1468
+ hsh | json | yaml do
1469
+ map 'collection', to: :coll, render_empty: :as_nil
1470
+ end
1471
+ end
1472
+
1473
+ puts SomeModel.new(coll: []).coll
1474
+ # => []
1475
+
1476
+ puts SomeModel.new.to_xml
1477
+ # =>
1478
+ # <some-model xsi:xmlns="..."><collection xsi:nil="true"/></some-model>
1479
+
1480
+ puts SomeModel.new.to_yaml
1481
+ # =>
1482
+ # ---
1483
+ # coll: null
1484
+ ----
1485
+ ====
1486
+
1487
+
1488
+ ==== Render `empty` as `blank`/`empty`
1489
+
1490
+ Using `render_empty: :as_blank` in XML mappings will create a blank
1491
+ element, and using `render_empty: :as_empty` in key-value mappings will create
1492
+ a key with an explicit empty array.
1493
+
1494
+ NOTE: `:as_blank` is XML-specific (creates blank XML elements like `<tag/>`),
1495
+ while `:as_empty` is key-value-specific (creates explicit empty values like `[]`).
1496
+ These terms are format-specific and not interchangeable.
1497
+
1498
+ [example]
1499
+ ====
1500
+ [source,ruby]
1501
+ ----
1502
+ class SomeModel < Lutaml::Model::Serializable
1503
+ attribute :coll, :string, collection: true
1504
+
1505
+ xml do
1506
+ root "some-model"
1507
+ map_element 'collection', to: :coll, render_empty: :as_blank # <1>
1508
+ end
1509
+
1510
+ key_value do
1511
+ map 'collection', to: :coll, render_empty: :as_empty # <2>
1512
+ end
1513
+ end
1514
+
1515
+ puts SomeModel.new(coll: []).coll
1516
+ # => []
1517
+
1518
+ puts SomeModel.new.to_xml
1519
+ # =>
1520
+ # <some-model><collection/></some-model>
1521
+
1522
+ puts SomeModel.new.to_yaml
1523
+ # =>
1524
+ # ---
1525
+ # coll: []
1526
+ ----
1527
+ <1> XML uses `:as_blank` to create a blank element `<collection/>`
1528
+ <2> Key-value formats use `:as_empty` to create explicit empty array `[]`
1529
+ ====
1530
+
1531
+