Class: Lutaml::Xsd::SchemaRepository::NamespaceRegistry
- Inherits:
-
Object
- Object
- Lutaml::Xsd::SchemaRepository::NamespaceRegistry
- Defined in:
- lib/lutaml/xsd/schema_repository/namespace_registry.rb
Overview
Internal helper for managing namespace prefix-to-URI mappings Provides bidirectional lookups and conflict detection
Instance Attribute Summary collapse
-
#default_namespace ⇒ Object
readonly
Returns the value of attribute default_namespace.
Instance Method Summary collapse
-
#all_mappings ⇒ Hash
Get all prefix-to-URI mappings.
-
#all_prefixes ⇒ Array<String>
Get all registered prefixes.
-
#all_uris ⇒ Array<String>
Get all registered URIs.
-
#clear ⇒ Object
Clear all mappings.
-
#extract_from_schemas(schemas) ⇒ Object
Get namespace mappings from parsed schemas.
-
#get_prefixes(uri) ⇒ Array<String>
Get all prefixes for a given namespace URI.
-
#get_primary_prefix(uri) ⇒ String?
Get the primary (first registered) prefix for a URI.
-
#get_uri(prefix) ⇒ String?
Get namespace URI for a given prefix.
-
#initialize ⇒ NamespaceRegistry
constructor
A new instance of NamespaceRegistry.
-
#prefix_registered?(prefix) ⇒ Boolean
Check if a prefix is registered.
-
#register(prefix, uri, default: false) ⇒ Object
Register a namespace prefix-to-URI mapping.
-
#register_all(mappings) ⇒ Object
Register multiple namespace mappings.
-
#set_default_namespace(uri) ⇒ Object
Set the default namespace.
-
#uri_registered?(uri) ⇒ Boolean
Check if a URI is registered.
Constructor Details
#initialize ⇒ NamespaceRegistry
Returns a new instance of NamespaceRegistry.
11 12 13 14 15 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 11 def initialize @prefix_to_uri = {} @uri_to_prefixes = Hash.new { |h, k| h[k] = [] } @default_namespace = nil end |
Instance Attribute Details
#default_namespace ⇒ Object (readonly)
Returns the value of attribute default_namespace.
9 10 11 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 9 def default_namespace @default_namespace end |
Instance Method Details
#all_mappings ⇒ Hash
Get all prefix-to-URI mappings
104 105 106 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 104 def all_mappings @prefix_to_uri.dup end |
#all_prefixes ⇒ Array<String>
Get all registered prefixes
92 93 94 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 92 def all_prefixes @prefix_to_uri.keys end |
#all_uris ⇒ Array<String>
Get all registered URIs
98 99 100 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 98 def all_uris @uri_to_prefixes.keys end |
#clear ⇒ Object
Clear all mappings
115 116 117 118 119 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 115 def clear @prefix_to_uri.clear @uri_to_prefixes.clear @default_namespace = nil end |
#extract_from_schemas(schemas) ⇒ Object
Get namespace mappings from parsed schemas
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 123 def extract_from_schemas(schemas) schemas.each do |schema| next unless schema.target_namespace # Try to find a commonly used prefix for this namespace # or create one from the namespace URI uri = schema.target_namespace next if uri_registered?(uri) # Extract prefix from common patterns or use a generated one prefix = extract_prefix_from_uri(uri) register(prefix, uri) unless prefix_registered?(prefix) end end |
#get_prefixes(uri) ⇒ Array<String>
Get all prefixes for a given namespace URI
65 66 67 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 65 def get_prefixes(uri) @uri_to_prefixes[uri] || [] end |
#get_primary_prefix(uri) ⇒ String?
Get the primary (first registered) prefix for a URI
72 73 74 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 72 def get_primary_prefix(uri) get_prefixes(uri).first end |
#get_uri(prefix) ⇒ String?
Get namespace URI for a given prefix
58 59 60 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 58 def get_uri(prefix) @prefix_to_uri[prefix] end |
#prefix_registered?(prefix) ⇒ Boolean
Check if a prefix is registered
79 80 81 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 79 def prefix_registered?(prefix) @prefix_to_uri.key?(prefix) end |
#register(prefix, uri, default: false) ⇒ Object
Register a namespace prefix-to-URI mapping
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 21 def register(prefix, uri, default: false) return if prefix.nil? || uri.nil? # Check for conflicts if @prefix_to_uri.key?(prefix) && @prefix_to_uri[prefix] != uri warn "Warning: Prefix '#{prefix}' is already mapped to '#{@prefix_to_uri[prefix]}', " \ "overwriting with '#{uri}'" end @prefix_to_uri[prefix] = uri @uri_to_prefixes[uri] << prefix unless @uri_to_prefixes[uri].include?(prefix) @default_namespace = uri if default end |
#register_all(mappings) ⇒ Object
Register multiple namespace mappings
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 38 def register_all(mappings) case mappings when Hash mappings.each { |prefix, uri| register(prefix, uri) } when Array mappings.each do |mapping| if mapping.is_a?(NamespaceMapping) register(mapping.prefix, mapping.uri) elsif mapping.is_a?(Hash) prefix = mapping[:prefix] || mapping["prefix"] uri = mapping[:uri] || mapping["uri"] register(prefix, uri) end end end end |
#set_default_namespace(uri) ⇒ Object
Set the default namespace
110 111 112 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 110 def set_default_namespace(uri) @default_namespace = uri end |
#uri_registered?(uri) ⇒ Boolean
Check if a URI is registered
86 87 88 |
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 86 def uri_registered?(uri) @uri_to_prefixes.key?(uri) end |