IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  XML  >

ヒント: XML Schema Standard Type Library を使って楽をする

スキーマ定義を使ってルーチンとしての妥当性検査を楽にする

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

サンプルコード

原文はこちら

原文はこちら


レベル: 初級

Nicholas Chase (ibmquestions@nicholaschase.com), Freelance writer, Backstop Media

2007年 7月 31日

XML を妥当性検査することで、受け入れ可能なデータを定義する複雑なルールを作成することができます。しかしそうしたルールは、実際に使わない限り誰の役にも立ちません。このヒントでは、XML Schema Standard Type Library を使って、E メール・アドレスや電話番号などの書式設定のあるデータを要求するプロセスを単純化する方法を学びます。

このヒントは、皆さんが 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: この文書は、電話番号のさまざまな部分 (PhoneCountryCodePhoneAreaCode 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 codex-tipxsslt-source.zip1KBHTTP
ダウンロード形式について


参考文献

学ぶために
  • 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 から直接ダウンロードすることができます。


議論するために


著者について

Nicholas Chase は、Lucent Technologies や Sun Microsystems、Oracle、the Tampa Bay Buccaneers などの会社で Web サイト開発に携わってきました。彼は高校の物理の先生であり、低レベル放射性廃棄物施設の管理者であり、オンライン SF 雑誌の編集者であり、マルチメディアのエンジニアであり、Oracle インストラクターであり、あるインタラクティブ・コミュニケーション会社の最高技術責任者でもあります。『XML Primer Plus』(Sams 刊) を含めて、何冊かの著作があります。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