機械翻訳について

XPathコマンドの使用

XPathは、World Wide Web Consortium (W3C)によって開発された業界標準です。

これは、XMLドキュメントをナビゲートするために使用するメソッドです。 XPathは、XMLドキュメントの個々の部分に対処するための構文ルールのセットです。 わかっていない場合がありますが、すでにXPathが使用されています。RTFテンプレートでは、XPathを使用して実行時にXMLデータをナビゲートします。

この項では、XPathの原則について簡単に説明します。 XPathは、XMLドキュメントをノードのツリーとして解釈するDocument Object Model (DOM)に従います。 ノードは、次の7つのタイプのいずれかになります:

  • root

  • エレメント

  • 属性

  • text

  • ネームスペース

  • 処理命令

  • コメント

これらの要素の多くは、CDのカタログを含む次のサンプルXMLに示されています:

<?xml version="1.0" encoding="UTF-8"?>
<! -  My CD Listing  - >
<CATALOG>
 <CD cattype=Folk>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD cattype=Rock>
  <TITLE>Hide Your Heart</TITLE>
  <ARTIST>Bonnie Tylor</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
  </CD>
</CATALOG>

この例のルート・ノードはCATALOGです。 CDは要素であり、属性cattypeがあります。 サンプルにはMy CD Listingというコメントが含まれています。 テキストはXML文書要素に含まれています。

データの特定

ロケーション・パス式を使用して、XMLドキュメント内の情報を検索します。

ノードは、最も一般的な検索要素です。 例CATALOG XMLのノードには、CD、TITLEおよびARTISTがあります。 パス式を使用して、XMLドキュメント内のノードを検索します。 たとえば、次のパスはすべてのCD要素を返します:

//CATALOG/CD

where

二重スラッシュ(//)は、文書内のレベルに関係なく、検索基準に一致するXML文書内のすべての要素が返されることを示します。

スラッシュ(/)は子ノードを区切ります。 パターンに一致するすべての要素が返されます。

個々のTITLE要素を取得するには、次のコマンドを使用します:

/CATALOG/CD/TITLE

この例では、次のXMLが返されます:

<CATALOG>
 <CD cattype=Folk>
  <TITLE>Empire Burlesque</TITLE>
  </CD>
 <CD cattype=Rock>
  <TITLE>Hide Your Heart</TITLE>
  </CD>
</CATALOG>

大カッコを使用して検索をさらに制限します。 ブラケットは、特定の子ノードまたは指定された値を持つ要素を検索します。 たとえば、次の式では、Bob Dylanによって記録されたすべてのCDが検索されます:

/CATALOG/CD[ARTIST="Bob Dylan"]

または、各CD要素にPRICE要素がない場合は、次の式を使用して、PRICE要素を含むCD要素のみを返すことができます:

/CATALOG/CD[PRICE]

検索で属性値を活用するには、カッコ表記法を使用します。 @記号を使用して属性を指定します。 たとえば、次の式はすべてのRock CD (cattype属性値がRockのすべてのCD)を検出します:

//CD[@cattype="Rock"]

これにより、サンプルXMLドキュメントから次のデータが返されます:

<CD cattype=Rock>
  <TITLE>Hide Your Heart</TITLE>
  <ARTIST>Bonnie Tylor</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
</CD>

ブラケットを使用して、取得するアイテム番号を指定することもできます。 たとえば、最初のCD要素は、次のXPath式を使用してXMLドキュメントから読み取られます:

/CATALOG/CD[1]

サンプルは最初のCD要素を返します:

<CD cattype=Folk>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>

XPathでは、指定したノードに含まれるすべての要素を取得するためのワイルドカードもサポートされています。 たとえば、サンプルXMLからすべてのCDを取得するには、次の式を使用します:

/CATALOG/*

文とブール演算子を組み合せて、より複雑な検索を実行できます。 次の式は、すべてのフォークCDとロックCDを取得するため、サンプルからすべての要素を取得します:

//CD[@cattype="Folk"]|//CD[@cattype="Rock"]

パイプ(|)は論理OR演算子と同じです。 さらに、XPathは論理ORおよびANDおよび等価演算子を認識: <=, <, >、>=、==および!=。 たとえば、次の式を使用すると、1985以降にリリースされたすべてのCDを見つけることができます:

/CATALOG/CD[YEAR >=1985]

開始参照

XPath式の最初の文字によって、XMLツリーで開始するポイントが決まります。

スラッシュ(/)で始まる文は絶対とみなされます。 スラッシュなしは相対参照を示します。 相対参照の例は次のとおりです:

CD/*

この文は、現在の参照ポイントで検索を開始します。 つまり、例が文のグループ内で発生した場合、前の文の左側にある参照ポイントが使用されます。

前述のとおり、二重スラッシュ(//)は、ドキュメント内のロケーションに関係なく一致するすべての要素を取得するため、パフォーマンスを向上させるために必要な場合にのみ、二重スラッシュ(//)を使用する必要があります。

コンテキストおよび親の指定

現在の要素と親要素を選択するために、XPathでは、ディレクトリのナビゲートに一般的に使用されるドット表記法が認識されます。

単一のピリオド(.)を使用して現在のノードを選択し、二重ピリオド(..)を使用して現在のノードの親を返します。 たとえば、現在のノードの親のすべての子ノードを取得するには、次を使用します:

../*

したがって、サンプルXMLからすべてのCDにアクセスするには、次の式を使用します:

/CATALOG/CD/..

次を使用して、1988年にリリースされたすべてのCDタイトルにアクセスすることもできます:

/CATALOG/CD/TITLE[../YEAR=1988]

2つのピリオド(..)を使用して要素のツリーを上に移動し、TITLEと同じレベルでYEAR要素を検索します。次に、1988に対する一致をテストします。 この場合、//を使用することもできますが、要素YEARがXMLドキュメントの他の場所で使用されている場合は、誤った結果になる可能性があります。

XPathは、RTFテンプレートと組み合せてテンプレートで条件付き書式設定およびフィルタリングを使用できる場合、非常に強力な標準です。