$1 and $2 are necessary.
# File xsd/ns.rb, line 43
def assign(ns, tag = nil)
if (tag == '')
@default_namespace = ns
tag
else
@assigner ||= Assigner.new
tag ||= @assigner.assign(ns)
@ns2tag[ns] = tag
@tag2ns[tag] = ns
tag
end
end
# File xsd/ns.rb, line 56
def assigned?(ns)
@default_namespace == ns or @ns2tag.key?(ns)
end
# File xsd/ns.rb, line 60
def assigned_tag?(tag)
@tag2ns.key?(tag)
end
# File xsd/ns.rb, line 64
def clone_ns
cloned = NS.new(@tag2ns.dup)
cloned.assigner = @assigner
cloned.assign(@default_namespace, '') if @default_namespace
cloned
end
# File xsd/ns.rb, line 81
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
# File xsd/ns.rb, line 126
def each_ns
@ns2tag.each do |ns, tag|
yield(ns, tag)
end
end
# File xsd/ns.rb, line 71
def name(name)
if (name.namespace == @default_namespace)
name.name
elsif @ns2tag.key?(name.namespace)
"#{@ns2tag[name.namespace]}:#{name.name}"
else
raise FormatError.new("namespace: #{name.namespace} not defined yet")
end
end
# File xsd/ns.rb, line 96
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
For local attribute key parsing
<foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" /> => {}bar, {urn:a}baz
# File xsd/ns.rb, line 109
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
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.