module Lutaml::Xml::DeclarationPlanQuery

def self.declared_at_root_default_format?(plan, namespace_class)

Returns:
  • (Boolean) - true if declared at root with default format

Parameters:
  • namespace_class (Class) -- XmlNamespace class
  • plan (DeclarationPlan) -- The declaration plan
def self.declared_at_root_default_format?(plan, namespace_class)
  return false unless namespace_class
  return false if namespace_class == :blank # :blank has no URI
  uri = namespace_class.uri
  ns_info = find_namespace_by_uri(plan, uri)
  ns_info && ns_info[:declared_at] == :here && ns_info[:format] == :default
end

def self.element_needs_xmlns_blank?(plan, element)

Returns:
  • (Boolean) - true if element needs xmlns=""

Parameters:
  • element (XmlDataModel::XmlElement) -- Element to check
  • plan (DeclarationPlan) -- The declaration plan
def self.element_needs_xmlns_blank?(plan, element)
  # Element with namespace doesn't need xmlns=""
  return false if element.namespace_class
  # Check if root declares default namespace (xmlns="...")
  # If root has default namespace (key nil), blank children need xmlns=""
  plan.root_node.hoisted_declarations.key?(nil)
end

def self.find_namespace_by_uri(plan, uri)

Returns:
  • (Hash, nil) - { prefix: String|nil, format: Symbol, declared_at: Symbol, uri: String }

Parameters:
  • uri (String) -- Namespace URI to search for
  • plan (DeclarationPlan) -- The declaration plan
def self.find_namespace_by_uri(plan, uri)
  # Performance: Use O(1) lookup on DeclarationPlan
  plan.find_namespace_by_uri(uri)
end

def self.prefix_for(plan, namespace_class)

Returns:
  • (String, nil) - Prefix string or nil

Parameters:
  • namespace_class (Class) -- XmlNamespace class
  • plan (DeclarationPlan) -- The declaration plan
def self.prefix_for(plan, namespace_class)
  return nil unless namespace_class
  return nil if namespace_class == :blank # :blank has no URI
  uri = namespace_class.uri
  ns_info = find_namespace_by_uri(plan, uri)
  ns_info&.dig(:prefix)
end

def self.prefix_format?(plan, namespace_class)

Returns:
  • (Boolean) - true if namespace uses prefix format

Parameters:
  • namespace_class (Class) -- XmlNamespace class
  • plan (DeclarationPlan) -- The declaration plan
def self.prefix_format?(plan, namespace_class)
  return false unless namespace_class
  return false if namespace_class == :blank # :blank has no URI
  uri = namespace_class.uri
  ns_info = find_namespace_by_uri(plan, uri)
  ns_info && ns_info[:format] == :prefix
end