| Class | XSD::NS |
| In: |
lib/xsd/ns.rb
|
| Parent: | Object |
| ParseRegexp | = | Regexp.new('^([^:]+)(?::(.+))?$') | $1 and $2 are necessary. |
| default_namespace | [R] |
# 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
# 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
# File lib/xsd/ns.rb, line 56
56: def assigned?(ns)
57: @default_namespace == ns or @ns2tag.key?(ns)
58: end
# 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
# 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
# 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
# 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
# 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
# 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