Schemaについて解説します。Type、属性グループについて解説していきます。連載を読むに当たり、整形式のXMLに関して十分理解していることを前提とします。Schemaはスキーマ言語です。スキーマとは、XMLの構造です。「いつ、どの要素が出現するのか」「その要素にはどのような属性があるのか」など、XMLの木構造についての定義がスキーマです。スキーマを記述する言語が「スキーマ言語」です。インターネットショップなどでWebを通して商品を購入するとします。この場合、商品や顧客の情報をXML形式にして、商品を販売する企業のサーバに送信します。XML文書を受け取ったサーバ上のプログラムは、XMLを読み、XML文書内の商品データや顧客データを取得します。XML文書を読みデータを取得するプログラムをXMLパーサといいます。XMLパーサは取得したデータをサーバ上の受注プログラムなどに渡し、プログラムが受注処理を行います(図1)。XMLを使った商品受注システムの作業工程ここで商品購入者が好きなようにXML文書を作成し送信したのでは、サーバは受注処理を行うことができません。「顧客住所」など、必要なデータがあります。受注処理を円滑に行うためには、XMLパーサは受注プログラムにデータを渡す前に、必要なデータが発注XMLに含まれているか確認する必要があります。発注XMLを処理するのも、XMLパーサです。各データのフォーマットや出現の順番など、発注XMLが決まった形式で記述されていなければ、XMLパーサは発注XMLから商品データや顧客データを取得できません(図2)。XML文書の構造が決まっていないとXMLパーサはデータ処理できないこのように、XMLパーサがXML文書を適切に処理するには、「どのような構造のXML文書を送受信するのか」という取り決めを、XML送信者と受信者の間で交わす必要があります。そこで、スキーマです。XMLでデータ交換を行う場合、まずXMLの構造、つまりXMLの「スキーマ」を決めます。XMLを送信するコンピュータは、決められたスキーマに沿ったXMLを作成し、送信します。XMLを受信したXMLパーサは、受け取ったXMLがスキーマに沿ったものか確認した後、必要な処理を行います。双方が合意したスキーマに沿ったXMLを交換することにより、商品の発注・受注などの処理を円滑に行うことができます(図3)。スキーマ定義によって、データ構造を統一するスキーマ言語は、XMLのスキーマを記述するための言語で、「XMLがどのような構造になっているのか」を説明するためのものです。XMLパーサは、スキーマ言語を知っていれば、そのスキーマ言語で記述された文書を読むだけで、これから解析しようとしているXML文書の構造が分かるわけです。Definition)でしょう。DTDはXMLが誕生したときから存在するシンプルなスキーマ言語です。XMLの利用が急速に拡大し、その使用目的も多様化してきたため、DTDでは機能が不足してきています。Schemaが作成されました。Schemaは次世代のスキーマ言語として、2001年にW3Cより勧告されました。Schemaは非常に強力なスキーマ言語で、「要素の内容には指定の文字列しか含まない」「この要素は最高5つまで指定可能」など、XMLの構造の細部まで指定できます。その半面仕様が膨大です。Schemaを実装したXMLパーサは作成するのが困難」「使い物にならない」などといわれていました。Schemaは確実に市場に受け入れられつつあります。Schemaを書いてみましょう。Schemaを使って書いてみましょう。World!!</greeting>XMLの構造は、以下のようになっています。Schemaで表すと、以下のようになります。SchemaもXML文書まず、1行目はXML宣言です。Schemaそれ自体もXML文書です。XMLの文法に沿って、要素や属性を記述していきます。最初にXML宣言を記述します。必要ならば、encoding属性を使用して文字コードの設定などを行います。ルート要素は“schema”XML宣言の次は、ルート要素です。Schemaのルート要素は“schema”になります。Schemaでは、schema要素の開始タグと終了タグの間に、XMLの構造がどうなっているのかを記述します。Schemaと指定ところで、要素名“schema”の頭に、“xsd:”という文字列が記述されています。これは、どういう意味なのでしょうか。XMLでは、要素や属性などを自由に作成することができます。そのため、もしかしたらschemaという名前の要素が、どこかでまったく別の用途に使用されているかもしれません。Schemaで定義されたものである」ということを、明確に指示する必要があります。そのために、XMLには「名前空間」と呼ばれる仕組みが用意されています。一度、2行目を見てみましょう。この例では、「xmlns:xsd="http://www.w3.org/2001/XMLSchema"」の部分で、「要素名の先頭にxsd:と付いたら、http://www.w3.org/2001/XMLSchemaで定義された要素である」と宣言しています。これを「名前空間宣言」といいます。Schemaを表す識別子(名前空間URI)です。Schemaのschema要素」という意味になります。“xmlns:”で始まる名前空間宣言で定義された名前空間接頭辞は、その要素自身と、その子要素で使用することができます。要素を宣言する“element”さて、3行目でようやくXMLの構造について表現します。対象とするXMLは、greeting要素が1つだけからなる文書でした。要素は“element”要素を使用して宣言します。「xsd:element」の部分です。Schemaの要素ですから、“xsd:”という接頭辞を付けて記述します。宣言する要素の名前は、name属性で指定します。ルート要素の名前は“greeting”ですので、name属性の値に“greeting”と指定します。要素の内容がどのような構造になっているかは、type属性で指定します。greeting要素は子供要素も属性も持ちません。内容には文字列が含まれます。このような場合、type属性の値には「子供要素・属性なし/内容は文字列」を表す「xsd:string」を指定しましょう。xsd:”が付いています。Schemaで定義しているstring型である」ことを示しています。xsd:”を属性値の“string”の前にも記述します。Schemaには“string”のほかにもいろいろな「型」が用意されていて、type属性の値として指定可能です。「型」については、後の連載記事で順に説明します。最後に、schema要素の終了タグを記述しましょう。</xsd:schema>これで、スキーマが完成しました。今回は要素が1つだけの簡単なXMLでした。Schemaで表すにはどうしたらよいか、説明します。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。