検索
連載

XML Schemaで空要素を定義するXMLテクニック集(13)(2/3 ページ)

Share
Tweet
LINE
Hatena

XML Schemaでnull値の許容を定義する

アイコン

要素の値を取りあえずブランクにしておきたいケースでは、対象の要素定義に「nillable="true"」を記述し、XML文書側で「xsi:nil="true"」と明示的に宣言します。これでパーサの検証時にnull値が許容されます。

カテゴリ XML Schema
関連要素 <xsd:element>
関連記事 XML Schemaで空要素を定義する
XML Schemaで複数の型を結合する

 別稿「XML Schemaで空要素を定義する」では、空要素を規定するための方法について紹介しました。しかし、これはあらかじめ要素が空であることが「決まっている」場合の手法です。例えば、書籍情報などでまだ発刊日が決まっていない、価格が決まっていないなどの理由で、取りあえずデータをブランクのままにしておきたいケースもあります。

 文字列データの場合、空文字列をセットしてもパーサの検証に引っ掛かることはありませんが、数値や日付データの場合、ブランクは妥当性エラーです。このような場合には、どのようにしたらよいのでしょう。

 以下では、暫定的なnullデータに対処する2つの方法を紹介します。対象となるXML文書は、別稿「XML Schemaで文字列パターンを定義する」で用いたbooks.xmlを参照してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 まず1つ目の例は、別稿「XML Schemaで複数の型を結合する」で紹介した、<xsd:union>要素を用いる手法です。要素に対して、列挙値として空文字列を含むデータ型と本来規定すべきデータ型とを結合したうえで定義します。

 ただし、この手法は記述が冗長であるうえ、常に空文字列を許す定義となってしまい、厳密に制約するという観点からはあまり好ましくありません。

 そこで登場するのが、以下の手法です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 対象の要素定義に「nillable="true"」という一文を追記しています。これによって、<price>要素に対してnull値が許されるようになりました。ただし、無条件にnullを許すというわけではありません。

 元となるbooks.xmlを見てみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 <price>要素に「xsi:nil="true"」と明示的に宣言した場合にのみ<price>要素にnull値のセットを許すのです。xsi:nil属性が指定されていない場合、<price>要素にnullを指定することは許されません。なお、xsi:nil属性を使用する場合には、必ずxsi名前空間の宣言を行うのを忘れないようにしてください。

 これによって、より明示的なnullデータの管理を行うことができるというわけです。

実際に、妥当性検証を行いたい場合には、別稿「XML SchemaでXML文書の妥当性を検証する」のサンプルを参考にするとよいでしょう。変更個所は、XMLSchemaCache.addメソッドの第2引数(XML Schemaのファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る