XPath(基礎編)

2001年3月20日(火)更新


■XPathってなぁに?

さらら: ねぇ、たけち。いきなりXPathっていわれても困るんだけど・・・なぁに? XSLと関係があるの?

たけち: さらら、そんなに心配しなくってもいいよ。実は、これまでのサンプルでもうXPathを使ってきているんだよ。

さらら: えっ。。。。。そっ、そうなの?!

たけち: XPathは、XMLテキストの構造をたどって、要素や属性、文字列なんかを指し示すための言語なんだよ。そうして、そのXPathはXSLで使われてているんだよ。

さらら: というと・・・XSLで要素や属性、文字列なんかを指し示す、ってことだから。。。えっ〜と

たけち: XSLでつぎのような文を使ったよね。

  • <xsl:apply-templates select="万葉集/巻" />
  • <xsl:template match="万葉集/巻">
  • <xsl:value-of select="歌番号" />
  • <xsl:value-of select="@url" />

さらら: うん。

たけち: それぞれの"万葉集/巻"や"@url"っていう書き方がXPathというもので決められているんだよ。

さらら: あっ、そうなんだ〜。なんとなく分かっているつもりだったけど、あらためてそんな風に言われると、。。。。

たけち: それは、さららがWindowsなんかのファイルの階層関係を知っているからだと思うよ。それとXPathってなんとなく似た感じだものね。

さらら: あっ、そうなの。。

■XPathのデータモデル

たけち: じゃぁXPathについて説明してゆこうね。XPathを学ぶためには、XPathでのXMLデータモデルを知っておかないといけないね。

さらら: えっ? データモデル?! また難しい言葉を使って・・・もっとやさしく説明してよ!!

たけち: う〜ん。。。XMLテキストの要素や属性、文字列なんかの内容がどんな風に関係し合って構造を作っているかをイメージするためのもの、っていったらいいかな。

さらら: ふ〜ん・・・・分かったような分かんないような・・・

たけち: じっ、じゃぁ、XMLテキストのサンプルでXPathのデータモデルを見ていこうね。いままで見てきた「万葉集」のXMLテキストをXPathではどんな風に見るかを説明するね。まずは、次の「万葉集」のXMLテキストをみてみよう。

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="xpathsample.xsl"?>
<manyosyu volumeno="1" >
  <poem pno="8">
    <mkana>熟田津尓 船乗世武登 月待者 潮毛可奈比沼 今者許藝乞菜</mkana>
    <poet>額田王(ぬかたのおおきみ)</poet>
    <yomi>熟田津に、船乗りせむと、月待てば、潮もかなひぬ、今は漕ぎ出でな</yomi>
  </poem>
  <poem pno="20">
    <mkana>茜草指 武良前野逝 標野行 野守者不見哉 君之袖布流</mkana>
    <poet>額田王(ぬかたのおおきみ)</poet>
    <yomi>茜さす、紫野行き標野行き、野守は見ずや、君が袖振る</yomi>
  </poem>
</manyosyu>

さらら: うん。だいぶ見慣れたからいいわ。で、XPathのデータモデルってどうなるのかしら・・・ (^ ^*

たけち: あっ、やな言い方・・・ (^ ^;

さらら: ごめんなさい、つい・・・(^ ^*

万葉集XMLのデータモデル

さらら: なぁ〜んだ。これまでの説明に出てきた図とそんなにかわらないじゃない・・・・・でも、よくみるとちょっと違うわね。ルートノードとか要素ノードとか。。。

たけち: この図のひとつひとつのかたまり、つまりXMLテキストを構成している単位を「ノード」っていうんだ。どんなXMLテキストもひとつの「ルートノード」があるんだよ。あっ、そうそうこの図を「ノードツリー」っていうんだ。

さらら: ノードツリー? ツリーって、樹木のこと?

たけち: そうなんだ。まるで「樹木」の枝分かれのようなイメージだね。

さらら: でも、「ルート」って「根っこ」のことでしょ。「根っこ」が一番上にあるってなんだか変なの。

たけち: そうだね。。。でも、その方がXMLテキストの構造を図でイメージするときには「ルート」が上にあったほうが分かりやすいよね。

さらら: そうね。

たけち: じゃあ、次回はこの図を元にXPathについて少し詳しく説明するね。

さらら: は〜い!! (^ ^*

→次はXPath-その2です (^ ^;