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', nil, 'n')
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(tag2ns = nil) ⇒ NS
Returns a new instance of NS.
47
48
49
50
51
52
|
# File 'lib/xsd/ns.rb', line 47
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.
41
42
43
|
# File 'lib/xsd/ns.rb', line 41
def default_namespace
@default_namespace
end
|
Instance Method Details
#assign(ns, tag = nil) ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# 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) ⇒ Boolean
76
77
78
|
# File 'lib/xsd/ns.rb', line 76
def assigned?(ns)
@default_namespace == ns or @ns2tag.key?(ns)
end
|
#assigned_as_tagged?(ns) ⇒ Boolean
80
81
82
|
# File 'lib/xsd/ns.rb', line 80
def assigned_as_tagged?(ns)
@ns2tag.key?(ns)
end
|
#assigned_tag?(tag) ⇒ Boolean
84
85
86
|
# File 'lib/xsd/ns.rb', line 84
def assigned_tag?(tag)
@tag2ns.key?(tag)
end
|
88
89
90
91
92
93
|
# 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) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
|
# 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
|
159
160
161
162
163
|
# File 'lib/xsd/ns.rb', line 159
def each_ns
@ns2tag.each do |ns, tag|
yield(ns, tag)
end
end
|
#known_tag ⇒ Object
54
55
56
57
|
# File 'lib/xsd/ns.rb', line 54
def known_tag
@assigner ||= Assigner.new(default_known_tag)
@assigner.known_tag
end
|
#name(qname) ⇒ Object
95
96
97
98
99
100
101
102
103
|
# 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) ⇒ Object
106
107
108
109
110
111
112
|
# 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) ⇒ Object
129
130
131
132
133
134
135
136
|
# 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) ⇒ Object
For local attribute key parsing
<foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
=>
{}bar, {urn:a}baz
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# 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
|