class XSD::NS

Constants

KNOWN_TAG
Namespace
ParseRegexp

$1 and $2 are necessary.

Attributes

default_namespace[R]

Public Class Methods

new(tag2ns = nil) click to toggle source
# File lib/xsd/ns.rb, line 47
def initialize(tag2ns = nil)
  @tag2ns = tag2ns || ns_default
  @ns2tag = @tag2ns.invert
  @assigner = nil
  @default_namespace = nil
end

Public Instance Methods

assign(ns, tag = nil) click to toggle source
# File lib/xsd/ns.rb, line 59
def assign(ns, tag = nil)
  if tag == ''
    if ns.empty?
      @default_namespace = nil
    else
      @default_namespace = ns
    end
    tag
  else
    @assigner ||= Assigner.new(default_known_tag)
    tag ||= @assigner.assign(ns)
    @ns2tag[ns] = tag
    @tag2ns[tag] = ns
    tag
  end
end
assigned?(ns) click to toggle source
# File lib/xsd/ns.rb, line 76
def assigned?(ns)
  @default_namespace == ns or @ns2tag.key?(ns)
end
assigned_as_tagged?(ns) click to toggle source
# File lib/xsd/ns.rb, line 80
def assigned_as_tagged?(ns)
  @ns2tag.key?(ns)
end
assigned_tag?(tag) click to toggle source
# File lib/xsd/ns.rb, line 84
def assigned_tag?(tag)
  @tag2ns.key?(tag)
end
clone_ns() click to toggle source
# File lib/xsd/ns.rb, line 88
def clone_ns
  cloned = self.class.new(@tag2ns.dup)
  cloned.assigner = @assigner
  cloned.assign(@default_namespace, '') if @default_namespace
  cloned
end
compare(ns, name, rhs) click to toggle source
# File lib/xsd/ns.rb, line 114
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
each_ns() { |ns, tag| ... } click to toggle source
# File lib/xsd/ns.rb, line 159
def each_ns
  @ns2tag.each do |ns, tag|
    yield(ns, tag)
  end
end
known_tag() click to toggle source
# File lib/xsd/ns.rb, line 54
def known_tag
  @assigner ||= Assigner.new(default_known_tag)
  @assigner.known_tag
end
name(qname) click to toggle source
# File lib/xsd/ns.rb, line 95
def name(qname)
  if qname.namespace == @default_namespace
    qname.name
  elsif tag = @ns2tag[qname.namespace]
    "#{tag}:#{qname.name}"
  else
    raise FormatError.new("namespace: #{qname.namespace} not defined yet")
  end
end
name_attr(qname) click to toggle source

no default namespace

# File lib/xsd/ns.rb, line 106
def name_attr(qname)
  if tag = @ns2tag[qname.namespace]
    "#{tag}:#{qname.name}"
  else
    raise FormatError.new("namespace: #{qname.namespace} not defined yet")
  end
end
parse(str, local = false) click to toggle source
# File lib/xsd/ns.rb, line 129
def parse(str, local = false)
  if ParseRegexp =~ str
    if (name = $2) and (ns = @tag2ns[$1])
      return XSD::QName.new(ns, name)
    end
  end
  XSD::QName.new(local ? nil : @default_namespace, str)
end
parse_local(elem) click to toggle source

For local attribute key parsing

<foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
  =>
{}bar, {urn:a}baz
# File lib/xsd/ns.rb, line 142
def parse_local(elem)
  ParseRegexp =~ elem
  if $2
    ns = @tag2ns[$1]
    name = $2
    if !ns
      raise FormatError.new("unknown namespace qualifier: #{$1}")
    end
  elsif $1
    ns = nil
    name = $1
  else
    raise FormatError.new("illegal element format: #{elem}")
  end
  XSD::QName.new(ns, name)
end

Protected Instance Methods

assigner=(assigner) click to toggle source
# File lib/xsd/ns.rb, line 167
def assigner=(assigner)
  @assigner = assigner
end

Private Instance Methods

default_known_tag() click to toggle source
# File lib/xsd/ns.rb, line 177
def default_known_tag
  KNOWN_TAG
end
ns_default() click to toggle source
# File lib/xsd/ns.rb, line 173
def ns_default
  {'xml' => Namespace}
end