本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

データのためのXML: XLinkとデータ

XLinkを使用してデータの表現を単純化する

Kevin Williams (kevin@blueoxide.com), CEO, Blue Oxide Technologies, LLC
Kevin Wiliams氏は、情報管理システムのためのXML設計を専門とするVeridianの一部門であるEquientの主任XMLアーキテクトです。XMLに関する数冊の共著がWrox Pressから出版されています。彼の連絡先はkevin@realworldxml.comです。Kevin Williams氏のWebサイト www.realworldxml.com では、XMLについて彼が思うこと、ヒント、秘けつ、大胆な主張について知ることができます。

概要: この記事では、データを表現するためにXLinkポインターを使用する方法を取り上げ、XML文書をよりコンパクトで柔軟なものとするにはどうしたらよいかを説明します。サンプル・コードでは、XLinkポインターを使った場合と使わない場合の送り状を例として取り上げるとともに、URLアドレス可能なデータベースでXLinkを使った場合の例を取り上げます。

日付:  2001年 7月 01日
レベル:  初級 この記事の原文:  英語
アクティビティー: 1772 ビュー
お気軽にご意見・ご感想をお寄せください: 


最近、W3CはXLinkという仕様のステータスを勧告に格上げしました。この記事では、XLinkを取り上げ、これをデータの表現と伝送を単純化するために使用する方法を説明します。

ところで、XLinkとは何か

W3CのXLink仕様を引用すると次のようになります。「XML Linking Language (XLink) は、リソース同士のリンクを作成および記述する目的で、XML文書に要素を挿入することを可能にする」。次いで仕様は、XLinkを使って定義されるリンクはHTMLのハイパーリンクに類似していると述べています。この主張のために、多くのプログラマーは、これが仕様の唯一の目的であると結論してしまいます。しかし、XLinkには大きな利益をもたらす別の使い方があります。すなわち、データ・リソース同士の関係を示すということです。


XLinkの使用例

大規模な製造会社で使用するような、典型的な注文追跡アプリケーションを考慮してみましょう。通常、注文を記述するXML文書には、注文した顧客、注文の状況、注文中の個々の品目、およびその数量と価格に関する情報が含まれているものです。消費者がこの文書を使用する方法は多岐に渡ることでしょう。会計課の担当者が注文データを要求する場合、関心があるのは顧客に請求する合計価格だけかもしれません。送り状に記載されている個々の品目の詳細は (数量と価格を別にすれば)、無関係でしょう。それとは対照的に、自分の注文を (おそらくはオンラインで表示しようとして) 要求する顧客は、より多くの情報を見たいと思うかもしれません。たとえば、品目に上の部品の、人間が理解できる名前などです。各顧客に全詳細を記した文書を伝送することは、必ずしも理にかなっているとは限りません。理想的なのは、注文の要点と (基本的な点だけに関心を持つ消費者向け)、より詳細な情報を入手するためのポインターだけを伝送することでしょう。XLinkは、これを達成するための優れた方法となります。

全詳細を記した文書はリスト1に示すようなものとなるかもしれません。


リスト1. 送り状文書全体 (顧客情報と部品情報が組み込まれている)
                
<?xml version="1.0"?>
<order>
  <orderDate>7/23/2001</orderDate>
  <shipDate>7/26/2001</shipDate>
  <customer>
    <customerID>18273</customerID>
    <customerName>Fred Q. Customer</customerName>
    <billingAddress>
      <address1>100 Main St.</address1>
      <city>Anywhere</city>
      <state>AZ</state>
      <zip>12345</zip>
    </billingAddress>
    <shippingAddress>
      <address1>800 Corporate Dr.</address1>
      <address2>Suite 314</address2>
      <city>Anywhere</city>
      <state>AZ</state>
      <zip>12345</zip>
    </shippingAddress>
  </customer>
  <lineItem>
    <part>
      <partID>W-127</partID>
      <partName>Widget</partName>
      <partSize>2-inch</partSize>
      <partColor>Blue</partColor>
    </part>
    <quantity>17</quantity>
    <unitPrice>0.20</unitPrice>
  </lineItem>  <lineItem>
    <part>
      <partID>S-387</partID>
      <partName>Sprocket</partName>
      <partSize>1-inch</partSize>
      <partColor>Red</partColor>
    </part>
    <quantity>31</quantity>
    <unitPrice>0.40</unitPrice>
  </lineItem>  
</order>

リスト1に示した完全な送り状は、消費者にとって不要な情報が含まれているだけでなく (消費者はそうした情報を単に破棄するだけでしょう)、データを保管するためにXMLをそのまま使った場合、問題を引き起こす可能性もあります。つまり、各文書に各部品の詳細を組み込むなら、部品の情報の繰り返しでディスク・スペースが無駄になってしまうということです。しかし、ここでは、情報をオンデマンドでリレーショナル・データベースから引き出すものとします。この種の情報を保持するデータベースは、次の3つの主な表を持つように設計されているのが一般的です。すなわち、製造業者のすべての顧客を定義するCustomer表、製造業者が販売するすべての部品を記述するPart表、上記の2つの表を関連付けて、どの顧客がどの部品をいつ、どれほどの数量注文したかを示す、Order表です。ここから、上の文書を制御可能な部分に分割する方法に関するヒントが得られます。

