Class: XSD::NS

Inherits:
Object show all
Defined in:
lib/xsd/ns.rb

Direct Known Subclasses

SOAP::NS

Defined Under Namespace

Classes: Assigner, FormatError

Constant Summary

Namespace =
'http://www.w3.org/XML/1998/namespace'
KNOWN_TAG =
{
  XSD::Namespace => 'xsd',
  XSD::InstanceNamespace => 'xsi',
}
ParseRegexp =

$1 and $2 are necessary.

Regexp.new('\A([^:]+)(?::(.+))?\z')

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (NS) initialize(tag2ns = nil)

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

- (Object) default_namespace (readonly)

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

- (Object) assign(ns, tag = nil)



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

- (Boolean) assigned?(ns)

Returns:

  • (Boolean)


75
76
77
# File 'lib/xsd/ns.rb', line 75

def assigned?(ns)
  @default_namespace == ns or @ns2tag.key?(ns)
end

- (Boolean) assigned_as_tagged?(ns)

Returns:

  • (Boolean)


79
80
81
# File 'lib/xsd/ns.rb', line 79

def assigned_as_tagged?(ns)
  @ns2tag.key?(ns)
end

- (Boolean) assigned_tag?(tag)

Returns:

  • (Boolean)


83
84
85
# File 'lib/xsd/ns.rb', line 83

def assigned_tag?(tag)
  @tag2ns.key?(tag)
end

- (Object) clone_ns



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

- (Object) compare(ns, name, rhs)



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

- (Object) each_ns



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

- (Object) known_tag



53
54
55
56
# File 'lib/xsd/ns.rb', line 53

def known_tag
  @assigner ||= Assigner.new(default_known_tag)
  @assigner.known_tag
end

- (Object) name(qname)



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

- (Object) name_attr(qname)

no default namespace



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

- (Object) parse(str, local = false)



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

- (Object) parse_local(elem)

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