【PHP8.x】schemaValidateメソッドの使い方

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

作成日: 更新日:

基本的な使い方

schemaValidateメソッドは、Dom\XMLDocumentクラスに属し、現在のXMLドキュメントが指定されたスキーマ定義ファイルに準拠しているかどうかを検証するメソッドです。このメソッドは、XMLドキュメントの構造、要素、属性、データ型などが、提供されたスキーマファイル(通常はXSDファイル)で定義されたルールに則っているかを厳密にチェックします。

主に、外部システムから受け取ったXMLデータが期待通りの形式であるかを確認する場合や、アプリケーション内部で生成したXMLの整合性を保証する場合に利用されます。これにより、不正な形式のXMLデータによって引き起こされる可能性のある問題を事前に防ぎ、システムの安定性と信頼性を高めることができます。

検証が成功し、XMLドキュメントがスキーマに適合していると判断された場合はtrueを返します。一方、適合しない場合はfalseを返します。検証に失敗した場合の詳細なエラー情報を取得するには、libxml_use_internal_errors()関数を用いてLIBXML_USE_INTERNAL_ERRORSフラグを設定し、内部エラー機能を有効にすることが推奨されます。これにより、どの部分がスキーマに準拠していないかを特定し、問題解決に役立てることができます。

構文(syntax)

1<?php
2
3$xmlDocument = new Dom\XMLDocument();
4$isValid = $xmlDocument->schemaValidate('path/to/schema.xsd');
5
6?>

引数(parameters)

string $filename, int $flags = 0

  • string $filename: 検証に使用するXMLスキーマファイルのパスを指定する文字列
  • int $flags = 0: 検証の挙動を制御するフラグを指定する整数。デフォルトは0(フラグなし)。

戻り値(return)

bool

このメソッドは、XMLドキュメントが指定されたXMLスキーマに対して有効であるかどうかを示すブール値を返します。検証が成功した場合は true を、失敗した場合は false を返します。

サンプルコード

PHP XMLスキーマ検証する

1<?php
2
3/**
4 * XML ファイルを XML Schema (XSD) で検証するサンプルコード
5 *
6 * @param string $xmlFilePath 検証する XML ファイルのパス
7 * @param string $xsdFilePath 検証に使用する XSD ファイルのパス
8 * @return bool 検証に成功した場合は true、失敗した場合は false
9 */
10function validateXmlByXsd(string $xmlFilePath, string $xsdFilePath): bool
11{
12    // XML ドキュメントをロード
13    $dom = new DOMDocument();
14    $dom->load($xmlFilePath);
15
16    // スキーマ検証
17    if ($dom->schemaValidate($xsdFilePath)) {
18        return true;
19    } else {
20        return false;
21    }
22}
23
24// 例: XML ファイルと XSD ファイルのパスを指定して検証
25$xmlFile = 'example.xml'; // 検証する XML ファイル
26$xsdFile = 'example.xsd'; // 使用する XSD ファイル
27
28// 検証を実行
29$isValid = validateXmlByXsd($xmlFile, $xsdFile);
30
31// 結果を出力
32if ($isValid) {
33    echo "XML ファイルは XSD に準拠しています。\n";
34} else {
35    echo "XML ファイルは XSD に準拠していません。\n";
36}
37
38?>

このPHPのサンプルコードは、XMLファイルをXML Schema (XSD)を使って検証する方法を示しています。Dom\XMLDocumentクラスのschemaValidateメソッドを利用します。

まず、validateXmlByXsdという関数を定義しています。この関数は、検証対象のXMLファイルのパス($xmlFilePath)と、検証に使用するXSDファイルのパス($xsdFilePath)を引数として受け取ります。

関数内では、DOMDocumentクラスのインスタンスを作成し、loadメソッドを使ってXMLファイルを読み込みます。次に、schemaValidateメソッドを呼び出し、XSDファイルに基づいてXMLドキュメントを検証します。schemaValidateメソッドは、XMLがXSDに準拠していればtrue、そうでなければfalseを返します。

サンプルコードでは、example.xmlexample.xsdという名前のファイルを検証する例を示しています。これらのファイルは、各自で用意する必要があります。検証結果に応じて、「XML ファイルは XSD に準拠しています。」または「XML ファイルは XSD に準拠していません。」というメッセージが出力されます。

schemaValidateメソッドの引数 $filename は検証に使用するXSDファイルのパスを指定します。オプションの引数 $flags は検証時の挙動を制御するためのフラグですが、ここではデフォルト値の0を使用しています。戻り値は、検証の成否を示す真偽値(bool)です。XMLの構造が定義されたXSDファイルに準拠しているかを確認することで、データの整合性を保つことができます。

Dom\XMLDocument::schemaValidateメソッドは、XMLファイルを指定されたXSDファイルに基づいて検証します。第一引数にはXSDファイルのパスを文字列で指定します。相対パスで指定する場合は、PHPスクリプトからの相対位置に注意してください。

この関数を使用するには、PHPにDOM拡張モジュールがインストールされている必要があります。また、検証対象のXMLファイルとXSDファイルが正しく読み込める状態である必要があります。

検証に失敗した場合、libxml_get_errors()関数で詳細なエラー情報を取得できます。本サンプルコードではエラー処理を省略していますが、実用的なシステムではエラーハンドリングを実装することを推奨します。引数$flagsはデフォルト値の0のままでもおおよその検証は可能ですが、必要に応じて定数を指定し、検証の挙動を細かく制御できます。