XPinter

XPinter (XML Pointer Language) とは、XLink のリンク先アドレスを特定するための機能です。

XPointer は、URI、HTMLのアンカーや、ID型の属性の特定だけでなく、この他にも様々な拡張された機能を持っています。

拡張ポインタ
XPointer で指定できるリンク先には、HTMLのリンク先指定との互換性を保つために、以下のように定義されています。
また、XPointer で指定できるリンク先には、HTMLのリンク先指定を、さらに拡張したものがあります。以下はそのリンク先を指定できるものです。
これらの内容をリンク先と指定する場合、XMLデータ内の「絶対位置」から、リンク先のアンカーの「相対位置」をカウントする、という手法が用いられます。
このような手法を 拡張ポインタ (Extensible Pointer) と呼びます。
XPointer (XML Pointer Language)XPointer (Extensible Pointer) は、略称が同じですが、この2つの関係は、先に挙げた HTMLとの互換性を保つのが、 XPointer (XML Pointer Language) で、拡張された機能を持つものが XPointer (Extensible Pointer) と区別します
拡張ポインタの基本概念
拡張ポインタは、XPointer と併用して利用します。XPointer で指定したリンク先の「相対位置」を、XMLデータ内の基本となる「絶対位置」から特定することができます。
相対位置を特定する
拡張ポインタは、XMLデータのリンク先のアンカーの相対位置を特定するための手法です。
相対位置を指定する場合には、まず先に、XMLデータ内の基本となる絶対位置を決めます。絶対位置が決まったら、その位置から XMLデータの階層構造に従って、親要素や子要素、及び子要素の順番をカウントし、最終的なアンカーの相対位置を決定します。
以下の図を参照してください。

要素の階層構造を示した図で、3つの階層になっている

この図では、ルート要素の A要素を「絶対位置」とします。
この絶対位置の A要素には、B要素と、2番目の子要素である C要素を持っています。さらに B、C要素には、それぞれ D-1、D-2要素などの子要素をもっています。B要素の D-2要素は2番目の子要素であり、A,B要素は兄弟要素と呼び、A要素が兄要素、B要素が弟要素になることとして理解してください。
A要素内の2番目の子要素である C要素の相対位置は、

ルート要素 → 2番目の子要素 となります

次に、2番目の子要素である B要素には、D-1、D-2 の2つの子要素があります。従って、B要素内の D-2要素の相対位置は、

ルート要素 → 2番目の子要素(B) → 2番目の子要素(D-2) となります。

このように、ルート要素から XMLデータの階層構造に従って、「ルート要素の2番目の子要素の、そのまた2番目の子要素」といったように指定することで、相対位置が特定できます。
絶対位置を基本に相対位置を決める
拡張ポインタでは、リンク先のアンカーの位置を決める場合、まず XMLデータの中から、基本となる要素の位置を決めます。
その基本となる要素の位置から、XMLデータの構造に従って、親要素や子要素、及び子要素の順番の位置をカウントし、最終的なアンカーの位置を決定します。
絶対位置指定
リンク先のアンカーの位置を決定するための基本となる要素の位置は、「絶対位置指定」と呼ばれる方法で指定します。
この絶対位置指定は、単純リンクの場合、以下のように記述します。
<要素名 xml:link="sample" href="#絶対位置">
リンク先の名称
</要素名>
このように、ハッシュマーク「#」記号に続けて絶対位置を記述します。
絶対位置指定のキーワードには、以下のようなものがあり、これらのいずれかの指定を使って、リンク先の基本となる要素の位置を決めます。
絶対位置指定のキーワード
Keyword内容
html リンク先は HTML文書内の name属性を持ったアンカータグで囲まれた要素となる。パラメータは、アンカータグの name属性の値を指定する。
id リンク先は ID型の属性を持った要素となる。パラメータは、ID型の属性の値を指定する。
root() リンク先は XML文書内のルート要素となる。
origin() リンク先は、リンクを記述したリンク元となる。
相対位置指定
リンク先のアンカーは、絶対位置指定で基本となる要素の位置を決定し、その位置から「相対位置指定」と呼ばれる方法で、最終的な位置を決定します。(上記、相対位置の特定を参照)
絶対位置指定で決定した基本となる要素を カレント と呼びます。
相対位置指定では、絶対位置指定で決まったカレントの位置から、XMLデータの構造に従って、親要素や子要素、及び子要素の順番の位置をカウントします。
この相対位置指定は、単純リンクの場合、以下のように記述します。
<要素名 xml:link="simple
   href="#絶対位置指定.相対位置指定(カウント値,要素指定)">
