Class: XSD::NS
Defined Under Namespace
Classes: Assigner, FormatError
Constant Summary
collapse
- Namespace =
'http://www.w3.org/XML/1998/namespace'
- KNOWN_TAG =
{
XSD::Namespace => 'xsd',
XSD::InstanceNamespace => 'xsi',
}
- ParseRegexp =
Regexp.new('\A([^:]+)(?::(.+))?\z')
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(tag2ns = nil) ⇒ NS
Returns a new instance of NS.
46
47
48
49
50
51
|
# File 'lib/xsd/ns.rb', line 46
def initialize(tag2ns = nil)
@tag2ns = tag2ns || ns_default
@ns2tag = @tag2ns.invert
@assigner = nil
@default_namespace = nil
end
|
Instance Attribute Details
#default_namespace ⇒ Object
Returns the value of attribute default_namespace.
40
41
42
|
# File 'lib/xsd/ns.rb', line 40
def default_namespace
@default_namespace
end
|
Instance Method Details
#assign(ns, tag = nil) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/xsd/ns.rb', line 58
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) ⇒ Boolean
75
76
77
|
# File 'lib/xsd/ns.rb', line 75
def assigned?(ns)
@default_namespace == ns or @ns2tag.key?(ns)
end
|
#assigned_as_tagged?(ns) ⇒ Boolean
79
80
81
|
# File 'lib/xsd/ns.rb', line 79
def assigned_as_tagged?(ns)
@ns2tag.key?(ns)
end
|
#assigned_tag?(tag) ⇒ Boolean
83
84
85
|
# File 'lib/xsd/ns.rb', line 83
def assigned_tag?(tag)
@tag2ns.key?(tag)
end
|
87
88
89
90
91
92
|
# File 'lib/xsd/ns.rb', line 87
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) ⇒ Object
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/xsd/ns.rb', line 113
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
|
158
159
160
161
162
|
# File 'lib/xsd/ns.rb', line 158
def each_ns
@ns2tag.each do |ns, tag|
yield(ns, tag)
end
end
|
#known_tag ⇒ Object
53
54
55
56
|
# File 'lib/xsd/ns.rb', line 53
def known_tag
@assigner ||= Assigner.new(default_known_tag)
@assigner.known_tag
end
|
#name(qname) ⇒ Object
94
95
96
97
98
99
100
101
102
|
# File 'lib/xsd/ns.rb', line 94
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) ⇒ Object
105
106
107
108
109
110
111
|
# File 'lib/xsd/ns.rb', line 105
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) ⇒ Object
128
129
130
131
132
133
134
135
|
# File 'lib/xsd/ns.rb', line 128
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) ⇒ Object
For local attribute key parsing
<foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
=>
{}bar, {urn:a}baz
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# File 'lib/xsd/ns.rb', line 141
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
|