Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】Dom\Document::schemaValidateSource()メソッドの使い方

schemaValidateSourceメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

schemaValidateSourceメソッドは、DOMドキュメントに対して、XMLスキーマ定義に基づいて検証を実行するメソッドです。Dom\Documentクラスに属しており、DOMドキュメントが指定されたスキーマ定義に準拠しているかどうかをチェックします。

このメソッドは、XMLスキーマのソース(XMLスキーマ定義を含む文字列)を引数として受け取ります。受け取ったスキーマ定義に基づいて、DOMドキュメント全体の構造、要素、属性、データ型などがスキーマに合致しているか検証します。検証結果はブール値で返され、trueの場合はドキュメントがスキーマに準拠していることを、falseの場合は準拠していないことを意味します。

システムエンジニアを目指す初心者の方にとって、このメソッドは、XMLデータを扱う際にデータの整合性を保証するために非常に重要です。例えば、設定ファイルやデータ交換フォーマットとしてXMLを使用する場合、schemaValidateSourceメソッドを使用することで、データが事前に定義された構造やルールに従っていることを確認できます。これにより、アプリケーションの安定性を高め、予期せぬエラーを防ぐことができます。

このメソッドを使用する際は、有効なXMLスキーマ定義を引数として渡す必要があります。スキーマ定義が無効である場合や、DOMドキュメント自体にエラーが含まれている場合は、期待通りの検証結果が得られない可能性があります。また、エラー処理を適切に行うことで、検証に失敗した場合でもプログラムが正常に動作するように設計することが重要です。

構文(syntax)

1bool Dom\Document::schemaValidateSource(string $source, int $flags = 0): bool

引数(parameters)

string $source, int $flags = 0

  • string $source: 検証するXMLソースを指定する文字列
  • int $flags = 0: 検証の挙動を制御するフラグを指定する整数

戻り値(return)

bool

Dom\Document::schemaValidateSource メソッドは、XML文書が指定されたスキーマに対して有効であるかどうかを検証し、その結果を真偽値(bool)で返します。有効であれば true、無効であれば false を返します。

サンプルコード

PHP Dom Document schemaValidateSourceでXMLを検証する

1<?php
2
3/**
4 * Dom\Document::schemaValidateSource メソッドの使用例。
5 * XML ドキュメントが XSD スキーマ文字列に対して有効であるかを検証します。
6 *
7 * @return void
8 */
9function validateXmlWithInlineSchema(): void
10{
11    // 検証対象となる XML ドキュメントの文字列
12    $xmlString = <<<XML
13<?xml version="1.0" encoding="UTF-8"?>
14<book>
15    <title>PHP for Beginners</title>
16    <author>John Doe</author>
17</book>
18XML;
19
20    // XML ドキュメントを検証するための XSD スキーマ文字列
21    // このスキーマは 'book' 要素とその子要素 'title' および 'author' を定義しています。
22    $xsdSchemaString = <<<XSD
23<?xml version="1.0" encoding="UTF-8"?>
24<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
25    <xs:element name="book">
26        <xs:complexType>
27            <xs:sequence>
28                <xs:element name="title" type="xs:string"/>
29                <xs:element name="author" type="xs:string"/>
30            </xs:sequence>
31        </xs:complexType>
32    </xs:element>
33</xs:schema>
34XSD;
35
36    // Dom\Document クラスの新しいインスタンスを作成します。
37    // PHP 8以降は Dom\Document 名前空間を使用します。
38    $dom = new Dom\Document();
39
40    // XML ドキュメントをロードします。
41    // ロードに失敗した場合、false が返されます。
42    if (!$dom->loadXML($xmlString)) {
43        echo "エラー: XML ドキュメントのロードに失敗しました。\n";
44        return;
45    }
46
47    // Dom\Document::schemaValidateSource メソッドを使用して、
48    // ロードされた XML が提供されたスキーマ文字列に対して有効であるかを検証します。
49    // 引数1: string $source - 検証に使用する XSD スキーマの文字列。
50    // 引数2: int $flags - オプションのフラグ (通常は0)。
51    // 戻り値: bool - スキーマに対して有効な場合は true、そうでない場合は false。
52    if ($dom->schemaValidateSource($xsdSchemaString)) {
53        echo "成功: XML ドキュメントはスキーマに対して有効です。\n";
54    } else {
55        echo "エラー: XML ドキュメントはスキーマに対して無効です。\n";
56        // スキーマ検証エラーの詳細は、libxml_get_errors() 関数で取得できますが、
57        // ここでは簡潔にするため省略します。
58    }
59}
60
61// 定義した関数を実行します。
62validateXmlWithInlineSchema();

このサンプルコードは、PHP 8で利用できるDom\Document::schemaValidateSourceメソッドを用いて、XMLドキュメントがXSDスキーマの定義に適合しているかをプログラム内で検証する方法を示しています。

まず、検証対象となるXMLドキュメントの文字列と、そのXMLの構造やデータ型を定義するXSDスキーマの文字列を準備します。XSDスキーマは、XML要素の名前、属性、順序、データ型などのルールを記述したものです。

次に、XMLドキュメントを扱うためのDom\Documentクラスのインスタンスを生成し、loadXMLメソッドを使って準備したXML文字列をこのインスタンスに読み込みます。この段階でXMLの形式が正しいかどうかの基本的なチェックも行われます。

その後、schemaValidateSourceメソッドを実行して、本格的なスキーマ検証を行います。このメソッドの最初の引数には、検証に使用するXSDスキーマの文字列を渡します。二番目の引数$flagsはオプションのフラグで、通常は0を指定します。メソッドは、XMLドキュメントが提供されたXSDスキーマに準拠していればブール値のtrueを、準拠していなければfalseを返します。