これに従い、リスト2では、構造体の中のcustomerpart を置き換えて、これらの要素だけを含んだ文書へのXLink参照としています。結果として作成される文書は、リスト2、3、4、5のようになるでしょう。


リスト2. XLinkの単純リンクを使った、送り状文書の修正版
                
<?xml version="1.0"?>
<order xmlns:xlink="http://www.w3.org/1999/xlink">
  <orderDate>7/23/2001</orderDate>
  <shipDate>7/26/2001</shipDate>
  <customer xlink:href="customers/18273.xml">18273</part>
  <lineItem>
    <part xlink:href="parts/W-127.xml">W-127</part>
    <quantity>17</quantity>
    <unitPrice>0.20</unitPrice>
  </lineItem>
  <lineItem>
    <part xlink:href="parts/S-387.xml">S-387</part>
    <quantity>31</quantity>
    <unitPrice>0.40</unitPrice>
  </lineItem>  
</order>


リスト3. customers/18273.xml
                
<?xml version="1.0"?>
<customer>
  <customerID<18273</customerID>
  <customerName>Fred Q. Customer</customerName>
  <billingAddress>
    <address1>100 Main St.</address1>
    <city>Anywhere</city>
    <state>AZ</state>
    <zip>12345</zip>
  </billingAddress>
  <shippingAddress>
    <address1>800 Corporate Dr.</address1>
    <address2>Suite 314</address2>
    <city>Anywhere</city>
    <state>AZ</state>
    <zip>12345</zip>
  </shippingAddress>
</customer>


リスト4. parts/W-127.xml
                
<?xml version="1.0"?>
<part>
  <partID>W-127</partID>
  <partName>Widget</partName>
  <partSize>2-inch</partSize>
  <partColor>Blue</partColor>
</part>


リスト5. parts/S-387.xml
                
<?xml version="1.0"?>
<part>
  <partID>S-387</partID>
  <partName>Sprocket</partName>
  <partSize>1-inch</partSize>
  <partColor>Red</partColor>
</part>

この方法で情報を構造化することの明らかな利点をご理解いただけることでしょう。会計課が単に顧客18273に請求書を送付するに過ぎないのなら (それとともに、そのIDが会計ソフトウェアに含まれているなら)、必要な情報を入手するためにしなければならないのは、注文文書を検索することだけです。この情報が記載される文書は、余分の情報がすべて組み込まれていた元の文書 (リスト1) に比べて著しく小さくなります。アプリケーションをセットアップすることにより、送り状をオンラインで検索する顧客に対して自動的に生成された情報が表示されるようにしたり (ページをレンダリングするスタイル・シートは、初期レンダリング時に顧客と部品に関する詳細情報を入手できるでしょう)、詳細情報をハイパーリンクで表示して、顧客が横断できるようにしたりすることができるでしょう。ハイパーリンクで構造化された文書は、より柔軟で、よりアトミックなものとなります。消費者は関係のある部分だけを検索することができます。

この戦略は自分のシステムにとってどんな益があるだろうと考えられるかもしれません。第一に、データはリレーショナル・データベースに保管されることになるでしょう。データを、必要に応じてオンザフライで生成されるXML文書と一緒に、ネイティブのXMLデータベースに保管することはなくなります。このアプローチの利点を2つの方法で活用できます。顧客情報および部品情報が頻繁に更新されないのならば、顧客または部品が作成または生成された時点でそれらを表わすXML文書を生成できます。そうすれば、このデータが要求された場合に、コストのかかる余分なデータベース呼び出しを実行しないで済みます。これにより、リレーショナル・データベースにまったくアクセスせずに、顧客と部品のカタログを作成することもできます。ご使用のリレーショナル・データベースがURLアドレスでアクセス可能なら (大部分のリレーショナル・データベースはすでにこの機能を備えているか、近日中に備える予定です)、アクセス機構 (ストアード・プロシージャーなど) を作成し、オンザフライで情報の検索が可能になります。この点は、リスト6 の架空の例で示します。


結論

この記事は、XLinkの基本機能を使って文書構造を単純化したり、ネットワークの伝送オーバーヘッドを削減したりする方法を明らかにするものです。ここに示したのは単純リンクの使用法に過ぎません。XLinkには高度なリンク機能も備わっており、それを使えば多数のリソースを一緒に関連付けることができます (たとえば、XLinkのリンクベースを作成して、顧客とその注文すべてを関連付けることができるかもしれません)。XMLとそれを支援するテクノロジーが成熟するにつれ、プログラマーが情報システムのインプリメント方法を決定する際の柔軟性は広がり、クライアントの必要に最も合致する方法でソリューションを調整できるようになるでしょう。


参考文献

著者について

Kevin Wiliams氏は、情報管理システムのためのXML設計を専門とするVeridianの一部門であるEquientの主任XMLアーキテクトです。XMLに関する数冊の共著がWrox Pressから出版されています。彼の連絡先はkevin@realworldxml.comです。Kevin Williams氏のWebサイト www.realworldxml.com では、XMLについて彼が思うこと、ヒント、秘けつ、大胆な主張について知ることができます。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=243016
ArticleTitle=データのためのXML: XLinkとデータ
publish-date=07012001
author1-email=kevin@blueoxide.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。