2014年2月3日月曜日

ユーザのアクセス権限

ビルトーソのコンダクターにはユーザ管理画面がある。
[System Admin] -> [User Accounts]

ここで、[Create New Account]をクリックすると、新しくユーザを作ることができる。

このユーザのアクセス権限をいろいろ設定できるんだけど、実は、設定したいのはユーザごとに、RDFボキャブラリごとに、アクセス制限をしたいのだ。

いろいろいじってみたけど、テーブルの項目ごとまでアクセス権限が設定できるみたいで、それはそれですごいけど、望んでいたことはできなさそう。

ちなみに、
[System Admin] -> [User Accounts] -> [Grants]
からユーザをEditすると、テーブルごとのアクセス権限が設定できる。

そこからさらに、Columnsをクリックすると、テーブル項目ごとにアクセス権限が設定できる。

2014年1月22日水曜日

バックアップ&リストア

ビルトーソにはもろちん、バックアップ&リストア機能があります。

まずバックアップするには、

ビルトーソのコンダクターから、
System Admin -> Backup
にいきます。

Backup File Prefix
にバックアップファイル名の先頭につけたい文字を入力します。
とりあえず「unko」とでも入力しておきます。
(ただし後から変更できないので要注意です。)

Run Incremental Backup
ボタンをPUSHします。

すると、ビルトーソのdbディレクトリに、
xxxx1.bp
xxxx2.bp
というファイルができます。
これに全部のデータが入っています。

※dbディレクトリは人によって違うかもしれませんが、おそらくこのへんです。
/usr/local/var/lib/virtuoso/db


つづいて、リストアするには、

ビルトーソサーバを止めます。

dbディレクトリに移動します。
既存のdbファイルが存在しているとリカバリできないので、
どこかに移動しておきます。
# mv virtuoso-temp.db どこか
# mv virtuoso.db どこか

リストアコマンドを打ち込みます。
# virtuoso-t +restore-backup unko
※「unko」は上記で入力した「Backup File Prefix」です。

するとリカバリ処理が進みます。
イカのようにログが流れます。

                Wed Jan 22 2014
11:58:59 { Loading plugin 1: Type `plain', file `wikiv' in `/usr/local/lib/virtuoso/hosting'
11:58:59   WikiV version 0.6 from OpenLink Software
11:58:59   Support functions for WikiV collaboration tool
11:58:59   SUCCESS plugin 1: loaded from /usr/local/lib/virtuoso/hosting/wikiv.so }
11:58:59 { Loading plugin 2: Type `plain', file `mediawiki' in `/usr/local/lib/virtuoso/hosting'
11:58:59   MediaWiki version 0.1 from OpenLink Software
11:58:59   Support functions for MediaWiki collaboration tool
11:58:59   SUCCESS plugin 2: loaded from /usr/local/lib/virtuoso/hosting/mediawiki.so }
11:58:59 { Loading plugin 3: Type `plain', file `creolewiki' in `/usr/local/lib/virtuoso/hosting'
11:58:59   CreoleWiki version 0.1 from OpenLink Software
11:58:59   Support functions for CreoleWiki collaboration tool
11:58:59   SUCCESS plugin 3: loaded from /usr/local/lib/virtuoso/hosting/creolewiki.so }
11:58:59 OpenLink Virtuoso Universal Server
11:58:59 Version 06.01.3127-pthreads for Linux as of Dec 25 2013
11:58:59 uses parts of OpenSSL, PCRE, Html Tidy
11:58:59 Begin to restore with file prefix unko
11:58:59 --> Backup file # 1 [0xC8D5-0x0B-0x25]
11:59:07 --> Backup file # 2 [0xC8D5-0x0B-0x25]
12:00:11 End of restoring from backup, 12516 pages
12:00:11 Server exiting

リカバリ処理が止まったら、ビルトーソを起動します。
# virtuoso-t -df &

すると、元通り!

詳しくはここに書いてます。
http://docs.openlinksw.com/virtuoso/backup.html

2014年1月20日月曜日

ビルトーソとリッジレーサーの関係

PSVITA版のリッジレーサーには、
なんと、
VIRTUOSOという曲が入っています。


まさかゲームをやっててVIRTUOSOのスペルを見るとは思いもよりませんでした。
ビルトーソの影響力はすごいですね!