最終的に、この戻り値を確認し、XMLドキュメントがスキーマに対して有効であるか無効であるかの結果を出力します。この機能は、外部システムから受け取ったXMLデータの整合性を自動的にチェックする際などに非常に有用です。

PHP 8以降ではDom\DocumentクラスがDom名前空間に属します。XMLの検証を行う際は、まずloadXML()メソッドでドキュメントが正しくロードできたか確認することが重要です。schemaValidateSource()メソッドはXSDスキーマを文字列として直接受け取るため、ファイルからスキーマを読み込む場合は別途ファイル読み込み処理が必要です。検証が失敗した際には、libxml_use_internal_errors(true)を設定し、libxml_get_errors()関数で詳細なエラー情報を取得すると、問題の特定に役立ちます。第2引数のフラグは通常0で問題ありませんが、必要に応じてPHPマニュアルで確認してください。

Dom\Document::schemaValidateSourceでXMLスキーマ検証する

1<?php
2
3/**
4 * Dom\Document::schemaValidateSource メソッドの使用例を示します。
5 * この関数は、XML文字列が指定されたスキーマ文字列に準拠しているかを検証します。
6 * システムエンジニアを目指す初心者の方にも分かりやすいように、
7 * シンプルなXMLとXSDの例を用いています。
8 */
9function validateXmlSchemaFromSourceExample(): void
10{
11    // 検証対象となるXMLデータ
12    // このXMLはシンプルな商品情報を表しています。
13    $xmlData = <<<XML
14<?xml version="1.0" encoding="UTF-8"?>
15<product>
16    <id>123</id>
17    <name>Sample Widget</name>
18    <price>99.99</price>
19</product>
20XML;
21
22    // XMLの構造を定義するスキーマ (XSD) データ
23    // このXSDは、product要素がid(整数), name(文字列), price(小数)を持つことを定義しています。
24    $xsdSchema = <<<XSD
25<?xml version="1.0" encoding="UTF-8"?>
26<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
27    <xs:element name="product">
28        <xs:complexType>
29            <xs:sequence>
30                <xs:element name="id" type="xs:integer"/>
31                <xs:element name="name" type="xs:string"/>
32                <xs:element name="price" type="xs:decimal"/>
33            </xs:sequence>
34        </xs:complexType>
35    </xs:element>
36</xs:schema>
37XSD;
38
39    // Dom\Document オブジェクトを新しく作成します。
40    // このオブジェクトを使ってXML文書を操作します。
41    $document = new Dom\Document();
42
43    // 検証のためにXMLデータをDom\Documentにロードします。
44    // schemaValidateSource を呼び出す前にXMLをパースしておく必要があります。
45    $document->loadXML($xmlData);
46
47    // schemaValidateSource メソッドを使ってXMLがスキーマに準拠しているか検証します。
48    // 第1引数にスキーマ文字列、第2引数にフラグ(オプション、デフォルトは0)を渡します。
49    // 戻り値は bool (真偽値) です。trueなら準拠、falseなら非準拠。
50    $isValid = $document->schemaValidateSource($xsdSchema);
51
52    // 検証結果を表示します。
53    if ($isValid) {
54        echo "XMLデータは提供されたスキーマに準拠しています。\n";
55    } else {
56        echo "XMLデータは提供されたスキーマに準拠していません。\n";
57        // 検証エラーの詳細が必要な場合、libxml_use_internal_errors(true) を設定し、
58        // libxml_get_errors() を使用することでエラー情報を取得できますが、
59        // このシンプルな例では割愛しています。
60    }
61}
62
63// 上記の関数を実行して、サンプルコードの動作を確認します。
64validateXmlSchemaFromSourceExample();
65

Dom\Document::schemaValidateSourceメソッドは、XML文書が指定されたスキーマ(XSD)定義に準拠しているかを検証するための機能です。このメソッドは、スキーマ定義をファイルとして読み込むのではなく、PHPの文字列として直接与えることができる点が特徴です。

このサンプルコードでは、まず商品情報を表すXMLデータと、そのXMLの構造を定義するXSDスキーマをそれぞれ文字列として用意しています。次に、Dom\Documentオブジェクトを新しく作成し、そのloadXML()メソッドを使って検証対象のXMLデータを内部に読み込みます。

その後、schemaValidateSource()メソッドを呼び出して検証を行います。このメソッドの最初の引数には、XMLを検証するためのXSDスキーマの定義文字列を指定します。2番目の引数である$flagsはオプションで、通常はデフォルト値の0で問題ありません。メソッドは検証結果を真偽値(bool)で返します。XMLデータがスキーマに正しく準拠していればtrue、そうでなければfalseが返されます。これにより、XMLの形式が期待通りの構造になっているかを簡単に確認し、プログラムの信頼性を高めることができます。

Dom\Document::schemaValidateSourceメソッドを使用する際は、まず検証したいXMLデータをloadXMLなどでDom\Documentオブジェクトに読み込んでおく必要があります。このメソッドの第1引数には、XMLスキーマ(XSD)の内容を文字列として直接渡す点にご注意ください。ファイルパスではありません。戻り値は検証の成否を示す真偽値(true/false)です。検証が失敗し、より詳細なエラー情報が必要な場合は、libxml_use_internal_errors(true)を設定し、libxml_get_errors()関数でエラー情報を取得できます。また、検証対象のXMLやXSDの構文自体に誤りがあると、検証が正しく行われない可能性があるため、事前に構文の確認も重要です。この機能はPHPのDOM拡張モジュールに依存していますので、ご自身のPHP環境で有効になっていることをご確認ください。

関連コンテンツ

関連IT用語

関連プログラミング言語