Class REXML::DocType
In: rexml/doctype.rb
Parent: Parent

Represents an XML DOCTYPE declaration; that is, the contents of <!DOCTYPE … >. DOCTYPES can be used to declare the DTD of a document, as well as being used to declare entities used in the document.

Methods

add   attribute_of   attributes_of   clone   context   entity   new   node_type   notation   notations   public   system   write  

Included Modules

XMLTokens

Constants

START = "<!DOCTYPE"
STOP = ">"
SYSTEM = "SYSTEM"
PUBLIC = "PUBLIC"
DEFAULT_ENTITIES = { 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS

Attributes

entities  [R]  name is the name of the doctype external_id is the referenced DTD, if given
external_id  [R]  name is the name of the doctype external_id is the referenced DTD, if given
name  [R]  name is the name of the doctype external_id is the referenced DTD, if given
namespaces  [R]  name is the name of the doctype external_id is the referenced DTD, if given

Public Class methods

Constructor

  dt = DocType.new( 'foo', '-//I/Hate/External/IDs' )
  # <!DOCTYPE foo '-//I/Hate/External/IDs'>
  dt = DocType.new( doctype_to_clone )
  # Incomplete.  Shallow clone of doctype

Note that the constructor:

 Doctype.new( Source.new( "<!DOCTYPE foo 'bar'>" ) )

is deprecated. Do not use it. It will probably disappear.

[Source]

# File rexml/doctype.rb, line 41
    def initialize( first, parent=nil )
      @entities = DEFAULT_ENTITIES
      @long_name = @uri = nil
      if first.kind_of? String
        super()
        @name = first
        @external_id = parent
      elsif first.kind_of? DocType
        super( parent )
        @name = first.name
        @external_id = first.external_id
      elsif first.kind_of? Array
        super( parent )
        @name = first[0]
        @external_id = first[1]
        @long_name = first[2]
        @uri = first[3]
      elsif first.kind_of? Source
        super( parent )
        parser = Parsers::BaseParser.new( first )
        event = parser.pull
        if event[0] == :start_doctype
          @name, @external_id, @long_name, @uri, = event[1..-1]
        end
      else
        super()
      end
    end

Public Instance methods

[Source]

# File rexml/doctype.rb, line 138
    def add child
      super(child)
      @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES
      @entities[ child.name ] = child if child.kind_of? Entity
    end

[Source]

# File rexml/doctype.rb, line 84
    def attribute_of element, attribute
      att_decl = find do |child|
        child.kind_of? AttlistDecl and
        child.element_name == element and
        child.include? attribute
      end
      return nil unless att_decl
      att_decl[attribute]
    end

[Source]

# File rexml/doctype.rb, line 74
    def attributes_of element
      rv = []
      each do |child|
        child.each do |key,val|
          rv << Attribute.new(key,val)
        end if child.kind_of? AttlistDecl and child.element_name == element
      end
      rv
    end

[Source]

# File rexml/doctype.rb, line 94
    def clone
      DocType.new self
    end

[Source]

# File rexml/doctype.rb, line 130
    def context
      @parent.context
    end

[Source]

# File rexml/doctype.rb, line 134
    def entity( name )
      @entities[name].unnormalized if @entities[name]
    end

[Source]

# File rexml/doctype.rb, line 70
    def node_type
      :doctype
    end

Retrieves a named notation. Only notations declared in the internal DTD subset can be retrieved.

Method contributed by Henrik Martensson

[Source]

# File rexml/doctype.rb, line 182
    def notation(name)
      notations.find { |notation_decl|
        notation_decl.name == name
      }
    end

This method returns a list of notations that have been declared in the internal DTD subset. Notations in the external DTD subset are not listed.

Method contributed by Henrik Martensson

[Source]

# File rexml/doctype.rb, line 174
    def notations
      children().select {|node| node.kind_of?(REXML::NotationDecl)}
    end

This method retrieves the public identifier identifying the document‘s DTD.

Method contributed by Henrik Martensson

[Source]

# File rexml/doctype.rb, line 148
    def public
      case @external_id
      when "SYSTEM"
        nil
      when "PUBLIC"
        strip_quotes(@long_name)
      end
    end

This method retrieves the system identifier identifying the document‘s DTD

Method contributed by Henrik Martensson

[Source]

# File rexml/doctype.rb, line 160
    def system
      case @external_id
      when "SYSTEM"
        strip_quotes(@long_name)
      when "PUBLIC"
        @uri.kind_of?(String) ? strip_quotes(@uri) : nil
      end
    end
output:Where to write the string
indent:An integer. If -1, no indentation will be used; otherwise, the indentation will be this number of spaces, and children will be indented an additional amount.
transitive:Ignored
ie_hack:Ignored

[Source]

# File rexml/doctype.rb, line 108
    def write( output, indent=0, transitive=false, ie_hack=false )
      f = REXML::Formatters::Default.new
      indent( output, indent )
      output << START
      output << ' '
      output << @name
      output << " #@external_id" if @external_id
      output << " #{@long_name.inspect}" if @long_name
      output << " #{@uri.inspect}" if @uri
      unless @children.empty?
        next_indent = indent + 1
        output << ' ['
        child = nil    # speed
        @children.each { |child|
          output << "\n"
          f.write( child, output )
        }
        output << "\n]"
      end
      output << STOP
    end

[Validate]

ruby-doc.org is a community service provided by James Britt and Happy Camper Studios, a Phoenix, Arizona, Ruby application development company.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.