連載
» 2004年05月26日 10時00分 公開

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

[山田祥寛,@IT]
前のページへ 1|2|3       

XML Schema内でコメントを定義する

アイコン

スキーマ定義の中にコメントを表現するには、<xsd:annotation>要素を使います。この配下には、システム的に利用される情報用の<xsd:appInfo>要素、人間によって利用される情報用の<xsd:documentation>要素を記述します。

カテゴリ XML Schema
関連要素 <xsd:annotation>、<xsd:appinfo>、<xsd:document>

 XML Schemaは、データ型やノードの階層関係を極めて柔軟に、かつ高度に定義できる、優れたスキーマ言語ですが、それはあくまでコンピュータ上で自動的にデータを検証、操作するためのものです。

 つまり、XML Schemaは、<title>要素が1〜50けたの文字列で構成されることを表現できたり、<price>要素が正数で構成されていることは表現できても、<title>要素が書名であるのか、それともスキーマのタイトルなのか、あるいは、人の階位なのかは表現できないのです。

 このようなセマンティックな定義については、適宜、コメントとしてスキーマ文書に加え、後からそのスキーマ文書を人間が見たときにある程度の内容を理解できるようにしておく必要があります。

 このコメントを表現するのが、<xsd:annotation>要素の役割です。まずは、以下に具体的なコードを見てみることにしましょう。

books_annotation.xsd

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:annotation>
    <xsd:appinfo>@IT Samples</xsd:appinfo>
    <xsd:documentation>書籍管理用スキーマ</xsd:documentation>
  </xsd:annotation>

  <xsd:element name="books">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="book" type="book_type"
          minOccurs="0" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string"
                     use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="book_type">
    <xsd:sequence>
      <xsd:element name="title" type="xsd:string" />
      <xsd:element name="author" type="xsd:string" />
      <xsd:element name="published" type="xsd:string" />
      <xsd:element name="price" type="xsd:positiveInteger" />
      <xsd:element name="publishDate" type="xsd:date" />
      <xsd:element name="category" type="xsd:string" />
      <xsd:element name="keywords" type="xsd:string" />
    </xsd:sequence>
    <xsd:attribute name="isbn" type="xsd:string"
                   use="required" />
  </xsd:complexType>
</xsd:schema>


 <xsd:annotation>要素はコメント全体を規定する要素で、パーサは配下の内容を完全に無視します。<xsd:annotation>要素は、スキーマ文書内のありとあらゆる要素の配下に記述できます。

 <xsd:annotation>要素配下には、<xsd:appInfo>要素と<xsd:documentation>要素とを記述することが可能です。単なるコメントであるのに、なぜ2種類のタグに分類されているのか不思議に思うかもしれません。これらタグの使い分けは、スキーマ文書をXML文書として処理する場合に非常に重要なポイントです。

 通常、<xsd:appInfo>要素にはシステム的に利用される情報を、<xsd:documentation>要素には人間によって利用される情報を記述します。例えば、スキーマ文書から動的に仕様書ドキュメントを生成する場合、2つのタグを明確に分類しておくことで、人間にとって必要な<xsd:documentation>要素の内容だけを抽出できるのです。

 なお、<xsd:appInfo>、<xsd:documentation>要素のいずれにもsource属性を指定することが可能です。source属性には、スキーマ文書内には書ききれない、より詳細なドキュメントの場所をURI参照の形式で指定します。また、<xsd:documentation>要素にのみxml:lang属性を指定できます。これによって、配下に記述されている情報がどの言語に属するものなのかを規定でき、自動的なドキュメント生成の場合にも対応言語ごとに分岐できるようになるというわけです。

<xsd:annotation>
  <xsd:appinfo>@IT Samples</xsd:appinfo>
  <xsd:documentation source="http://www.wings.msn.to/"
                     xml:lang="ja"
>
    書籍管理用スキーマ</xsd:documentation>
</xsd:annotation>


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


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。