Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > rexml/documentライブラリ > REXML::Entityクラス

class REXML::Entity

クラスの継承リスト: REXML::Entity < REXML::XMLTokens < REXML::Child < REXML::Node < Object < Kernel

要約

XML における実体(エンティティ、entity)の宣言(declaration)を表わすクラス。

DTD(REXML::DocType)内の実体宣言に対応するものです。

require 'rexml/document'

doc = REXML::Document.new(<<EOS)
<!DOCTYPE document [
<!ENTITY f "foo bar baz">
<!ENTITY x SYSTEM "x.txt">
<!ENTITY y SYSTEM "y.png" NDATA PNG>
<!ENTITY % z "zzz">
<!ENTITY zz "%z;%z;&f;">
]>
EOS

entities = doc.doctype.entities
# f は 内部実体名なので、external や ref は nil である
p entities["f"].name # => "f"
p entities["f"].value # => "foo bar baz"
p entities["f"].external # => nil
p entities["f"].ref # => nil

# x は 外部実体名なので value が nil で、
# external や ref が文字列を返してくる。
# しかし解析対象実体(parsed entity)なので ndata は nil を返す
p entities["x"].name # => "x"
p entities["x"].value # => nil
p entities["x"].external # => "SYSTEM"
p entities["x"].ref # => "x.txt"
p entities["x"].ndata # => nil

# y は解析対象外実体(unparsed entity)なので ndata が記法名を返す
p entities["y"].ndata # => "PNG"

# zz は中にパラメータ実体参照と内部実体参照を含むので、
# value, unnormalized, normalized がすべて異なる値を返す
p entities["zz"].value # => "zzzzzz&f;"
p entities["zz"].unnormalized # => "zzzzzzfoo bar baz"
p entities["zz"].normalized # => "%z;%z;&f;"

目次

特異メソッド
matches? new
インスタンスメソッド
external name ndata normalized pubid ref to_s unnormalized value write

特異メソッド

matches?(string) -> bool[permalink][rdoc]

string が実体宣言の文法に従う文字列であれば真を返します。

[PARAM] string:
判定対象の文字列

require 'rexml/document'

p REXML::Entity.matches?('<!ENTITY s "seal">') # => true
p REXML::Entity.matches?('<!ENTITY % s "seal">') # => true
p REXML::Entity.matches?('<!ELEMENT br EMPTY >') # => false
new(name, value, parent=nil, reference=false) -> REXML::Entity[permalink][rdoc]
new(array) -> REXML::Entity

新たな Entity オブジェクトを生成して返します。

name, value で実体の名前とその値を定義します。 parent はその entity オブジェクトが属するノードを渡します。 reference でその実体宣言がパラメータ実体(parameter entity)かどうかを指定します。

このコンストラクタでは単純な内部実体(internal entity)宣言のみを実現できます。

それ以外の内容を保持する Entity オブジェクトが欲しい場合は、 文書に適切な DTD を含めておいてそれを REXML::Document.new で パースするようにしてください。

配列を使うほうは rexml のパーサが内部的に利用するため通常は利用しません。

[PARAM] name:
実体参照の名前
[PARAM] value:
参照の値
[PARAM] parent:
親ノード
[PARAM] reference:
パラメータ実体であるかどうかの真偽値
[PARAM] array:
初期化のための配列

「&gt;」「>」 の対応は以下のように実現されます。

REXML::Entity.new("gt", ">")

インスタンスメソッド

external -> String | nil[permalink][rdoc]

実体が外部実体(external entity)宣言である場合は "SYSTEM" もしくは "PUBLIC" という文字列を返します。

内部実体(internal entity)宣言である場合には nil を返します。

name -> String[permalink][rdoc]

実体の名前を返します。

ndata -> String | nil[permalink][rdoc]

解析対象外実体(unparsed entity)宣言である場合には その記法名(notation name)を返します。

それ以外の場合は nil を返します。

normalized -> String | nil[permalink][rdoc]

正規化された(normalized)実体の値を返します。

すなわち、一切の実体参照を展開していない値を返します。

外部実体(external enitity)宣言の場合は nil を返します。

[SEE_ALSO] REXML::Entity#value, REXML::Entity#unnormalized

pubid -> String | nil[permalink][rdoc]

公開識別子(public identifier)を用いた外部実体宣言の場合は、その公開識別子を 返します。

それ以外の場合は nil を返します。

ref -> String | nil[permalink][rdoc]

外部実体(external entity)宣言の URI を返します。

内部実体宣言の場合は nil を返します。

to_s -> String[permalink][rdoc]

実体宣言を文字列化したものを返します。

[SEE_ALSO] REXML::Entity#write

e = REXML::ENTITY.new("w", "wee");
p e.to_s # => "<!ENTITY w \"wee\">"
unnormalized -> String | nil[permalink][rdoc]

非正規化された(unnormalized)実体の値を返します。

すなわち、self が属する DTD によってすべての実体参照(&ent; と %ent; の両方) を展開した文字列を返します。

外部実体(external enitity)宣言の場合は nil を返します。

[SEE_ALSO] REXML::Entity#value, REXML::Entity#normalized

value -> String | nil[permalink][rdoc]

実体の値を返します。

パラメータ実体参照(parameter entity)のみが展開され、 そうでない実体参照(general entity)は展開されて いないような値が返されます。

外部実体(external enitity)宣言の場合は nil を返します。

[SEE_ALSO] REXML::Entity#unnormalized, REXML::Entity#normalized

write(out, indent = -1) -> ()[permalink][rdoc]

実体宣言を文字列化したものを out に書き込みます。

[PARAM] out:
出力先の IO オブジェクト
[PARAM] indent:
利用されません。deprecated なパラメータです

[SEE_ALSO] REXML::Entity#to_s