Category Archives: 記録 - Page 3

SPARQL and VoID

VoID (Vocabulary of Interlinked Datasets) というLinked Dataのメタデータを記述する語彙があるが、余り使われていなさそう。
既存のSPARQLエンドポイントがあるので、そこで試しに下記のクエリ(VoID のリストを検索する)を試してみた。

PREFIX rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:     <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl:      <http://www.w3.org/2002/07/owl#>
PREFIX xsd:      <http://www.w3.org/2001/XMLSchema#>
PREFIX foaf:     <http://xmlns.com/foaf/0.1/>
PREFIX dcterms:  <http://purl.org/dc/terms/>
PREFIX scovo:    <http://purl.org/NET/scovo#>
PREFIX void:     <http://rdfs.org/ns/void#>
PREFIX akt:      <http://www.aktors.org/ontology/portal#>

SELECT DISTINCT ?title ?ex ?endpoint ?homepage WHERE {
 ?x a <http://rdfs.org/ns/void#Linkset> .
 ?ds void:subset ?x .
 ?ds rdfs:label ?title .
 ?ds void:sparqlEndpoint ?endpoint .
 OPTIONAL {?ds dcterms:description ?ex}
 OPTIONAL {?ds foaf:homepage ?homepage}
}

得られる結果は36件。少ないなぁ。

PerlモジュールFile::Findを使うならfind2perlも忘れずに

Unix系のOSではおなじみのfindコマンドと同じ振る舞いを簡単にPerlで実現できるモジュールFile::Find
普段findコマンドを駆使しているなら、find2perlコマンドを使って対応するPerlコードを自動生成させるのが吉。
モジュールのヘルプドキュメントにある通り、

    find2perl / -name .nfs\* -mtime +7 \
        -exec rm -f {} \; -o -fstype nfs -prune

と実行すると、

    sub wanted {
        /^\.nfs.*\z/s &&
        (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_)) &&
        int(-M _) > 7 &&
        unlink($_)
        ||
        ($nlink || (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_))) &&
        $dev < 0 &&
        ($File::Find::prune = 1);
    }

と生成される。

MySQLで期間ごとに集計したヒストグラムを取得

時間(タイムスタンプ)情報付きのデータについて、指定した範囲でまとめた上で、各期間について頻度を取得するコマンドをメモ。
例えば、accessed_at という datetime 型の列があり、その時刻に value 列に納められる情報を取得したことを記録するログテーブル access_log を想定する。
そのとき、月ごとのアクセス数を取得するためには以下のようなコマンドを発行する。

SELECT COUNT(value),YEAR(accessed_at),MONTH(accessed_at) FROM access_log GROUP BY YEAR(accessed_at),MONTH(accessed_at);

以下のような結果が得られる。

+--------------+------------------+-------------------+
| COUNT(value) | YEAR(accessed_at) | MONTH(accessed_at) |
+--------------+------------------+-------------------+
|         1893 |             2009 |                 4 |
|         2197 |             2009 |                 5 |
|         1617 |             2009 |                 6 |
|         2354 |             2009 |                 7 |
|         1836 |             2009 |                 8 |
|         1795 |             2009 |                 9 |
|         1930 |             2009 |                10 |
|         1855 |             2009 |                11 |
|         1757 |             2009 |                12 |
|         2386 |             2010 |                 1 |
|         2844 |             2010 |                 2 |
|         2100 |             2010 |                 3 |
+--------------+------------------+-------------------+

参考ページ

論文執筆支援サービスの紹介

すっかり遅くなってしまったけれど、ここに埋め込んでいくことに。
分子生物学会 (BMB2010) のポスター発表でも紹介しました。

MySQL で日付計算

mysql の関数で日付を扱う場合のメモ。

リファレンスマニュアルはコチラ

日付の計算はいろいろと面倒だから、その辺はしっかりと関数で提供されている。

たとえば、今日の日付は CURRENT_DATE()、あるいは CURDATE() で得られる。

mysql> SELECT CURRENT_DATE();
+—————-+
| CURRENT_DATE() |
+—————-+
| 2010-11-08 |
+—————-+
1 row in set (0.00 sec)

そして、「昨日」は DATE_SUB() を利用して以下のように得られる。

mysql> SELECT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);
+——————————————+
| DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) |
+——————————————+
| 2010-11-07 |
+——————————————+
1 row in set (0.00 sec)

「曜日」に関しては以下のような関数群が用意されている。

+——————–+
| DAYNAME(CURDATE()) |
+——————–+
| Monday |
+——————–+
1 row in set (0.00 sec)

mysql> SELECT DAY(CURDATE());
+—————-+
| DAY(CURDATE()) |
+—————-+
| 8 |
+—————-+
1 row in set (0.00 sec)

mysql> SELECT DAYOFWEEK(CURDATE());
+———————-+
| DAYOFWEEK(CURDATE()) |
+———————-+
| 2 |
+———————-+
1 row in set (0.00 sec)

今月は何日までだっけ? という時には LAST_DAY 関数。

mysql> SELECT LAST_DAY(CURDATE());
+———————+
| LAST_DAY(CURDATE()) |
+———————+
| 2010-11-30 |
+———————+
1 row in set (0.00 sec)

