プログラミング言語とネームスペース(6)

標準のScalaのネームスペースサポートは散々でした.Elemクラスにnamespaceというメソッドはあるのですが、QName(修飾名)を記述して絞り込む手段がなかったからです.

それではScales XMLはどうでしょうか?私はScales XMLにはあまり詳しくありません.というか資料がせいぜいテストケースのプログラムを必死に追って調べられるくらいで、他には知見を得る方法がまったくないからです.おまけにScalaの初心者ときています.しかし、なんとか次のようにすれば、ネームスペースを指定して要素を選択する方法があることはわかりました.

import scales.utils._
import scales.xml._
import ScalesXml._
import scales.xml.Functions._
import java.io._

object nstest {
  def main(args: Array[String]): Unit = {
    val doc =  loadXml(new java.io.FileReader("MusicLibraryNS.xml"),defaultPathOptimisation)
    val root = top(doc)
    val nsml = Namespace("uri:music:library")
    val nscd = Namespace("uri:music:cd")
    val nsttl = Namespace("uri:music:title")
    val titles = (root \* nscd("cd")).filter(cd => string(cd.\* (nsml("year"))) == "1994") \* nsttl("title")
    titles.foreach(title => println("The title='" + string(title) + "'"))
  }
}

これでちゃんとThe title='The Dark Side of the Moon'と表示してくれます.Scales XMLはちゃんとネームスペースをサポートしてくれているのです.

scales.xml Namespace

いや、なかなかのものです.これならScalaの標準のXMLよりネームスペースに関しては数倍は力になってくれるでしょう.

でもScales XMLも開発者はどうもChris Twinerさん一人で、XPathのサポートも私から見ればイマイチ(http://blogs.yahoo.co.jp/tnakita/14828555.html)なのが残念です.やはり.netのように全面的で、MSDNを見ればヘルプもほぼ完璧いうほうが開発者は安心します.

まあJava文化系の人は、MSの至れり尽くせりを横に見てもなんとも思わず、自分でどんどん調べて、それでもなければ自ら作っちゃうというのがプロなのかもしれません.しかし、そういう世界もあってもいいとは思うんですが、こういうScales XMLをベースにプロダクションレベルのプログラムを作って成功させる確信があるのか?と言われれば一抹の不安が残るんではないでしょうか?