XSDバリデーター

整形式のXMLドキュメントでも、依然として間違っていることがあります: 必須の要素が欠けている、属性に誤ったデータ型を使っている、要素の順序が間違っている、など。XSD(XML Schema Definition)は、ドキュメントがどう見えるべきかを正確に記述します。このバリデーターは、あなたのXMLをそのXSDと組み合わせ、W3C XMLスキーマバリデーターを実行し、すべての違反を行、要素、破られた具体的な制約とともに列挙します。

XSDに対してXMLを検証する方法

  1. 1

    両方のファイルを貼り付け

    片側にXML、もう片側にXSDスキーマ。複数のスキーマをまとめて貼り付けられます。

  2. 2

    検証を実行

    パーサーが要素、属性、型をスキーマの宣言に照合します。

  3. 3

    エラーを確認

    各違反は要素のパス、期待される制約、実際の値を表示します。

  4. 4

    修正して再検証

    その場で編集し、再読み込みなしで再実行します。

XSDがチェックするもの

  • 要素名と多重度: 必須、任意、最小/最大出現回数。
  • 要素の順序: sequence、choice、all。
  • 属性の有無と型: 必須 vs 任意、デフォルト値、固定値。
  • データ型: xs:string、xs:integer、xs:decimal、xs:dateTime、xs:boolean、xs:anyURI、カスタム。
  • 制限: 最小/最大長、列挙、正規表現パターン、最小/最大値。
  • 参照整合性: 要素をまたぐ制約のための xs:key、xs:keyref、xs:unique。

典型的なエラー

エラー XSD 制約
必須要素 <email> の欠落 minOccurs="1"
<phone> 要素が多すぎる maxOccurs="2" を超過
値 “abc” は有効な整数ではない type="xs:integer"
値 “[email protected]” がパターンに一致しない xs:string の xs:pattern
要素の順序が違う xs:sequence
未知の要素 <foo> スキーマで未宣言
キーの重複 xs:unique 違反

XSDと代替案の選択

  • XSD: W3C標準、冗長、強力、広くサポートされています。エンタープライズXMLの第一候補。
  • RELAX NG: よりシンプルな構文、同等に表現力豊か。ドキュメント形式(DocBook、TEI)で人気。
  • Schematron: ルールベースで、ドキュメントに対してXPathのアサーションを実行します。構造を超えたビジネスルールに良い。
  • DTD: 古く、表現力がはるかに低い。HTMLの歴史的互換性のために依然として使われています。

多くのプロジェクトは、構造にXSDを、複雑なフィールド横断ルールにSchematronを使います。

よくある落とし穴

  • 名前空間が一致しなければなりません。 XSDが targetNamespace="http://example.com" を宣言しているのにXMLがその名前空間を使っていない場合、検証は「宣言が見つかりません」で失敗します。
  • xs:anyTypeは魔法の抜け道ではありません。 何にでも一致しますが、検証はまったく行いません。
  • デフォルト値は属性が欠けている場合にのみ適用されます。明示的な空の値(attr="")はデフォルトを得ません。
  • 空白の扱いは型によって異なります。xs:string はそれを保持し、xs:token は折りたたみ、xs:normalizedString はタブ/改行をスペースに置き換えます。

デバッグのワークフロー

  1. まずスキーマなしで検証(整形式チェック)。パースエラーを修正します。
  2. 次にスキーマに対して検証。
  3. 最初のエラーに集中。 XSDバリデーターはときどきエラーを連鎖させます。最初のものが通常、最も対処しやすいです。
  4. 大きなドキュメントでは、XPathを使って問題のある要素を特定します。

よくある質問

いいえ。別々に貼り付けるか、XML内の xsi:schemaLocation でスキーマを参照してください。ほとんどのツールは両方のアプローチに対応します。

はい。異なる名前空間の要素が現れる場合、それぞれに独自のスキーマが必要です。それらすべてを貼り付けてください。バリデーターはそれらをすべて読み込みます。

XSD 1.0 です。基盤となる libxml エンジンは XSD 1.1 を実装していないため、アサーション、条件付き型、オープンコンテンツといった 1.1 固有の機能は適用されません。

いいえ。XML とスキーマは、その 1 回のリクエストで検証を実行するためだけにサーバーへ送信され、その後は保存もログ記録もされません。

関連ツール

このツールは他の言語でも利用できます