diff options
Diffstat (limited to 'lib/xsd/ns.rb')
-rw-r--r-- | lib/xsd/ns.rb | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/xsd/ns.rb b/lib/xsd/ns.rb index 224db6c058..66bd9caf43 100644 --- a/lib/xsd/ns.rb +++ b/lib/xsd/ns.rb @@ -93,9 +93,20 @@ public # $1 and $2 are necessary. ParseRegexp = Regexp.new('^([^:]+)(?::(.+))?$') - def parse(elem) - ns = nil - name = nil + 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:" xmlns:n1="urn:" bar="1" n1:baz="2" /> + # => + # {}bar, {urn:}baz + def parse_local(elem) ParseRegexp =~ elem if $2 ns = @tag2ns[$1] @@ -104,10 +115,9 @@ public raise FormatError.new('Unknown namespace qualifier: ' << $1) end elsif $1 - ns = @default_namespace + ns = nil name = $1 - end - if !name + else raise FormatError.new("Illegal element format: #{ elem }") end XSD::QName.new(ns, name) |