などなど。

OpenID で Semantic MediaWiki にログイン

今回は以前構築したセマンティック・メディアウィキ (Semantic Media Wiki, SMWSMW+) に OpenID でログインできるように OpenID extension をインストール。

MediaWikiのバージョンは1.15.3。これに必要なOpenID extensionのバージョンは0.8.2らしい (DownloadページでMediaWikiのバージョンを指定すると自動的に適切なパッケージが得られる)。

これに必要な PHP ライブラリはOpenID Enabledなんだが、それが必要とするライブラリがいろいろとあり、その準備から始める必要があった。

OpenID Enabled

Read more »

標準エラー出力のリダイレクト

UNI* 系OS利用者ならよく使うリダイレクション。
標準出力と標準エラー出力を共にリダイレクトする場合の記法を書いておく。

csh, tcsh, zsh

perl -e 'print "Hello World!\n";warn "Hi There!\n";' | & less
perl -e 'print "Hello World!\n";warn "Hi There!\n";' > & /dev/null

sh, bash

perl -e 'print "Hello World!\n";warn "Hi There!\n";' 2>&1 | less
perl -e 'print "Hello World!\n";warn "Hi There!\n";' > /dev/null 2>&1
perl -e 'print "Hello World!\n";warn "Hi There!\n";' >& /dev/null

Semantic MediaWikiとSMW+のセットアップ

背景

OWL/RDFファイルを参照し、その内容を反映したサイトを自動構築するのに相応しい環境を検討した。
つまり、効率的に「セマンティックコンテンツ管理システム」を実現したい時に適切な環境を知りたかった。
この環境では、統一感があり、ページ間の繋がりが有機的なサイト構成を例えば Protege を利用して検討しOWLファイルとして生成すれば、それを反映したサイトがたちどころに出来上がることになる。
その結果、現時点でオープンソースシステムだけで実現しようとすると、メディアウィキ (MediaWiki)セマンティック・メディアウィキ (Semantic MediaWiki)SMW+ (Halo extension) を追加する方法以外には無いという結論に至った。本環境では日本語も問題なく扱えた。

インストール

Read more »

RDF serializationinに関するPerlモジュール比較

RDFデータの直列化(serialization)を実現するためのPerlモジュールを色々と試した。

これは2月に開かれたBioHackathon 2010に関連して行ったもの。英語ページはhackathonのページにあるので、日本語でここに記述しておくことに。

まずは環境。

RDF::Simple (0.415)
RDF::Trine (0.122)
RDF::Redland (1.0.5.4)
RDF::Core (0.51)

RDF::Simpleは文字通りシンプル。このため、私見としては直列化がどのようにして行われるかについて、小さいデータセットで試してみる目的のみに向いているといえる。
モジュールの説明にある通り、ノードタイプを識別しないため、URIであるかリテラルであるかを明示出来ない。
ただ、RDF::Trine/RDF::Redlandよりも生成される出力(RDF/XML)はより組織化されていてコンパクトになる。

RDF::Trineは現在開発が活発に行われているRDF処理関連の唯一のモジュールで、今後、最も高機能になることが予想される。
RDF/XMLの他にも、N-Quads、N-Triples、RDF/JSON、Turtleなどの形式で出力出来る。これは他のモジュールには無い。

ただ、現時点では生成されるRDF/XMLは冗長な点がある。本モジュールは直列化すべきトリプル群を主語毎にグループ化し、それらをタグで括る。これ自体は問題ないが、利用者が定義する名前空間を冒頭のタグ内で宣言せず、各rdf-Descriptionタグで行っている。また、入れ子のレベルが1であったり、名前空間のQNAMEを指定出来なかったりする。
それでもRDF::Redlandより小さなRDF/XMLデータを生成する。

RDF::RedlandはピュアPerlモジュールでは無く、構築時にコンパイルを必要とする。このため、プラットフォームや環境によっては構築に困難を伴う可能性がある。
今回試したLinux (RedHat)マシンではcpanコマンドでの構築にはmake testが通らずに失敗した。原因はswigにより生成されたライブラリが標準ライブラリパスにあると想定して動作するテストスクリプトにあり、本問題を手当てすることで構築出来た。具体的にはLD_LIBRARY_PATH環境変数に次のパスを加える。

Redland-1.0.5.4/redland/rasqal/src/.libs
Redland-1.0.5.4/redland/raptor/src/.libs

RDF::Coreは長いこと手が付けられておらず、ブランクノードを扱えない問題がある。
ただ、直列化された結果は良くまとまっている。
RDF::Trineと同様に名前空間のQNAMEを設定出来ない。

以下、今回のために作ったプログラム。 Read more »

Protegeの利用

Protege? 法造?

ひょんなことからオントロジーをあれこれする必要が生じ、しかも共同作業が必要になるということで、メジャーなツールであるProtegeを使うことに。
今回は日本語コンテンツなので、法造(hozo)もインストールして試した見たが、ネットワークを用いた共同作業がWindowsマシンのみを想定した作りになっているので取りやめに。

Protegeインストール

Read more »