リンク先の名称
</要素名>
このように、絶対位置指定を記述し、それに続けて相対位置指定を記述します。相対位置指定のパラメータには、「カウント値」と「要素指定」と呼ばれるカウント対象となる要素を記述します。
相対位置指定のキーワードは以下の通りです。
相対位置指定のキーワード
Keyword 内容
child カレント対象は、カレント要素の子要素となる。子要素はカレントの階層の1つ下の要素のみで、さらに下の階層は対象外となる。
fsibling カレント対象はカレント要素の兄弟要素で、カレント要素の後方にある弟要素となる。
psbling カレント対象はカレント要素の兄弟要素で、カレント要素の前方にある兄要素となる。
descendant カレント対象は、カレント要素の子孫要素となる。子孫要素はカレント階層の1つ下の子要素のみではなく、さらにしたの階層の要素を含むすべての要素が対象となる。
ancestor カレント対象は、カレント要素の先祖要素となる。先祖要素はカレント要素の1つ上の親要素のみでなく、さらに上の階層の要素を含むすべての要素が対象となる。
following カレント対象は、カレント要素の後方にある要素となる。カレントの後方にある要素は、子孫要素と先祖要素を含むすべての要素が対象となる。
preceding カレント対象は、カレント要素の前方にある要素となる。カレントの前方にある要素は、子孫要素と先祖要素を含むすべての要素が対象となる。
要素指定のキーワードは、以下の表の通りです。
要素指定のキーワード
Keyword 内容
要素名 カレント対象は指定された要素名となる。
#element カレント対象は任意の要素となる。
#comment カレント対象はコメント文となる。
#text カレント対象は要素内用に記述されたテキスト、または CDATAセクションに記述されたテキストとなる。
#CDATA カレント対象は CDATAセクションに記述されたテキストとなる。
#pi カレント対象は処理命令となる
#all カレント対象は、上記のすべてのものとなる。
属性名、属性値指定
拡張ポインタの相対位置指定のパラメータには、カウント値と要素指定以外に、属性名と属性値を指定することができます。
この属性名、属性値の2つの指定を加えることにより、相対位置のカウント対象を、さらに絞り込むことができます。
属性名指定と属性値指定は、相対位置指定のパラメータとして記述することができます。この指定は、以下の通りに記述します。
<要素名 xml:link="simple"
    href="#絶対位置指定.相対位置指定
     (カウント値,要素指定,属性名指定,属性値指定)">
 リンク先名称
</要素名>
これを、具体的な XMLデータとして記述すると、
<magazine xml:link="simple"
  href="#root().descendant(3,#ELEMENT,id,No90196)">
 メールマガジンID番号
</magazine>
なお、属性名と属性値はどちらかにアスタリスク「*」記号を指定することができます。例えば、ID属性を持ち、なおかつ任意の属性値を持つ3番目の要素を特定する場合には、以下のように記述します。
<magazine xml:link="simple"
  href="#root().descendant(3,#ELEMENT,id,*)">
 メールマガジンID番号
</magazine>
このように、属性値の指定にアスタリスクを記述することができます。
また、任意の属性を持ち、なおかつ属性値が「No90196」を持つ3番めの要素を指定する場合には、属性名指定にアスタリスクを利用することができます。
これとは反対に、属性名と属性値の指定がない要素を特定することができます。そうした場合には、属性値指定に「#IMPLIED」と記述することができます。
要素内容の文字指定
拡張ポインタでは、特定した要素の内容の文字、または文字列を指定することができます。文字指定を行う場合には、1つの要素が特定できていることが前提となります。
文字指定は、絶対位置指定または相対位置指定で、1つの要素が特定できたら、これに続けて記述します。
文字指定の記述は以下の通りです。
<要素名 xml:link="simple"
    href="#絶対位置指定.相対位置指定.
     string(カウント値,文字列,文字位置,文字数)">
 リンク先名称
</要素名>
これを、具体的な XMLデータとして記述すると、
<magazine xml:link="simple"
  href="#root().child(2,#ELEMENT).strong(3,'XML',1,1)">
 XMLとは
</magazine>
この場合、要素の内容の中の3番めの「XML」の1桁目からの文字となり、結果的に「X」の文字が特定できることになります。


Valid XHTML 1.1! Valid CSS! 初版更新日 2003年10月12日   最新更新日 2004年3月31日
Copyright(C) 2002〜2004 banban@scollabo.com