Class XSD::NS
In: lib/xsd/ns.rb
Parent: Object

Methods

assign   assigned?   assigned_tag?   assigner=   clone_ns   compare   each_ns   name   new   parse   parse_local  

Classes and Modules

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

Constants

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

Attributes

default_namespace  [R] 

Public Class methods

[Source]

    # File lib/xsd/ns.rb, line 33
33:   def initialize(tag2ns = {})
34:     @tag2ns = tag2ns
35:     @assigner = nil
36:     @ns2tag = {}
37:     @tag2ns.each do |tag, ns|
38:       @ns2tag[ns] = tag
39:     end
40:     @default_namespace = nil
41:   end

Public Instance methods

[Source]

    # File lib/xsd/ns.rb, line 43
43:   def assign(ns, tag = nil)
44:     if (tag == '')
45:       @default_namespace = ns
46:       tag
47:     else
48:       @assigner ||= Assigner.new
49:       tag ||= @assigner.assign(ns)
50:       @ns2tag[ns] = tag
51:       @tag2ns[tag] = ns
52:       tag
53:     end
54:   end

[Source]

    # File lib/xsd/ns.rb, line 56
56:   def assigned?(ns)
57:     @default_namespace == ns or @ns2tag.key?(ns)
58:   end

[Source]

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

[Source]

    # File lib/xsd/ns.rb, line 64
64:   def clone_ns
65:     cloned = NS.new(@tag2ns.dup)
66:     cloned.assigner = @assigner
67:     cloned.assign(@default_namespace, '') if @default_namespace
68:     cloned
69:   end

[Source]

    # File lib/xsd/ns.rb, line 81
81:   def compare(ns, name, rhs)
82:     if (ns == @default_namespace)
83:       return true if (name == rhs)
84:     end
85:     @tag2ns.each do |assigned_tag, assigned_ns|
86:       if assigned_ns == ns && "#{assigned_tag}:#{name}" == rhs
87:         return true
88:       end
89:     end
90:     false
91:   end

[Source]

     # File lib/xsd/ns.rb, line 126
126:   def each_ns
127:     @ns2tag.each do |ns, tag|
128:       yield(ns, tag)
129:     end
130:   end

[Source]

    # File lib/xsd/ns.rb, line 71
71:   def name(name)
72:     if (name.namespace == @default_namespace)
73:       name.name
74:     elsif @ns2tag.key?(name.namespace)
75:       "#{@ns2tag[name.namespace]}:#{name.name}"
76:     else
77:       raise FormatError.new("namespace: #{name.namespace} not defined yet")
78:     end
79:   end

[Source]

     # File lib/xsd/ns.rb, line 96
 96:   def parse(str, local = false)
 97:     if ParseRegexp =~ str
 98:       if (name = $2) and (ns = @tag2ns[$1])
 99:         return XSD::QName.new(ns, name)
100:       end
101:     end
102:     XSD::QName.new(local ? nil : @default_namespace, str)
103:   end

For local attribute key parsing

  <foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
    =>
  {}bar, {urn:a}baz

[Source]

     # File lib/xsd/ns.rb, line 109
109:   def parse_local(elem)
110:     ParseRegexp =~ elem
111:     if $2
112:       ns = @tag2ns[$1]
113:       name = $2
114:       if !ns
115:         raise FormatError.new("unknown namespace qualifier: #{$1}")
116:       end
117:     elsif $1
118:       ns = nil
119:       name = $1
120:     else
121:       raise FormatError.new("illegal element format: #{elem}")
122:     end
123:     XSD::QName.new(ns, name)
124:   end

Protected Instance methods

[Source]

     # File lib/xsd/ns.rb, line 134
134:   def assigner=(assigner)
135:     @assigner = assigner
136:   end

[Validate]