XML Schemaで文字列長を制約する
要素ノードに対して、文字列長の制約条件を定義できます。文字列の最大長は<xsd:maxLength>要素、最小長は<xsd:minLength>要素、特定の文字数を規定するなら<xsd:length>要素を使用します。
カテゴリ | XML Schema | |
関連要素 | <xsd:maxLength>、<xsd:minLength>、<xsd:length> | |
関連記事 | XML Schemaで文字列パターンを定義する XML Schemaで選択型の値を定義する |
スキーマにおいて、文字列長を規定することは大変重要なことです。というのも、XML文書としてやりとりされたデータを、いざ自分のシステムなりデータベースなりに格納しようとしても、文字列長が規定されたフィールド長を超えていたら、そもそもデータベースに格納すらできません。
別稿「XML Schemaで文字列パターンを定義する」でも紹介した正規表現チェック(<xsd:pattern>)がむしろ高レベルなデータのセマンティックな妥当性を保証するものだとするならば、文字列長などのチェックはより低レベル(基本的な)データの最低限の妥当性を保証する規定といえます。
具体的な例を見てみましょう。なお、対象となるXML文書は、別稿「XML Schemaで文字列パターンを定義する」で用いたbooks.xmlを使用します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
要素ノードに対して、文字列長の制約条件を定義する一般的な構文は、以下のとおりです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
<xsd:maxLength>、<xsd:minLength>要素は、それぞれ文字列の最大長、最小長を規定します。最大長のみ(あるいは、最小長のみ)を規定したいなら、<xsd:maxLength>、<xsd:minLength>要素のいずれかを指定します。○〜○文字の間という範囲ではなく、○文字と特定の文字数を規定したい場合には(例えば、特定のコード番号のようなデータの場合です)、<xsd:length>要素を使用します。<xsd:maxLength>と<xsd:length>要素とは混同しやすいので、注意してください。
XML Schemaでは、要素内容の必須チェックを行うことはできませんが(要素記述の有無は検証できますが、文字列型のデータが空文字列でもエラーとはなりません)、<xsd:minLength>要素を1に指定することで、疑似的な必須チェックを実現できます。
なお、ここでは元となるデータ型が文字列(string)であることを前提にしていますが、元のデータ型がリストである場合、<xsd:maxLength>、<xsd:minLength>、<xsd:length>要素は異なる挙動をしますので、注意してください(詳細については、別稿「XML Schemaで値リストの個数を制限する」を参照)。
実際に、妥当性検証を行いたい場合には、別稿「XML SchemaでXML文書の妥当性を検証する」のサンプルを参考にするとよいでしょう。変更個所は、XMLSchemaCache.addメソッドの第2引数(XML Schemaのファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.