In Files

  • rexml/doctype.rb
  • rexml/text.rb

REXML::DocType

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.

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

new( first, parent=nil ) click to toggle source

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.

 
               # 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

add(child) click to toggle source
 
               # File rexml/doctype.rb, line 137
def add child
  super(child)
  @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES
  @entities[ child.name ] = child if child.kind_of? Entity
end
            
attribute_of(element, attribute) click to toggle 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
            
attributes_of(element) click to toggle 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
            
clone() click to toggle source
 
               # File rexml/doctype.rb, line 94
def clone
  DocType.new self
end
            
context() click to toggle source
 
               # File rexml/doctype.rb, line 129
def context
  @parent.context
end
            
entity( name ) click to toggle source
 
               # File rexml/doctype.rb, line 133
def entity( name )
  @entities[name].unnormalized if @entities[name]
end
            
node_type() click to toggle source
 
               # File rexml/doctype.rb, line 70
def node_type
  :doctype
end
            
notation(name) click to toggle source

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

Method contributed by Henrik Martensson

 
               # File rexml/doctype.rb, line 181
def notation(name)
  notations.find { |notation_decl|
    notation_decl.name == name
  }
end
            
notations() click to toggle source

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

 
               # File rexml/doctype.rb, line 173
def notations
  children().select {|node| node.kind_of?(REXML::NotationDecl)}
end
            
public() click to toggle source

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

Method contributed by Henrik Martensson

 
               # File rexml/doctype.rb, line 147
def public
  case @external_id
  when "SYSTEM"
    nil
  when "PUBLIC"
    strip_quotes(@long_name)
  end
end
            
system() click to toggle source

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

Method contributed by Henrik Martensson

 
               # File rexml/doctype.rb, line 159
def system
  case @external_id
  when "SYSTEM"
    strip_quotes(@long_name)
  when "PUBLIC"
    @uri.kind_of?(String) ? strip_quotes(@uri) : nil
  end
end
            
write( output, indent=0, transitive=false, ie_hack=false ) click to toggle source
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

 
               # 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 << ' ['
    @children.each { |child|
      output << "\n"
      f.write( child, output )
    }
    output << "\n]"
  end
  output << STOP
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus