Module: Lutaml::Xml::ElementPrefixResolver

Defined in:
lib/lutaml/xml/element_prefix_resolver.rb

Overview

ElementPrefixResolver - Determine element prefix from namespace declaration plan

Extracts common logic for resolving element prefixes across all XML adapters. Handles prefix format detection and namespace declaration lookups.

Examples:

Usage in adapter

prefix_info = ElementPrefixResolver.resolve(
  mapping: xml_mapping,
  plan: plan
)
prefix = prefix_info[:prefix]
xml.create_and_add_element(tag_name, prefix: prefix, attributes: attributes)

Class Method Summary collapse

Class Method Details

.resolve(mapping:, plan:) ⇒ Hash

Resolve element prefix from namespace declaration plan

Determines if element should use a prefix based on:

  • Whether namespace class uses prefix format

  • The prefix defined in the namespace declaration

Parameters:

  • mapping (Mapping)

    the XML mapping for the element

  • plan (DeclarationPlan)

    the namespace declaration plan

Returns:

  • (Hash)

    prefix info with keys:

    • :prefix [String, nil] - the prefix to use (nil for default namespace)

    • :ns_info [Hash, nil] - the namespace info from plan



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/lutaml/xml/element_prefix_resolver.rb', line 29

def self.resolve(mapping:, plan:)
  prefix = nil
  ns_info = nil

  if mapping.namespace_class
    uri = mapping.namespace_class.uri
    ns_info = DeclarationPlanQuery.find_namespace_by_uri(plan, uri)

    if ns_info && ns_info[:format] == :prefix
      # Use prefix from namespace info
      prefix = ns_info[:prefix]
    end
  end

  {
    prefix: prefix,
    ns_info: ns_info,
  }
end