2014年1月9日木曜日

トリプルとかクアッドとか

SPARQLの世界では、トリプルとかクアッドとか言います。

スパークルでは、データを3つセットでDBに格納しまして、主語、述語、目的語をセットにしてトリプルといいます。

トリプル=Subject,Predicate,Object


さらに、グラフという、トリプルのまとまりとなる要素を付け加えて、クアッドといいます。

クアッド=Graph,Subject,Predicate,Object


CRAWL_LINK_EXTRACT 関数

WS.WS.SITEMAP_BB_PARSE から呼び出される関数です。
リンクを抽出して、次のクロール対象となるようにキュー登録します。
完全オリジナルです。
 
create procedure WS.WS.CRAWL_LINK_EXTRACT (
  in _content varchar,
  in _regexp varchar,
  in _host varchar,
  in _root varchar
)
{
dbg_obj_print('WS.WS.CRAWL_LINK_EXTRACT');
declare link varchar;
link := regexp_match(_regexp,_content,1);
while(link is not null) {
  declare url varchar;
  url := regexp_substr(_regexp,link,1);
  if (left(url,2) = '//') {
    url := null;
  }
  if (left(url,1) = '/') {
    url := 'http://' || _host || url;
  } else {
    url := null;
  }
  if (regexp_match('https?://'||_host,url) is null) {
    url := null;
  }
  if (url is not null) {
    insert soft VFS_QUEUE (VQ_HOST, VQ_TS, VQ_URL, VQ_STAT, VQ_ROOT, VQ_OTHER) values (_host, now(), url, 'waiting', _root, NULL);
    dbg_obj_print(url);
  }
  link := regexp_match(_regexp,_content,1);
}
}

CRAWL_REGEXP_TO_QUAD関数


WS.WS.SITEMAP_BB_PARSE から呼び出される関数です。
正規表現で項目を取り出して、SPARQLのDBに保存します。
完全オリジナル関数です。

create procedure WS.WS.CRAWL_REGEXP_TO_QUAD (
  in _content varchar,
  in _regexp varchar,
  in _graph varchar,
  in _subject varchar,
  in _predicate varchar
)
{
dbg_obj_print('WS.WS.CRAWL_REGEXP_TO_QUAD');
--parse
DECLARE value varchar;
value := regexp_substr(_regexp,_content,1);
dbg_obj_print(value);
--make sparql
declare sparql_str varchar;
sparql_str := sprintf('sparql insert in graph <%s> { <%s> <%s> "%s"}', _graph,_subject,_predicate,value);
--exec sparql
declare stat, msg varchar;
declare mdata, rset any;
exec (sparql_str, stat, msg, vector(), 1, mdata, rset);
}

Extract Function で項目抽出!!

Extract Functionで項目抽出してみます。
WS.WS.CRAWL_REGEXP_TO_QUAD関数と、
WS.WS.CRAWL_LINK_EXTRACT関数の中身は、
別記事に書いてあります。

create procedure WS.WS.SITEMAP_BB_PARSE (
  in _host varchar,
  in _url varchar,
  in _root varchar,
  inout _content varchar, 
  in _c_type varchar := null,
  in lev int := 0)
{
dbg_obj_print('sitemap_bb_parse by hodade v3');
dbg_obj_print('_host='||_host);
dbg_obj_print('_url='||_url);
dbg_obj_print('_root='||_root);
dbg_obj_print('_c_type='||_c_type);
dbg_obj_print('lev='||lev);
declare graph varchar;
graph := 'http://'||_host;
declare subject varchar;
subject := _url;
--#################
-- ボキャブラリ設定
--#################
WS.WS.CRAWL_REGEXP_TO_QUAD(
  _content,
  '<title>(.+?)</title>',
  graph,
  subject,
  'title'
);
WS.WS.CRAWL_REGEXP_TO_QUAD(
  _content,
  '<th width="100">.+?</th><td>(.+?)</td>',
  graph,
  subject,
  'address'
);
--##############
-- リンク抽出
--##############
WS.WS.CRAWL_LINK_EXTRACT(
  _content,
  '<a .*?href="(.+?/spot/.*?)".*?>',
  _host,
  _root
);
  commit work;
}