Module: Lutaml::Xml::NamespaceDeclarationBuilder
- Defined in:
- lib/lutaml/xml/namespace_declaration_builder.rb
Overview
NamespaceDeclarationBuilder - Build xmlns attributes from DeclarationPlan
REFACTORED (Session 176): Builds xmlns strings from NamespaceDeclaration DATA NO MORE reading pre-built xmlns_declaration strings
REFACTORED (Session 182): Added build_all_xmlns_attributes to include Type namespace declarations
CRITICAL ARCHITECTURAL PRINCIPLE: Adapters build XML strings from data Planning produces data, rendering produces XML
PURPOSE: Converts namespace declarations from a DeclarationPlan into xmlns attributes for XML element construction.
USAGE:
attributes = NamespaceDeclarationBuilder.build_all_xmlns_attributes(plan)
Class Method Summary collapse
-
.build_all_xmlns_attributes(plan) ⇒ Hash
Build ALL xmlns attributes from plan (regular + Type namespaces).
-
.build_xmlns_attributes(plan) ⇒ Hash
Build xmlns attributes from namespace declarations in plan.
Class Method Details
.build_all_xmlns_attributes(plan) ⇒ Hash
Build ALL xmlns attributes from plan (regular + Type namespaces)
CRITICAL (Session 197): Type namespaces are now handled by DeclarationPlanner and stored in the plan like any other namespace. No special handling needed. This enforces the “Dumb Adapter” principle - rendering only reads from plan.
34 35 36 37 |
# File 'lib/lutaml/xml/namespace_declaration_builder.rb', line 34 def self.build_all_xmlns_attributes(plan) # DUMB ADAPTER: Just build from plan, no decisions build_xmlns_attributes(plan) end |
.build_xmlns_attributes(plan) ⇒ Hash
Build xmlns attributes from namespace declarations in plan
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/lutaml/xml/namespace_declaration_builder.rb', line 43 def self.build_xmlns_attributes(plan) attributes = {} # Read from tree structure plan.root_node.hoisted_declarations.each do |key, uri| # CRITICAL: Never declare xml namespace - it's implicitly bound next if uri == "http://www.w3.org/XML/1998/namespace" # Build xmlns attribute based on key type: # nil = default namespace (xmlns="uri") # String = prefixed namespace (xmlns:prefix="uri") if key.nil? # Default namespace attributes["xmlns"] = uri else # Prefixed namespace attributes["xmlns:#{key}"] = uri end end attributes end |