Class: XSD::NS

Class | XSD::NS
In: | xsd/ns.rb
Parent: | Object

### Methods

assign assigned? assigned_tag? clone_ns compare each_ns name new parse parse_local

### Classes and Modules

Class XSD::NS::Assigner
Class XSD::NS::FormatError

### Constants

ParseRegexp | = | Regexp.new('^([^:]+)(?::(.+))?$') |  | $1 and $2 are necessary.

### Attributes

default_namespace | [R] |

### Public Class methods

new(tag2ns = {})

[Source]

    # File xsd/ns.rb, line 33
      def initialize(tag2ns = {})
        @tag2ns = tag2ns
        @assigner = nil
        @ns2tag = {}
        @tag2ns.each do |tag, ns|
          @ns2tag[ns] = tag
        end
        @default_namespace = nil
      end

### Public Instance methods

assign(ns, tag = nil)

[Source]

    # 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

assigned?(ns)

[Source]

    # File xsd/ns.rb, line 56
      def assigned?(ns)
        @default_namespace == ns or @ns2tag.key?(ns)
      end

assigned_tag?(tag)

[Source]

    # File xsd/ns.rb, line 60
      def assigned_tag?(tag)
        @tag2ns.key?(tag)
      end

clone_ns()

[Source]

    # 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

compare(ns, name, rhs)

[Source]

    # 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

each_ns() {|ns, tag| ...}

[Source]

    # File xsd/ns.rb, line 126
      def each_ns
        @ns2tag.each do |ns, tag|
          yield(ns, tag)
        end
      end

name(name)

[Source]

    # 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

parse(str, local = false)

[Source]

    # 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

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

[Source]

    # 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

[Validate]