このヒントは、皆さんが XML について理解しており、また XML Schema について少なくとも概要程度の知識があることを前提としています。この記事のサンプルでは XForms を使いますが、XForms について理解している必要はありません。(サンプルを実行するためには、Firefox 用の XForms 拡張機能を http://www.mozilla.org/projects/xforms/ からダウンロードする必要があります。)
XML を妥当性検査できる機能、つまり型に基づく何らかの制約を満たすことを保証できる機能は XML 自体に元々備わっており、Document Type Definitions は XML 仕様の一部です。一層の柔軟性と強力さが必要であることが明らかになって、まもなく XML Schema が生まれました。XML Schema を使うことで、非常に詳細な定義を作成することができます。例えば、ある要素が特定数の追加要素を含まなければならないように指定したり、ある属性が、日時の値や一定のパターンに従うテキスト、あるいは他の任意の構造などを含まなければならないように指定したりすることができます。
例えば、次の XForms フォームを考えてみてください (リスト 1)。
リスト 1. 基本的なフォーム
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<head>
<title>Contact Form</title>
<xforms:model>
<xforms:instance id="content">
<contact xmlns="">
<name />
<email />
<phone />
</contact>
</xforms:instance>
<xforms:submission id="submitContact" method="post"
action="." />
</xforms:model>
<link href="gen_default.css" rel="stylesheet"/>
</head>
<body>
<h1 align="center">Contact information</h1>
<xforms:input ref="/contact/name">
<xforms:label>Name: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/contact/email">
<xforms:label>Email: </xforms:label>
</xforms:input>
<br />
<xforms:input ref="/contact/phone">
<xforms:label>Phone: </xforms:label>
</xforms:input>
<br />
<xforms:submit submission="submitContact">
<xforms:label>Submit</xforms:label>
</xforms:submit>
</body>
</html>
|
このフォームは非常に単純であり、ユーザーの名前と E メール・アドレス、そして電話番号を入力する欄があるだけです (図 1)。
図 1. フォーム
この場合、E メールと電話番号用の入力を、有効な E メール・アドレスと電話番号に制限するか、あるいは少なくとも、それらが適切な形式のアドレスと番号であるように制限した方が便利です。そのためには、この文書にスキーマを追加する必要があります (リスト 2)。
リスト 2. スキーマを追加する
...
<xforms:model>
<xsd:element name="contact">
<xsd:complexType>
<xsd:element name="name" xsd:type="xsd:string" />
<xsd:element name="email" />
<xsd:element name="phone" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xforms:instance id="content">
<contact xmlns="">
<name />
<email />
<phone />
</contact>
</xforms:instance>
...
|
次に、これらのエントリーのうちの 1 つが無効だった場合にユーザーに通知するイベントを追加します (この方法についてはソースコードを見てください)。
現在は E メールと電話番号の定義に型が指定されていないことに注目してください。その理由は、これらの型をチェックしようとすると、正直言って大部分のプログラマーが手間をかけるのをためらうほど面倒になるからです。E メール・アドレスには標準のフォーマットがありますが、実際にはいくつかの形式があります。電話番号も同様ですが、「市外局番あり」、「市外局番なし」、「内線あり」など無限と思えるほどのパターンがあり、その上さらに国コードを考慮する必要があります。
一体誰がそんなチェックをしたいと望むでしょう。少なくとも私はしたくありません。幸い、電話番号や E メール・アドレスなどの一般的な型のライブラリーがあるのです。この XML スキーマ標準型ライブラリーは、http://www.codesynthesis.com/projects/xsstl/ からダウンロードすることができます。このライブラリーをスキーマに追加するには、適当な名前空間と文書をインポートするだけです (リスト 3)。
リスト 3. スキーマ定義をインポートする
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:stl="http://www.codesynthesis.com/xmlns/xsstl">
<head>
<title>Contact Form</title>
<xforms:model>
<xsd:schema targetNamespace=""
xmlns:stl="http://www.codesynthesis.com/xmlns/xsstl">
<xsd:import
namespace="http://www.codesynthesis.com/xmlns/xsstl"
schemaLocation="xsstl.xsd"/>
<xsd:element name="contact">
<xsd:complexType>
<xsd:element name="name" xsd:type="xsd:string" />
<xsd:element name="email" xsd:type="stl:EmailAddress" />
<xsd:element name="phone" xsd:type="stl:PhoneNumber" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xforms:instance id="content">
<contact xmlns="">
<name />
<email />
<phone />
</contact>
</xforms:instance>
<xforms:bind nodeset="/contact/email"
type="stl:EmailAddress"/>
<xforms:bind nodeset="/contact/phone"
type="stl:PhoneNumber"/>
<xforms:submission id="submitContact" method="post"
action="." />
...
|
ここに示した手法は、XForms フォームに埋め込まれたスキーマ文書に使えるだけではなく、任意のスキーマ文書にも使うことができます。必ず適当な名前空間エイリアス (この場合は stl:) を定義し、そして実際の名前空間とスキーマ文書をインポートする必要があります。そうすると、これらの型を、スキーマで定義された他の型とまったく同じように使うことができます。この例の場合では、フォームは EmailAddress 型と PhoneNumber 型を使っています。
この例では、メインの文書をインポートし、すべての型を利用可能にしています。しかし、実際に必要な文書のみをインポートするようにもできます。XML Schema Standard Type Library には、1 つの型を持つ、いくつかの文書が含まれています。
- email-address.xsd:
EmailAddress型は、データを標準の E メール・アドレスに制限します。 - percentage.xsd:
Percentage型は、0 以上 100 以下の数字を表します。 - iso3166-country-code.xsd:
ISO3166CountyCode型はデータに対して、2 文字のストリングであること、そして実際に ISO 3166-1 の国コードの 1 つであること、という 2 つの制限を課します。 - rfc822-date-time.xsd:
RFC822DateTime型は、データが RFC822 の仕様に従って適切にフォーマットされていることを要求します。
ある 1 つの型に関するバリエーションを含む他の文書もあります。
- ipv4-address.xsd: このファイルは、(ドット表記で) 適切な IP アドレスとポートを表す、
IPv4Addressや Port、IPv4Endpointなどの適切なエンドポイントのバリエーションを含みます。またこのファイルは、1 つのストリングを含むのではなく、データの構造化バージョンであるIPv4EndpointStructを含みます。 - phone-number.xsd: この文書は、電話番号のさまざまな部分 (
PhoneCountryCodeやPhoneAreaCode、PhoneSubscriberNumber、PhoneExtensionNumberなど) や、それらをすべて組み合わせて少なくとも加入者番号を要求する 1 つのストリングである PhoneNumber、またさまざまな部分を個々の要素に分割する struct であるPhoneNumberStructなどの仕様を定めています。 - us-state-code.xsd: この文書は、「アメリカ合衆国の州」の定義に関するいくつかのバリエーションを含んでいます。これらの中には、例えば
USStateTerritoryCode(50 の州と 9 つの米領を含む) や、USStateCode(州とワシントンD.C. のみを含む)、USTerritoryCode(米領バージン諸島などの米領を含み、ワシントンD.C. は含まない)、USContinentalStateCode(ハワイを除くすべての州とワシントン特別区を含む)、USContiguousStateCode(ハワイとアラスカを除くすべての州とワシントン特別区を含む) などがあります。
XML Schema Standard Type Library は、モジュールの定義を作成することで楽をすることができる一例です。これらの定義を独自のスキーマにインポートすることによって、皆さん自身が型を定義する手間をかけなくても、これらの型を使うことができるようになります。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| Sample code | x-tipxsslt-source.zip | 1KB | HTTP |
学ぶために
- 「XML
Schema validation in Xerces-Java 2」(Nicholas Chase 著、developerWorks、2002年7月) を読み、XML Schema と、Xerces-Java 2.0 でスキーマ検証を使うプロセスを学んでください。
- 「XForms 入門、第 1 回: フォームのための新しい Web 標準」(Chris Herborth 著、developerWorks、2006年9月) を読み、XForms の実際の動作と、Firefox と Microsoft Internet Explorer で XForms を設定して XForms のサンプルを見る方法を学んでください。
-
XML Schema
Recommendation を読み、XML Schema の機能や、XML Schema 言語を使ってスキーマを作成する方法を学んでください。
-
XForms Recommendation を読み、XHTML フォームと、XHTML フォームを XForms モデルとインスタンス・データ、ユーザー・インターフェースという 3 つの部分に分割することで、表示とコンテンツを分離し、再利用可能にし、サーバーとのやりとりを削減し、そして機器に依存せずスクリプトを少なくする方法を学んでください。
- XML および関連技術において IBM 認証開発者になる方法については、
IBM XML certification を参照してください。
- developerWorks の XML ゾーンは XML の技術ライブラリーとして、広範な話題を網羅した技術記事やヒント、チュートリアル、技術標準、IBM レッドブックなどを用意しています。
-
developerWorks technical events and webcasts で最新情報を入手してください。
-
Technology
bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。
製品や技術を入手するために
- W3C の XML Schema 言語で定義された汎用で便利なデータ型を集めた、XML Schema Standard
Type Library をダウンロードしてください。
- Mozilla で W3C の XForms 1.0 SE 勧告を実装するために、Firefox 用の XForms 拡張機能をダウンロードしてください。
- 皆さんの次期開発プロジェクトを
IBM trial software を使って構築してください。developerWorks から直接ダウンロードすることができます。
議論するために
-
XForms
technology forum では XForms についての質問の答えを得ることができます。
-
developerWorks blogs から developerWorks のコミュニティーに加わってください。
-
XML zone discussion forums に参加してください。これらのフォーラムでは XML を中心に議論が行われています。