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