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 (各種パーツ)