XSD::NS (Class)

In: xsd/ns.rb
Parent: Object

Methods

assign   assigned?   assigned_tag?   clone_ns   compare   each_ns   name   new   parse  

Constants

ParseRegexp = Regexp.new('^([^:]+)(?::(.+))?$')
  $1 and $2 are necessary.

Attributes

default_namespace  [R] 

Classes and Modules

Class XSD::NS::Assigner
Class XSD::NS::FormatError

Public Class methods

[Source]

# File xsd/ns.rb, line 33
  def initialize(tag2ns = {})
    @tag2ns = tag2ns
    @assigner = nil
    @ns2tag = {}
    @tag2ns.each do |tag, ns|
      @ns2tag[ns] = tag
    end
    @default_namespace = nil
  end

Public Instance methods

[Source]

# File xsd/ns.rb, line 43
  def assign(ns, tag = nil)
    if (tag == '')
      @default_namespace = ns
      tag
    else
      @assigner ||= Assigner.new
      tag ||= @assigner.assign(ns)
      @ns2tag[ns] = tag
      @tag2ns[tag] = ns
      tag
    end
  end

[Source]

# File xsd/ns.rb, line 56
  def assigned?(ns)
    @ns2tag.key?(ns)
  end

[Source]

# File xsd/ns.rb, line 60
  def assigned_tag?(tag)
    @tag2ns.key?(tag)
  end

[Source]

# File xsd/ns.rb, line 64
  def clone_ns
    cloned = NS.new(@tag2ns.dup)
    cloned.assigner = @assigner
    cloned.assign(@default_namespace, '') if @default_namespace
    cloned
  end

[Source]

# File xsd/ns.rb, line 81
  def compare(ns, name, rhs)
    if (ns == @default_namespace)
      return true if (name == rhs)
    end
    @tag2ns.each do |assigned_tag, assigned_ns|
      if assigned_ns == ns && "#{ assigned_tag }:#{ name }" == rhs
        return true
      end
    end
    false
  end

[Source]

# File xsd/ns.rb, line 116
  def each_ns
    @ns2tag.each do |ns, tag|
      yield(ns, tag)
    end
  end

[Source]

# File xsd/ns.rb, line 71
  def name(name)
    if (name.namespace == @default_namespace)
      name.name
    elsif @ns2tag.key?(name.namespace)
      @ns2tag[name.namespace] + ':' << name.name
    else
      raise FormatError.new('Namespace: ' << name.namespace << ' not defined yet.')
    end
  end

[Source]

# File xsd/ns.rb, line 96
  def parse(elem)
    ns = nil
    name = nil
    ParseRegexp =~ elem
    if $2
      ns = @tag2ns[$1]
      name = $2
      if !ns
        raise FormatError.new('Unknown namespace qualifier: ' << $1)
      end
    elsif $1
      ns = @default_namespace
      name = $1
    end
    if !name
      raise FormatError.new("Illegal element format: #{ elem }")
    end
    XSD::QName.new(ns, name)
  end

[Validate]