lutaml-model 0.7.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/dependent-tests.yml +4 -0
- data/.github/workflows/docs.yml +59 -0
- data/.github/workflows/downstream-performance.yml +156 -0
- data/.github/workflows/performance.yml +33 -0
- data/.github/workflows/rake.yml +13 -0
- data/.github/workflows/release.yml +5 -0
- data/.gitignore +27 -1
- data/.rubocop.yml +14 -2
- data/.rubocop_todo.yml +574 -88
- data/Gemfile +15 -9
- data/README.adoc +13522 -6905
- data/RELEASE_NOTES.adoc +51 -0
- data/Rakefile +2 -0
- data/bench/baselines/.gitkeep +0 -0
- data/bench/bench_all.rb +52 -0
- data/bench/bench_common.rb +147 -0
- data/bench/bench_compare.rb +195 -0
- data/bench/bench_mml.rb +53 -0
- data/bench/bench_niso.rb +54 -0
- data/bench/bench_sts.rb +49 -0
- data/bench/bench_unitsml.rb +43 -0
- data/bench/bench_uniword.rb +69 -0
- data/bench/bench_xmi.rb +51 -0
- data/bench/gate_config.rb +127 -0
- data/benchmark/quick_benchmark.rb +297 -0
- data/benchmark/serialization_benchmark.rb +619 -0
- data/docs/.rubocop.yml +1 -0
- data/docs/.rubocop_todo.yml +7 -0
- data/docs/Gemfile +13 -0
- data/docs/PERFORMANCE_METHODOLOGY.md +645 -0
- data/docs/_config.yml +145 -0
- data/docs/_guides/advanced-mapping.adoc +564 -0
- data/docs/_guides/character-encoding.adoc +342 -0
- data/docs/_guides/collection-serialization.adoc +349 -0
- data/docs/_guides/creating-xsd.adoc +1221 -0
- data/docs/_guides/index.adoc +71 -0
- data/docs/_guides/keyvalue-serialization.adoc +1156 -0
- data/docs/_guides/liquid-templates.adoc +505 -0
- data/docs/_guides/missing-values-handling.adoc +1531 -0
- data/docs/_guides/ooxml-examples.adoc +755 -0
- data/docs/{schema_generation.adoc → _guides/schema-generation.adoc} +5 -0
- data/docs/{schema_import.adoc → _guides/schema-import.adoc} +276 -4
- data/docs/_guides/value-transformations.adoc +1388 -0
- data/docs/_guides/xml/namespace-presentation.adoc +476 -0
- data/docs/_guides/xml/namespace-semantics.adoc +677 -0
- data/docs/_guides/xml/reusable-mapping-classes.adoc +181 -0
- data/docs/_guides/xml/schema-location.adoc +245 -0
- data/docs/_guides/xml/type-namespaces.adoc +1011 -0
- data/docs/_guides/xml-mapping.adoc +1847 -0
- data/docs/_guides/xml-mappings-guide.adoc +21 -0
- data/docs/_guides/xml-namespace-declarations.adoc +662 -0
- data/docs/_guides/xml-namespace-qualification.adoc +720 -0
- data/docs/_guides/xml-namespaces.adoc +2613 -0
- data/docs/_guides/xml_mappings/01_introduction.adoc +65 -0
- data/docs/_guides/xml_mappings/02_core_concepts.adoc +177 -0
- data/docs/_guides/xml_mappings/03_architecture.adoc +205 -0
- data/docs/_guides/xml_mappings/04_xml_namespace_class.adoc +1754 -0
- data/docs/_guides/xml_mappings/05_common_patterns.adoc +1803 -0
- data/docs/_guides/xml_mappings/06_migration_guide.adoc +523 -0
- data/docs/_guides/xml_mappings/07_best_practices.adoc +959 -0
- data/docs/_guides/xml_mappings/08_troubleshooting.adoc +934 -0
- data/docs/_migrations/0-1-0-migrate-from-shale.adoc +304 -0
- data/docs/_migrations/0-8-0-namespace-restructuring.adoc +1572 -0
- data/docs/_migrations/0-8-0-xsd-features.adoc +729 -0
- data/docs/_migrations/index.adoc +18 -0
- data/docs/_migrations/xsd-type-migration.adoc +1294 -0
- data/docs/_pages/attributes.adoc +1156 -0
- data/docs/_pages/breaking-changes.adoc +154 -0
- data/docs/_pages/collections.adoc +1664 -0
- data/docs/_pages/comparison-with-shale.adoc +139 -0
- data/docs/_pages/configuration.adoc +192 -0
- data/docs/_pages/consolidation-mapping.adoc +252 -0
- data/docs/_pages/importable_models.adoc +591 -0
- data/docs/_pages/index.adoc +46 -0
- data/docs/_pages/installation.adoc +35 -0
- data/docs/_pages/models.adoc +332 -0
- data/docs/_pages/quick-start.adoc +124 -0
- data/docs/_pages/serialization_adapters.adoc +268 -0
- data/docs/_pages/troubleshooting.adoc +104 -0
- data/docs/_pages/validation.adoc +171 -0
- data/docs/_pages/value_types.adoc +1514 -0
- data/docs/_pages/xml-conformance.adoc +143 -0
- data/docs/_references/architecture.adoc +189 -0
- data/docs/{custom_adapters.adoc → _references/custom_adapters.adoc} +6 -1
- data/docs/_references/custom_registers.adoc +1026 -0
- data/docs/_references/data-modeling-in-a-nutshell.adoc +207 -0
- data/docs/_references/format-independent-features.adoc +713 -0
- data/docs/_references/index.adoc +47 -0
- data/docs/_references/instance-serialization.adoc +120 -0
- data/docs/_references/lutaml-namespace-planning.md +120 -0
- data/docs/_references/parent-root-context.adoc +122 -0
- data/docs/_references/reference_type.adoc +302 -0
- data/docs/_references/serialization-model-mappings.adoc +102 -0
- data/docs/_references/three-phase-namespace-architecture.adoc +470 -0
- data/docs/_references/xml-w3c-namespace-qualification.adoc +66 -0
- data/docs/_references/xsd-generation-with-namespace-support.adoc +449 -0
- data/docs/_references/xsd-schema-parsing.adoc +1260 -0
- data/docs/_references/xsd-type-architecture.adoc +534 -0
- data/docs/_tutorials/basic-model-definition.adoc +157 -0
- data/docs/_tutorials/custom-types-tutorial.adoc +258 -0
- data/docs/_tutorials/first-json-serialization.adoc +192 -0
- data/docs/_tutorials/first-xml-serialization.adoc +223 -0
- data/docs/_tutorials/index.adoc +60 -0
- data/docs/_tutorials/lutaml-xml-architecture.adoc +1354 -0
- data/docs/_tutorials/polymorphic-models-tutorial.adoc +253 -0
- data/docs/_tutorials/schema-compiler-module-namespaces.adoc +497 -0
- data/docs/_tutorials/validation-basics.adoc +232 -0
- data/docs/_tutorials/working-with-collections.adoc +201 -0
- data/docs/_tutorials/xml-element-attribute-namespace-guide.adoc +279 -0
- data/docs/_tutorials/xml-namespaces-basics.adoc +315 -0
- data/docs/_tutorials/xml-schema-primer-style-guide.adoc +1394 -0
- data/docs/architecture.md +424 -0
- data/docs/bugreports/BUGREPORT_element_order_render_empty.md +99 -0
- data/docs/cli_compare.adoc +249 -0
- data/docs/collection_validation.adoc +366 -0
- data/docs/index.adoc +106 -0
- data/docs/key_value_data_model.adoc +1229 -0
- data/docs/model_transforms.adoc +769 -0
- data/docs/namespace-management.adoc +1051 -0
- data/docs/xml-schema-qualification.md +171 -0
- data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/document.rb +3 -4
- data/lib/lutaml/hash_format/adapter/mapping.rb +19 -0
- data/lib/lutaml/hash_format/adapter/mapping_rule.rb +9 -0
- data/lib/lutaml/{model/hash_adapter → hash_format/adapter}/standard_adapter.rb +3 -3
- data/lib/lutaml/hash_format/adapter/transform.rb +9 -0
- data/lib/lutaml/hash_format/adapter.rb +13 -0
- data/lib/lutaml/hash_format/type/serializers.rb +24 -0
- data/lib/lutaml/hash_format.rb +25 -0
- data/lib/lutaml/{model/json → json/adapter}/document.rb +3 -3
- data/lib/lutaml/json/adapter/mapping.rb +19 -0
- data/lib/lutaml/json/adapter/mapping_rule.rb +9 -0
- data/lib/lutaml/json/adapter/multi_json_adapter.rb +38 -0
- data/lib/lutaml/json/adapter/oj_adapter.rb +38 -0
- data/lib/lutaml/json/adapter/standard_adapter.rb +36 -0
- data/lib/lutaml/json/adapter/transform.rb +9 -0
- data/lib/lutaml/json/adapter.rb +20 -0
- data/lib/lutaml/json/schema/json_schema.rb +62 -0
- data/lib/lutaml/json/schema.rb +9 -0
- data/lib/lutaml/json/type/serializers.rb +72 -0
- data/lib/lutaml/json.rb +58 -0
- data/lib/lutaml/{model/jsonl → jsonl/adapter}/document.rb +2 -2
- data/lib/lutaml/jsonl/adapter/mapping.rb +19 -0
- data/lib/lutaml/jsonl/adapter/mapping_rule.rb +9 -0
- data/lib/lutaml/{model/jsonl → jsonl/adapter}/standard_adapter.rb +5 -4
- data/lib/lutaml/jsonl/adapter/transform.rb +26 -0
- data/lib/lutaml/jsonl/adapter.rb +13 -0
- data/lib/lutaml/jsonl.rb +21 -0
- data/lib/lutaml/key_value/adapter/hash/document.rb +13 -0
- data/lib/lutaml/key_value/adapter/hash/mapping.rb +19 -0
- data/lib/lutaml/key_value/adapter/hash/mapping_rule.rb +9 -0
- data/lib/lutaml/key_value/adapter/hash/standard_adapter.rb +19 -0
- data/lib/lutaml/key_value/adapter/hash/transform.rb +10 -0
- data/lib/lutaml/key_value/adapter/hash.rb +15 -0
- data/lib/lutaml/key_value/adapter/json/document.rb +16 -0
- data/lib/lutaml/key_value/adapter/json/mapping.rb +24 -0
- data/lib/lutaml/key_value/adapter/json/mapping_rule.rb +14 -0
- data/lib/lutaml/key_value/adapter/json/multi_json_adapter.rb +43 -0
- data/lib/lutaml/key_value/adapter/json/oj_adapter.rb +43 -0
- data/lib/lutaml/key_value/adapter/json/standard_adapter.rb +41 -0
- data/lib/lutaml/key_value/adapter/json/transform.rb +14 -0
- data/lib/lutaml/key_value/adapter/json.rb +24 -0
- data/lib/lutaml/key_value/adapter/jsonl/document.rb +16 -0
- data/lib/lutaml/key_value/adapter/jsonl/mapping.rb +19 -0
- data/lib/lutaml/key_value/adapter/jsonl/mapping_rule.rb +9 -0
- data/lib/lutaml/key_value/adapter/jsonl/standard_adapter.rb +36 -0
- data/lib/lutaml/key_value/adapter/jsonl/transform.rb +26 -0
- data/lib/lutaml/key_value/adapter/jsonl.rb +17 -0
- data/lib/lutaml/key_value/adapter/toml/document.rb +13 -0
- data/lib/lutaml/key_value/adapter/toml/mapping.rb +28 -0
- data/lib/lutaml/key_value/adapter/toml/mapping_rule.rb +9 -0
- data/lib/lutaml/key_value/adapter/toml/toml_rb_adapter.rb +40 -0
- data/lib/lutaml/key_value/adapter/toml/tomlib_adapter.rb +46 -0
- data/lib/lutaml/key_value/adapter/toml/transform.rb +10 -0
- data/lib/lutaml/key_value/adapter/toml.rb +21 -0
- data/lib/lutaml/key_value/adapter/yaml/document.rb +12 -0
- data/lib/lutaml/key_value/adapter/yaml/mapping.rb +19 -0
- data/lib/lutaml/key_value/adapter/yaml/mapping_rule.rb +9 -0
- data/lib/lutaml/key_value/adapter/yaml/standard_adapter.rb +41 -0
- data/lib/lutaml/key_value/adapter/yaml/transform.rb +10 -0
- data/lib/lutaml/key_value/adapter/yaml.rb +17 -0
- data/lib/lutaml/key_value/adapter/yamls/document.rb +16 -0
- data/lib/lutaml/key_value/adapter/yamls/mapping.rb +19 -0
- data/lib/lutaml/key_value/adapter/yamls/mapping_rule.rb +9 -0
- data/lib/lutaml/key_value/adapter/yamls/standard_adapter.rb +37 -0
- data/lib/lutaml/key_value/adapter/yamls/transform.rb +26 -0
- data/lib/lutaml/key_value/adapter/yamls.rb +17 -0
- data/lib/lutaml/key_value/adapter.rb +14 -0
- data/lib/lutaml/key_value/data_model/element.rb +222 -0
- data/lib/lutaml/key_value/data_model.rb +14 -0
- data/lib/lutaml/{model/key_value_document.rb → key_value/document.rb} +2 -2
- data/lib/lutaml/{model/mapping/key_value_mapping.rb → key_value/mapping.rb} +81 -43
- data/lib/lutaml/{model/mapping/key_value_mapping_rule.rb → key_value/mapping_rule.rb} +9 -10
- data/lib/lutaml/{model/transform/key_value_transform.rb → key_value/transform.rb} +111 -65
- data/lib/lutaml/key_value/transformation/collection_serializer.rb +575 -0
- data/lib/lutaml/key_value/transformation/rule_compiler.rb +294 -0
- data/lib/lutaml/key_value/transformation/value_serializer.rb +268 -0
- data/lib/lutaml/key_value/transformation.rb +1071 -0
- data/lib/lutaml/key_value/transformation_builder.rb +30 -0
- data/lib/lutaml/key_value.rb +24 -0
- data/lib/lutaml/model/attribute.rb +515 -121
- data/lib/lutaml/model/attribute_validator.rb +288 -0
- data/lib/lutaml/model/cached_type_resolver/concurrent_map_cache.rb +46 -0
- data/lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb +51 -0
- data/lib/lutaml/model/cached_type_resolver.rb +144 -0
- data/lib/lutaml/model/choice.rb +230 -13
- data/lib/lutaml/model/cli.rb +75 -121
- data/lib/lutaml/model/collection.rb +510 -43
- data/lib/lutaml/model/collection_handler.rb +106 -0
- data/lib/lutaml/model/comparable_model.rb +11 -3
- data/lib/lutaml/model/comparable_nil.rb +0 -2
- data/lib/lutaml/model/compiled_rule.rb +208 -0
- data/lib/lutaml/model/config.rb +56 -88
- data/lib/lutaml/model/configuration.rb +323 -0
- data/lib/lutaml/model/consolidation/attribute_grouper.rb +44 -0
- data/lib/lutaml/model/consolidation/dispatcher.rb +45 -0
- data/lib/lutaml/model/consolidation/engine.rb +33 -0
- data/lib/lutaml/model/consolidation/pattern_chunker.rb +87 -0
- data/lib/lutaml/model/consolidation_map.rb +68 -0
- data/lib/lutaml/model/consolidation_rule/dispatch_block.rb +34 -0
- data/lib/lutaml/model/consolidation_rule/gather_rule.rb +17 -0
- data/lib/lutaml/model/consolidation_rule/pattern_content_rule.rb +15 -0
- data/lib/lutaml/model/consolidation_rule/pattern_element_rule.rb +17 -0
- data/lib/lutaml/model/consolidation_rule.rb +27 -0
- data/lib/lutaml/model/constants.rb +5 -3
- data/lib/lutaml/model/context_registry.rb +208 -0
- data/lib/lutaml/model/error/element_count_out_of_range_error.rb +13 -7
- data/lib/lutaml/model/error/format_adapter_not_specified_error.rb +25 -0
- data/lib/lutaml/model/error/invalid_attribute_type_error.rb +98 -0
- data/lib/lutaml/model/error/invalid_format_error.rb +11 -0
- data/lib/lutaml/model/error/liquid_class_not_found_error.rb +9 -0
- data/lib/lutaml/model/error/mapping_already_exists_error.rb +6 -0
- data/lib/lutaml/model/error/mapping_attribute_missing_error.rb +6 -0
- data/lib/lutaml/model/error/mapping_attribute_type_error.rb +6 -0
- data/lib/lutaml/model/error/mixed_content_collection_error.rb +17 -0
- data/lib/lutaml/model/error/no_attributes_defined_liquid_error.rb +9 -0
- data/lib/lutaml/model/error/no_mapping_found_error.rb +9 -0
- data/lib/lutaml/model/error/required_attribute_missing_error.rb +9 -0
- data/lib/lutaml/model/error/reverse_transform_block_not_defined_error.rb +6 -0
- data/lib/lutaml/model/error/reverse_transformation_declaration_error.rb +6 -0
- data/lib/lutaml/model/error/sorting_configuration_conflict_error.rb +9 -0
- data/lib/lutaml/model/error/transform_block_not_defined_error.rb +6 -0
- data/lib/lutaml/model/error/type.rb +17 -0
- data/lib/lutaml/model/error/undefined_attribute_error.rb +9 -0
- data/lib/lutaml/model/error/unknown_adapter_type_error.rb +82 -3
- data/lib/lutaml/model/error/unknown_type_error.rb +25 -2
- data/lib/lutaml/model/error/unresolvable_type_error.rb +27 -0
- data/lib/lutaml/model/error.rb +2 -33
- data/lib/lutaml/model/errors.rb +4 -2
- data/lib/lutaml/model/finalization_cache.rb +51 -0
- data/lib/lutaml/model/format_registry.rb +236 -2
- data/lib/lutaml/model/global_context.rb +446 -0
- data/lib/lutaml/model/global_register.rb +106 -5
- data/lib/lutaml/model/hash.rb +15 -0
- data/lib/lutaml/model/import_registry.rb +250 -0
- data/lib/lutaml/model/instrumentation.rb +304 -0
- data/lib/lutaml/model/json.rb +17 -13
- data/lib/lutaml/model/jsonl.rb +7 -13
- data/lib/lutaml/model/liquefiable.rb +100 -12
- data/lib/lutaml/model/liquid/mapping.rb +30 -0
- data/lib/lutaml/model/liquid.rb +9 -0
- data/lib/lutaml/model/mapping/listener.rb +124 -0
- data/lib/lutaml/model/mapping/mapping.rb +99 -1
- data/lib/lutaml/model/mapping/mapping_rule.rb +172 -17
- data/lib/lutaml/model/mapping/model_mapping.rb +133 -0
- data/lib/lutaml/model/mapping/model_mapping_rule.rb +57 -0
- data/lib/lutaml/model/mapping_hash.rb +3 -1
- data/lib/lutaml/model/model_transformer.rb +101 -0
- data/lib/lutaml/model/one_entry_cache.rb +57 -0
- data/lib/lutaml/model/organization.rb +29 -0
- data/lib/lutaml/model/register/model_tree_importer.rb +88 -0
- data/lib/lutaml/model/register/namespace_binding.rb +92 -0
- data/lib/lutaml/model/register.rb +500 -35
- data/lib/lutaml/model/registrable.rb +2 -0
- data/lib/lutaml/model/render_policy.rb +154 -0
- data/lib/lutaml/model/runtime_compatibility.rb +95 -0
- data/lib/lutaml/model/schema/base_schema.rb +1 -3
- data/lib/lutaml/model/schema/decorators/attribute.rb +3 -1
- data/lib/lutaml/model/schema/decorators/choices.rb +0 -2
- data/lib/lutaml/model/schema/decorators/class_definition.rb +4 -5
- data/lib/lutaml/model/schema/decorators/definition_collection.rb +7 -7
- data/lib/lutaml/model/schema/decorators.rb +15 -0
- data/lib/lutaml/model/schema/generator/definition.rb +4 -3
- data/lib/lutaml/model/schema/generator/definitions_collection.rb +4 -3
- data/lib/lutaml/model/schema/generator/properties_collection.rb +7 -5
- data/lib/lutaml/model/schema/generator/property.rb +5 -1
- data/lib/lutaml/model/schema/generator.rb +15 -0
- data/lib/lutaml/model/schema/helpers.rb +11 -0
- data/lib/lutaml/model/schema/json_schema.rb +9 -53
- data/lib/lutaml/model/schema/renderer.rb +19 -17
- data/lib/lutaml/model/schema/schema_builder/nokogiri.rb +41 -0
- data/lib/lutaml/model/schema/schema_builder/oga.rb +92 -0
- data/lib/lutaml/model/schema/shared_methods.rb +2 -2
- data/lib/lutaml/model/schema/xml_compiler/attribute.rb +33 -12
- data/lib/lutaml/model/schema/xml_compiler/attribute_group.rb +3 -1
- data/lib/lutaml/model/schema/xml_compiler/choice.rb +4 -2
- data/lib/lutaml/model/schema/xml_compiler/complex_type.rb +73 -36
- data/lib/lutaml/model/schema/xml_compiler/element.rb +18 -1
- data/lib/lutaml/model/schema/xml_compiler/group.rb +20 -4
- data/lib/lutaml/model/schema/xml_compiler/registry_generator.rb +127 -0
- data/lib/lutaml/model/schema/xml_compiler/restriction.rb +5 -2
- data/lib/lutaml/model/schema/xml_compiler/sequence.rb +6 -2
- data/lib/lutaml/model/schema/xml_compiler/simple_content.rb +7 -3
- data/lib/lutaml/model/schema/xml_compiler/simple_type.rb +127 -51
- data/lib/lutaml/model/schema/xml_compiler/xml_namespace_class.rb +110 -0
- data/lib/lutaml/model/schema/xml_compiler.rb +256 -82
- data/lib/lutaml/model/schema/yaml_schema.rb +10 -50
- data/lib/lutaml/model/schema.rb +49 -14
- data/lib/lutaml/model/schema_location.rb +12 -60
- data/lib/lutaml/model/sequence.rb +102 -30
- data/lib/lutaml/model/serializable.rb +1 -3
- data/lib/lutaml/model/serialization_adapter.rb +2 -0
- data/lib/lutaml/model/serialize/attribute_definition.rb +229 -0
- data/lib/lutaml/model/serialize/builder.rb +169 -0
- data/lib/lutaml/model/serialize/enum_handling.rb +124 -0
- data/lib/lutaml/model/serialize/format_conversion.rb +298 -0
- data/lib/lutaml/model/serialize/initialization.rb +308 -0
- data/lib/lutaml/model/serialize/model_import.rb +357 -0
- data/lib/lutaml/model/serialize/transformation_builder.rb +127 -0
- data/lib/lutaml/model/serialize/value_mapping.rb +200 -0
- data/lib/lutaml/model/serialize.rb +175 -580
- data/lib/lutaml/model/services/base.rb +2 -2
- data/lib/lutaml/model/services/default_value_resolver.rb +60 -0
- data/lib/lutaml/model/services/logger.rb +10 -7
- data/lib/lutaml/model/services/rule_value_extractor.rb +22 -36
- data/lib/lutaml/model/services/transformer.rb +50 -9
- data/lib/lutaml/model/services/type/validator/string.rb +3 -2
- data/lib/lutaml/model/services/type/validator/symbol.rb +30 -0
- data/lib/lutaml/model/services/type/validator.rb +5 -2
- data/lib/lutaml/model/services/type.rb +9 -0
- data/lib/lutaml/model/services/validator.rb +1 -3
- data/lib/lutaml/model/services.rb +12 -5
- data/lib/lutaml/model/store.rb +59 -0
- data/lib/lutaml/model/toml.rb +24 -18
- data/lib/lutaml/model/transform/xml_transform.rb +4 -227
- data/lib/lutaml/model/transform.rb +49 -17
- data/lib/lutaml/model/transformation.rb +84 -0
- data/lib/lutaml/model/transformation_builder.rb +55 -0
- data/lib/lutaml/model/transformation_registry.rb +314 -0
- data/lib/lutaml/model/type/base64_binary.rb +58 -0
- data/lib/lutaml/model/type/boolean.rb +9 -16
- data/lib/lutaml/model/type/date.rb +49 -9
- data/lib/lutaml/model/type/date_time.rb +30 -18
- data/lib/lutaml/model/type/decimal.rb +28 -9
- data/lib/lutaml/model/type/duration.rb +82 -0
- data/lib/lutaml/model/type/float.rb +12 -13
- data/lib/lutaml/model/type/hash.rb +10 -17
- data/lib/lutaml/model/type/hex_binary.rb +56 -0
- data/lib/lutaml/model/type/integer.rb +19 -1
- data/lib/lutaml/model/type/qname.rb +85 -0
- data/lib/lutaml/model/type/reference.rb +76 -0
- data/lib/lutaml/model/type/string.rb +18 -35
- data/lib/lutaml/model/type/symbol.rb +67 -0
- data/lib/lutaml/model/type/time.rb +19 -22
- data/lib/lutaml/model/type/time_without_date.rb +18 -18
- data/lib/lutaml/model/type/uninitialized_class_guard.rb +36 -0
- data/lib/lutaml/model/type/uri.rb +51 -0
- data/lib/lutaml/model/type/value.rb +52 -5
- data/lib/lutaml/model/type.rb +98 -13
- data/lib/lutaml/model/type_context.rb +279 -0
- data/lib/lutaml/model/type_registry.rb +165 -0
- data/lib/lutaml/model/type_resolver.rb +185 -0
- data/lib/lutaml/model/type_substitution.rb +117 -0
- data/lib/lutaml/model/uninitialized_class.rb +1 -1
- data/lib/lutaml/model/utils.rb +110 -9
- data/lib/lutaml/model/validation.rb +50 -7
- data/lib/lutaml/model/value_transformer.rb +25 -0
- data/lib/lutaml/model/version.rb +1 -1
- data/lib/lutaml/model/yaml.rb +7 -13
- data/lib/lutaml/model/yamls.rb +7 -13
- data/lib/lutaml/model.rb +227 -25
- data/lib/lutaml/{model/toml → toml/adapter}/document.rb +3 -4
- data/lib/lutaml/{model/toml → toml/adapter}/mapping.rb +7 -6
- data/lib/lutaml/toml/adapter/mapping_rule.rb +9 -0
- data/lib/lutaml/toml/adapter/toml_rb_adapter.rb +38 -0
- data/lib/lutaml/toml/adapter/tomlib_adapter.rb +54 -0
- data/lib/lutaml/toml/adapter/transform.rb +9 -0
- data/lib/lutaml/toml/adapter.rb +19 -0
- data/lib/lutaml/toml/type/serializers.rb +71 -0
- data/lib/lutaml/toml.rb +41 -0
- data/lib/lutaml/xml/adapter/adapter_helpers.rb +149 -0
- data/lib/lutaml/xml/adapter/base_adapter.rb +672 -0
- data/lib/lutaml/xml/adapter/namespace_data.rb +73 -0
- data/lib/lutaml/xml/adapter/nokogiri_adapter.rb +1115 -0
- data/lib/lutaml/xml/adapter/oga_adapter.rb +849 -0
- data/lib/lutaml/xml/adapter/ox_adapter.rb +891 -0
- data/lib/lutaml/xml/adapter/rexml_adapter.rb +869 -0
- data/lib/lutaml/xml/adapter/xml_serialization.rb +145 -0
- data/lib/lutaml/xml/adapter.rb +20 -0
- data/lib/lutaml/xml/adapter_element.rb +185 -0
- data/lib/lutaml/xml/adapter_loader.rb +53 -0
- data/lib/lutaml/xml/attribute_namespace_resolver.rb +139 -0
- data/lib/lutaml/xml/blank_namespace.rb +51 -0
- data/lib/lutaml/xml/blank_namespace_handler.rb +50 -0
- data/lib/lutaml/xml/builder/base.rb +215 -0
- data/lib/lutaml/xml/builder/nokogiri.rb +12 -0
- data/lib/lutaml/xml/builder/oga.rb +15 -0
- data/lib/lutaml/xml/builder/ox.rb +15 -0
- data/lib/lutaml/xml/builder/rexml.rb +15 -0
- data/lib/lutaml/xml/builder.rb +16 -0
- data/lib/lutaml/xml/configurable.rb +214 -0
- data/lib/lutaml/xml/data_model.rb +257 -0
- data/lib/lutaml/xml/decisions/decision.rb +103 -0
- data/lib/lutaml/xml/decisions/decision_context.rb +225 -0
- data/lib/lutaml/xml/decisions/decision_engine.rb +67 -0
- data/lib/lutaml/xml/decisions/decision_rule.rb +54 -0
- data/lib/lutaml/xml/decisions/element_prefix_resolver.rb +85 -0
- data/lib/lutaml/xml/decisions/rules/attribute_usage_rule.rb +37 -0
- data/lib/lutaml/xml/decisions/rules/default_preference_rule.rb +62 -0
- data/lib/lutaml/xml/decisions/rules/element_form_default_rule.rb +66 -0
- data/lib/lutaml/xml/decisions/rules/element_form_default_unqualified_rule.rb +73 -0
- data/lib/lutaml/xml/decisions/rules/element_form_option_rule.rb +83 -0
- data/lib/lutaml/xml/decisions/rules/explicit_option_rule.rb +57 -0
- data/lib/lutaml/xml/decisions/rules/format_preservation_rule.rb +74 -0
- data/lib/lutaml/xml/decisions/rules/hoisted_on_parent_rule.rb +60 -0
- data/lib/lutaml/xml/decisions/rules/inherit_from_parent_rule.rb +52 -0
- data/lib/lutaml/xml/decisions/rules/inherit_parent_prefix_rule.rb +69 -0
- data/lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb +54 -0
- data/lib/lutaml/xml/decisions/rules/reuse_parent_prefix_rule.rb +78 -0
- data/lib/lutaml/xml/decisions/rules/used_prefix_rule.rb +70 -0
- data/lib/lutaml/xml/decisions/rules.rb +39 -0
- data/lib/lutaml/xml/decisions.rb +15 -0
- data/lib/lutaml/xml/declaration_handler.rb +217 -0
- data/lib/lutaml/xml/declaration_plan/attribute_node.rb +81 -0
- data/lib/lutaml/xml/declaration_plan/element_node.rb +101 -0
- data/lib/lutaml/xml/declaration_plan.rb +480 -0
- data/lib/lutaml/xml/declaration_plan_query.rb +105 -0
- data/lib/lutaml/xml/declaration_planner.rb +1849 -0
- data/lib/lutaml/xml/doctype_extractor.rb +51 -0
- data/lib/lutaml/xml/document.rb +380 -0
- data/lib/lutaml/xml/element.rb +93 -0
- data/lib/lutaml/xml/element_prefix_resolver.rb +50 -0
- data/lib/lutaml/xml/encoding_normalizer.rb +54 -0
- data/lib/lutaml/xml/error/invalid_namespace_error.rb +46 -0
- data/lib/lutaml/xml/error/invalid_xsd_type_error.rb +43 -0
- data/lib/lutaml/xml/error/namespace_mismatch_error.rb +53 -0
- data/lib/lutaml/xml/error/xml_configuration_error.rb +17 -0
- data/lib/lutaml/xml/error/xml_error.rb +21 -0
- data/lib/lutaml/xml/format_chooser.rb +214 -0
- data/lib/lutaml/xml/hoisting_algorithm.rb +234 -0
- data/lib/lutaml/xml/listener.rb +33 -0
- data/lib/lutaml/xml/mapping.rb +1470 -0
- data/lib/lutaml/xml/mapping_rule.rb +565 -0
- data/lib/lutaml/xml/model_transform.rb +944 -0
- data/lib/lutaml/xml/namespace.rb +435 -0
- data/lib/lutaml/xml/namespace_class_registry.rb +144 -0
- data/lib/lutaml/xml/namespace_collector.rb +611 -0
- data/lib/lutaml/xml/namespace_declaration.rb +202 -0
- data/lib/lutaml/xml/namespace_declaration_builder.rb +67 -0
- data/lib/lutaml/xml/namespace_declaration_data.rb +182 -0
- data/lib/lutaml/xml/namespace_inheritance_resolver.rb +142 -0
- data/lib/lutaml/xml/namespace_inheritance_strategy.rb +26 -0
- data/lib/lutaml/xml/namespace_needs.rb +213 -0
- data/lib/lutaml/xml/namespace_resolution_strategy.rb +230 -0
- data/lib/lutaml/xml/namespace_resolver.rb +219 -0
- data/lib/lutaml/xml/namespace_scope_config.rb +109 -0
- data/lib/lutaml/xml/namespace_type_resolver.rb +135 -0
- data/lib/lutaml/xml/namespace_usage.rb +121 -0
- data/lib/lutaml/xml/nokogiri/element.rb +34 -0
- data/lib/lutaml/xml/nokogiri.rb +10 -0
- data/lib/lutaml/xml/oga/element.rb +15 -0
- data/lib/lutaml/xml/oga.rb +10 -0
- data/lib/lutaml/xml/ox/element.rb +15 -0
- data/lib/lutaml/xml/ox.rb +10 -0
- data/lib/lutaml/xml/parsed_namespace_declaration.rb +129 -0
- data/lib/lutaml/xml/parsed_namespace_set.rb +149 -0
- data/lib/lutaml/xml/polymorphic_value_handler.rb +41 -0
- data/lib/lutaml/xml/qualified_inheritance_strategy.rb +27 -0
- data/lib/lutaml/xml/rexml/element.rb +15 -0
- data/lib/lutaml/xml/rexml.rb +10 -0
- data/lib/lutaml/xml/schema/builder/nokogiri.rb +41 -0
- data/lib/lutaml/xml/schema/builder/oga.rb +92 -0
- data/lib/lutaml/xml/schema/builder.rb +59 -0
- data/lib/lutaml/xml/schema/builtin_types.rb +112 -0
- data/lib/lutaml/{model → xml}/schema/relaxng_schema.rb +9 -4
- data/lib/lutaml/xml/schema/xsd/all.rb +31 -0
- data/lib/lutaml/xml/schema/xsd/annotation.rb +31 -0
- data/lib/lutaml/xml/schema/xsd/any.rb +33 -0
- data/lib/lutaml/xml/schema/xsd/any_attribute.rb +29 -0
- data/lib/lutaml/xml/schema/xsd/appinfo.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/attribute.rb +78 -0
- data/lib/lutaml/xml/schema/xsd/attribute_group.rb +89 -0
- data/lib/lutaml/xml/schema/xsd/base.rb +267 -0
- data/lib/lutaml/xml/schema/xsd/choice.rb +68 -0
- data/lib/lutaml/xml/schema/xsd/complex_content.rb +39 -0
- data/lib/lutaml/xml/schema/xsd/complex_type.rb +157 -0
- data/lib/lutaml/xml/schema/xsd/documentation.rb +26 -0
- data/lib/lutaml/xml/schema/xsd/element.rb +117 -0
- data/lib/lutaml/xml/schema/xsd/enumeration.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/errors/enhanced_error.rb +142 -0
- data/lib/lutaml/xml/schema/xsd/errors/error_context.rb +67 -0
- data/lib/lutaml/xml/schema/xsd/errors/message_builder.rb +103 -0
- data/lib/lutaml/xml/schema/xsd/errors/suggestion.rb +67 -0
- data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/namespace_troubleshooter.rb +96 -0
- data/lib/lutaml/xml/schema/xsd/errors/troubleshooters/troubleshooting_handler.rb +70 -0
- data/lib/lutaml/xml/schema/xsd/errors.rb +148 -0
- data/lib/lutaml/xml/schema/xsd/extension_complex_content.rb +63 -0
- data/lib/lutaml/xml/schema/xsd/extension_simple_content.rb +48 -0
- data/lib/lutaml/xml/schema/xsd/field.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/file_validation_result.rb +55 -0
- data/lib/lutaml/xml/schema/xsd/fraction_digits.rb +29 -0
- data/lib/lutaml/xml/schema/xsd/glob.rb +105 -0
- data/lib/lutaml/xml/schema/xsd/group.rb +79 -0
- data/lib/lutaml/xml/schema/xsd/import.rb +33 -0
- data/lib/lutaml/xml/schema/xsd/include.rb +31 -0
- data/lib/lutaml/xml/schema/xsd/key.rb +32 -0
- data/lib/lutaml/xml/schema/xsd/keyref.rb +33 -0
- data/lib/lutaml/xml/schema/xsd/length.rb +27 -0
- data/lib/lutaml/xml/schema/xsd/list.rb +28 -0
- data/lib/lutaml/xml/schema/xsd/max_exclusive.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/max_inclusive.rb +23 -0
- data/lib/lutaml/xml/schema/xsd/max_length.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/min_exclusive.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/min_inclusive.rb +23 -0
- data/lib/lutaml/xml/schema/xsd/min_length.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/namespace_mapping.rb +37 -0
- data/lib/lutaml/xml/schema/xsd/namespace_uri_remapping.rb +79 -0
- data/lib/lutaml/xml/schema/xsd/notation.rb +31 -0
- data/lib/lutaml/xml/schema/xsd/pattern.rb +25 -0
- data/lib/lutaml/xml/schema/xsd/redefine.rb +35 -0
- data/lib/lutaml/xml/schema/xsd/restriction_complex_content.rb +56 -0
- data/lib/lutaml/xml/schema/xsd/restriction_simple_content.rb +84 -0
- data/lib/lutaml/xml/schema/xsd/restriction_simple_type.rb +64 -0
- data/lib/lutaml/xml/schema/xsd/schema.rb +373 -0
- data/lib/lutaml/xml/schema/xsd/schema_file_validation_results.rb +55 -0
- data/lib/lutaml/xml/schema/xsd/schema_location_mapping.rb +74 -0
- data/lib/lutaml/xml/schema/xsd/schema_name_resolver.rb +32 -0
- data/lib/lutaml/xml/schema/xsd/schema_path.rb +196 -0
- data/lib/lutaml/xml/schema/xsd/schema_validator.rb +256 -0
- data/lib/lutaml/xml/schema/xsd/selector.rb +27 -0
- data/lib/lutaml/xml/schema/xsd/sequence.rb +68 -0
- data/lib/lutaml/xml/schema/xsd/serialized_schema.rb +185 -0
- data/lib/lutaml/xml/schema/xsd/simple_content.rb +61 -0
- data/lib/lutaml/xml/schema/xsd/simple_type.rb +37 -0
- data/lib/lutaml/xml/schema/xsd/total_digits.rb +29 -0
- data/lib/lutaml/xml/schema/xsd/type_index_entry.rb +40 -0
- data/lib/lutaml/xml/schema/xsd/type_resolution_result.rb +112 -0
- data/lib/lutaml/xml/schema/xsd/union.rb +30 -0
- data/lib/lutaml/xml/schema/xsd/unique.rb +31 -0
- data/lib/lutaml/xml/schema/xsd/validation_error.rb +48 -0
- data/lib/lutaml/xml/schema/xsd/validation_result.rb +86 -0
- data/lib/lutaml/xml/schema/xsd/version.rb +11 -0
- data/lib/lutaml/xml/schema/xsd/white_space.rb +27 -0
- data/lib/lutaml/xml/schema/xsd.rb +165 -0
- data/lib/lutaml/xml/schema/xsd_namespace.rb +29 -0
- data/lib/lutaml/xml/schema/xsd_schema.rb +536 -0
- data/lib/lutaml/xml/schema.rb +13 -0
- data/lib/lutaml/xml/schema_location.rb +155 -0
- data/lib/lutaml/xml/serialization/collection_ext.rb +61 -0
- data/lib/lutaml/xml/serialization/format_conversion.rb +402 -0
- data/lib/lutaml/xml/serialization/instance_methods.rb +297 -0
- data/lib/lutaml/xml/serialization/model_import_ext.rb +40 -0
- data/lib/lutaml/xml/serialization.rb +15 -0
- data/lib/lutaml/xml/shared_dsl.rb +119 -0
- data/lib/lutaml/xml/transform.rb +6 -0
- data/lib/lutaml/xml/transformation/custom_method_wrapper.rb +262 -0
- data/lib/lutaml/xml/transformation/element_builder.rb +586 -0
- data/lib/lutaml/xml/transformation/ordered_applier.rb +329 -0
- data/lib/lutaml/xml/transformation/rule_applier.rb +379 -0
- data/lib/lutaml/xml/transformation/rule_compiler.rb +543 -0
- data/lib/lutaml/xml/transformation/skip_logic.rb +70 -0
- data/lib/lutaml/xml/transformation/value_serializer.rb +139 -0
- data/lib/lutaml/xml/transformation.rb +340 -0
- data/lib/lutaml/xml/transformation_builder.rb +28 -0
- data/lib/lutaml/xml/transformation_support.rb +14 -0
- data/lib/lutaml/xml/type/configurable.rb +157 -0
- data/lib/lutaml/xml/type/serializers.rb +98 -0
- data/lib/lutaml/xml/type/value_xml_mapping.rb +94 -0
- data/lib/lutaml/xml/type_namespace/collector.rb +101 -0
- data/lib/lutaml/xml/type_namespace/declaration.rb +61 -0
- data/lib/lutaml/xml/type_namespace/planner.rb +121 -0
- data/lib/lutaml/xml/type_namespace/reference.rb +71 -0
- data/lib/lutaml/xml/type_namespace/resolver.rb +43 -0
- data/lib/lutaml/xml/type_namespace.rb +13 -0
- data/lib/lutaml/xml/type_namespace_resolver.rb +76 -0
- data/lib/lutaml/xml/unqualified_inheritance_strategy.rb +34 -0
- data/lib/lutaml/xml/w3c/registration.rb +66 -0
- data/lib/lutaml/xml/w3c.rb +398 -0
- data/lib/lutaml/xml/xml_attribute.rb +38 -0
- data/lib/lutaml/xml/xml_element.rb +447 -0
- data/lib/lutaml/xml/xml_namespace.rb +72 -0
- data/lib/lutaml/xml.rb +295 -0
- data/lib/lutaml/{model/yaml → yaml/adapter}/document.rb +3 -3
- data/lib/lutaml/yaml/adapter/mapping.rb +19 -0
- data/lib/lutaml/yaml/adapter/mapping_rule.rb +9 -0
- data/lib/lutaml/yaml/adapter/standard_adapter.rb +39 -0
- data/lib/lutaml/yaml/adapter/transform.rb +9 -0
- data/lib/lutaml/yaml/adapter.rb +13 -0
- data/lib/lutaml/yaml/schema/yaml_schema.rb +65 -0
- data/lib/lutaml/yaml/schema.rb +9 -0
- data/lib/lutaml/yaml/type/serializers.rb +60 -0
- data/lib/lutaml/yaml.rb +26 -0
- data/lib/lutaml/{model/yamls → yamls/adapter}/document.rb +2 -2
- data/lib/lutaml/yamls/adapter/mapping.rb +19 -0
- data/lib/lutaml/yamls/adapter/mapping_rule.rb +9 -0
- data/lib/lutaml/{model/yamls → yamls/adapter}/standard_adapter.rb +6 -5
- data/lib/lutaml/yamls/adapter/transform.rb +26 -0
- data/lib/lutaml/yamls/adapter.rb +13 -0
- data/lib/lutaml/yamls.rb +21 -0
- data/lib/tasks/benchmark_runner.rb +161 -0
- data/lib/tasks/memory_profile.rb +176 -0
- data/lib/tasks/performance.rake +75 -0
- data/lib/tasks/performance_benchmark.rb +499 -0
- data/lib/tasks/performance_comparator.rb +114 -0
- data/lib/tasks/performance_helpers.rb +149 -0
- data/lib/tasks/xml_compiler_benchmark.rb +226 -0
- data/lib/tasks/xml_optimization_benchmark.rb +178 -0
- data/lutaml-model.gemspec +11 -1
- data/reference-docs/XML Entity Definitions for Characters (3rd Edition).html +595 -0
- data/scripts-xmi-profile/profile_xmi.rb +192 -0
- data/scripts-xmi-profile/profile_xmi_simple.rb +210 -0
- data/spec/address_person_spec.rb +436 -0
- data/spec/address_spec.rb +20 -18
- data/spec/ceramic_spec.rb +25 -7
- data/spec/fixtures/address.rb +2 -2
- data/spec/fixtures/ceramic.rb +6 -2
- data/spec/fixtures/person.rb +14 -13
- data/spec/fixtures/sample_model.rb +3 -3
- data/spec/fixtures/vase.rb +3 -3
- data/spec/fixtures/xml/address_example_260.xsd +8 -4
- data/spec/fixtures/xml/examples/nested_categories.xml +45 -51
- data/spec/fixtures/xml/examples/valid_catalog.xml +27 -41
- data/spec/fixtures/xml/math_document_schema.xsd +7 -5
- data/spec/fixtures/xml/product_catalog.xsd +19 -138
- data/spec/fixtures/xml/schema/xsd/build_test_package.rb +19 -0
- data/spec/fixtures/xml/schema/xsd/citygml/2.0/cityGMLBase.xsd +339 -0
- data/spec/fixtures/xml/schema/xsd/citygml/appearance/2.0/appearance.xsd +332 -0
- data/spec/fixtures/xml/schema/xsd/citygml/bridge/2.0/bridge.xsd +578 -0
- data/spec/fixtures/xml/schema/xsd/citygml/building/2.0/building.xsd +535 -0
- data/spec/fixtures/xml/schema/xsd/citygml/cityfurniture/2.0/cityFurniture.xsd +57 -0
- data/spec/fixtures/xml/schema/xsd/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd +84 -0
- data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/noise-ade/CityGML-NoiseADE.xsd +174 -0
- data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/stdOp.xsd +46 -0
- data/spec/fixtures/xml/schema/xsd/citygml/examples/2.0/ade/robotics-ade/unr.xsd +46 -0
- data/spec/fixtures/xml/schema/xsd/citygml/generics/2.0/generics.xsd +184 -0
- data/spec/fixtures/xml/schema/xsd/citygml/landuse/2.0/landUse.xsd +50 -0
- data/spec/fixtures/xml/schema/xsd/citygml/profiles/base/2.0/CityGML.xsd +30 -0
- data/spec/fixtures/xml/schema/xsd/citygml/relief/2.0/relief.xsd +186 -0
- data/spec/fixtures/xml/schema/xsd/citygml/texturedsurface/2.0/texturedSurface.xsd +157 -0
- data/spec/fixtures/xml/schema/xsd/citygml/transportation/2.0/transportation.xsd +224 -0
- data/spec/fixtures/xml/schema/xsd/citygml/tunnel/2.0/tunnel.xsd +530 -0
- data/spec/fixtures/xml/schema/xsd/citygml/vegetation/2.0/vegetation.xsd +108 -0
- data/spec/fixtures/xml/schema/xsd/citygml/waterbody/2.0/waterBody.xsd +171 -0
- data/spec/fixtures/xml/schema/xsd/citygml/xAL/xAL.xsd +1680 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/basicTypes.xsd +262 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateOperations.xsd +519 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateReferenceSystems.xsd +367 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coordinateSystems.xsd +291 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/coverage.xsd +287 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/datums.xsd +281 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/defaultStyle.xsd +447 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/deprecatedTypes.xsd +1128 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dictionary.xsd +84 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/direction.xsd +78 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/dynamicFeature.xsd +103 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/feature.xsd +88 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryAggregates.xsd +191 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic0d1d.xsd +271 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryBasic2d.xsd +118 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryComplexes.xsd +89 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/geometryPrimitives.xsd +841 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gml.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/gmlBase.xsd +179 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/grids.xsd +58 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/measures.xsd +63 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/observation.xsd +90 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/referenceSystems.xsd +64 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporal.xsd +263 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalReferenceSystems.xsd +183 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/temporalTopology.xsd +113 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/topology.xsd +380 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/units.xsd +156 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/gml/3.2.1/valueObjects.xsd +199 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/basicTypes.xsd +429 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gco.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gco/gcoBase.xsd +61 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/applicationSchema.xsd +42 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/citation.xsd +275 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/constraints.xsd +106 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/content.xsd +188 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/dataQuality.xsd +554 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/distribution.xsd +202 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/extent.xsd +205 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/freeText.xsd +122 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/gmd.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/identification.xsd +348 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/maintenance.xsd +86 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataApplication.xsd +175 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataEntity.xsd +70 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/metadataExtension.xsd +99 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/portrayalCatalogue.xsd +36 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/referenceSystem.xsd +100 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmd/spatialRepresentation.xsd +237 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/catalogues.xsd +112 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/codelistItem.xsd +168 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/crsItem.xsd +1030 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/extendedTypes.xsd +75 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmx.xsd +2 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/gmxUsage.xsd +127 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gmx/uomItem.xsd +162 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/gsr.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gsr/spatialReferencing.xsd +24 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/geometry.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gss/gss.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/gts.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/iso/19139/20070417/gts/temporalObjects.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/codesynthesis-gml-3.2.1/xlink/1.0.0/xlinks.xsd +122 -0
- data/spec/fixtures/xml/schema/xsd/i-ur/urbanFunction.xsd +2772 -0
- data/spec/fixtures/xml/schema/xsd/i-ur/urbanObject.xsd +3344 -0
- data/spec/fixtures/xml/schema/xsd/import-without-location.xsd +9 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/baseTypes.xsd +775 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2/gco.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/baseTypes.xsd +775 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gco/1.2.0/gco.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/extendedTypes.xsd +151 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2/gcx.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/extendedTypes.xsd +151 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19103/-/gcx/1.2.0/gcx.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/coordinateGeometry.xsd +1078 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricAggregates.xsd +141 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricComplex.xsd +177 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometricPrimative.xsd +526 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometry.xsd +9 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/geometryRoot.xsd +59 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/gss.xsd +26 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoComplex.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoPrimative.xsd +432 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topoRoot.xsd +9 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/1.0.0/topology.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/coordinates.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/curves.xsd +22 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/geometry.xsd +41 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/gss.xsd +21 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/simplicialGeometry.xsd +63 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/solids.xsd +21 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/surfaces.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19107/-/gss/2.0.0/topology.xsd +21 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/abstract.xsd +47 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.1.0/fcc.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/abstract.xsd +45 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2/fcc.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/abstract.xsd +45 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/fcc/2.2.0/fcc.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/1.0/gfc.xsd +497 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/featureCatalogue.xsd +673 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.1.0/gfc.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/featureCatalogue.xsd +798 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2/gfc.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/featureCatalogue.xsd +798 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/-/gfc/2.2.0/gfc.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/abstract.xsd +49 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/fcc/1.0/fcc.xsd +9 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/featureCatalogue.xsd +671 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19110/gfc/1.1/gfc.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbc.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1/rbcStubs.xsd +195 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbc.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.0/rbcStubs.xsd +195 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/AbstractCommonClasses.xsd +282 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/commonClasses.xsd +127 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordOps.xsd +676 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordRefSys.xsd +498 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordSys.xsd +844 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/coordinates.xsd +101 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/datum.xsd +474 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19111/-/rbc/3.1.1/rbc.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/cit.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3/citation.xsd +445 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/cit.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/cit/1.3.0/citation.xsd +445 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/extent.xsd +243 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3/gex.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/extent.xsd +243 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.0/gex.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/extent.xsd +244 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/gex/1.3.1/gex.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/lan.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3/language.xsd +152 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/lan.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/lan/1.3.0/language.xsd +152 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/applicationSchema.xsd +58 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3/mas.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/applicationSchema.xsd +58 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mas/1.3.0/mas.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/AbstractCommonClasses.xsd +378 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/commonClasses.xsd +205 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3/mcc.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/AbstractCommonClasses.xsd +378 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/commonClasses.xsd +205 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mcc/1.3.0/mcc.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/constraints.xsd +171 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3/mco.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/constraints.xsd +171 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mco/1.3.0/mco.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/mda.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3/metadataApplication.xsd +207 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/mda.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.0/metadataApplication.xsd +207 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/mda.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mda/1.3.1/metadataApplication.xsd +247 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/mdb.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBase.xsd +117 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3/metadataBaseMDAerror.xsd +116 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/mdb.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBase.xsd +117 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.0/metadataBaseMDAerror.xsd +116 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/mdb.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mdb/1.3.1/metadataBase.xsd +144 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/metadataExtension.xsd +138 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3/mex.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/metadataExtension.xsd +138 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mex/1.3.0/mex.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/maintenance.xsd +70 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3/mmi.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/maintenance.xsd +70 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mmi/1.3.0/mmi.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/mpc.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3/portrayalCatalogue.xsd +40 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/mpc.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mpc/1.3.0/portrayalCatalogue.xsd +40 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/content.xsd +368 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3/mrc.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/content.xsd +368 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.0/mrc.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/content.xsd +366 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrc/1.3.1/mrc.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/distribution.xsd +232 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3/mrd.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/distribution.xsd +232 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrd/1.3.0/mrd.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/identification.xsd +425 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3/mri.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/identification.xsd +425 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mri/1.3.0/mri.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/lineage.xsd +130 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3/mrl.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/lineage.xsd +130 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrl/1.3.0/mrl.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/mrs.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3/referenceSystem.xsd +67 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/mrs.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.0/referenceSystem.xsd +67 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/mrs.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/mrs/1.3.1/referenceSystem.xsd +66 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/msr.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3/spatialRepresentation.xsd +326 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/msr.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.0/spatialRepresentation.xsd +326 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/msr.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/msr/1.3.1/spatialRepresentation.xsd +326 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/serviceInformation.xsd +252 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3/srv.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/serviceInformation.xsd +252 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-1/srv/1.3.0/srv.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/acquisitionInformation.xsd +415 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/contentInformation.xsd +147 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/dataQualityInformation.xsd +214 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/gmi.xsd +23 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/metadataEntitySet.xsd +43 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.0/spatialRepresentationInformation.xsd +140 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/acquisitionInformation.xsd +415 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/contentInformation.xsd +147 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/dataQualityInformation.xsd +214 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/gmi.xsd +24 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/metadataEntitySet.xsd +43 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/gmi/1.1/spatialRepresentationInformation.xsd +142 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/acquisitionInformationImagery.xsd +796 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2/mac.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/acquisitionInformationImagery.xsd +796 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.0/mac.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/acquisitionInformationImagery.xsd +799 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mac/2.2.1/mac.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2/contentInformationImagery.xsd +161 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.0/contentInformationImagery.xsd +161 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrc/2.2.1/contentInformationImagery.xsd +159 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2/lineageImagery.xsd +312 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/mrl/2.2.0/lineageImagery.xsd +312 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2/spatialRepresentationImagery.xsd +138 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.0/spatialRepresentationImagery.xsd +138 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-2/msr/2.2.1/spatialRepresentationImagery.xsd +145 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/cat.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/catalogues.xsd +59 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/codelistItem.xsd +63 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/crsItem.xsd +188 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cat/1.0/uomItem.xsd +45 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/cit.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/1.0/citation.xsd +400 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/cit.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/cit/2.0/citation.xsd +402 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes.xsd +532 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/baseTypes2014.xsd +531 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gco/1.0/gco.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/extendedTypes.xsd +97 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gcx/1.0/gcx.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/extent.xsd +207 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gex/1.0/gex.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes.xsd +147 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmlWrapperTypes2014.xsd +147 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/gmw/1.0/gmw.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/lan.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/lan/1.0/language.xsd +141 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/acquisitionInformationImagery.xsd +424 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/1.0/mac.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/acquisitionInformationImagery.xsd +473 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/event.xsd +106 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/mac.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mac/2.0/metadataEntitySet.xsd +46 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/applicationSchema.xsd +53 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mas/1.0/mas.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/AbstractCommonClasses.xsd +362 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/commonClasses.xsd +179 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mcc/1.0/mcc.xsd +12 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/constraints.xsd +152 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mco/1.0/mco.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/md1.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/1.0/metadataWExtendedType.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/md1.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md1/2.0/metadataWExtendedType.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/md2.xsd +27 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/1.0/metadataWithExtensions.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/md2.xsd +27 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/md2/2.0/metadataWithExtensions.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/mda.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/1.0/metadataApplication.xsd +188 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/mda.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mda/2.0/metadataApplication.xsd +189 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/mdb.xsd +23 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/1.0/metadataBase.xsd +97 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/mdb.xsd +23 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdb/2.0/metadataBase.xsd +105 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/mds.xsd +59 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/1.0/metadataDataServices.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/mds.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mds/2.0/metadataDataServices.xsd +10 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/mdt.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/1.0/metadataTransfer.xsd +121 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/mdt.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mdt/2.0/metadataTransfer.xsd +121 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/metadataExtension.xsd +122 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mex/1.0/mex.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/maintenance.xsd +63 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mmi/1.0/mmi.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/mpc.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mpc/1.0/portrayalCatalogue.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/content.xsd +330 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/contentInformationImagery.xsd +160 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/1.0/mrc.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/content.xsd +334 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/contentInformationImagery.xsd +143 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrc/2.0/mrc.xsd +21 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/distribution.xsd +212 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrd/1.0/mrd.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/identification.xsd +385 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mri/1.0/mri.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineage.xsd +117 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/lineageImagery.xsd +168 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/1.0/mrl.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineage.xsd +118 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/lineageImagery.xsd +250 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrl/2.0/mrl.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/mrs.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/mrs/1.0/referenceSystem.xsd +47 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/msr.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentation.xsd +288 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/1.0/spatialRepresentationImagery.xsd +113 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/msr.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentation.xsd +296 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/msr/2.0/spatialRepresentationImagery.xsd +114 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/serviceInformation.xsd +217 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.0/srv.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/serviceInformation.xsd +220 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19115/-3/srv/2.1/srv.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceMetadata.xsd +204 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/serviceModel.xsd +230 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19119/-/srv/1.0/srv.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceMetadata.xsd +204 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/serviceModel.xsd +238 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19119/srv/srv.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/cis-0.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/codeLists.xsd +68 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1/gridPoint.xsd +47 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/cis-0.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/codeLists.xsd +68 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/1.1.0/gridPoint.xsd +47 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/codeLists.xsd +68 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-/cis/3.1.0/gridPoint.xsd +47 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/coverage.xsd +185 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/gmlcovAll.xsd +21 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.0/grids.xsd +115 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/coverage.xsd +188 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/gmlcovAll.xsd +25 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1/grids.xsd +119 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/coverage.xsd +188 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/gmlcovAll.xsd +25 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/1.1.0/grids.xsd +119 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/coverage.xsd +188 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/gmlcovAll.xsd +23 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19123/-2/cis/3.1.0/grids.xsd +119 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/codeList.xsd +134 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/groundControlPoints.xsd +239 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/nonPhysicalSensorModel.xsd +321 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/physicalSensorModel.xsd +62 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorModel.xsd +65 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/sensorParameters.xsd +762 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.0/spatialElements.xsd +497 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/codeList.xsd +129 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/groundControlPoints.xsd +235 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/nonPhysicalSensorModel.xsd +321 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/physicalSensorModel.xsd +62 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorModel.xsd +65 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/sensorParameters.xsd +762 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-1/smi/1.1.1/spatialElements.xsd +496 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/codeList.xsd +349 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorModel.xsd +53 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/sensorParameters.xsd +681 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.0/spatialElements.xsd +902 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/codeList.xsd +344 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorModel.xsd +49 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/sensorParameters.xsd +676 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-2/smi/1.1.1/spatialElements.xsd +897 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1/smi.xsd +42 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.0/smi.xsd +42 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19130/-3/smi/1.1.1/smi.xsd +42 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0/dps.xsd +1344 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.0.0/dps.xsd +1344 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2/dps.xsd +1522 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.0/dps.xsd +1522 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-/dps/2.2.1/dps.xsd +1522 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.0/dps.xsd +1339 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19131/-1/dps/2.2.0/dps.xsd +1540 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/core.xsd +349 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/extended.xsd +1074 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/hierarchy.xsd +57 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.0/pir.xsd +13 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/core.xsd +344 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/extended.xsd +1076 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/hierarchy.xsd +58 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1/pir.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/core.xsd +344 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/extended.xsd +1076 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/hierarchy.xsd +58 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-1/pir/1.1.0/pir.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/abstract.xsd +42 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.0/pre.xsd +4 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/abstract.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/pre/1.2.0/pre.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/reg.xsd +8 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.0/registration.xsd +562 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/reg.xsd +22 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19135/-2/reg/1.2.0/registration.xsd +590 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/basicTypes.xsd +275 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateOperations.xsd +534 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateReferenceSystems.xsd +379 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coordinateSystems.xsd +303 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/coverage.xsd +298 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/datums.xsd +293 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/defaultStyle.xsd +462 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/deprecatedTypes.xsd +1139 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dictionary.xsd +95 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/direction.xsd +90 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/dynamicFeature.xsd +114 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/feature.xsd +99 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryAggregates.xsd +203 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic0d1d.xsd +283 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryBasic2d.xsd +130 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryComplexes.xsd +101 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/geometryPrimitives.xsd +852 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gml.xsd +25 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/gmlBase.xsd +191 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/grids.xsd +70 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/measures.xsd +74 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/observation.xsd +100 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/referenceSystems.xsd +78 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporal.xsd +274 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalReferenceSystems.xsd +194 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/temporalTopology.xsd +124 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/topology.xsd +391 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/units.xsd +168 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-/gml/1.0/valueObjects.xsd +210 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmlWrapperTypes.xsd +160 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1/gmw.xsd +27 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmlWrapperTypes.xsd +160 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19136/-1/gmw/1.1.0/gmw.xsd +27 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/cat.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/catalogues.xsd +63 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/codelistItem.xsd +64 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/crsItem.xsd +200 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2/uomItem.xsd +49 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/cat.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/catalogues.xsd +63 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/codelistItem.xsd +64 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/crsItem.xsd +200 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/cat/1.2.0/uomItem.xsd +49 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/basicTypes.xsd +439 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gco.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gco/1.0/gcoBase.xsd +71 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/applicationSchema.xsd +50 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/citation.xsd +283 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/constraints.xsd +114 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/content.xsd +197 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/dataQuality.xsd +563 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/distribution.xsd +210 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/extent.xsd +216 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/freeText.xsd +130 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/gmd.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/identification.xsd +356 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/maintenance.xsd +95 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataApplication.xsd +183 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataEntity.xsd +78 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/metadataExtension.xsd +107 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/portrayalCatalogue.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/referenceSystem.xsd +108 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmd/1.0/spatialRepresentation.xsd +246 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/catalogues.xsd +121 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/codelistItem.xsd +179 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/crsItem.xsd +1041 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/extendedTypes.xsd +83 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmx.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/gmxUsage.xsd +136 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gmx/1.0/uomItem.xsd +173 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/gsr.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gsr/1.0/spatialReferencing.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/geometry.xsd +45 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gss/1.0/gss.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/gts.xsd +18 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19139/-/gts/1.0/temporalObjects.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/gpi.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/placeIdentifier.xsd +75 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19155/gpi/1.0/sampleGMLApplicationSchema.xsd +83 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/abstract.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2/dqc.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/abstract.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqc/1.2.0/dqc.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/dqm.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2/qualityMeasures.xsd +332 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/dqm.xsd +19 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/dqm/1.2.0/qualityMeasures.xsd +332 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityElement.xsd +583 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityEvaluation.xsd +199 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityImagery.xsd +75 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/dataQualityResult.xsd +213 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/mdq.xsd +22 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2/metaquality.xsd +93 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityElement.xsd +583 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityEvaluation.xsd +199 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityImagery.xsd +75 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/dataQualityResult.xsd +213 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/mdq.xsd +22 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-/mdq/1.2.0/metaquality.xsd +93 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dataQualityCommon.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.0/dqc.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dataQualityCommon.xsd +43 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqc/1.0.1/dqc.xsd +17 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dataQualityMeasure.xsd +376 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.0/dqm.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dataQualityMeasure.xsd +367 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/dqm/1.0.1/dqm.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQuality.xsd +570 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityEvaluation.xsd +227 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/dataQualityResult.xsd +191 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/mdq.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.0/metaquality.xsd +106 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQuality.xsd +581 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityEvaluation.xsd +227 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/dataQualityResult.xsd +198 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/mdq.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-1/mdq/1.0.1/metaquality.xsd +102 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/abstract.xsd +43 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqc/1.0/dqc.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/dqm.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/dqm/1.0/qualityMeasures.xsd +303 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityElement.xsd +554 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityEvaluation.xsd +182 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityImagery.xsd +72 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/dataQualityResult.xsd +140 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/mdq.xsd +21 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19157/-2/mdq/1.0/metaquality.xsd +89 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19160/-4/patdl/2.7.3/PATDL.v.2.7.3.xsd +517 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_Imagery.xsd +520 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ImageryAndGriddedData.xsd +222 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/IE_ThematicGriddedData.xsd +117 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1/igd.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_Imagery.xsd +520 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ImageryAndGriddedData.xsd +222 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/IE_ThematicGriddedData.xsd +117 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.0/igd.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_Imagery.xsd +518 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ImageryAndGriddedData.xsd +213 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/IE_ThematicGriddedData.xsd +116 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19163/-1/igd/1.1.1/igd.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/geospatialPreservationMetadata.xsd +872 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19165/-1/gpm/1.0.0/gpm.xsd +11 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/geospatialPreservationMetadata.xsd +385 -0
- data/spec/fixtures/xml/schema/xsd/isotc211/19165/gpm/1.0/gpm.xsd +8 -0
- data/spec/fixtures/xml/schema/xsd/metaschema-datatypes.xsd +263 -0
- data/spec/fixtures/xml/schema/xsd/metaschema-markup-line.xsd +9 -0
- data/spec/fixtures/xml/schema/xsd/metaschema-markup-multiline.xsd +135 -0
- data/spec/fixtures/xml/schema/xsd/metaschema-meta-constraints.xsd +39 -0
- data/spec/fixtures/xml/schema/xsd/metaschema-prose-base.xsd +82 -0
- data/spec/fixtures/xml/schema/xsd/metaschema-prose-module.xsd +5 -0
- data/spec/fixtures/xml/schema/xsd/metaschema.xsd +1344 -0
- data/spec/fixtures/xml/schema/xsd/omml_schema.xsd +1528 -0
- data/spec/fixtures/xml/schema/xsd/smil20/rdf.xsd +16 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-AccessKeyTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-AudioLayout.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicAnimation.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicContentControl.xsd +49 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicInlineTiming.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLayout.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicLinking.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicMedia.xsd +39 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTimeContainers.xsd +37 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BasicTransitions.xsd +36 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-BrushMedia.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-CustomTestAttributes.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-EventTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-ExclTimeContainers.xsd +37 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-FillDefault.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-HierarchicalLayout.xsd +46 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-HostLanguage.xsd +85 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-InlineTransitions.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-IntegrationSet.xsd +72 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-LinkingAttributes.xsd +40 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaAccessibility.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipMarkers.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaClipping.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaDescription.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaMarkerTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MediaParam.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-Metainformation.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MinMaxTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiArcTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-MultiWindowLayout.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-ObjectLinking.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-PrefetchControl.xsd +31 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatTiming.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-RepeatValueTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartDefault.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-RestartTiming.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-SkipContentControl.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-SplineAnimation.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-Structure.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehavior.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncBehaviorDefault.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncMaster.xsd +32 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-SyncbaseTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeContainerAttributes.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-TimeManipulations.xsd +35 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-TransitionModifiers.xsd +37 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-WallclockTiming.xsd +33 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-animate.xsd +229 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-content.xsd +148 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-language.xsd +834 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-layout.xsd +211 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-linking.xsd +117 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-media.xsd +175 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-meta.xsd +44 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-struct.xsd +47 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-timemanip.xsd +34 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-timing.xsd +344 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-transitions.xsd +138 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20-utility.xsd +57 -0
- data/spec/fixtures/xml/schema/xsd/smil20/smil20.xsd +86 -0
- data/spec/fixtures/xml/schema/xsd/smil20/xml-mod.xsd +25 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/advanced_encodings.xsd +186 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/basic_types.xsd +147 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/block_components.xsd +163 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/choice_components.xsd +56 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/examples/security.xsd +15 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/record_components.xsd +95 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_components.xsd +536 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/simple_encodings.xsd +93 -0
- data/spec/fixtures/xml/schema/xsd/sweCommon/2.0.1/swe.xsd +14 -0
- data/spec/fixtures/xml/schema/xsd/test_schema.lxr +0 -0
- data/spec/fixtures/xml/schema/xsd/test_schema.xsd +24 -0
- data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd03.xsd +1333 -0
- data/spec/fixtures/xml/schema/xsd/unitsml-v1.0-csd04.xsd +1334 -0
- data/spec/fixtures/xml/schema/xsd/validation_config.yml +14 -0
- data/spec/fixtures/xml/special_char.xml +3 -4
- data/spec/fixtures/xml/user.xsd +14 -10
- data/spec/lutaml/key_value/transformation/collection_serializer_spec.rb +213 -0
- data/spec/lutaml/key_value/transformation/rule_compiler_spec.rb +229 -0
- data/spec/lutaml/key_value/transformation/value_serializer_spec.rb +216 -0
- data/spec/lutaml/key_value/transformation_spec.rb +292 -0
- data/spec/lutaml/model/attribute_collection_spec.rb +9 -6
- data/spec/lutaml/model/attribute_form_default_spec.rb +252 -0
- data/spec/lutaml/model/attribute_spec.rb +328 -38
- data/spec/lutaml/model/cached_type_resolver_spec.rb +362 -0
- data/spec/lutaml/model/cdata_spec.rb +180 -102
- data/spec/lutaml/model/choice_spec.rb +37 -7
- data/spec/lutaml/model/cli_spec.rb +452 -0
- data/spec/lutaml/model/collection_index_spec.rb +347 -0
- data/spec/lutaml/model/collection_mutation_spec.rb +124 -0
- data/spec/lutaml/model/collection_spec.rb +580 -155
- data/spec/lutaml/model/collection_validation_spec.rb +736 -0
- data/spec/lutaml/model/comparable_model_spec.rb +75 -0
- data/spec/lutaml/model/compiled_rule_spec.rb +364 -0
- data/spec/lutaml/model/consolidation_spec.rb +295 -0
- data/spec/lutaml/model/context_registry_spec.rb +269 -0
- data/spec/lutaml/model/custom_bibtex_adapter_spec.rb +21 -7
- data/spec/lutaml/model/custom_collection_spec.rb +321 -27
- data/spec/lutaml/model/custom_model_spec.rb +13 -10
- data/spec/lutaml/model/custom_serialization_spec.rb +12 -14
- data/spec/lutaml/model/custom_vobject_adapter_spec.rb +36 -16
- data/spec/lutaml/model/default_register_spec.rb +852 -0
- data/spec/lutaml/model/defaults_spec.rb +57 -6
- data/spec/lutaml/model/delegation_spec.rb +184 -110
- data/spec/lutaml/model/derived_attribute_serialization_spec.rb +33 -0
- data/spec/lutaml/model/dynamic_attribute_spec.rb +112 -0
- data/spec/lutaml/model/encoding_spec.rb +281 -0
- data/spec/lutaml/model/enum_spec.rb +46 -2
- data/spec/lutaml/model/except_spec.rb +240 -0
- data/spec/lutaml/model/finalization_cache_spec.rb +88 -0
- data/spec/lutaml/model/global_context_spec.rb +421 -0
- data/spec/lutaml/model/global_register_spec.rb +153 -36
- data/spec/lutaml/model/group_spec.rb +193 -54
- data/spec/lutaml/model/hash/adapter_spec.rb +5 -3
- data/spec/lutaml/model/import_registry_spec.rb +295 -0
- data/spec/lutaml/model/included_spec.rb +10 -17
- data/spec/lutaml/model/inheritance_spec.rb +6 -6
- data/spec/lutaml/model/json_adapter_spec.rb +13 -6
- data/spec/lutaml/model/json_spec.rb +33 -0
- data/spec/lutaml/model/key_value_data_model/key_value_element_spec.rb +320 -0
- data/spec/lutaml/model/key_value_mapping_spec.rb +12 -2
- data/spec/lutaml/model/lazy_collection_spec.rb +208 -0
- data/spec/lutaml/model/liquefiable_spec.rb +263 -24
- data/spec/lutaml/model/logger_spec.rb +68 -0
- data/spec/lutaml/model/map_all_spec.rb +36 -11
- data/spec/lutaml/model/map_content_spec.rb +4 -4
- data/spec/lutaml/model/mapping_rule_perf_guard_spec.rb +71 -0
- data/spec/lutaml/model/mixed_content_spec.rb +481 -171
- data/spec/lutaml/model/model_transformer_spec.rb +678 -0
- data/spec/lutaml/model/multiple_mapping_spec.rb +71 -39
- data/spec/lutaml/model/namespace_versioning_spec.rb +390 -0
- data/spec/lutaml/model/one_entry_cache_spec.rb +114 -0
- data/spec/lutaml/model/ordered_content_spec.rb +115 -24
- data/spec/lutaml/model/polymorphic_spec.rb +29 -6
- data/spec/lutaml/model/processing_instruction_spec.rb +375 -0
- data/spec/lutaml/model/{register/key_value_spec.rb → register_key_value_spec.rb} +57 -5
- data/spec/lutaml/model/register_spec.rb +235 -5
- data/spec/lutaml/model/render_empty_spec.rb +143 -6
- data/spec/lutaml/model/render_nil_spec.rb +15 -10
- data/spec/lutaml/model/root_mappings_spec.rb +16 -6
- data/spec/lutaml/model/rule_value_extractor_spec.rb +13 -44
- data/spec/lutaml/model/runtime_compatibility_spec.rb +36 -0
- data/spec/lutaml/model/schema/generator/definitions_collection_spec.rb +4 -0
- data/spec/lutaml/model/schema/json_schema_spec.rb +7 -1
- data/spec/lutaml/model/schema/relaxng_schema_spec.rb +1 -1
- data/spec/lutaml/model/schema/renderer_spec.rb +128 -0
- data/spec/lutaml/model/schema/xsd_schema_spec.rb +1 -1
- data/spec/lutaml/model/sequence_spec.rb +460 -15
- data/spec/lutaml/model/serializable_spec.rb +212 -12
- data/spec/lutaml/model/serializable_validation_spec.rb +3 -2
- data/spec/lutaml/model/serialize_perf_guard_spec.rb +100 -0
- data/spec/lutaml/model/services/default_value_resolver_spec.rb +162 -0
- data/spec/lutaml/model/simple_model_spec.rb +4 -4
- data/spec/lutaml/model/toml_adapter_spec.rb +11 -4
- data/spec/lutaml/model/toml_spec.rb +46 -2
- data/spec/lutaml/model/transformation_builder_spec.rb +283 -0
- data/spec/lutaml/model/transformation_spec.rb +165 -236
- data/spec/lutaml/model/type/base64_binary_spec.rb +202 -0
- data/spec/lutaml/model/type/date_spec.rb +132 -0
- data/spec/lutaml/model/type/date_time_spec.rb +54 -2
- data/spec/lutaml/model/type/decimal_spec.rb +1 -1
- data/spec/lutaml/model/type/duration_spec.rb +185 -0
- data/spec/lutaml/model/type/hex_binary_spec.rb +225 -0
- data/spec/lutaml/model/type/integer_spec.rb +1 -1
- data/spec/lutaml/model/type/qname_spec.rb +246 -0
- data/spec/lutaml/model/type/reference_integration_spec.rb +532 -0
- data/spec/lutaml/model/type/reference_spec.rb +293 -0
- data/spec/lutaml/model/type/symbol_spec.rb +322 -0
- data/spec/lutaml/model/type/time_spec.rb +6 -5
- data/spec/lutaml/model/type/time_without_date_spec.rb +1 -1
- data/spec/lutaml/model/type/uninitialized_class_spec.rb +110 -0
- data/spec/lutaml/model/type/uri_spec.rb +176 -0
- data/spec/lutaml/model/type/value_xml_mapping_spec.rb +162 -0
- data/spec/lutaml/model/type_context_spec.rb +370 -0
- data/spec/lutaml/model/type_registry_spec.rb +313 -0
- data/spec/lutaml/model/type_resolver_spec.rb +278 -0
- data/spec/lutaml/model/type_spec.rb +7 -8
- data/spec/lutaml/model/type_substitution_spec.rb +172 -0
- data/spec/lutaml/model/utils_spec.rb +39 -24
- data/spec/lutaml/model/value_map_spec.rb +2 -2
- data/spec/lutaml/model/value_transformation_comprehensive_spec.rb +676 -0
- data/spec/lutaml/model/with_child_mapping_spec.rb +1 -1
- data/spec/lutaml/model/xml_decoupling_spec.rb +435 -0
- data/spec/lutaml/model/xsd_form_default_patterns_spec.rb +664 -0
- data/spec/lutaml/model/xsd_patterns_spec.rb +278 -0
- data/spec/lutaml/model/xsd_type_spec.rb +345 -0
- data/spec/lutaml/model/xsd_type_validation_spec.rb +442 -0
- data/spec/lutaml/model/yamls/standard_adapter_spec.rb +2 -2
- data/spec/lutaml/xml/adapter/nokogiri_adapter_spec.rb +130 -0
- data/spec/lutaml/xml/adapter/oga_adapter_spec.rb +135 -0
- data/spec/lutaml/xml/adapter/ox_adapter_spec.rb +101 -0
- data/spec/lutaml/xml/adapter/rexml_adapter_spec.rb +101 -0
- data/spec/lutaml/xml/adapter/xml_namespace_spec.rb +531 -0
- data/spec/lutaml/xml/builder/builder_spec.rb +216 -0
- data/spec/lutaml/xml/compiled_rule_namespace_spec.rb +405 -0
- data/spec/lutaml/xml/conformance/xml_namespaces_spec.rb +580 -0
- data/spec/lutaml/xml/conformance/xml_schema_instance_spec.rb +266 -0
- data/spec/lutaml/xml/data_model_spec.rb +300 -0
- data/spec/lutaml/xml/decisions/decision_engine_spec.rb +242 -0
- data/spec/lutaml/xml/decisions/decision_spec.rb +217 -0
- data/spec/lutaml/xml/decisions/element_prefix_resolver_spec.rb +198 -0
- data/spec/lutaml/xml/declaration_planner_spec.rb +524 -0
- data/spec/lutaml/xml/default_namespace_spec.rb +190 -0
- data/spec/lutaml/{model/xml → xml}/derived_attributes_spec.rb +2 -2
- data/spec/lutaml/xml/doctype_preservation_spec.rb +323 -0
- data/spec/lutaml/xml/doubly_defined_namespace_spec.rb +415 -0
- data/spec/lutaml/xml/dual_namespace_element_spec.rb +181 -0
- data/spec/lutaml/xml/element_spec.rb +28 -0
- data/spec/lutaml/xml/encoding_normalizer_spec.rb +215 -0
- data/spec/lutaml/xml/enhanced_mapping_spec.rb +692 -0
- data/spec/lutaml/xml/entity_fragmentation_spec.rb +583 -0
- data/spec/lutaml/xml/format_chooser_spec.rb +0 -0
- data/spec/lutaml/xml/fpi_namespace_spec.rb +145 -0
- data/spec/lutaml/{model/xml/namespace_spec.rb → xml/general_namespace_spec.rb} +6 -5
- data/spec/lutaml/xml/mapping_finalization_guard_spec.rb +83 -0
- data/spec/lutaml/xml/mapping_rule_spec.rb +98 -0
- data/spec/lutaml/xml/mapping_spec.rb +1147 -0
- data/spec/lutaml/xml/model_transform_guard_spec.rb +126 -0
- data/spec/lutaml/{model/xml → xml}/namespace/nested_with_explicit_namespace_spec.rb +8 -5
- data/spec/lutaml/xml/namespace/w3c_reserved_warning_spec.rb +152 -0
- data/spec/lutaml/xml/namespace_alias_prefix_root_spec.rb +130 -0
- data/spec/lutaml/xml/namespace_alias_spec.rb +263 -0
- data/spec/lutaml/xml/namespace_aware_parsing_spec.rb +219 -0
- data/spec/lutaml/xml/namespace_backward_compatibility_spec.rb +48 -0
- data/spec/lutaml/xml/namespace_bound_element_roundtrip_spec.rb +433 -0
- data/spec/lutaml/xml/namespace_constant_spec.rb +383 -0
- data/spec/lutaml/xml/namespace_force_prefix_spec.rb +113 -0
- data/spec/lutaml/xml/namespace_format_preservation_spec.rb +49 -0
- data/spec/lutaml/xml/namespace_inheritance_deep_spec.rb +162 -0
- data/spec/lutaml/xml/namespace_inheritance_override_spec.rb +316 -0
- data/spec/lutaml/xml/namespace_inheritance_resolver_spec.rb +0 -0
- data/spec/lutaml/xml/namespace_inheritance_spec.rb +966 -0
- data/spec/lutaml/xml/namespace_integration_spec.rb +277 -0
- data/spec/lutaml/xml/namespace_missing_prefix_spec.rb +178 -0
- data/spec/lutaml/xml/namespace_no_hoisting_spec.rb +172 -0
- data/spec/lutaml/xml/namespace_placement_spec.rb +265 -0
- data/spec/lutaml/xml/namespace_preservation_spec.rb +427 -0
- data/spec/lutaml/xml/namespace_principles_spec.rb +909 -0
- data/spec/lutaml/xml/namespace_resolution_strategy_spec.rb +273 -0
- data/spec/lutaml/xml/namespace_scope_declare_spec.rb +205 -0
- data/spec/lutaml/xml/namespace_scope_spec.rb +389 -0
- data/spec/lutaml/xml/namespace_scope_vcard_spec.rb +616 -0
- data/spec/lutaml/xml/namespace_spec.rb +712 -0
- data/spec/lutaml/xml/namespace_three_phase_spec.rb +310 -0
- data/spec/lutaml/xml/nil_optional_element_namespace_spec.rb +84 -0
- data/spec/lutaml/xml/ooxml_namespace_spec.rb +177 -0
- data/spec/lutaml/xml/ordered_method_spec.rb +109 -0
- data/spec/lutaml/xml/prefix_control_spec.rb +286 -0
- data/spec/lutaml/{model/register/xml_spec.rb → xml/register_spec.rb} +75 -21
- data/spec/lutaml/xml/reusable_mapping_spec.rb +148 -0
- data/spec/lutaml/xml/reused_elements_namespace_spec.rb +85 -0
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_group_spec.rb +9 -3
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/attribute_spec.rb +11 -7
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/choice_spec.rb +5 -2
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_restriction_spec.rb +7 -2
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_content_spec.rb +5 -1
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/complex_type_spec.rb +49 -20
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/element_spec.rb +9 -4
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/group_spec.rb +9 -5
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/restriction_spec.rb +1 -0
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/sequence_spec.rb +10 -4
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_content_spec.rb +9 -3
- data/spec/lutaml/{model/schema/xml_compiler → xml/schema/compiler}/simple_type_spec.rb +10 -7
- data/spec/lutaml/{model/schema/xml_compiler_spec.rb → xml/schema/compiler_spec.rb} +219 -94
- data/spec/lutaml/xml/schema/xsd/errors/error_context_spec.rb +65 -0
- data/spec/lutaml/xml/schema/xsd/errors/suggestion_spec.rb +77 -0
- data/spec/lutaml/xml/schema/xsd/file_validation_result_spec.rb +131 -0
- data/spec/lutaml/xml/schema/xsd/glob_spec.rb +318 -0
- data/spec/lutaml/xml/schema/xsd/liquid_methods/attribute_and_group_spec.rb +76 -0
- data/spec/lutaml/xml/schema/xsd/liquid_methods/complex_type_spec.rb +159 -0
- data/spec/lutaml/xml/schema/xsd/liquid_methods/containers_spec.rb +104 -0
- data/spec/lutaml/xml/schema/xsd/liquid_methods/element_spec.rb +139 -0
- data/spec/lutaml/xml/schema/xsd/liquid_methods/schema_spec.rb +75 -0
- data/spec/lutaml/xml/schema/xsd/liquid_methods/simple_content_spec.rb +79 -0
- data/spec/lutaml/xml/schema/xsd/namespace_uri_remapping_spec.rb +246 -0
- data/spec/lutaml/xml/schema/xsd/schema_helper_methods_spec.rb +237 -0
- data/spec/lutaml/xml/schema/xsd/schema_mapping_spec.rb +742 -0
- data/spec/lutaml/xml/schema/xsd/schema_validator_spec.rb +228 -0
- data/spec/lutaml/xml/schema/xsd/spec_helper.rb +26 -0
- data/spec/lutaml/xml/schema/xsd/validation_error_spec.rb +189 -0
- data/spec/lutaml/xml/schema/xsd/validation_result_spec.rb +276 -0
- data/spec/lutaml/xml/schema/xsd/xsd_spec.rb +51 -0
- data/spec/lutaml/xml/schema_primer_spec.rb +393 -0
- data/spec/lutaml/xml/serializable_namespace_spec.rb +125 -0
- data/spec/lutaml/xml/transformation/custom_method_wrapper_spec.rb +48 -0
- data/spec/lutaml/xml/transformation_spec.rb +439 -0
- data/spec/lutaml/xml/type_namespace/collector_spec.rb +212 -0
- data/spec/lutaml/xml/type_namespace/planner_spec.rb +270 -0
- data/spec/lutaml/xml/type_namespace_examples_spec.rb +521 -0
- data/spec/lutaml/xml/type_namespace_integration_spec.rb +332 -0
- data/spec/lutaml/xml/type_namespace_prefix_spec.rb +370 -0
- data/spec/lutaml/xml/type_namespace_resolver_spec.rb +0 -0
- data/spec/lutaml/xml/type_namespace_roundtrip_spec.rb +580 -0
- data/spec/lutaml/xml/w3c_types_spec.rb +376 -0
- data/spec/lutaml/{model → xml}/xml_adapter_spec.rb +64 -17
- data/spec/lutaml/xml/xml_declaration_spec.rb +568 -0
- data/spec/lutaml/xml/xml_element_guard_spec.rb +138 -0
- data/spec/lutaml/{model/xml → xml}/xml_element_spec.rb +1 -1
- data/spec/lutaml/xml/xml_lang_spec.rb +441 -0
- data/spec/lutaml/xml/xml_space_spec.rb +247 -0
- data/spec/lutaml/xml/xml_space_type_spec.rb +161 -0
- data/spec/lutaml/xml/xml_spec.rb +122 -0
- data/spec/parent_root_spec.rb +63 -0
- data/spec/person_spec.rb +9 -9
- data/spec/spec_helper.rb +64 -6
- data/spec/support/test_adapter_config.rb +101 -0
- data/spec/support/test_namespaces.rb +185 -0
- data/spec/support/trace_helper.rb +0 -0
- data/spec/support/xml/schema_helper.rb +15 -0
- data/spec/support/xml/xsd/code_example_validator.rb +393 -0
- data/spec/support/xml_mapping_namespaces.rb +176 -0
- metadata +1465 -100
- data/docs/custom_registers.adoc +0 -228
- data/lib/lutaml/model/hash_adapter/mapping.rb +0 -19
- data/lib/lutaml/model/hash_adapter/mapping_rule.rb +0 -9
- data/lib/lutaml/model/hash_adapter/transform.rb +0 -8
- data/lib/lutaml/model/hash_adapter.rb +0 -21
- data/lib/lutaml/model/json/mapping.rb +0 -19
- data/lib/lutaml/model/json/mapping_rule.rb +0 -9
- data/lib/lutaml/model/json/multi_json_adapter.rb +0 -18
- data/lib/lutaml/model/json/standard_adapter.rb +0 -25
- data/lib/lutaml/model/json/transform.rb +0 -8
- data/lib/lutaml/model/jsonl/mapping.rb +0 -19
- data/lib/lutaml/model/jsonl/mapping_rule.rb +0 -9
- data/lib/lutaml/model/jsonl/transform.rb +0 -19
- data/lib/lutaml/model/schema/xsd_schema.rb +0 -62
- data/lib/lutaml/model/toml/mapping_rule.rb +0 -9
- data/lib/lutaml/model/toml/toml_rb_adapter.rb +0 -18
- data/lib/lutaml/model/toml/tomlib_adapter.rb +0 -19
- data/lib/lutaml/model/toml/transform.rb +0 -8
- data/lib/lutaml/model/xml/builder/nokogiri.rb +0 -101
- data/lib/lutaml/model/xml/builder/oga.rb +0 -183
- data/lib/lutaml/model/xml/builder/ox.rb +0 -121
- data/lib/lutaml/model/xml/document.rb +0 -477
- data/lib/lutaml/model/xml/element.rb +0 -32
- data/lib/lutaml/model/xml/mapping.rb +0 -471
- data/lib/lutaml/model/xml/mapping_rule.rb +0 -149
- data/lib/lutaml/model/xml/nokogiri_adapter.rb +0 -234
- data/lib/lutaml/model/xml/oga/document.rb +0 -20
- data/lib/lutaml/model/xml/oga/element.rb +0 -123
- data/lib/lutaml/model/xml/oga_adapter.rb +0 -172
- data/lib/lutaml/model/xml/ox_adapter.rb +0 -229
- data/lib/lutaml/model/xml/transform.rb +0 -8
- data/lib/lutaml/model/xml/xml_attribute.rb +0 -37
- data/lib/lutaml/model/xml/xml_element.rb +0 -167
- data/lib/lutaml/model/xml/xml_namespace.rb +0 -49
- data/lib/lutaml/model/xml.rb +0 -31
- data/lib/lutaml/model/xml_adapter/element.rb +0 -18
- data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +0 -15
- data/lib/lutaml/model/xml_adapter/oga_adapter.rb +0 -21
- data/lib/lutaml/model/xml_adapter/ox_adapter.rb +0 -18
- data/lib/lutaml/model/xml_adapter.rb +0 -7
- data/lib/lutaml/model/yaml/mapping.rb +0 -19
- data/lib/lutaml/model/yaml/mapping_rule.rb +0 -9
- data/lib/lutaml/model/yaml/standard_adapter.rb +0 -28
- data/lib/lutaml/model/yaml/transform.rb +0 -8
- data/lib/lutaml/model/yamls/mapping.rb +0 -19
- data/lib/lutaml/model/yamls/mapping_rule.rb +0 -9
- data/lib/lutaml/model/yamls/transform.rb +0 -19
- data/spec/benchmarks/xml_parsing_benchmark_spec.rb +0 -74
- data/spec/fixtures/xml/advanced_test_schema.xsd +0 -134
- data/spec/lutaml/model/namespace_spec.rb +0 -57
- data/spec/lutaml/model/xml_adapter/nokogiri_adapter_spec.rb +0 -56
- data/spec/lutaml/model/xml_adapter/oga_adapter_spec.rb +0 -60
- data/spec/lutaml/model/xml_adapter/ox_adapter_spec.rb +0 -61
- data/spec/lutaml/model/xml_adapter/xml_namespace_spec.rb +0 -368
- data/spec/lutaml/model/xml_mapping_rule_spec.rb +0 -158
- data/spec/lutaml/model/xml_mapping_spec.rb +0 -1318
- data/spec/lutaml/model/xml_spec.rb +0 -63
- /data/spec/lutaml/{model/xml → xml}/root_mappings/nested_child_mappings_spec.rb +0 -0
|
@@ -0,0 +1,1470 @@
|
|
|
1
|
+
module Lutaml
|
|
2
|
+
module Xml
|
|
3
|
+
class Mapping < ::Lutaml::Model::Mapping
|
|
4
|
+
TYPES = {
|
|
5
|
+
attribute: :map_attribute,
|
|
6
|
+
element: :map_element,
|
|
7
|
+
content: :map_content,
|
|
8
|
+
all_content: :map_all,
|
|
9
|
+
processing_instruction: :map_processing_instruction,
|
|
10
|
+
}.freeze
|
|
11
|
+
|
|
12
|
+
# Class-level XML DSL for reusable mapping classes.
|
|
13
|
+
#
|
|
14
|
+
# When a subclass of Lutaml::Xml::Mapping uses `xml do...end` in its
|
|
15
|
+
# class body, this method creates an instance and evaluates the block.
|
|
16
|
+
#
|
|
17
|
+
# @param block [Proc] DSL block with map_element, namespace_scope, etc.
|
|
18
|
+
# @return [Lutaml::Xml::Mapping] the mapping instance
|
|
19
|
+
#
|
|
20
|
+
# @example
|
|
21
|
+
# class BaseMapping < Lutaml::Xml::Mapping
|
|
22
|
+
# xml do
|
|
23
|
+
# namespace_scope [MyNamespace]
|
|
24
|
+
# map_element "Foo", to: :foo
|
|
25
|
+
# end
|
|
26
|
+
# end
|
|
27
|
+
def self.xml(&block)
|
|
28
|
+
@xml_instance ||= new
|
|
29
|
+
@xml_instance.instance_eval(&block) if block
|
|
30
|
+
@xml_instance
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Get the shared XML mapping instance for this mapping class.
|
|
34
|
+
# Created lazily via the xml() class method.
|
|
35
|
+
#
|
|
36
|
+
# @return [Lutaml::Xml::Mapping, nil]
|
|
37
|
+
def self.xml_mapping_instance
|
|
38
|
+
@xml_instance
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
attr_reader :root_element,
|
|
42
|
+
:namespace_uri,
|
|
43
|
+
:namespace_prefix,
|
|
44
|
+
:element_sequence,
|
|
45
|
+
:mappings_imported,
|
|
46
|
+
:namespace_class,
|
|
47
|
+
:namespace_param,
|
|
48
|
+
:element_name,
|
|
49
|
+
:documentation_text,
|
|
50
|
+
:type_name_value,
|
|
51
|
+
:namespace_scope,
|
|
52
|
+
:mapper_class,
|
|
53
|
+
:xml_space,
|
|
54
|
+
:consolidation_maps,
|
|
55
|
+
:processing_instruction_mappings
|
|
56
|
+
|
|
57
|
+
def initialize
|
|
58
|
+
super
|
|
59
|
+
|
|
60
|
+
@elements = {}
|
|
61
|
+
@attributes = {}
|
|
62
|
+
@element_sequence = []
|
|
63
|
+
@content_mapping = nil
|
|
64
|
+
@raw_mapping = nil
|
|
65
|
+
@mixed_content = false
|
|
66
|
+
@xml_space = nil
|
|
67
|
+
@format = :xml
|
|
68
|
+
@register_elements = ::Hash.new { |h, k| h[k] = {} }
|
|
69
|
+
@register_attributes = ::Hash.new { |h, k| h[k] = {} }
|
|
70
|
+
@register_element_sequences = ::Hash.new { |h, k| h[k] = [] }
|
|
71
|
+
@consolidation_maps = []
|
|
72
|
+
@element_name = nil
|
|
73
|
+
@namespace_class = nil
|
|
74
|
+
@documentation_text = nil
|
|
75
|
+
@type_name_value = nil
|
|
76
|
+
@namespace_scope = []
|
|
77
|
+
@namespace_scope_config = []
|
|
78
|
+
@mapper_class = nil
|
|
79
|
+
@importing_mappings = false
|
|
80
|
+
@attributes_with_methods_defined = Set.new
|
|
81
|
+
@processing_instruction_mappings = []
|
|
82
|
+
|
|
83
|
+
# Performance: Caches for finalized mapping queries
|
|
84
|
+
@cached_elements = {}
|
|
85
|
+
@cached_attributes = {}
|
|
86
|
+
@cached_mappings = {}
|
|
87
|
+
@finalized = false
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def finalize(mapper_class)
|
|
91
|
+
# Store mapper class for later use in deferred imports
|
|
92
|
+
@mapper_class = mapper_class
|
|
93
|
+
|
|
94
|
+
# DO NOT auto-generate root element
|
|
95
|
+
# Models should explicitly declare root in their xml block if needed
|
|
96
|
+
# Type-only models (used as nested types) don't need a root element
|
|
97
|
+
|
|
98
|
+
# Resolve any deferred mapping imports before finalizing
|
|
99
|
+
ensure_mappings_imported!
|
|
100
|
+
|
|
101
|
+
# Validate mixed content requires collection attribute for content mapping
|
|
102
|
+
validate_mixed_content_collection!(mapper_class)
|
|
103
|
+
|
|
104
|
+
# Performance: Clear caches and mark finalized
|
|
105
|
+
@cached_elements.clear
|
|
106
|
+
@cached_attributes.clear
|
|
107
|
+
@cached_mappings.clear
|
|
108
|
+
@finalized = true
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def finalized?
|
|
112
|
+
@finalized
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Validate that mixed content models have a collection attribute for
|
|
116
|
+
# their content mapping. When mixed_content is enabled, the XML element
|
|
117
|
+
# can contain interleaved text and child elements, resulting in multiple
|
|
118
|
+
# text nodes. The content attribute must be a string collection to hold
|
|
119
|
+
# all of them; otherwise only the first text node is preserved.
|
|
120
|
+
def validate_mixed_content_collection!(mapper_class)
|
|
121
|
+
return unless @mixed_content && @content_mapping
|
|
122
|
+
|
|
123
|
+
attr_name = @content_mapping.to
|
|
124
|
+
return unless attr_name
|
|
125
|
+
|
|
126
|
+
# Follow delegate chain to find the actual attribute definition
|
|
127
|
+
delegate = @content_mapping.delegate
|
|
128
|
+
attr_def = if delegate
|
|
129
|
+
delegate_obj = mapper_class.attributes[delegate]
|
|
130
|
+
delegate_obj&.type&.attributes&.dig(attr_name) if delegate_obj&.type.respond_to?(:attributes)
|
|
131
|
+
else
|
|
132
|
+
mapper_class.attributes[attr_name]
|
|
133
|
+
end
|
|
134
|
+
return unless attr_def
|
|
135
|
+
return if attr_def.collection?
|
|
136
|
+
|
|
137
|
+
raise Lutaml::Model::MixedContentCollectionError.new(attr_name,
|
|
138
|
+
mapper_class)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Enable mixed content for this element
|
|
142
|
+
#
|
|
143
|
+
# Mixed content means the element can contain both text nodes
|
|
144
|
+
# and child elements interspersed.
|
|
145
|
+
#
|
|
146
|
+
# When using mixed_content with map_content, the mapped attribute
|
|
147
|
+
# MUST be a string collection, e.g.:
|
|
148
|
+
#
|
|
149
|
+
# attribute :content, :string, collection: true
|
|
150
|
+
#
|
|
151
|
+
# @return [Boolean] true
|
|
152
|
+
def mixed_content
|
|
153
|
+
@mixed_content = true
|
|
154
|
+
@ordered = true
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Check if mixed content is enabled
|
|
158
|
+
# @return [Boolean] true if mixed content is enabled
|
|
159
|
+
def mixed_content?
|
|
160
|
+
@mixed_content || false
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Return whether this mapping uses ordered content
|
|
164
|
+
# @return [Boolean, nil] true if ordered, nil if not set
|
|
165
|
+
def ordered?
|
|
166
|
+
@ordered
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Set the XML element name for this mapping
|
|
170
|
+
#
|
|
171
|
+
# This is the primary method for declaring the element name.
|
|
172
|
+
# Use this for the new clean API.
|
|
173
|
+
#
|
|
174
|
+
# @param name [String] the element name
|
|
175
|
+
# @return [String] the element name
|
|
176
|
+
def element(name)
|
|
177
|
+
@element_name = name
|
|
178
|
+
@root_element = name # Maintain backward compatibility
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Set the root element name with optional configuration
|
|
182
|
+
#
|
|
183
|
+
# This is kept as an alias to element() for backward compatibility,
|
|
184
|
+
# but also supports the mixed: and ordered: options.
|
|
185
|
+
#
|
|
186
|
+
# @param name [String] the root element name
|
|
187
|
+
# @param mixed [Boolean] whether content is mixed (text + elements)
|
|
188
|
+
# @param ordered [Boolean] whether to preserve element order
|
|
189
|
+
# @return [String] the root element name
|
|
190
|
+
def root(name, mixed: false, ordered: false)
|
|
191
|
+
element(name)
|
|
192
|
+
@mixed_content = mixed
|
|
193
|
+
@ordered = ordered || mixed # mixed content is always ordered
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Enable mixed content for this element
|
|
197
|
+
#
|
|
198
|
+
# Mixed content means the element can contain both text nodes
|
|
199
|
+
# and child elements interspersed.
|
|
200
|
+
#
|
|
201
|
+
# @return [Boolean] true
|
|
202
|
+
def enable_mixed_content
|
|
203
|
+
@mixed_content = true
|
|
204
|
+
@ordered = true # mixed content implies ordered
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Alias for enable_mixed_content for DSL usage
|
|
208
|
+
# @return [Boolean] true
|
|
209
|
+
alias mixed_content enable_mixed_content
|
|
210
|
+
|
|
211
|
+
# Control the xml:space attribute for this element
|
|
212
|
+
#
|
|
213
|
+
# When set to :preserve, automatically adds `xml:space="preserve"`
|
|
214
|
+
# during serialization. When set to :default, adds `xml:space="default"`.
|
|
215
|
+
# When false or nil, no xml:space attribute is added.
|
|
216
|
+
#
|
|
217
|
+
# @param value [Symbol, Boolean, nil] :preserve, :default, false, or nil
|
|
218
|
+
# @return [Symbol, nil] the xml_space value
|
|
219
|
+
#
|
|
220
|
+
# @example Add xml:space="preserve"
|
|
221
|
+
# xml do
|
|
222
|
+
# element "text"
|
|
223
|
+
# mixed_content
|
|
224
|
+
# xml_space :preserve # Adds xml:space="preserve"
|
|
225
|
+
# end
|
|
226
|
+
#
|
|
227
|
+
# @example Add xml:space="default"
|
|
228
|
+
# xml do
|
|
229
|
+
# element "text"
|
|
230
|
+
# xml_space :default
|
|
231
|
+
# end
|
|
232
|
+
def xml_space(value = nil)
|
|
233
|
+
@xml_space = value if value
|
|
234
|
+
@xml_space
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# Whether this mapping should auto-add xml:space="preserve"
|
|
238
|
+
#
|
|
239
|
+
# @return [Boolean]
|
|
240
|
+
def preserve_whitespace?
|
|
241
|
+
@xml_space == :preserve
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# Convenience method for standard W3C XML attributes
|
|
245
|
+
#
|
|
246
|
+
# Automatically creates attribute mappings for attributes that use
|
|
247
|
+
# W3C types. The attribute must already be declared with a W3C type.
|
|
248
|
+
#
|
|
249
|
+
# Available options: :lang, :space, :base, :id
|
|
250
|
+
#
|
|
251
|
+
# @param attrs [Array<Symbol>] List of W3C attribute names to auto-map
|
|
252
|
+
# @example
|
|
253
|
+
# class Paragraph < Lutaml::Model::Serializable
|
|
254
|
+
# attribute :lang, Lutaml::Xml::W3c::XmlLangType
|
|
255
|
+
# attribute :space, Lutaml::Xml::W3c::XmlSpaceType
|
|
256
|
+
# attribute :content, :string
|
|
257
|
+
#
|
|
258
|
+
# xml do
|
|
259
|
+
# element "p"
|
|
260
|
+
# w3c_attributes :lang, :space # Maps to xml:lang and xml:space
|
|
261
|
+
# map_content to: :content
|
|
262
|
+
# end
|
|
263
|
+
# end
|
|
264
|
+
def w3c_attributes(*attrs)
|
|
265
|
+
attrs.each do |attr|
|
|
266
|
+
map_attribute attr.to_s, to: attr
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Enable ordered content for this element
|
|
271
|
+
#
|
|
272
|
+
# Ordered content means element order is preserved during
|
|
273
|
+
# round-trip serialization without validation.
|
|
274
|
+
# This is different from `sequence` which enforces and validates order.
|
|
275
|
+
#
|
|
276
|
+
# Use this when:
|
|
277
|
+
# - Element order matters for your application
|
|
278
|
+
# - You need to preserve input order exactly
|
|
279
|
+
# - You DON'T want to validate/enforce specific order
|
|
280
|
+
#
|
|
281
|
+
# Use `sequence` when you need strict order validation.
|
|
282
|
+
#
|
|
283
|
+
# @return [Boolean] true
|
|
284
|
+
def ordered
|
|
285
|
+
@ordered = true
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def root?
|
|
289
|
+
!!root_element
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# Mark this model as having no root element (type-only)
|
|
293
|
+
#
|
|
294
|
+
# @deprecated Use absence of element() declaration and type_name() instead
|
|
295
|
+
def no_root
|
|
296
|
+
warn "[Lutaml::Model] DEPRECATED: no_root is deprecated. " \
|
|
297
|
+
"Simply omit the element declaration for type-only models. " \
|
|
298
|
+
"Use type_name() to set the XSD type name."
|
|
299
|
+
@no_root = true
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# Check if this mapping has no root element
|
|
303
|
+
#
|
|
304
|
+
# Returns true if:
|
|
305
|
+
# - The deprecated @no_root flag is explicitly set, OR
|
|
306
|
+
# - No element is declared (modern pattern - just omit element() call)
|
|
307
|
+
#
|
|
308
|
+
# @return [Boolean] true if no root element
|
|
309
|
+
def no_root?
|
|
310
|
+
!!@no_root || no_element?
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# Check if this mapping has no element declaration
|
|
314
|
+
#
|
|
315
|
+
# @return [Boolean] true if no element is declared
|
|
316
|
+
def no_element?
|
|
317
|
+
!element_name
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
def prefixed_root
|
|
321
|
+
if namespace_uri && namespace_prefix
|
|
322
|
+
"#{namespace_prefix}:#{root_element}"
|
|
323
|
+
else
|
|
324
|
+
root_element
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
# Set the XML namespace for this mapping
|
|
329
|
+
#
|
|
330
|
+
# @param ns_class_or_symbol [Class, Symbol] XmlNamespace class or :blank/:inherit
|
|
331
|
+
# @param _deprecated_prefix [String, nil] DEPRECATED - no longer used
|
|
332
|
+
# @return [void]
|
|
333
|
+
#
|
|
334
|
+
# @example Using XmlNamespace class (REQUIRED)
|
|
335
|
+
# namespace ContactNamespace
|
|
336
|
+
#
|
|
337
|
+
# @example Using :inherit to inherit parent namespace
|
|
338
|
+
# namespace :inherit
|
|
339
|
+
#
|
|
340
|
+
# @example Using :blank for explicit no namespace
|
|
341
|
+
# namespace :blank
|
|
342
|
+
#
|
|
343
|
+
# @raise [ArgumentError] if invalid arguments provided
|
|
344
|
+
# @raise [Lutaml::Model::NoRootNamespaceError] if explicitly marked as no_root
|
|
345
|
+
def namespace(ns_class_or_symbol, _deprecated_prefix = nil)
|
|
346
|
+
# Only raise error for explicitly marked no_root (using deprecated method)
|
|
347
|
+
# Type-only models (no element declared) CAN have namespaces
|
|
348
|
+
raise Lutaml::Model::NoRootNamespaceError if @no_root
|
|
349
|
+
|
|
350
|
+
# Warn if prefix parameter is provided
|
|
351
|
+
if _deprecated_prefix
|
|
352
|
+
warn "[DEPRECATED] The prefix parameter on namespace() is deprecated. " \
|
|
353
|
+
"Define prefix_default in your XmlNamespace class instead. " \
|
|
354
|
+
"Prefix '#{_deprecated_prefix}' will be ignored."
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# Handle :blank symbol - explicit blank namespace
|
|
358
|
+
if ns_class_or_symbol == :blank
|
|
359
|
+
@namespace_class = nil
|
|
360
|
+
@namespace_uri = nil
|
|
361
|
+
@namespace_prefix = nil
|
|
362
|
+
@namespace_set = true # Mark as explicitly set
|
|
363
|
+
@namespace_param = :blank # Store original value
|
|
364
|
+
return
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
# Handle :inherit symbol
|
|
368
|
+
if ns_class_or_symbol == :inherit
|
|
369
|
+
@namespace_set = true
|
|
370
|
+
@namespace_param = :inherit
|
|
371
|
+
return
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
# nil means "not set" - DON'T set @namespace_set
|
|
375
|
+
if ns_class_or_symbol.nil?
|
|
376
|
+
@namespace_class = nil
|
|
377
|
+
@namespace_uri = nil
|
|
378
|
+
@namespace_prefix = nil
|
|
379
|
+
@namespace_set = false # Explicitly NOT set
|
|
380
|
+
@namespace_param = nil
|
|
381
|
+
return
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# Accept both Lutaml::Xml::Namespace and Lutaml::Model::Xml::Namespace for compatibility
|
|
385
|
+
is_namespace_class = ns_class_or_symbol.is_a?(Class) && (
|
|
386
|
+
(defined?(::Lutaml::Xml::Namespace) && ns_class_or_symbol < ::Lutaml::Xml::Namespace) ||
|
|
387
|
+
(defined?(::Lutaml::Model::Xml::Namespace) && ns_class_or_symbol < ::Lutaml::Model::Xml::Namespace)
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
if is_namespace_class
|
|
391
|
+
# XmlNamespace class passed - register and use
|
|
392
|
+
@namespace_class = NamespaceClassRegistry.instance.register_named(ns_class_or_symbol)
|
|
393
|
+
@namespace_uri = ns_class_or_symbol.uri
|
|
394
|
+
@namespace_prefix = ns_class_or_symbol.prefix_default
|
|
395
|
+
elsif ns_class_or_symbol.is_a?(String)
|
|
396
|
+
# String URI - NOT SUPPORTED
|
|
397
|
+
raise Lutaml::Xml::Error::InvalidNamespaceError.new(
|
|
398
|
+
expected: "XmlNamespace class",
|
|
399
|
+
got: ns_class_or_symbol,
|
|
400
|
+
message: "String namespace URIs are not supported. " \
|
|
401
|
+
"Define an XmlNamespace class instead. " \
|
|
402
|
+
"See docs/_guides/xml-namespaces.adoc for migration guide.",
|
|
403
|
+
)
|
|
404
|
+
else
|
|
405
|
+
raise Lutaml::Xml::Error::InvalidNamespaceError.new(
|
|
406
|
+
expected: "XmlNamespace class, :inherit, or :blank",
|
|
407
|
+
got: ns_class_or_symbol,
|
|
408
|
+
)
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
# Set the namespace scope for this mapping
|
|
413
|
+
#
|
|
414
|
+
# Controls which namespaces are declared at the root element level
|
|
415
|
+
# versus being declared locally on each element that uses them.
|
|
416
|
+
#
|
|
417
|
+
# Namespaces listed in namespace_scope will be declared once on the
|
|
418
|
+
# root element. Namespaces not listed will be declared locally on
|
|
419
|
+
# elements where they are used.
|
|
420
|
+
#
|
|
421
|
+
# @param namespaces [Array<Class>, Array<Hash>] array of XmlNamespace classes
|
|
422
|
+
# or hashes with :namespace and :declare keys
|
|
423
|
+
# @return [Array<Class>] the current namespace scope
|
|
424
|
+
#
|
|
425
|
+
# @example Simple array of namespace classes (all default to :auto)
|
|
426
|
+
# namespace_scope [VcardNamespace, DctermsNamespace, DcElementsNamespace]
|
|
427
|
+
#
|
|
428
|
+
# @example Per-namespace declaration control
|
|
429
|
+
# namespace_scope [
|
|
430
|
+
# { namespace: VcardNamespace, declare: :always },
|
|
431
|
+
# { namespace: DctermsNamespace, declare: :auto },
|
|
432
|
+
# XsiNamespace # Can mix hash and class entries
|
|
433
|
+
# ]
|
|
434
|
+
def namespace_scope(namespaces = nil)
|
|
435
|
+
if namespaces
|
|
436
|
+
validate_namespace_scope!(namespaces)
|
|
437
|
+
|
|
438
|
+
# Convert to normalized format
|
|
439
|
+
@namespace_scope_config = normalize_namespace_scope(namespaces)
|
|
440
|
+
@namespace_scope = @namespace_scope_config.map do |cfg|
|
|
441
|
+
cfg[:namespace]
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
@namespace_scope
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
# Set documentation text for this mapping
|
|
448
|
+
#
|
|
449
|
+
# Used for XSD annotation generation.
|
|
450
|
+
#
|
|
451
|
+
# @param text [String] the documentation text
|
|
452
|
+
# @return [String] the documentation text
|
|
453
|
+
def documentation(text)
|
|
454
|
+
@documentation_text = text
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
# Set explicit type name for XSD generation
|
|
458
|
+
#
|
|
459
|
+
# By default, type name is inferred as "ClassNameType".
|
|
460
|
+
# Use this to override.
|
|
461
|
+
#
|
|
462
|
+
# @param name [String, nil] the type name
|
|
463
|
+
# @return [String, nil] the type name
|
|
464
|
+
def type_name(name = nil)
|
|
465
|
+
@type_name_value = name if name
|
|
466
|
+
@type_name_value
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
# Alias for type_name - both methods are equivalent
|
|
470
|
+
#
|
|
471
|
+
# xsd_type and type_name set the XSD complexType/simpleType name
|
|
472
|
+
# for schema generation. Use type_name for clarity (recommended).
|
|
473
|
+
#
|
|
474
|
+
# @param name [String, nil] the type name
|
|
475
|
+
# @return [String, nil] the type name
|
|
476
|
+
alias xsd_type type_name
|
|
477
|
+
|
|
478
|
+
def map_instances(to:, polymorphic: {})
|
|
479
|
+
map_element(to, to: to, polymorphic: polymorphic)
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def map_element(
|
|
483
|
+
name,
|
|
484
|
+
to: nil,
|
|
485
|
+
render_nil: false,
|
|
486
|
+
render_default: false,
|
|
487
|
+
render_empty: false,
|
|
488
|
+
treat_nil: :nil,
|
|
489
|
+
treat_empty: :empty,
|
|
490
|
+
treat_omitted: :nil,
|
|
491
|
+
with: {},
|
|
492
|
+
delegate: nil,
|
|
493
|
+
cdata: false,
|
|
494
|
+
polymorphic: {},
|
|
495
|
+
namespace: (namespace_set = false
|
|
496
|
+
nil),
|
|
497
|
+
prefix: (prefix_provided = false
|
|
498
|
+
nil),
|
|
499
|
+
transform: {},
|
|
500
|
+
value_map: {},
|
|
501
|
+
form: nil,
|
|
502
|
+
documentation: nil,
|
|
503
|
+
xsd_type: (xsd_type_provided = false
|
|
504
|
+
nil)
|
|
505
|
+
)
|
|
506
|
+
validate!(
|
|
507
|
+
name, to, with, render_nil, render_empty, type: TYPES[:element]
|
|
508
|
+
)
|
|
509
|
+
|
|
510
|
+
# Warn if prefix parameter is provided
|
|
511
|
+
if prefix_provided != false
|
|
512
|
+
warn "[DEPRECATED] The prefix parameter on map_element is deprecated. " \
|
|
513
|
+
"Define prefix_default in your XmlNamespace class instead. " \
|
|
514
|
+
"Prefix '#{prefix}' will be ignored."
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
# Raise error if xsd_type parameter is provided
|
|
518
|
+
if xsd_type_provided != false
|
|
519
|
+
raise Lutaml::Model::IncorrectMappingArgumentsError,
|
|
520
|
+
"xsd_type is not allowed at mapping level. " \
|
|
521
|
+
"XSD type must be declared in Type::Value classes using the xsd_type directive. " \
|
|
522
|
+
"See docs/migration-guides/xsd-type-migration.adoc"
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
# Raise error if namespace parameter is a non-nil value at element level
|
|
526
|
+
# This is NOT allowed - namespaces should be declared at model level
|
|
527
|
+
# However, namespace: nil is allowed to explicitly opt out of namespace
|
|
528
|
+
# Note: namespace_set is false when default is used, nil when explicit arg passed
|
|
529
|
+
if namespace_set != false && !namespace.nil?
|
|
530
|
+
raise Lutaml::Model::IncorrectMappingArgumentsError,
|
|
531
|
+
"namespace is not allowed at element mapping level. " \
|
|
532
|
+
"Namespaces must be declared on the MODEL CLASS itself using 'namespace' at the xml block level. " \
|
|
533
|
+
"Each model class should declare its own namespace, not individual elements."
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
rule = MappingRule.new(
|
|
537
|
+
name,
|
|
538
|
+
to: to,
|
|
539
|
+
render_nil: render_nil,
|
|
540
|
+
render_default: render_default,
|
|
541
|
+
render_empty: render_empty,
|
|
542
|
+
treat_nil: treat_nil,
|
|
543
|
+
treat_empty: treat_empty,
|
|
544
|
+
treat_omitted: treat_omitted,
|
|
545
|
+
with: with,
|
|
546
|
+
delegate: delegate,
|
|
547
|
+
cdata: cdata,
|
|
548
|
+
namespace: namespace,
|
|
549
|
+
default_namespace: namespace_uri,
|
|
550
|
+
polymorphic: polymorphic,
|
|
551
|
+
namespace_set: namespace_set != false || namespace == :inherit,
|
|
552
|
+
transform: transform,
|
|
553
|
+
value_map: value_map,
|
|
554
|
+
form: form,
|
|
555
|
+
documentation: documentation,
|
|
556
|
+
)
|
|
557
|
+
# Store rules with the same element name in an array to support
|
|
558
|
+
# multiple mapping rules for the same element name with different target types
|
|
559
|
+
# Use eql? to detect and skip exact duplicates (prevents accumulation)
|
|
560
|
+
key = rule.namespaced_name
|
|
561
|
+
existing = @elements[key]
|
|
562
|
+
|
|
563
|
+
if existing.nil?
|
|
564
|
+
# New mapping - store directly
|
|
565
|
+
@elements[key] = rule
|
|
566
|
+
elsif existing.is_a?(Array)
|
|
567
|
+
# Array exists - check for duplicate or add
|
|
568
|
+
duplicate_index = existing.find_index { |r| r.eql?(rule) }
|
|
569
|
+
# Only add if not a duplicate
|
|
570
|
+
existing << rule unless duplicate_index
|
|
571
|
+
elsif existing.eql?(rule)
|
|
572
|
+
# Exact duplicate - already stored, no action needed
|
|
573
|
+
else
|
|
574
|
+
# Different mapping (polymorphic) - convert to array
|
|
575
|
+
@elements[key] = [existing, rule]
|
|
576
|
+
end
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
def map_attribute(
|
|
580
|
+
name,
|
|
581
|
+
to: nil,
|
|
582
|
+
render_nil: false,
|
|
583
|
+
render_default: false,
|
|
584
|
+
render_empty: false,
|
|
585
|
+
with: {},
|
|
586
|
+
delegate: nil,
|
|
587
|
+
polymorphic_map: {},
|
|
588
|
+
namespace: (namespace_set = false
|
|
589
|
+
nil),
|
|
590
|
+
prefix: (prefix_provided = false
|
|
591
|
+
nil),
|
|
592
|
+
transform: {},
|
|
593
|
+
value_map: {},
|
|
594
|
+
as_list: nil,
|
|
595
|
+
delimiter: nil,
|
|
596
|
+
form: nil,
|
|
597
|
+
documentation: nil,
|
|
598
|
+
xsd_type: (xsd_type_provided = false
|
|
599
|
+
nil)
|
|
600
|
+
)
|
|
601
|
+
validate!(
|
|
602
|
+
name, to, with, render_nil, render_empty, type: TYPES[:attribute]
|
|
603
|
+
)
|
|
604
|
+
|
|
605
|
+
# Warn if prefix parameter is provided
|
|
606
|
+
if prefix_provided != false
|
|
607
|
+
warn "[DEPRECATED] The prefix parameter on map_attribute is deprecated. " \
|
|
608
|
+
"Define prefix_default in your XmlNamespace class instead. " \
|
|
609
|
+
"Prefix '#{prefix}' will be ignored."
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
# Raise error if xsd_type parameter is provided
|
|
613
|
+
if xsd_type_provided != false
|
|
614
|
+
raise Lutaml::Model::IncorrectMappingArgumentsError,
|
|
615
|
+
"xsd_type is not allowed at mapping level. " \
|
|
616
|
+
"XSD type must be declared in Type::Value classes using the xsd_type directive. " \
|
|
617
|
+
"See docs/migration-guides/xsd-type-migration.adoc"
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
# Raise error if namespace parameter is a non-nil value at attribute level
|
|
621
|
+
# This is NOT allowed - namespaces should be declared at model level
|
|
622
|
+
# However, namespace: nil is allowed to explicitly opt out of namespace
|
|
623
|
+
# Note: namespace_set is false when default is used, nil when explicit arg passed
|
|
624
|
+
if namespace_set != false && !namespace.nil?
|
|
625
|
+
raise Lutaml::Model::IncorrectMappingArgumentsError,
|
|
626
|
+
"namespace is not allowed at attribute mapping level. " \
|
|
627
|
+
"Namespaces should be declared on the MODEL CLASS itself using 'namespace' at the xml block level."
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
if name == "schemaLocation"
|
|
631
|
+
location = caller_locations(1, 1)[0]
|
|
632
|
+
caller_file = if defined?(File) && File.respond_to?(:basename)
|
|
633
|
+
File.basename(location.path)
|
|
634
|
+
else
|
|
635
|
+
location.path.to_s.split("/").last
|
|
636
|
+
end
|
|
637
|
+
::Lutaml::Model::Logger.warn_auto_handling(
|
|
638
|
+
name: name,
|
|
639
|
+
caller_file: caller_file,
|
|
640
|
+
caller_line: location.lineno,
|
|
641
|
+
)
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
rule = MappingRule.new(
|
|
645
|
+
name,
|
|
646
|
+
to: to,
|
|
647
|
+
render_nil: render_nil,
|
|
648
|
+
render_default: render_default,
|
|
649
|
+
render_empty: render_empty,
|
|
650
|
+
with: with,
|
|
651
|
+
delegate: delegate,
|
|
652
|
+
namespace: namespace,
|
|
653
|
+
attribute: true,
|
|
654
|
+
polymorphic_map: polymorphic_map,
|
|
655
|
+
default_namespace: namespace_uri,
|
|
656
|
+
namespace_set: namespace_set != false,
|
|
657
|
+
transform: transform,
|
|
658
|
+
value_map: value_map,
|
|
659
|
+
as_list: as_list,
|
|
660
|
+
delimiter: delimiter,
|
|
661
|
+
form: form,
|
|
662
|
+
documentation: documentation,
|
|
663
|
+
)
|
|
664
|
+
# Use eql? to detect and skip exact duplicates (prevents accumulation)
|
|
665
|
+
key = rule.namespaced_name
|
|
666
|
+
existing = @attributes[key]
|
|
667
|
+
|
|
668
|
+
if existing.nil?
|
|
669
|
+
# New mapping - store directly
|
|
670
|
+
@attributes[key] = rule
|
|
671
|
+
elsif existing.is_a?(Array)
|
|
672
|
+
# Array exists - check for duplicate or add
|
|
673
|
+
duplicate_index = existing.find_index { |r| r.eql?(rule) }
|
|
674
|
+
# Only add if not a duplicate
|
|
675
|
+
existing << rule unless duplicate_index
|
|
676
|
+
elsif existing.eql?(rule)
|
|
677
|
+
# Exact duplicate - already stored, no action needed
|
|
678
|
+
else
|
|
679
|
+
# Different mapping (polymorphic) - convert to array
|
|
680
|
+
@attributes[key] = [existing, rule]
|
|
681
|
+
end
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
def map_content(
|
|
685
|
+
to: nil,
|
|
686
|
+
render_nil: false,
|
|
687
|
+
render_default: false,
|
|
688
|
+
render_empty: false,
|
|
689
|
+
with: {},
|
|
690
|
+
delegate: nil,
|
|
691
|
+
mixed: false,
|
|
692
|
+
cdata: false,
|
|
693
|
+
transform: {},
|
|
694
|
+
value_map: {}
|
|
695
|
+
)
|
|
696
|
+
validate!(
|
|
697
|
+
"content", to, with, render_nil, render_empty, type: TYPES[:content]
|
|
698
|
+
)
|
|
699
|
+
|
|
700
|
+
@content_mapping = MappingRule.new(
|
|
701
|
+
nil,
|
|
702
|
+
to: to,
|
|
703
|
+
render_nil: render_nil,
|
|
704
|
+
render_default: render_default,
|
|
705
|
+
render_empty: render_empty,
|
|
706
|
+
with: with,
|
|
707
|
+
delegate: delegate,
|
|
708
|
+
mixed_content: mixed,
|
|
709
|
+
cdata: cdata,
|
|
710
|
+
transform: transform,
|
|
711
|
+
value_map: value_map,
|
|
712
|
+
)
|
|
713
|
+
end
|
|
714
|
+
|
|
715
|
+
def map_all(
|
|
716
|
+
to:,
|
|
717
|
+
render_nil: false,
|
|
718
|
+
render_default: false,
|
|
719
|
+
delegate: nil,
|
|
720
|
+
with: {},
|
|
721
|
+
namespace: (namespace_set = false
|
|
722
|
+
nil),
|
|
723
|
+
prefix: (prefix_provided = false
|
|
724
|
+
nil),
|
|
725
|
+
render_empty: false
|
|
726
|
+
)
|
|
727
|
+
validate!(
|
|
728
|
+
::Lutaml::Model::Constants::RAW_MAPPING_KEY,
|
|
729
|
+
to,
|
|
730
|
+
with,
|
|
731
|
+
render_nil,
|
|
732
|
+
render_empty,
|
|
733
|
+
type: TYPES[:all_content],
|
|
734
|
+
)
|
|
735
|
+
|
|
736
|
+
# Warn if prefix parameter is provided
|
|
737
|
+
if prefix_provided != false
|
|
738
|
+
warn "[DEPRECATED] The prefix parameter on map_all is deprecated. " \
|
|
739
|
+
"Define prefix_default in your XmlNamespace class instead. " \
|
|
740
|
+
"Prefix '#{prefix}' will be ignored."
|
|
741
|
+
end
|
|
742
|
+
|
|
743
|
+
# Raise error if namespace parameter is provided
|
|
744
|
+
if namespace_set != false
|
|
745
|
+
raise Lutaml::Model::IncorrectMappingArgumentsError,
|
|
746
|
+
"namespace is not allowed at map_all level. " \
|
|
747
|
+
"Namespaces must be declared on the MODEL CLASS itself using 'namespace' at the xml block level."
|
|
748
|
+
end
|
|
749
|
+
|
|
750
|
+
rule = MappingRule.new(
|
|
751
|
+
::Lutaml::Model::Constants::RAW_MAPPING_KEY,
|
|
752
|
+
to: to,
|
|
753
|
+
render_nil: render_nil,
|
|
754
|
+
render_default: render_default,
|
|
755
|
+
with: with,
|
|
756
|
+
delegate: delegate,
|
|
757
|
+
namespace: namespace,
|
|
758
|
+
default_namespace: namespace_uri,
|
|
759
|
+
namespace_set: namespace_set != false,
|
|
760
|
+
)
|
|
761
|
+
|
|
762
|
+
@raw_mapping = rule
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
alias map_all_content map_all
|
|
766
|
+
|
|
767
|
+
# Map XML processing instructions with a given target to a model attribute.
|
|
768
|
+
#
|
|
769
|
+
# During serialization, the attribute value (Hash) is expanded into
|
|
770
|
+
# individual PIs: each key-value pair generates `<?target key="value"?>`.
|
|
771
|
+
# During deserialization, PIs with matching target are parsed into the hash.
|
|
772
|
+
#
|
|
773
|
+
# @param target [String] the PI target name (e.g., "rfc")
|
|
774
|
+
# @param to [Symbol] the model attribute name
|
|
775
|
+
#
|
|
776
|
+
# @example
|
|
777
|
+
# xml do
|
|
778
|
+
# root "rfc"
|
|
779
|
+
# map_processing_instruction "rfc", to: :pi_settings
|
|
780
|
+
# end
|
|
781
|
+
#
|
|
782
|
+
# # With pi_settings = { "strict" => "yes", "compact" => "yes" }
|
|
783
|
+
# # generates:
|
|
784
|
+
# # <?rfc strict="yes"?>
|
|
785
|
+
# # <?rfc compact="yes"?>
|
|
786
|
+
# # <rfc>...</rfc>
|
|
787
|
+
def map_processing_instruction(target, to:)
|
|
788
|
+
@processing_instruction_mappings << ProcessingInstructionMapping.new(
|
|
789
|
+
target.to_s, to
|
|
790
|
+
)
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
def sequence(&block)
|
|
794
|
+
@element_sequence << ::Lutaml::Model::Sequence.new(self,
|
|
795
|
+
format: :xml).tap do |s|
|
|
796
|
+
s.instance_eval(&block)
|
|
797
|
+
end
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
# Declare consolidation rules for this mapping.
|
|
801
|
+
#
|
|
802
|
+
# Creates a ConsolidationMap that describes how sibling elements
|
|
803
|
+
# are grouped into structured model instances.
|
|
804
|
+
#
|
|
805
|
+
# @param by [Symbol] grouping criterion (:attr_name or :pattern)
|
|
806
|
+
# @param to [Symbol] target attribute name on the Collection
|
|
807
|
+
# @param group_class [Class] the GroupClass to instantiate (optional, resolved from Organization)
|
|
808
|
+
# @yield Builder block with gather/dispatch_by or map_element/map_content
|
|
809
|
+
# @return [ConsolidationMap]
|
|
810
|
+
def consolidate_map(by:, to:, group_class: nil, &)
|
|
811
|
+
builder = ::Lutaml::Model::ConsolidationMap::Builder.new(by, to,
|
|
812
|
+
group_class)
|
|
813
|
+
builder.instance_eval(&)
|
|
814
|
+
@consolidation_maps << builder.build
|
|
815
|
+
end
|
|
816
|
+
|
|
817
|
+
# Import mappings from another model.
|
|
818
|
+
# For default register: imports BOTH attributes (into @mapper_class) AND mappings.
|
|
819
|
+
# For non-default register: stores mappings in register-specific storage
|
|
820
|
+
# (@register_elements, @register_attributes).
|
|
821
|
+
#
|
|
822
|
+
# @param model [Class] The model to import from
|
|
823
|
+
# @param register_id [Symbol, nil] The register context
|
|
824
|
+
def import_model_mappings(model, register_id = nil)
|
|
825
|
+
register_id ||= Lutaml::Model::Config.default_register
|
|
826
|
+
reg_id = register_id
|
|
827
|
+
return import_mappings_later(model, reg_id) if model_importable?(model)
|
|
828
|
+
raise Lutaml::Model::ImportModelWithRootError.new(model) if model.root?(reg_id)
|
|
829
|
+
|
|
830
|
+
if register_id != :default
|
|
831
|
+
register_only_import_model_mappings(model, register_id)
|
|
832
|
+
return
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
# CRITICAL: Access raw mapping structure directly without triggering import resolution
|
|
836
|
+
# Calling model.mappings_for() can trigger ensure_imports! on that model
|
|
837
|
+
# which creates circular chains: A imports B, B's mappings_for imports C, C imports A
|
|
838
|
+
# Architecture: Access data structure directly, don't call methods that trigger resolutions
|
|
839
|
+
mappings = model.instance_variable_get(:@mappings)&.dig(:xml)
|
|
840
|
+
return unless mappings # Skip if no XML mappings defined
|
|
841
|
+
|
|
842
|
+
# ATOMIC IMPORT: Both object model (attributes) AND serialization mappings
|
|
843
|
+
# This mimics XSD complexType composition where importing a type means
|
|
844
|
+
# getting both its structure (attributes) and serialization rules (mappings)
|
|
845
|
+
|
|
846
|
+
# 1. Import object model (attributes with accessors)
|
|
847
|
+
# This defines the data structure of the model
|
|
848
|
+
# CRITICAL: Access attributes directly to avoid triggering ensure_imports!
|
|
849
|
+
imported_attributes = ::Lutaml::Model::Utils.deep_dup(model.instance_variable_get(:@attributes)&.values || [])
|
|
850
|
+
if @mapper_class
|
|
851
|
+
imported_attributes.each do |attr|
|
|
852
|
+
# CRITICAL: Check LOCAL set to avoid calling @mapper_class.attributes()
|
|
853
|
+
# which can trigger ensure_imports! and create circular calls
|
|
854
|
+
unless @attributes_with_methods_defined.include?(attr.name)
|
|
855
|
+
# Define accessor methods on the model class
|
|
856
|
+
@mapper_class.define_attribute_methods(attr, reg_id)
|
|
857
|
+
@attributes_with_methods_defined.add(attr.name)
|
|
858
|
+
end
|
|
859
|
+
end
|
|
860
|
+
# Merge attributes data - use direct access to avoid triggering imports
|
|
861
|
+
attrs_hash = imported_attributes.to_h { |attr| [attr.name, attr] }
|
|
862
|
+
existing_attrs = @mapper_class.instance_variable_get(:@attributes) || {}
|
|
863
|
+
attrs_hash.each do |name, attr|
|
|
864
|
+
if existing_attrs.key?(name)
|
|
865
|
+
existing_attrs[name].options.merge!(attr.options)
|
|
866
|
+
else
|
|
867
|
+
existing_attrs[name] = attr
|
|
868
|
+
end
|
|
869
|
+
end
|
|
870
|
+
@mapper_class.instance_variable_set(:@attributes, existing_attrs)
|
|
871
|
+
end
|
|
872
|
+
|
|
873
|
+
# 2. Import serialization mappings (XML element/attribute names → model attributes)
|
|
874
|
+
# This defines how the data structure maps to/from XML
|
|
875
|
+
# CRITICAL: Deep-copy mapping rules to prevent shared state
|
|
876
|
+
# When multiple classes import the same model, each must have independent MappingRule instances
|
|
877
|
+
# Otherwise, any state mutation during serialization affects ALL importing classes
|
|
878
|
+
@elements.merge!(dup_mappings(mappings.instance_variable_get(:@elements)))
|
|
879
|
+
@attributes.merge!(dup_mappings(mappings.instance_variable_get(:@attributes)))
|
|
880
|
+
# CRITICAL: Deep-copy sequences to prevent shared state
|
|
881
|
+
# Each importing class must have its own Sequence objects
|
|
882
|
+
imported_sequences = mappings.element_sequence.map do |seq|
|
|
883
|
+
seq.deep_dup(self)
|
|
884
|
+
end
|
|
885
|
+
(@element_sequence << imported_sequences).flatten!
|
|
886
|
+
end
|
|
887
|
+
|
|
888
|
+
# Register-specific import: stores mappings in register-specific storage
|
|
889
|
+
# (@register_elements, @register_attributes) without modifying class-level mappings.
|
|
890
|
+
#
|
|
891
|
+
# @param model [Class] The model to import mappings from
|
|
892
|
+
# @param register_id [Symbol] The register context (must be non-default)
|
|
893
|
+
def register_only_import_model_mappings(model, register_id)
|
|
894
|
+
mappings = model.instance_variable_get(:@mappings)&.dig(:xml)
|
|
895
|
+
return unless mappings
|
|
896
|
+
|
|
897
|
+
@register_attributes[register_id].merge!(mappings.mapping_attributes_hash(register_id))
|
|
898
|
+
@register_elements[register_id].merge!(mappings.mapping_elements_hash(register_id))
|
|
899
|
+
mappings.element_sequence.each do |sequence|
|
|
900
|
+
@register_element_sequences[register_id] << sequence_dup(sequence)
|
|
901
|
+
end
|
|
902
|
+
end
|
|
903
|
+
private :register_only_import_model_mappings
|
|
904
|
+
|
|
905
|
+
def set_mappings_imported(value)
|
|
906
|
+
if @mappings_imported.is_a?(Hash)
|
|
907
|
+
@mappings_imported.each_key { |k| @mappings_imported[k] = value }
|
|
908
|
+
else
|
|
909
|
+
@mappings_imported = value
|
|
910
|
+
end
|
|
911
|
+
end
|
|
912
|
+
|
|
913
|
+
def validate!(key, to, with, render_nil, render_empty, type: nil)
|
|
914
|
+
validate_raw_mappings!(type)
|
|
915
|
+
validate_to_and_with_arguments!(key, to, with)
|
|
916
|
+
|
|
917
|
+
if render_nil == :as_empty || render_empty == :as_empty
|
|
918
|
+
raise ::Lutaml::Model::IncorrectMappingArgumentsError.new(
|
|
919
|
+
":as_empty is not supported for XML mappings. " \
|
|
920
|
+
"Use :as_blank instead to create blank XML elements.",
|
|
921
|
+
)
|
|
922
|
+
end
|
|
923
|
+
end
|
|
924
|
+
|
|
925
|
+
def validate_to_and_with_arguments!(key, to, with)
|
|
926
|
+
if to.nil? && with.empty?
|
|
927
|
+
raise ::Lutaml::Model::IncorrectMappingArgumentsError.new(
|
|
928
|
+
":to or :with argument is required for mapping '#{key}'",
|
|
929
|
+
)
|
|
930
|
+
end
|
|
931
|
+
|
|
932
|
+
validate_with_options!(key, to, with)
|
|
933
|
+
end
|
|
934
|
+
|
|
935
|
+
def validate_with_options!(key, to, with)
|
|
936
|
+
return true if to
|
|
937
|
+
|
|
938
|
+
if !with.empty? && (with[:from].nil? || with[:to].nil?)
|
|
939
|
+
raise ::Lutaml::Model::IncorrectMappingArgumentsError.new(
|
|
940
|
+
":with argument for mapping '#{key}' requires :to and :from keys",
|
|
941
|
+
)
|
|
942
|
+
end
|
|
943
|
+
end
|
|
944
|
+
|
|
945
|
+
def validate_raw_mappings!(type)
|
|
946
|
+
if !@raw_mapping.nil? && type != TYPES[:attribute]
|
|
947
|
+
raise StandardError, "#{type} is not allowed, only #{TYPES[:attribute]} " \
|
|
948
|
+
"is allowed with #{TYPES[:all_content]}"
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
if !(elements.empty? && content_mapping.nil?) && type == TYPES[:all_content]
|
|
952
|
+
raise StandardError,
|
|
953
|
+
"#{TYPES[:all_content]} is not allowed with other mappings"
|
|
954
|
+
end
|
|
955
|
+
end
|
|
956
|
+
|
|
957
|
+
# Validate namespace prefix parameter
|
|
958
|
+
#
|
|
959
|
+
# Raises ArgumentError if prefix is Hash or Array, which indicates
|
|
960
|
+
# the common mistake of passing options as prefix.
|
|
961
|
+
#
|
|
962
|
+
# @param prefix [Object] the prefix parameter to validate
|
|
963
|
+
# @raise [ArgumentError] if prefix is Hash or Array
|
|
964
|
+
# @return [void]
|
|
965
|
+
def validate_namespace_prefix!(prefix)
|
|
966
|
+
if prefix.is_a?(Hash) || prefix.is_a?(Array)
|
|
967
|
+
raise ArgumentError,
|
|
968
|
+
"namespace prefix must be a String or Symbol, not #{prefix.class}. " \
|
|
969
|
+
"Did you mean to use 'root' with mixed: true?"
|
|
970
|
+
end
|
|
971
|
+
end
|
|
972
|
+
|
|
973
|
+
# Validate namespace_scope parameter
|
|
974
|
+
#
|
|
975
|
+
# Ensures all items are XmlNamespace classes or valid Hash entries
|
|
976
|
+
#
|
|
977
|
+
# @param namespaces [Array] the namespaces to validate
|
|
978
|
+
# @raise [ArgumentError] if invalid namespace classes provided
|
|
979
|
+
# @return [void]
|
|
980
|
+
def validate_namespace_scope!(namespaces)
|
|
981
|
+
unless namespaces.is_a?(Array)
|
|
982
|
+
raise ArgumentError,
|
|
983
|
+
"namespace_scope must be an Array of XmlNamespace classes, " \
|
|
984
|
+
"got #{namespaces.class}"
|
|
985
|
+
end
|
|
986
|
+
|
|
987
|
+
namespaces.each do |ns|
|
|
988
|
+
if ns.is_a?(Class)
|
|
989
|
+
unless ns < Lutaml::Xml::Namespace
|
|
990
|
+
raise ArgumentError,
|
|
991
|
+
"namespace_scope must contain only XmlNamespace classes, " \
|
|
992
|
+
"got #{ns}"
|
|
993
|
+
end
|
|
994
|
+
elsif ns.is_a?(::Hash)
|
|
995
|
+
ns_class = ns[:namespace]
|
|
996
|
+
unless ns_class.is_a?(Class) && ns_class < Lutaml::Xml::Namespace
|
|
997
|
+
raise ArgumentError,
|
|
998
|
+
"namespace_scope Hash entry must have :namespace key " \
|
|
999
|
+
"with XmlNamespace class, got #{ns_class.class}"
|
|
1000
|
+
end
|
|
1001
|
+
|
|
1002
|
+
# Validate :declare option if present
|
|
1003
|
+
if ns.key?(:declare)
|
|
1004
|
+
declare_value = ns[:declare]
|
|
1005
|
+
valid_modes = %i[auto always never]
|
|
1006
|
+
unless valid_modes.include?(declare_value)
|
|
1007
|
+
raise ArgumentError,
|
|
1008
|
+
"namespace_scope Hash entry :declare must be one of " \
|
|
1009
|
+
"#{valid_modes.inspect}, got #{declare_value.inspect}"
|
|
1010
|
+
end
|
|
1011
|
+
end
|
|
1012
|
+
else
|
|
1013
|
+
raise ArgumentError,
|
|
1014
|
+
"namespace_scope must contain only XmlNamespace classes or Hashes, " \
|
|
1015
|
+
"got #{ns.class}"
|
|
1016
|
+
end
|
|
1017
|
+
end
|
|
1018
|
+
end
|
|
1019
|
+
|
|
1020
|
+
def elements(register_id = nil)
|
|
1021
|
+
reg_key = register_id || :default
|
|
1022
|
+
cached = @cached_elements[reg_key]
|
|
1023
|
+
return cached if cached
|
|
1024
|
+
|
|
1025
|
+
result = mapping_elements_hash(register_id).values.flat_map do |v|
|
|
1026
|
+
v.is_a?(Array) ? v : [v]
|
|
1027
|
+
end
|
|
1028
|
+
@cached_elements[reg_key] = result.freeze if @finalized
|
|
1029
|
+
result
|
|
1030
|
+
end
|
|
1031
|
+
|
|
1032
|
+
def attributes(register_id = nil)
|
|
1033
|
+
reg_key = register_id || :default
|
|
1034
|
+
cached = @cached_attributes[reg_key]
|
|
1035
|
+
return cached if cached
|
|
1036
|
+
|
|
1037
|
+
result = mapping_attributes_hash(register_id).values.flat_map do |v|
|
|
1038
|
+
v.is_a?(Array) ? v : [v]
|
|
1039
|
+
end
|
|
1040
|
+
@cached_attributes[reg_key] = result.freeze if @finalized
|
|
1041
|
+
result
|
|
1042
|
+
end
|
|
1043
|
+
|
|
1044
|
+
def content_mapping
|
|
1045
|
+
@content_mapping
|
|
1046
|
+
end
|
|
1047
|
+
|
|
1048
|
+
def raw_mapping
|
|
1049
|
+
@raw_mapping
|
|
1050
|
+
end
|
|
1051
|
+
|
|
1052
|
+
def mappings(register_id = nil)
|
|
1053
|
+
reg_key = register_id || :default
|
|
1054
|
+
cached = @cached_mappings[reg_key]
|
|
1055
|
+
return cached if cached
|
|
1056
|
+
|
|
1057
|
+
result = elements(register_id) + attributes(register_id) + [content_mapping,
|
|
1058
|
+
raw_mapping].compact
|
|
1059
|
+
@cached_mappings[reg_key] = result.freeze if @finalized
|
|
1060
|
+
result
|
|
1061
|
+
end
|
|
1062
|
+
|
|
1063
|
+
def importable_mappings
|
|
1064
|
+
@importable_mappings ||= []
|
|
1065
|
+
end
|
|
1066
|
+
|
|
1067
|
+
def ensure_mappings_imported!(register_id = nil)
|
|
1068
|
+
# CRITICAL: Return immediately if already imported to prevent redundant processing
|
|
1069
|
+
# This prevents the exponential explosion of recursive ensure_imports! calls
|
|
1070
|
+
# in complex schemas with hundreds of interdependent classes
|
|
1071
|
+
register_id ||= Lutaml::Model::Config.default_register
|
|
1072
|
+
|
|
1073
|
+
# Use per-register tracking
|
|
1074
|
+
imported_flag = register_id || :default
|
|
1075
|
+
return if @mappings_imported[imported_flag]
|
|
1076
|
+
|
|
1077
|
+
# CRITICAL: Prevent re-entrant calls during import processing
|
|
1078
|
+
# This prevents infinite loops when importing models that themselves have imports
|
|
1079
|
+
# Architecture: Import resolution should be atomic and non-recursive
|
|
1080
|
+
return if @importing_mappings
|
|
1081
|
+
|
|
1082
|
+
# Check if there's any work to do - either regular imports OR sequence imports
|
|
1083
|
+
return if importable_mappings.empty? && sequence_importable_mappings.empty?
|
|
1084
|
+
|
|
1085
|
+
# Mark as currently importing to prevent re-entrance
|
|
1086
|
+
@importing_mappings = true
|
|
1087
|
+
|
|
1088
|
+
# Track if all imports were successfully resolved
|
|
1089
|
+
all_resolved = true
|
|
1090
|
+
|
|
1091
|
+
# Process each deferred mapping import
|
|
1092
|
+
importable_mappings.dup.each do |model_sym|
|
|
1093
|
+
begin
|
|
1094
|
+
model_class = Lutaml::Model::GlobalContext.resolve_type(model_sym,
|
|
1095
|
+
register_id)
|
|
1096
|
+
rescue Lutaml::Model::UnknownTypeError
|
|
1097
|
+
# Model not registered yet - skip for now, will retry later
|
|
1098
|
+
all_resolved = false
|
|
1099
|
+
next
|
|
1100
|
+
end
|
|
1101
|
+
|
|
1102
|
+
next if model_class.nil? # Skip if not registered yet
|
|
1103
|
+
|
|
1104
|
+
# Recursively ensure the imported model's imports are resolved
|
|
1105
|
+
# Use the child class's own register if it has one
|
|
1106
|
+
if model_class.is_a?(Class) && model_class.include?(Lutaml::Model::Serialize)
|
|
1107
|
+
child_register = Lutaml::Model::Register.resolve_for_child(
|
|
1108
|
+
model_class, register_id
|
|
1109
|
+
)
|
|
1110
|
+
model_class.ensure_imports!(child_register)
|
|
1111
|
+
end
|
|
1112
|
+
|
|
1113
|
+
# Now import the mappings
|
|
1114
|
+
import_model_mappings(model_class, register_id)
|
|
1115
|
+
end
|
|
1116
|
+
|
|
1117
|
+
# CRITICAL FIX: Process sequence importable mappings
|
|
1118
|
+
# Sequence blocks can have their own deferred imports via import_model_mappings
|
|
1119
|
+
# These need to be resolved separately because they add attributes to sequences
|
|
1120
|
+
unless sequence_importable_mappings.empty?
|
|
1121
|
+
sequence_importable_mappings.each do |sequence, model_syms|
|
|
1122
|
+
model_syms.dup.each do |model_sym|
|
|
1123
|
+
begin
|
|
1124
|
+
model_class = Lutaml::Model::GlobalContext.resolve_type(
|
|
1125
|
+
model_sym, register_id
|
|
1126
|
+
)
|
|
1127
|
+
rescue Lutaml::Model::UnknownTypeError
|
|
1128
|
+
# Model not registered yet - skip for now
|
|
1129
|
+
all_resolved = false
|
|
1130
|
+
next
|
|
1131
|
+
end
|
|
1132
|
+
|
|
1133
|
+
next if model_class.nil?
|
|
1134
|
+
|
|
1135
|
+
# Recursively ensure the imported model's imports are resolved
|
|
1136
|
+
# Use the child class's own register if it has one
|
|
1137
|
+
if model_class.is_a?(Class) && model_class.include?(Lutaml::Model::Serialize)
|
|
1138
|
+
child_register = Lutaml::Model::Register.resolve_for_child(
|
|
1139
|
+
model_class, register_id
|
|
1140
|
+
)
|
|
1141
|
+
model_class.ensure_imports!(child_register)
|
|
1142
|
+
end
|
|
1143
|
+
|
|
1144
|
+
# Now import into the sequence
|
|
1145
|
+
# This will call Sequence#import_model_mappings which adds to sequence.attributes
|
|
1146
|
+
# and also calls @model.import_model_mappings to add to main mapping
|
|
1147
|
+
sequence.import_model_mappings(model_class, register_id)
|
|
1148
|
+
|
|
1149
|
+
# Remove from queue after successful import
|
|
1150
|
+
model_syms.delete(model_sym)
|
|
1151
|
+
end
|
|
1152
|
+
end
|
|
1153
|
+
|
|
1154
|
+
# Clean up empty sequence entries
|
|
1155
|
+
sequence_importable_mappings.reject! { |_, models| models.empty? }
|
|
1156
|
+
end
|
|
1157
|
+
|
|
1158
|
+
# Mark as fully imported only if both queues are empty
|
|
1159
|
+
@mappings_imported[imported_flag] =
|
|
1160
|
+
all_resolved && importable_mappings.empty? && sequence_importable_mappings.empty?
|
|
1161
|
+
ensure
|
|
1162
|
+
# CRITICAL: Always reset the importing flag to prevent deadlock
|
|
1163
|
+
# Even if an exception occurs, we must allow future import attempts
|
|
1164
|
+
@importing_mappings = false
|
|
1165
|
+
end
|
|
1166
|
+
|
|
1167
|
+
def sequence_importable_mappings
|
|
1168
|
+
@sequence_importable_mappings ||= ::Hash.new { |h, k| h[k] = [] }
|
|
1169
|
+
end
|
|
1170
|
+
|
|
1171
|
+
# Find element mapping rule by attribute name
|
|
1172
|
+
#
|
|
1173
|
+
# @param name [Symbol, String] the attribute name
|
|
1174
|
+
# @return [MappingRule, nil] the matching element rule
|
|
1175
|
+
def find_element(name, register_id = nil)
|
|
1176
|
+
elements(register_id).detect { |rule| name == rule.to }
|
|
1177
|
+
end
|
|
1178
|
+
|
|
1179
|
+
# Find attribute mapping rule by attribute name
|
|
1180
|
+
#
|
|
1181
|
+
# @param name [Symbol, String] the attribute name
|
|
1182
|
+
# @return [MappingRule, nil] the matching attribute rule
|
|
1183
|
+
def find_attribute(name)
|
|
1184
|
+
attributes.detect { |rule| name == rule.to }
|
|
1185
|
+
end
|
|
1186
|
+
|
|
1187
|
+
def find_by_name(name, type: "Text", node_type: nil, namespace_uri: nil)
|
|
1188
|
+
# If node_type is provided, use it for type detection (preferred)
|
|
1189
|
+
if node_type && %i[text cdata].include?(node_type)
|
|
1190
|
+
content_mapping
|
|
1191
|
+
# Backward compatibility: still check name for old code that doesn't pass node_type
|
|
1192
|
+
elsif ["text", "#cdata-section"].include?(name.to_s) && type == "Text"
|
|
1193
|
+
content_mapping
|
|
1194
|
+
else
|
|
1195
|
+
candidates = mappings.select do |rule|
|
|
1196
|
+
rule.name == name.to_s || rule.name == name.to_sym
|
|
1197
|
+
end
|
|
1198
|
+
return candidates.first if namespace_uri.nil? || candidates.one?
|
|
1199
|
+
|
|
1200
|
+
candidates.find do |r|
|
|
1201
|
+
r.namespace_class&.uri == namespace_uri
|
|
1202
|
+
end || candidates.first
|
|
1203
|
+
end
|
|
1204
|
+
end
|
|
1205
|
+
|
|
1206
|
+
def find_by_to(to)
|
|
1207
|
+
mappings.detect { |rule| rule.to.to_s == to.to_s }
|
|
1208
|
+
end
|
|
1209
|
+
|
|
1210
|
+
def find_by_to!(to)
|
|
1211
|
+
mapping = find_by_to(to)
|
|
1212
|
+
|
|
1213
|
+
return mapping if !!mapping
|
|
1214
|
+
|
|
1215
|
+
raise Lutaml::Model::NoMappingFoundError.new(to.to_s)
|
|
1216
|
+
end
|
|
1217
|
+
|
|
1218
|
+
def mapping_attributes_hash(register_id = nil)
|
|
1219
|
+
if register_id.nil? || register_id == :default
|
|
1220
|
+
@attributes
|
|
1221
|
+
else
|
|
1222
|
+
@attributes.merge(@register_attributes[register_id])
|
|
1223
|
+
end
|
|
1224
|
+
end
|
|
1225
|
+
|
|
1226
|
+
def mapping_elements_hash(register_id = nil)
|
|
1227
|
+
if register_id.nil? || register_id == :default
|
|
1228
|
+
@elements
|
|
1229
|
+
else
|
|
1230
|
+
@elements.merge(@register_elements[register_id])
|
|
1231
|
+
end
|
|
1232
|
+
end
|
|
1233
|
+
|
|
1234
|
+
# Raw hash access for inheritance and deep_dup operations.
|
|
1235
|
+
# Callers may mutate the returned hash (e.g., setting keys).
|
|
1236
|
+
def elements_hash
|
|
1237
|
+
@elements
|
|
1238
|
+
end
|
|
1239
|
+
|
|
1240
|
+
def attributes_hash
|
|
1241
|
+
@attributes
|
|
1242
|
+
end
|
|
1243
|
+
|
|
1244
|
+
# Whether namespace_class was explicitly set (not nil)
|
|
1245
|
+
def namespace_class?
|
|
1246
|
+
!@namespace_class.nil?
|
|
1247
|
+
end
|
|
1248
|
+
|
|
1249
|
+
# Whether namespace was explicitly set via DSL
|
|
1250
|
+
def namespace_set?
|
|
1251
|
+
!!@namespace_set
|
|
1252
|
+
end
|
|
1253
|
+
|
|
1254
|
+
attr_accessor :namespace_scope_config
|
|
1255
|
+
|
|
1256
|
+
def sequence_dup(sequence)
|
|
1257
|
+
Lutaml::Model::Sequence.new(self, format: :xml).tap do |instance|
|
|
1258
|
+
sequence.attributes.each do |attr|
|
|
1259
|
+
instance.attributes << attr.deep_dup
|
|
1260
|
+
end
|
|
1261
|
+
end
|
|
1262
|
+
end
|
|
1263
|
+
|
|
1264
|
+
def merge_elements_sequence(mapping)
|
|
1265
|
+
mapping.element_sequence.each do |sequence|
|
|
1266
|
+
element_sequence << sequence_dup(sequence)
|
|
1267
|
+
end
|
|
1268
|
+
end
|
|
1269
|
+
|
|
1270
|
+
def deep_dup
|
|
1271
|
+
self.class.new.tap do |xml_mapping|
|
|
1272
|
+
if @root_element
|
|
1273
|
+
xml_mapping.root(@root_element.dup, mixed: @mixed_content,
|
|
1274
|
+
ordered: @ordered)
|
|
1275
|
+
end
|
|
1276
|
+
if @namespace_class
|
|
1277
|
+
xml_mapping.namespace(@namespace_class)
|
|
1278
|
+
elsif @namespace_param == :inherit
|
|
1279
|
+
xml_mapping.namespace(:inherit)
|
|
1280
|
+
elsif @namespace_param == :blank
|
|
1281
|
+
xml_mapping.namespace(:blank)
|
|
1282
|
+
end
|
|
1283
|
+
|
|
1284
|
+
attributes_to_dup.each do |var_name|
|
|
1285
|
+
value = instance_variable_get(var_name)
|
|
1286
|
+
# Skip nil values (e.g., @register_elements not yet initialized on fresh copies)
|
|
1287
|
+
# Accessor methods will lazily initialize when needed
|
|
1288
|
+
next if value.nil?
|
|
1289
|
+
|
|
1290
|
+
xml_mapping.instance_variable_set(var_name, ::Lutaml::Model::Utils.deep_dup(value))
|
|
1291
|
+
end
|
|
1292
|
+
xml_mapping.instance_variable_set(:@mappings_imported,
|
|
1293
|
+
::Hash.new { |h, k| h[k] = false })
|
|
1294
|
+
xml_mapping.instance_variable_set(:@register_elements,
|
|
1295
|
+
::Hash.new { |h, k| h[k] = {} })
|
|
1296
|
+
xml_mapping.instance_variable_set(:@register_attributes,
|
|
1297
|
+
::Hash.new { |h, k| h[k] = {} })
|
|
1298
|
+
xml_mapping.instance_variable_set(:@register_element_sequences,
|
|
1299
|
+
::Hash.new { |h, k| h[k] = [] })
|
|
1300
|
+
xml_mapping.instance_variable_set(:@cached_elements, {})
|
|
1301
|
+
xml_mapping.instance_variable_set(:@cached_attributes, {})
|
|
1302
|
+
xml_mapping.instance_variable_set(:@cached_mappings, {})
|
|
1303
|
+
xml_mapping.instance_variable_set(:@finalized, true)
|
|
1304
|
+
# CRITICAL: Do NOT copy @mapper_class to the duplicate
|
|
1305
|
+
# The duplicate may be used in a different class context
|
|
1306
|
+
# and should not carry over the original's mapper_class reference
|
|
1307
|
+
xml_mapping.instance_variable_set(:@mapper_class, nil)
|
|
1308
|
+
end
|
|
1309
|
+
end
|
|
1310
|
+
|
|
1311
|
+
def polymorphic_mapping
|
|
1312
|
+
mappings.find(&:polymorphic_mapping?)
|
|
1313
|
+
end
|
|
1314
|
+
|
|
1315
|
+
def attributes_to_dup
|
|
1316
|
+
@attributes_to_dup ||= %i[
|
|
1317
|
+
@content_mapping
|
|
1318
|
+
@raw_mapping
|
|
1319
|
+
@element_sequence
|
|
1320
|
+
@attributes
|
|
1321
|
+
@elements
|
|
1322
|
+
@processing_instruction_mappings
|
|
1323
|
+
@register_elements
|
|
1324
|
+
@register_attributes
|
|
1325
|
+
@register_element_sequences
|
|
1326
|
+
@mappings_imported
|
|
1327
|
+
@sequence_importable_mappings
|
|
1328
|
+
@consolidation_maps
|
|
1329
|
+
]
|
|
1330
|
+
end
|
|
1331
|
+
|
|
1332
|
+
def dup_mappings(mappings)
|
|
1333
|
+
new_mappings = {}
|
|
1334
|
+
|
|
1335
|
+
mappings.each do |key, mapping_rule|
|
|
1336
|
+
new_mappings[key] = mapping_rule.deep_dup
|
|
1337
|
+
end
|
|
1338
|
+
|
|
1339
|
+
new_mappings
|
|
1340
|
+
end
|
|
1341
|
+
|
|
1342
|
+
# Add a complex listener for an XML element with a custom handler block.
|
|
1343
|
+
#
|
|
1344
|
+
# Unlike map_element which creates a simple listener (framework handles
|
|
1345
|
+
# deserialization), on_element allows custom deserialization logic.
|
|
1346
|
+
#
|
|
1347
|
+
# Multiple listeners for the same element are allowed — all matching
|
|
1348
|
+
# listeners are invoked during parsing.
|
|
1349
|
+
#
|
|
1350
|
+
# @param name [String] XML element name
|
|
1351
|
+
# @param id [Symbol, String, nil] Unique identifier for override/omit.
|
|
1352
|
+
# If omitted, listener cannot be targeted by omit_listener.
|
|
1353
|
+
# @param block [Proc] Custom handler receiving (element, context)
|
|
1354
|
+
# @return [void]
|
|
1355
|
+
#
|
|
1356
|
+
# @example Custom deserialization
|
|
1357
|
+
# class MyMapping < Lutaml::Xml::Mapping
|
|
1358
|
+
# on_element "CustomElement", id: :custom_parse do |element, context|
|
|
1359
|
+
# context[:custom] = CustomParser.parse(element)
|
|
1360
|
+
# end
|
|
1361
|
+
# end
|
|
1362
|
+
#
|
|
1363
|
+
# @example Multiple listeners for same element
|
|
1364
|
+
# class MyMapping < Lutaml::Xml::Mapping
|
|
1365
|
+
# on_element "Documentation", id: :parse_docs do |element, context|
|
|
1366
|
+
# context[:documentation] = Documentation.from_xml(element)
|
|
1367
|
+
# end
|
|
1368
|
+
#
|
|
1369
|
+
# on_element "Documentation", id: :log_docs do |element, context|
|
|
1370
|
+
# logger.info("Parsing docs: #{element.text}")
|
|
1371
|
+
# end
|
|
1372
|
+
# end
|
|
1373
|
+
def on_element(name, id: nil, &block)
|
|
1374
|
+
add_listener(Lutaml::Xml::Listener.new(
|
|
1375
|
+
target: name,
|
|
1376
|
+
id: id,
|
|
1377
|
+
handler: block,
|
|
1378
|
+
))
|
|
1379
|
+
end
|
|
1380
|
+
|
|
1381
|
+
# Add a complex listener for an XML attribute with a custom handler block.
|
|
1382
|
+
#
|
|
1383
|
+
# @param name [String] XML attribute name
|
|
1384
|
+
# @param id [Symbol, String, nil] Unique identifier for override/omit.
|
|
1385
|
+
# @param block [Proc] Custom handler receiving (element, context)
|
|
1386
|
+
# @return [void]
|
|
1387
|
+
#
|
|
1388
|
+
# @example
|
|
1389
|
+
# class MyMapping < Lutaml::Xml::Mapping
|
|
1390
|
+
# on_attribute "xmlAttr", id: :parse_attr do |element, context|
|
|
1391
|
+
# context[:custom] = element["xmlAttr"]
|
|
1392
|
+
# end
|
|
1393
|
+
# end
|
|
1394
|
+
def on_attribute(name, id: nil, &block)
|
|
1395
|
+
add_listener(Lutaml::Xml::Listener.new(
|
|
1396
|
+
target: name,
|
|
1397
|
+
id: id,
|
|
1398
|
+
handler: block,
|
|
1399
|
+
))
|
|
1400
|
+
end
|
|
1401
|
+
|
|
1402
|
+
# Remove ALL listeners for a given XML element name.
|
|
1403
|
+
#
|
|
1404
|
+
# @param name [String] XML element name
|
|
1405
|
+
# @return [void]
|
|
1406
|
+
#
|
|
1407
|
+
# @example Remove all listeners for "UnusedElement"
|
|
1408
|
+
# class MyMapping < ParentMapping
|
|
1409
|
+
# omit_element "UnusedElement"
|
|
1410
|
+
# end
|
|
1411
|
+
|
|
1412
|
+
# Remove a specific listener by XML element name and ID.
|
|
1413
|
+
#
|
|
1414
|
+
# @param name [String] XML element name
|
|
1415
|
+
# @param id [Symbol, String] The listener ID to remove
|
|
1416
|
+
# @return [void]
|
|
1417
|
+
#
|
|
1418
|
+
# @example Remove parent's :validate_tags listener
|
|
1419
|
+
# class MyMapping < ParentMapping
|
|
1420
|
+
# omit_listener "TaggedValue", id: :validate_tags
|
|
1421
|
+
# end
|
|
1422
|
+
|
|
1423
|
+
private
|
|
1424
|
+
|
|
1425
|
+
# Normalize namespace_scope input to unified format
|
|
1426
|
+
#
|
|
1427
|
+
# Converts various input formats into a normalized array of hashes
|
|
1428
|
+
# with :namespace and :declare keys.
|
|
1429
|
+
#
|
|
1430
|
+
# @param namespaces [Array] array of namespace classes or hashes
|
|
1431
|
+
# @return [Array<Hash>] normalized config array
|
|
1432
|
+
def normalize_namespace_scope(namespaces)
|
|
1433
|
+
namespaces.map do |ns_entry|
|
|
1434
|
+
if ns_entry.is_a?(::Hash) # Use ::Hash explicitly
|
|
1435
|
+
# Hash format already has namespace and optional declare
|
|
1436
|
+
# Don't double-nest!
|
|
1437
|
+
{
|
|
1438
|
+
namespace: ns_entry[:namespace],
|
|
1439
|
+
declare: ns_entry[:declare] || :auto, # Default to :auto
|
|
1440
|
+
}
|
|
1441
|
+
else
|
|
1442
|
+
# Simple namespace class - wrap it
|
|
1443
|
+
{
|
|
1444
|
+
namespace: ns_entry,
|
|
1445
|
+
declare: :auto,
|
|
1446
|
+
}
|
|
1447
|
+
end
|
|
1448
|
+
end
|
|
1449
|
+
end
|
|
1450
|
+
end
|
|
1451
|
+
|
|
1452
|
+
# Represents a processing instruction mapping in the XML DSL.
|
|
1453
|
+
#
|
|
1454
|
+
# Maps a PI target (e.g., "rfc") to a model attribute. The attribute
|
|
1455
|
+
# should be a Hash where keys are PI parameter names and values are
|
|
1456
|
+
# their string values.
|
|
1457
|
+
class ProcessingInstructionMapping
|
|
1458
|
+
attr_reader :target, :to
|
|
1459
|
+
|
|
1460
|
+
def initialize(target, to)
|
|
1461
|
+
@target = target
|
|
1462
|
+
@to = to
|
|
1463
|
+
end
|
|
1464
|
+
|
|
1465
|
+
def dup
|
|
1466
|
+
self.class.new(@target.dup, @to)
|
|
1467
|
+
end
|
|
1468
|
+
end
|
|
1469
|
+
end
|
|
1470
|
+
end
|