【PHP8.x】Dom\DocumentFragment::baseURIプロパティの使い方
baseURIプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Dom\DocumentFragmentクラスのbaseURIプロパティは、ノードのベースURIを保持するプロパティです。具体的には、このフラグメントが属するドキュメントのベースURIを表す文字列を返します。このプロパティは読み取り専用であり、値を設定することはできません。
システムエンジニアを目指す初心者の方にとって、ベースURIは、XMLドキュメントまたはHTMLドキュメントにおける相対URIを解決するための基準となるURIです。例えば、ドキュメント内で使用されている画像ファイルやリンク先のURIが相対パスで記述されている場合、ベースURIを基準にして絶対パスに変換されます。
DocumentFragmentは、軽量なドキュメントオブジェクトであり、ドキュメントの一部を保持するために使用されます。DocumentFragmentのbaseURIプロパティは、そのフラグメントが属するドキュメントのベースURIを特定するために重要です。これにより、フラグメント内の相対URIを正しく解釈し、外部リソースへのアクセスを可能にします。
このプロパティは、特にXMLやHTMLドキュメントをプログラムで処理し、相対URIを絶対URIに変換する必要がある場合に役立ちます。例えば、ウェブサイトからデータをスクレイピングして、取得したHTMLフラグメント内のリンクを解決する場合などに利用できます。baseURIプロパティを利用することで、常に正確なURIを生成し、予期せぬエラーを防ぐことができます。
構文(syntax)
1readonly public string $baseURI;
引数(parameters)
引数なし
引数はありません
戻り値(return)
string|null
このプロパティは、Dom\DocumentFragment オブジェクトのベース URI を文字列で返します。ベース URI が設定されていない場合は null を返します。
サンプルコード
PHP Dom\DocumentFragmentのbaseURIを理解する
1<?php 2 3/** 4 * Dom\DocumentFragment の baseURI プロパティの動作を示すサンプルコード。 5 * 6 * baseURI は、ドキュメントやノードの基準となるURIで、相対パスの解決などに使用されます。 7 * Dom\DocumentFragment はHTML/XMLドキュメントの「断片」を扱うクラスであり、 8 * それ自体が完全なドキュメントではないため、通常 baseURI は設定されず 'null' を返します。 9 * ここでは、Dom\Document の baseURI と比較しながら、その動作を理解します。 10 */ 11function showDomBaseURIConcepts(): void 12{ 13 echo "--- Dom\\DocumentFragment の baseURI ---" . PHP_EOL; 14 15 // 1. Dom\DocumentFragment インスタンスを作成 16 // ドキュメントフラグメントは、それ単体では基準となるURIを持たないことが一般的です。 17 $fragment = new Dom\DocumentFragment(); 18 $fragment->appendXML('<div><a href="relative/path/page.html">Link in fragment</a></div>'); 19 20 // baseURI プロパティの値を取得して表示 21 // Dom\DocumentFragment の baseURI は、通常 'null' となります。 22 $fragmentBaseURI = $fragment->baseURI; 23 echo "Dom\\DocumentFragment の baseURI: " . ($fragmentBaseURI ?? 'null') . PHP_EOL; 24 echo " -> Dom\\DocumentFragment は単独では基準URIを持たないため、通常 'null' です。" . PHP_EOL; 25 echo PHP_EOL; 26 27 echo "--- Dom\\Document (比較用) の baseURI ---" . PHP_EOL; 28 29 // 2. Dom\Document に HTML を文字列からロードして baseURI を確認 30 // 文字列からロードされたドキュメントは、特定のファイルやURLに関連付けられていないため、 31 // baseURI は通常 'null' になります。 32 $docFromString = new Dom\Document(); 33 $docFromString->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1><a href="test.html">Test Link</a></body></html>'); 34 $docFromStringBaseURI = $docFromString->baseURI; 35 echo "Dom\\Document (文字列からロード): " . ($docFromStringBaseURI ?? 'null') . PHP_EOL; 36 echo " -> 文字列からロードしたドキュメントは、通常基準URIを持たないため 'null' です。" . PHP_EOL; 37 38 // 補足: Dom\Document がファイルやURLからロードされた場合 39 // 例: $docFromFile = new Dom\Document(); $docFromFile->load('http://example.com/index.html'); 40 // この場合、$docFromFile->baseURI は 'http://example.com/index.html' など、 41 // ロード元のパスやURLが設定されることがあります。 42 echo " (補足) ドキュメントがファイルやURLからロードされた場合、そのパスやURLが baseURI となることがあります。" . PHP_EOL; 43 echo PHP_EOL; 44 45 // 3. Dom\DocumentFragment を Dom\Document に追加した場合 46 // Dom\Document にフラグメントを追加しても、Dom\DocumentFragment 自体の baseURI は変わりません。 47 // フラグメント内の相対パスの解決は、アタッチされた Dom\Document の baseURI を基準に行われます。 48 $docFromString->appendChild($fragment); 49 echo "Dom\\Document に追加後の Dom\\DocumentFragment の baseURI: " . ($fragment->baseURI ?? 'null') . PHP_EOL; 50 echo " -> ドキュメントに追加されても、フラグメント単独の基準URIは 'null' のままです。" . PHP_EOL; 51} 52 53// サンプル関数を実行 54showDomBaseURIConcepts();
PHPのDom\DocumentFragmentクラスが持つbaseURIプロパティは、ドキュメントやノードの基準となるURI(Uniform Resource Identifier)を返します。このURIは、例えばドキュメント内の相対パスのリンクなどを絶対パスに解決する際の基準として利用されます。
Dom\DocumentFragmentは、HTMLやXMLドキュメントの完全なものではなく「断片」を扱うためのクラスです。そのため、それ自体は特定の場所やURLに関連付けられていません。この特性から、Dom\DocumentFragmentインスタンスのbaseURIプロパティは、通常nullを返します。これは、基準となるURIが明確に設定されていないことを意味します。
比較として、同じDOM系のクラスであるDom\Documentの場合、特定のファイルやURLからドキュメントを読み込んだ際には、その読み込み元のパスやURLがbaseURIとして設定されることがあります。しかし、文字列からHTMLなどをロードした場合には、Dom\DocumentのbaseURIも同様にnullを返します。
サンプルコードでは、まずDom\DocumentFragmentのbaseURIがnullであることを示しています。次に、Dom\Documentを文字列から作成した場合もbaseURIがnullになることを確認しています。さらに、Dom\DocumentFragmentがDom\Documentに追加されたとしても、フラグメント自身のbaseURIは依然としてnullのままです。フラグメント内の相対パスは、最終的にそれを包含するDom\DocumentのbaseURIを基準に解決されることになります。
このbaseURIプロパティは引数を取らず、戻り値として基準URIを示す文字列(string)または基準URIが存在しないことを示すnullを返します。
Dom\DocumentFragmentのbaseURIは、通常nullを返します。これは、HTML/XMLの断片を扱うため、それ自体で基準となるURIを持たないことが一般的だからです。一方、Dom\Documentは、ファイルやURLからロードされた場合にそのパスやURLがbaseURIとして設定されることがあります。文字列からロードしたDom\Documentの場合もnullになります。サンプルコードのようにDom\DocumentにDom\DocumentFragmentを追加しても、フラグメント自身のbaseURIはnullのままです。フラグメント内の相対パスは、アタッチされたDom\DocumentのbaseURIを基準に解決されるため、Dom\DocumentFragmentのbaseURIがnullであることに戸惑わないでください。
Dom\DocumentFragmentのbaseURIを取得する
1<?php 2 3/** 4 * Dom\DocumentFragment クラスの baseURI プロパティの使用例を示します。 5 * 6 * Dom\DocumentFragment は、HTMLやXMLのDOMツリーの断片を表現するためのオブジェクトです。 7 * 通常、このオブジェクトはどのドキュメントにもアタッチされていないため、 8 * その baseURI プロパティは null を返します。 9 * baseURI は、そのノードに関連するURIを解決するための基準URIを示します。 10 * 11 * @return void 12 */ 13function demonstrateDocumentFragmentBaseURI(): void 14{ 15 // 新しい Dom\DocumentFragment オブジェクトを作成します。 16 // この時点では、特定のドキュメントやファイルに所属していません。 17 $fragment = new Dom\DocumentFragment(); 18 19 // Dom\DocumentFragment の baseURI プロパティにアクセスします。 20 // DOMツリーに属していないノードの baseURI は null となるため、 21 // ここでは null が返されることが期待されます。 22 $baseURI = $fragment->baseURI; 23 24 echo "Dom\\DocumentFragment の baseURI プロパティを取得します。\n"; 25 echo "期待される値: null (Dom\\DocumentFragment は通常、特定のURIを持つドキュメントに属していないため)\n"; 26 echo "実際の値 : " . (is_null($baseURI) ? 'null' : "'" . $baseURI . "'") . "\n"; 27 28 // 補足: この baseURI は、ウェブアプリケーション全体の「ベースURL」とは異なる、 29 // DOMノードに固有の基準URIを指します。 30} 31 32// 関数を実行して結果を表示します。 33demonstrateDocumentFragmentBaseURI(); 34
PHP 8のDom\DocumentFragmentクラスにあるbaseURIプロパティは、そのDOMノードが関連付けられている基準URIを取得するために使用されます。Dom\DocumentFragmentは、HTMLやXMLのDOMツリーの特定の部分、つまり「断片」を表現するオブジェクトです。しかし、このオブジェクトは通常、特定のWebページやXMLファイルなどのドキュメントに直接アタッチされていないため、基準URIを持ちません。
このため、Dom\DocumentFragmentのインスタンスに対してbaseURIプロパティにアクセスすると、多くの場合nullが返されます。これは、ノードがどのドキュメントにも属していないため、基準となるURIが存在しないことを意味します。
baseURIプロパティは引数を必要とせず、そのノードの基準URIを示す文字列、または基準URIが存在しない場合はnullを戻り値として返します。このプロパティが指すのは、Webアプリケーション全体のベースURLとは異なり、あくまで個々のDOMノードに固有の基準URIです。システムエンジニアを目指す方は、Dom\DocumentFragmentが独立した断片であるという特性を理解し、その文脈でのbaseURIの挙動を把握してください。
Dom\DocumentFragmentのbaseURIプロパティは、このオブジェクトが特定のURIを持つドキュメントに通常アタッチされていないため、ほとんどの場合nullを返します。このbaseURIは、ウェブアプリケーション全体の「ベースURL」とは異なり、DOMノードに固有の基準URIを指すため、概念を混同しないよう注意が必要です。戻り値の型がstring|nullであることから、取得した値を利用する際は必ずnullチェックを行い、nullの可能性があることを考慮した安全なコードを記述してください。直接文字列として扱おうとするとエラーの原因となることがあります。