ここで、以前私が、紹介したXMLによるXLinkの使用法 の記事を基にして説明をまとめてみたいと思います。XLinkは有用なものですが、これは他の文書への参照を可能にするだけです。しかし、文書の特定の個所 を参照したい場合も多くあります。これは非常に簡単です。HTMLに名前付きアンカーを使用するのと似て、XLinkの最初にXPointerを使用すればよいのです。2つのスペックは、共に動作するように想定されており、互いに無理なく組み込むことができます。今回の記事では、文書の特定の個所を参照するためにXMLでXPointerを使用する方法を紹介します。
文書の一箇所を参照する場合、まず、リンクのターゲット となる文書を調べる必要があります。できるなら、その文書がid 属性を使用しているか確認してください。こうすれば、リンクおよび位置指定が一層容易になります。リスト1では、弦楽器製作者のDana Bourgeoisが作成したギターのリストが示されており、それには各タイプごとのIDが含まれています。
注: 分かりやすくするため、実際のBourgeois GuitarsのURLは、http://www.bourgeoisguitars.comをhttp://bg.comと省略しています。これで、コード・リストがかなり読みやすくなります。この文書を実際に見る場合は、http://bg.comへの参照をhttp://www.bourgeoisguitars.comへ変えてください。リスト1. Bourgeois guitarsのリスト
<?xml version="1.0"?>
<guitarTypes xmlns="http://bg.com">
<type model="OM" ID="OM">
<picture url="http://bg.com/images/vvOM.jpg" />
<description>Small bodied orchestra model.</description>
</type>
<type model="D" ID="D">
<picture
url="http://bg.com/images/ricky%20skaggs%20model.jpg" />
<description>
Bluegrass powerhouse in a standard dreadnought shape.
</description>
</type>
<type model="slopeD" ID="slopeD">
<picture
url="http://bg.com/images/slope%20d,%20custom%20version.jpg" />
<description>
Slope shouldered dreadnought, perfect for vocal accompaniment.
</description>
</type>
</guitarTypes>
|
このヒントでは、http://bg.com/guitars.xml で、この文書を利用できると想定しています。しかし、文書全体への参照はあまり役に立ちません。代わりに、XPointerを用いれば文書の特定の個所へリンクすることができます。XLinkヒントのxlink:href 属性を覚えておられますか? この属性に与えられる値は、XLinkのターゲットでした。しかし、ページの一箇所を参照するためには、URLへ、シャープ記号 (#) と、これらのXPointer表現を追加すれば済みます。たとえば、xpointer(id("slopeD")) という式は、文書内の「slopeD」というIDを持つエレメントを参照します。そこで、http://bg.com/guitars.xml#xpointer(id("slopeD")) のURLを使用し、リスト1のXMLを参照します。次いで、その文書に記述されているSlope Dモデルのギターを参照します。とても簡単でしょう? 前回はギターを記述するXLinkのヒントを紹介したXML文書を載せましたが、今回は、その修正版を示します。ここでは、XPointerの参照をいくつか使用しています。
リスト2. XML文書でXPointerを使用する
<?xml version="1.0"?>
<guitars xmlns="http://www.newInstance.com/about/guitars"
xmlns:xlink="http://www.w3.org/1999/xlink">
<guitar luthier="Bourgeois"
xlink:type="simple"
xlink:href=
"http://bg.com/guitars.xml#xpointer(id('OM'))"
>
<description xlink:type="simple"
xlink:href=
"http://newInstance.com/guitar/bgOM/pics/bougOM_front_full.jpg"
xlink:actuate="onLoad" xlink:show="embed">
This is a real beauty in a small body. Although this is an OM, I
use it for flatpicking bluegrass as well as for producing some
beautiful fingerstyle sounds.
</description>
</guitar>
<guitar luthier="Bourgeois"
xlink:type="simple"
xlink:href=
"http://bg.com/guitars.xml#xpointer(id('D'))"
>
<description xlink:type="simple"
xlink:href=
"http://newInstance.com/guitar/bgD150/pics/bougd150_con_rim2.jpg"
xlink:actuate="onLoad" xlink:show="embed">
Here's the holy grail in process. Dana Bourgeois is building this
Brazilian rosewood and adirondack bluegrass monster right now.
You'll know it's finished when you hear a run and your windows
shatter!
</description>
</guitar>
</guitars>
|
これで、私の文書は、Dana bourgeoisが保持するDana Bourgeoisのギターに関するXMLのコンテンツを参照できるようになりました。同氏がこの情報を変更しても、心配ありません。私の文書は更新された情報にリンクしているだけなので、最新の状態が保たれています。上記のコードで、アンパーサンド ("&") の代わりに& を使用することにより、XPointer式の中で引用符をエスケープしなければならなかったことに注意してください。この方法では、リンクするURLが長くなります。長いURLは、タイプミスを招きがちです。幸い、XPointerでは、IDタグを持つエレメントへリンクする際、扱いやすい短縮形の使用が許されます。すなわち、xpointer(id("D")) 形式を用いる代わりに、IDの値をターゲットに使用できます。この場合は、これは「D」となります。そこで私は、リスト2の文書をリスト3の文書に簡略化しました。リスト3は、リンクの構文が大変すっきりしています。
リスト3. XPointerにおけるIDリンク短縮形を使用する
<?xml version="1.0"?>
<guitars xmlns="http://www.newInstance.com/about/guitars"
xmlns:xlink="http://www.w3.org/1999/xlink">
<guitar luthier="Bourgeois"
xlink:type="simple"
xlink:href="http://bg.com/guitars.xml#OM"
>
<description xlink:type="simple"
xlink:href="
http://newInstance.com/guitar/bgOM/pics/bougOM_front_full.jpg"
xlink:actuate="onLoad" xlink:show="embed">
This is a real beauty in a small body. Although this is an OM, I
use it for flatpicking bluegrass as well as for producing some
beautiful fingerstyle sounds.
</description>
</guitar>
<guitar luthier="Bourgeois"
xlink:type="simple"
xlink:href="http://bg.com/guitars.xml#D"
>
<description xlink:type="simple"
xlink:href="
http://newInstance.com/guitar/bgD150/pics/bougd150_con_rim2.jpg"
xlink:actuate="onLoad" xlink:show="embed">
Here's the holy grail in process. Dana Bourgeois is building this
Brazilian rosewood and adirondack bluegrass monster right now.
You'll know it's finished when you hear a run and your windows
shatter!
</description>
</guitar>
</guitars>
|
リンク形式を省略し、簡略化するだけではなく、他のエレメントに関係のある エレメントを指し示すこともできます。この例として、リスト4 で私は、bourgeois.xmlで指定されるイメージを指すようにdescription エレメントを変更しています。
リスト4を見ると、最初に、参照される文書の特定のエレメントの検索が行われることに気付くでしょう。このエレメントは、エレメントに付加される相対式に対する参照点として機能します。この例では、そのエレメントの子孫 (descendant キーワードで指定される) が指定されます。ここでは、「picture」と命名されています。このリンクの最終的なターゲットは、「url」と命名されたエレメントの属性値となります。この説明は、冗長ですが、段階を追って理解すれば、かなり単純であることが分かります。
リスト4 で私が、前のセクションで説明したIDリンクの短縮形を使用していない ことに注意してください。このようなIDリンク形式は、直接的なリンクでしか使用できないからです。IDリンクの長い形式を使わないと、幅の広いリンクを行うことはできません (リスト4での子を横断する参照のように)。
XPointerが提供する膨大なオプションの詳細については、XPointer specificationオンライン (参考文献の項) を参照してください。一見奇妙に見えるリンク構文を完全に理解したいときには、XPathを調べるとよいでしょう。XPathの仕様についても、オンライン (参考文献の項を参照) で入手できます。
この解説は、紹介に過ぎませんが、XPointer、XLink、XPathについて、友人や家族が知っている以上のことを話してあげることができるでしょう。仕様を読んで、いろいろ試してみてください。これらのXML関連の仕様をサポートするブラウザーが登場するのを期待してください。
- 私の記事、XMLによるXLinkの使用法 のヒントをご覧ください。
-
developerWorks XMLゾーン で他のXMLの資料もご覧ください。

Brett McLaughlin氏は、Logo (小さな三角形を覚えていますか?) の時代からコンピューターの仕事をしています。現在の専門は、JavaおよびJava関連のテクノロジーを使ったアプリケーション・インフラストラクチャーの構築です。ここ数年は、Nextel Communications and Allegiance Telecom, Inc. でこれらのインフラストラクチャーの実装に携わっています。Brett氏は、Javaサーブレットを使ってWebアプリケーション開発のための再利用可能なコンポーネント・アーキテクチャーを構築するJava ApacheプロジェクトTurbineの共同設立者の1人です。同氏はまた、オープン・ソースのEJBアプリケーション・サーバーであるEJBossプロジェクトと、オープン・ソースのXML Web公開エンジンであるCocoonにも貢献しています。