XML, HTML 出力支援モジュール Markup
Author :
出力に特化したモジュールです
パッケージ Markup は, XML や HTML などのマークアップ言語の出力を支援するライブラリです. DOM に近い API を備えていますが, コンセプトは DOM とは全く異なります.
得意なこと
- 手書きの HTML コードのような, 読みやすいフォーマットによるコード生成
- SGML 形式と XML 形式の切替 (空要素を "<br>" と "<br />" のどちらで出力するか等)
- インデントの種類 (半角スペース, TAB) や改行コードのカスタマイズ
不得手なこと
- ノードツリーの操作 (あるノードを別のノードの下に移動させたり, 特定のノードを削除させたりなど) はサポートしていません. (append しか出来ません)
- DOCTYPE 宣言, CDATA セクション, PI (処理命令) などのデータ型は存在しません. もしもこれらのデータを Node として扱いたい場合は Code オブジェクトにする必要があります.
サンプルコード
このモジュールの使い方を以下のサンプルコードでお見せします.
- $article->setAttributes(array("id" => 42, "author" => "Thomas"));
- $summary->append("Lorem ipsum dolor sit amet, consectetur adipisicing elit.");
- $article->append($summary);
- $item1->setAttribute("id", 3);
- $category->append($item1);
- $item2->setAttribute("id", 7);
- $category->append($item2);
- $article->append($category);
- echo $builder->build($article);
このコードは以下の XML を出力します.
- <article id="42" author="Thomas">
- <summary>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</summary>
- <category>
- <item id="3" />
- <item id="7" />
- </category>
- </article>
HTML を出力する場合は Peach_Markup_Html を使ってさらに簡潔に書くことが出来ます. (上の書き方でももちろん出来ます)
- echo tag("html", array("lang" => "ja"))
- ->append(tag("head")
- ->append(tag("meta")->attr(array("http-equiv" => "Content-Type", "content" => "text/html; charset=UTF-8")))
- ->append(tag("title")->append("TEST PAGE"))
- )
- ->append(tag("body")
- ->append(tag("form", array("method" => "post", "action" => "sample.php"))
- ->append("Name")
- ->append(tag("input")->attr(array("type" => "text", "name" => "param1", "value" => "")))
- ->append(tag("br"))
- ->append(tag("input")
- ->attr(array("type" => "checkbox", "name" => "flag1", "value" => "1"))
- ->attr("checked")
- )
- ->append("Enable something")
- ->append(tag("br"))
- ->append(tag("input")->attr(array("type" => "submit", "name" => "submit", "value" => "Send")))
- )
- )->write();
このコードは以下の HTML を出力します.
- <html lang="ja">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>TEST PAGE</title>
- </head>
- <body>
- <form method="post" action="sample.php">
- Name
- <input type="text" name="param1" value="">
- <br>
- <input type="checkbox" name="flag1" value="1" checked>
- Enable something
- <br>
- <input type="submit" name="submit" value="Send">
- </form>
- </body>
- </html>
モジュールの基本構造
このモジュールの基本となる型は Node と Builder です. この 2 つの型の相互作用によりマークアップ言語の出力が行われます.
Node
Node はマークアップ言語を構成するパーツを表すインタフェースです. 例えば要素 (タグ)・テキスト・コメントなどが該当します.
Node の実装クラスとして, 代表的なものを以下に挙げます.
- ContainerElement: 開始タグと終了タグを伴う要素です.
- EmptyElement: 空要素です. HTML における img や br などに相当します.
- Text: 開始タグと終了タグに囲まれたテキスト部分を表します.
- Comment: <-- と --> で囲まれたコメントを表します.
詳しくは Node (各種パーツ) を参照してください.
Builder
Builder は XML (HTML) 文書を出力する際の整形ルールを表すクラスです. 例えば以下の情報を制御することが出来ます.
- インデントの種類 (タブ文字 or スペース)
- 改行コード (CR, LF, CRLF)
- 空要素タグの出力方法
詳しくは Builder (出力制御) を参照してください.
- Prev: 文字列の入出力方法
- Next: Node (各種パーツ)