Class: REXML::DocType
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: | |
| Instance Chain: | |
| Inherits: | REXML::Parent 
 | 
| Defined in: | lib/rexml/doctype.rb | 
Overview
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.
Constant Summary
- 
    DEFAULT_ENTITIES =
    
 # File 'lib/rexml/doctype.rb', line 57{ 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS }
- 
    PUBLIC =
    
 # File 'lib/rexml/doctype.rb', line 56"PUBLIC"
- 
    START =
    
 # File 'lib/rexml/doctype.rb', line 53"<!DOCTYPE"
- 
    STOP =
    
 # File 'lib/rexml/doctype.rb', line 54">"
- 
    SYSTEM =
    
 # File 'lib/rexml/doctype.rb', line 55"SYSTEM"
XMLTokens - Included
  NAME, NAMECHAR, NAME_CHAR, NAME_START_CHAR, NAME_STR, NCNAME_STR, NMTOKEN, NMTOKENS, REFERENCE
Class Method Summary
- 
    
      .new(first, parent = nil)  ⇒ DocType 
    
    constructor
    Constructor. 
Parent - Inherited
| .new | Constructor. | 
Child - Inherited
| .new | Constructor. | 
Instance Attribute Summary
- 
    
      #entities  
    
    readonly
    name is the name of the doctype external_id is the referenced DTD, if given.
- 
    
      #external_id  
    
    readonly
    name is the name of the doctype external_id is the referenced DTD, if given.
- 
    
      #name  
    
    readonly
    name is the name of the doctype external_id is the referenced DTD, if given.
- 
    
      #namespaces  
    
    readonly
    name is the name of the doctype external_id is the referenced DTD, if given.
Parent - Inherited
Child - Inherited
| #next_sibling | Alias for Node#next_sibling_node. | 
| #next_sibling= | Sets the next sibling of this child. | 
| #parent | The Parent of this object. | 
| #parent= | Sets the parent of this child to the supplied argument. | 
| #previous_sibling | Alias for Node#previous_sibling_node. | 
| #previous_sibling= | Sets the previous sibling of this child. | 
Node - Included
Instance Method Summary
- #add(child)
- #attribute_of(element, attribute)
- #attributes_of(element)
- #clone
- #context
- #entity(name)
- #node_type
- 
    
      #notation(name)  
    
    Retrieves a named notation. 
- 
    
      #notations  
    
    This method returns a list of notations that have been declared in the internal DTDsubset.
- 
    
      #public  
    
    This method retrieves the public identifier identifying the document’s DTD.
- 
    
      #system  
    
    This method retrieves the system identifier identifying the document’s DTD.
- 
    
      #write(output, indent = 0, transitive = false, ie_hack = false)  
    
    - output
 
Parent - Inherited
| #<< | Alias for Parent#push. | 
| #[] | Fetches a child at a given index. | 
| #[]= | Set an index entry. | 
| #add, | |
| #children | Alias for Parent#to_a. | 
| #deep_clone | Deeply clones this object. | 
| #delete, #delete_at, #delete_if, #each, | |
| #each_child | Alias for Parent#each. | 
| #each_index, | |
| #index | Fetches the index of a given child of this parent. | 
| #insert_after | Inserts an child after another child child2 will be inserted after child1 in the child list of the parent. | 
| #insert_before | Inserts an child before another child child2 will be inserted before child1 in the child list of the parent. | 
| #length | Alias for Parent#size. | 
| #push | Alias for Parent#add. | 
| #replace_child | Replaces one child with another, making sure the nodelist is correct  | 
| #size, #to_a, #unshift | |
Child - Inherited
| #bytes | This doesn’t yet handle encodings. | 
| #document | 
 | 
| #remove | Removes this child from the parent. | 
| #replace_with | Replaces this object with another object. | 
Node - Included
| #each_recursive | Visit all subnodes of  | 
| #find_first_recursive | Find (and return) first subnode (recursively) for which the block evaluates to true. | 
| #indent, | |
| #index_in_parent | Returns the position that  | 
| #next_sibling_node, #previous_sibling_node, | |
| #to_s | 
 | 
Constructor Details
    .new(first, parent = nil)  ⇒ DocType 
  
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 doctypeNote that the constructor:
Doctype.new( Source.new( "<!DOCTYPE foo 'bar'>" ) )is deprecated. Do not use it. It will probably disappear.
# File 'lib/rexml/doctype.rb', line 80
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 @long_name = first.instance_variable_get(:@long_name) @uri = first.instance_variable_get(:@uri) 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
Instance Attribute Details
#entities (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 66
attr_reader :name, :external_id, :entities, :namespaces
#external_id (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 66
attr_reader :name, :external_id, :entities, :namespaces
#name (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 66
attr_reader :name, :external_id, :entities, :namespaces
#namespaces (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 66
attr_reader :name, :external_id, :entities, :namespaces
Instance Method Details
#add(child)
[ GitHub ]# File 'lib/rexml/doctype.rb', line 185
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)
[ GitHub ]# File 'lib/rexml/doctype.rb', line 125
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)
[ GitHub ]# File 'lib/rexml/doctype.rb', line 115
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
[ GitHub ]# File 'lib/rexml/doctype.rb', line 135
def clone DocType.new self end
#context
[ GitHub ]# File 'lib/rexml/doctype.rb', line 173
def context if @parent @parent.context else nil end end
#entity(name)
[ GitHub ]#node_type
[ GitHub ]# File 'lib/rexml/doctype.rb', line 111
def node_type :doctype end
#notation(name)
Retrieves a named notation. Only notations declared in the internal DTD subset can be retrieved.
Method contributed by Henrik Martensson
#notations
# File 'lib/rexml/doctype.rb', line 221
def notations children().select {|node| node.kind_of?(REXML::NotationDecl)} end
#public
This method retrieves the public identifier identifying the document’s DTD.
Method contributed by Henrik Martensson
# File 'lib/rexml/doctype.rb', line 195
def public case @external_id when "SYSTEM" nil when "PUBLIC" @long_name end end
#system
This method retrieves the system identifier identifying the document’s DTD
Method contributed by Henrik Martensson
# File 'lib/rexml/doctype.rb', line 207
def system case @external_id when "SYSTEM" @long_name when "PUBLIC" @uri.kind_of?(String) ? @uri : nil end end
#write(output, indent = 0, transitive = false, ie_hack = false)
- 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 'lib/rexml/doctype.rb', line 149
def write( output, indent=0, transitive=false, ie_hack=false ) f = REXML::Formatters::Default.new indent( output, indent ) output << START output << ' ' output << @name if @external_id reference_writer = ReferenceWriter.new(@external_id, @long_name, @uri, context) reference_writer.write(output) end unless @children.empty? output << ' [' @children.each { |child| output << "\n" f.write( child, output ) } output << "\n]" end output << STOP end