Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > rexml/documentライブラリ > REXML::DocTypeクラス
クラスの継承リスト: REXML::DocType < REXML::XMLTokens < REXML::Parent < Enumerable < REXML::Child < REXML::Node < Object < Kernel < BasicObject
XML の DTD(文書型定義、Document Type Definition)を表すクラスです。
rexml では DTD は積極的にはサポートされていません。 デフォルトの実体定義(gt, lt, amp, quot apos)の解決のため DTD は ある程度はサポートされますが、スキーマの定義や検証をしたい場合は XML schema や RELAX NG などを使ってください。
子ノード(REXML::Parent#children)として、
などを保持しています。
new(source, parent = nil) -> REXML::DocType
[permalink][rdoc]DocType オブジェクトを生成します。
REXML::Source オブジェクトの場合は、Source オブジェクトが 保持しているDTDのテキストがパースされ、その内容によって DocType オブジェクトが初期化されます。
REXML::DocType.new(Source.new(<<EOS)) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> EOS
このインターフェースは deprecated です。
このメソッドは他のインターフェースもありますが、内部用なので使わないで ください。
一般的にいって、XML 文書に含まれる DTD は REXML::Document.new などで 適切に解析され、REXML::Document#doctype で取得できます。 このメソッドを直接使う必要はありません。
add(child) -> ()
[permalink][rdoc]child を子ノード列の最後に追加します。
REXML::Parent#add を内部で呼び出します。 また、REXML::DocType#entities を更新します。
attribute_of(element, attribute) -> String | nil
[permalink][rdoc]DTD 内の属性リスト宣言で、 element という名前の要素の attribute という 名前の属性のデフォルト値を返します。
elementという名前の要素の属性値は宣言されていない、 elementという名前の要素にはattributeという名前の属性が宣言されていない、 もしくはデフォルト値が宣言されていない、のいずれかの場合は nil を返します。
require 'rexml/document' doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE books [ <!ELEMENT book (comment)> <!ELEMENT comment (#PCDATA)> <!ATTLIST book author CDATA #REQUIRED title CDATA #REQUIRED publisher CDATA "foobar publisher"> ]> EOS p doctype.attribute_of("book", "publisher") # => "foobar publisher" p doctype.attribute_of("bar", "foo") # => nil p doctype.attribute_of("book", "baz") # => nil p doctype.attribute_of("book", "title") # => nil
attributes_of(element) -> [REXML::Attribute]
[permalink][rdoc]DTD 内の属性リスト宣言で、 element という名前の要素に対し宣言されている 属性の名前とデフォルト値を REXML::Attribute の配列で返します。
名前とデフォルト値のペアは、各 Attribute オブジェクトの REXML::Attribute#name と REXML::Attribute#value で表現されます。
require 'rexml/document' doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE books [ <!ELEMENT book (comment)> <!ELEMENT comment (#PCDATA)> <!ATTLIST book author CDATA #REQUIRED title CDATA #REQUIRED publisher CDATA "foobar publisher"> ]> EOS p doctype.attributes_of("book") # => [author='', title='', publisher='foobar publisher'] p doctype.attributes_of("book")[0].name # => "author" p doctype.attributes_of("book")[0].value # => ""
clone -> REXML::DocType
[permalink][rdoc]self の複製を返します。
external_id (REXML::DocType#external_id) と 名前(REXML::DocType#name) のみ複製されるため、 結果として得られるオブジェクトはあまり有用ではないでしょう。
context -> { Symbol => object }
[permalink][rdoc]DTD が属する文書の「コンテキスト」を返します。
具体的には親ノードである REXML::Document オブジェクトの REXML::Element#context を返します。
コンテキストの具体的な内容については REXML::Element#context を 参照してください。
entities -> { String => REXML::Entity }
[permalink][rdoc]DTD で宣言されている実体の集合を Hash で返します。
返される Hash は実体参照名をキーとし、対応する REXML::Entity オブジェクト を値とするハッシュテーブルです。
これには、XML のデフォルトの実体(gt, lt, quot, apos)も含まれています。
doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE foo [ <!ENTITY bar "barbarbarbar"> ]> EOS p doctype.entities # => { "gt" => #<REXML::Entity: ...>, # "lt" => #<REXML::Entity: ...>, ... } p doctype.entities["bar"].to_s # => "<!ENTITY bar \"barbarbarbar\">" p doctype.entities["gt"].to_s # => "<!ENTITY gt \">\">"
entity(name) -> String | nil
[permalink][rdoc]name という実体参照名を持つ実体を文字列で返します。
返される文字列は非正規化(REXML::Entity#unnormalized 参照) された文字列が返されます。
name という名前を持つ実体が存在しない場合には nil を返します。
doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE foo [ <!ENTITY bar "barbarbarbar"> ]> EOS p doctype.entity("bar") # => "barbarbar" p doctype.entity("foo") # => nil
external_id -> String | nil
[permalink][rdoc]DTD が外部サブセットを用いている場合は "SYSTEM", "PUBLIC" の いずれかの文字列を返します。
それ以外の場合は nil を返します。
require 'rexml/document' doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> EOS doctype.name # => "html" doctype.external_id # => "PUBLIC" doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE books [ <!ELEMENT books (book+)> <!ELEMENT book (title,author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> ]> EOS doctype.name # => "books" doctype.external_id # => nil
name -> String
[permalink][rdoc]ルート要素名を返します。
document = REXML::Document.new(<<EOS) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> EOS doctype = document.doctype p doctype.name # => "html"
namespaces -> nil
[permalink][rdoc]nil を返します。
node_type -> Symbol
[permalink][rdoc]Symbol :doctype を返します。
notation(name) -> REXML::NotationDecl | nil
[permalink][rdoc]DTD に含まれている記法宣言 (REXML::NotationDecl) で name という名前を持つものを返します。
name という名前を持つ記法宣言が存在しない場合は nil を返します。
notations -> [REXML::NotationDecl]
[permalink][rdoc]DTD に含まれている記法宣言 (REXML::NotationDecl) を 配列で返します。
public -> String | nil
[permalink][rdoc]DTD の公開識別子を返します。
DTD が公開識別子による外部サブセットを含んでいない場合は nil を返します。
require 'rexml/document' doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> EOS doctype.system # => "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype.public # => "-//W3C//DTD XHTML 1.0 Strict//EN" doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE root SYSTEM "foobar"> EOS doctype.system # => "foobar" doctype.public # => nil
system -> String | nil
[permalink][rdoc]DTD のシステム識別子を返します。
DTD が外部サブセットを含んでいない場合は nil を返します。
require 'rexml/document' doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> EOS doctype.system # => "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype.public # => "-//W3C//DTD XHTML 1.0 Strict//EN" doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE root SYSTEM "foobar"> EOS doctype.system # => "foobar" doctype.public # => nil
write(output, indent = 0, transitive = false, ie_hack = false) -> ()
[permalink][rdoc]output に DTD を出力します。
このメソッドは deprecated です。REXML::Formatter で 出力してください。
require 'rexml/document' doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE books [ <!ELEMENT book (comment)> <!ELEMENT comment (#PCDATA)> <!ATTLIST book author CDATA #REQUIRED title CDATA #REQUIRED publisher CDATA "foobar publisher"> <!ENTITY p "foobar publisher"> <!ENTITY % q "quzz"> ]> EOS doctype.write(STDOUT) # => # <!DOCTYPE books [ # <!ELEMENT book (comment)> # ....
DEFAULT_ENTITIES -> { String => REXML::Entity }
[permalink][rdoc]XML の仕様上デフォルトで定義されている実体の Hash table。
"amp" => REXML::EntityConst::AMP は含まれません。