Class: Lutaml::Xsd::SchemaRepository::NamespaceRegistry

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initializeNamespaceRegistry

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_namespaceObject (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_mappingsHash

Get all prefix-to-URI mappings

Returns:

  • (Hash)


104
105
106
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 104

def all_mappings
  @prefix_to_uri.dup
end

#all_prefixesArray<String>

Get all registered prefixes

Returns:

  • (Array<String>)


92
93
94
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 92

def all_prefixes
  @prefix_to_uri.keys
end

#all_urisArray<String>

Get all registered URIs

Returns:

  • (Array<String>)


98
99
100
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 98

def all_uris
  @uri_to_prefixes.keys
end

#clearObject

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

Parameters:

  • schemas (Array<Schema>)

    Parsed schema objects



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

Parameters:

  • uri (String)

    The namespace URI

Returns:

  • (Array<String>)

    List of prefixes for this 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

Parameters:

  • uri (String)

    The namespace URI

Returns:

  • (String, nil)

    The primary prefix or nil



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

Parameters:

  • prefix (String)

    The namespace prefix

Returns:

  • (String, nil)

    The namespace URI or nil if not found



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

Parameters:

  • prefix (String)

    The namespace prefix

Returns:

  • (Boolean)


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

Parameters:

  • prefix (String)

    The namespace prefix

  • uri (String)

    The namespace URI

  • default (Boolean) (defaults to: false)

    Whether this is the default namespace



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

Parameters:



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

Parameters:

  • uri (String)

    The default namespace URI



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

Parameters:

  • uri (String)

    The namespace URI

Returns:

  • (Boolean)


86
87
88
# File 'lib/lutaml/xsd/schema_repository/namespace_registry.rb', line 86

def uri_registered?(uri)
  @uri_to_prefixes.key?(uri)
end