Hercules version 0.03リリース

Herculesのversion 0.03を公開しました。変更点配下の通りです。

RDF-Classベースでの走査は、雰囲気としてはRailsのPerson.find_all()をほぼそのままコピーしたような感じです。ただし、RDFの場合明確なDBのスキーマというものが存在しないので(RDFスキーマは使えません)、グラフ上に何種類のクラスが存在するのかが分かりません。Herculesでは<http://www.w3.org/2000/01/rdf-schema#Class>のサブクラスを1度問い合わせ、得られたリストの結果を基に動的にJavaScriptのクラスを定義しています。なお、クラス名がURIのままだとJavaScript的に無理があるので、あらかじめ登録されたPrefixを元に、QName形式に変換できた場合のみ、クラスとして定義されます。また、クラスがグローバルで定義すると色々と問題があるので、Herculesのプロパティとして定義されるようになっています。

e = new Hercules("http://path/to/sparql/server");
e.registerPrefix("", "http://mynamespace/"); // dafault prefix
e.registerPrefix("foaf", "http://xmlns.com/foaf/0.1/");
e.registerPrefix("dc", "http://purl.org/dc/elements/1.1/");

// define JavaScript classes automatically
e.defineExistClasses();

// RDF-Class-based search
people = e.foaf$Person.findAll();
alert(people[0].foaf$name.$()); // -> Someone's name

パフォーマンス的にちょっと辛い部分があるので、何か対策を考えないといけないのですが、「グラフ上に何がどれだけあるか把握することが不可能」というのが前提な以上、クライアント側でCoC的なコードを書くのには限界がありそうです。ある程度は設定を自分で書くことになるでしょう。