セマンティックエディタ入門

2010-10-18

導入

準備

セマンティックエディタは産総研社会知能技術研究ラボで開発中のJavaアプリケーションです。 JRE5以降のJRE (Java Runtime Environment; J2SEに含まれます) が必要です。JRE6以降を推奨します。 下記のJWS版を使うと、 適当な版のJREがなければ自動的にダウンロード・インストールされます。 Mac OS X用のJavaはここにあります。

セマンティックエディタを使うにはユーザアカウント(SACMと共通)が必要です。 これらを取得するには橋田までご連絡下さい。

インストール

ダウンロードページ (上記とは別のユーザ名とパスワードによる認証が必要です) のSATool Distributions → Semantic Editor → Release versionから、 下記のいずれかをダウンロードして下さい (JWS版をお薦めします)。

起動

最初にエディタが立ち上がったときに自動的にダウンロードされるコンテンツは最新でない可能性があります。 明示的にサーバとの同期をして下さい。 単なる同期はフォーカスされているハイパーノードの範囲の同期なのですぐに終わりますが、再帰的同期はそのハイパーノード以下の全コンテンツの同期なのでかなり時間がかかる場合があります。

メインメニュー → 通信 → 通信ステータスをチェックすると「通信ステータス」ウィンドウが現われ、 ここに通信の内容が表示されます。 通信の失敗は赤字で表示されます。

JRE5でJavaコンソールを表示した状態でJWS版を使っている場合など、 セマンティックエディタの終了の際にローカルキャッシュが壊れて 次の起動ができなくなることがあるかも知れません。 そのような場合は、 ローカルキャッシュ (Windows XPやVistaの場合は C:\Documents and Settings\ユーザ名\.sa\cache、Windows 7の場合は C:\Users\ユーザ名\.sa\cache) を消去して下さい。

終了

メインメニュー → ファイル → 閉じるAlt-F4、 またはCtrl-Qで終了して下さい。

アンインストール

プラグイン

サンプルプラグイン (Serialize「シリアライズ」、 Duplicate「複製」、 Graph Search「グラフ検索」など) がシステムオントロジーに組み込まれています。 プラグインはメインメニュー → プラグインから実行できます。

追加のプラグインは、プラグイン(sa:plugin)型のメディアノードをプロジェクトオントロジーの中に置き、メインメニュー → プラグイン → 再読込を実行すると、 以後メインメニュー → プラグインから使用可能になります。

不要になったら、プロジェクトオントロジーの中から移動 (カット&ペースト) や削除でプラグインノードを取り除き、 メインメニュー → プラグイン → 再読込を実行すると、以後メニューからも消されます。

メインメニュー → プラグイン → 開放を実行すると、 すべてのプラグインがいったんメニューからは消えますが、メインメニュー → プラグイン → 再読込を実行するか次にプロジェクトファイルを開くとふたたび使用可能になります。

システムオントロジー内のプラグインノードを移動 (ドラグ&ドロップカット&ペースト) や削除してしまうと、 すべてのユーザーに影響が及ぶので注意してください。 誤ってカット&ペーストなどしてしまった場合は、 元に戻す (Ctrl-Z) またはバージョンを戻す (Shift-↓) を実行して下さい。

操作

概要と例

セマンティックエディタはRDF (Resource Description Format) のグラフを共同作成するためのソフトウェアツールです。 グラフはノードリンクからなり、 ノードはハイパーノード(グラフを中に含むノード) でも構いません。 画面のトップレベルもハイパーノードです。 その他のハイパーノードの内容であるグラフは各々サブウィンドウの中に表示されます。

セマンティックエディタの画面には「グラフモード」と「ツリーモード」という2通りの表示のモードがあります。 トップレベルのウィンドウは通常はグラフモードになっていますが、 サブウィンドウは通常はツリーモードになっています。 ウィンドウの背景を右クリックすると現われるコンテキストメニューからツリーモードに変更またはグラフモードに変更を選択するとツリーモードまたはグラフモードに変更することができます。

ツリーモードへの変更
ツリーモードへの変更

グラフモードでは、 グラフに含まれる各ノード、 各リンクがちょうど1回ずつ出現するようにグラフを単純に表示します。 ツリーモードではグラフを木のように表示しますが、 各ノード、 各リンクは複数回出現しても良いので、 木の形で任意のグラフを表示できます。 ツリーモードではウィンドウの左端に縦長の長方形が現われます。 この長方形は当該のハイパーノード自体を表わします。

ツリー表示
ツリー表示

ツリーモードでは、 カーソルの位置に応じて黄色い破線 (上の図ではノード`F'の右側の破線) が表示されますが、 これは、ドラッグ&ドロップによる< SPAN>実体(ノードまたはリンク) の移動や新たな実体の作成によって実体が挿入される位置を示しています。

上の図の状態でCtrl-Tを実行すると、 現在フォーカスされたウィンドウの中にノードの一種であるテキストノードがノード`F'の右側に新たに作られます。 テキストノードができると、 その内容としてテキストを入力できる状態になっています。

新ノードの作成
新たなテキストノードの作成

ここで背景をクリックするなどしてテキストを入力せず空にすると、 空ノード(空のテキストノード) が表示されます。 ノードのタイプであるクラスrdfs:Resourceです。

空ノード
空ノード

実体(ノードまたはリンク) の左肩の赤い星印は、 その実体 の最新の情報がサーバに送信されていないことを示します。 「同期」を実行するとその情報がサーバに送信され、 星印が消えます。

サーバとの同期の後
サーバとの同期の後

実体のタイプ(ノードの場合はクラス、 リンクの場合は属性) を変更するには、 その実体を右クリックして現われるコンテキストメニュー(タイプメニュー) から適当なタイプを選択します。

タイプメニュー
タイプメニュー」からの選択

上図の例のクラスや属性を使用するには、そのためのオントロジー`rel (middle-grain linguistic relations)'をプロジェクトオントロジーにインポートしてオントロジーを反映する必要があります。

ノードをダブルクリックすると、 そのノードに対応するサブウィンドウが開きます。 たとえば上図の例で空ノードをダブルクリックすると、 下図のようになります。

サブウィンドウ
サブウィンドウ

このサブウィンドウの中にノードを作ると、 空ノードの枠線が2重になりますが、 これはこのノードが非空のハイパーノードになったことを表わします。

ハイパーノード
ハイパーノード

さらにノード`B'をこのハイパーノードの中にドラッグ&ドロップすると、 サブウィンドウの背景が緑色になりますが、 これはノード`C'を根とする部分木が空ノード自身も含めて空ノードの要素となり、 空ノードがトップレベルのハイパーノードの要素でなくなくなったため、 このサブウィンドウの内容が現在のプロジェクトの外にあることを示します。

プロジェクトの外のハイパーノード
プロジェクトの外のハイパーノード

ツリーモードでは各実体をCtrl+ドラッグ&ドロップすることによってその実体の新しい出現を作ることができます。 また、 リンクの端 (3角か丸の部分) を背景にドラッグ&ドロップすると、 ドロップ先にその端につながったノードの新しい出現ができます。 たとえば、 下のように「」リンクの右端をノード`A'の右側にドラッグ&ドロップすると、

リンクの端のドラッグ
リンクの端のドラッグ
ノード`G'の新しい出現がノード`A'の右側にできます。
ノード`G'の新しい出現の作成
ノード`G'の新しい出現の作成

ひとつの実体のある出現を別の出現にドラッグ&ドロップすると、 2つの出現を後者に統合できます。

ノードの複数の出現の統合
ノード`G'の複数の出現の統合

終点がrdfs:Literalタイプまたはxsd:Datatypeタイプである属性 (データ型属性) のインスタンスと終点は、 始点であるノードの内部に埋め込まれます。 それらを閲覧・編集するには、 ノードに関して「データ型属性の編集」 (Ctrl-G) を実行します。

データ型属性の編集
データ型属性の編集

ツリーモードでは、 ノードの下へ複雑な部分木を畳み込んで、 ツリーの全体像を見やすくできます。 部分木の根となるノードの右脇にカーソルを合わせると、 背景の色が変わり`-'が表示されます。

`tree'の下の部分木を畳み込む
ノード`tree'の下の部分木を畳み込む

ここで`-'をクリックすると、 表示が`-'から`+'に変わり部分木は畳み込まれます。

`tree'の下に畳み込まれた部分木
ノード`tree'の下に畳み込まれた部分木

ノードの右の`+'をクリックすると、 ふたたび部分木が展開されます。

グラフモードでは、 リンク自体をリンクの終点にすることができます。

リンクtoリンク(グラフモード)
リンクを終点とするリンク

同じ関係が、 ツリーモードでは下図のような表現になります。

リンクtoリンク(ツリーモード)
リンクを終点とするリンク (ツリーモード)

上図の`A'を始点とするふたつの「要素」リンクのうち、 `D'へのリンクの方が「言及」リンク終点である「要素」の選択と同時に青くなっているので、 「言及」リンクの終点と同じ実体をもつリンクだとわかります。

メニュー

以下のようなメニューを見れば操作の仕方は大体わかると思います。 たいていのコマンドにキーボードショートカットを定義してあるので活用して下さい。

メインメニュー → ファイル
メインメニュー → ファイル
メインメニュー → 編集
メインメニュー → 編集
メインメニュー → 操作
メインメニュー → 操作

操作」メニューには、 上図に示されているキーボードショートカット以外に、 クリックドラッグによる操作が可能な項目があります。 たとえば、 ノード内のテキストの「編集」は、 ノードを選択した状態でCtrl-Eとする以外に、 ノードをCtrl-ダブルクリックしても実行できます。

  • 編集
    • ノードを選択した状態でCtrl-E
    • ノードをCtrl-ダブルクリック
  • ウィンドウを開く
    • ノードをダブルクリック
  • コンテナの代わりにウィンドウを開く
    • ノードをShift-ダブルクリック
  • ウィンドウのリサイズ
    • ノードを選択した状態でCtrl+Shift-R
    • ウィンドウの縁をダブルクリック
メインメニュー → 通信
メインメニュー → 通信
メインメニュー → オントロジー
メインメニュー → オントロジー

背景を右クリックすると (サブ) ウィンドウのコンテキストメニューが現われます。

コンテキストメニュー → 新規作成
ウィンドウの「コンテキストメニュー → 新規作成
コンテキストメニュー → 通信
ウィンドウの「コンテキストメニュー → 通信

ツールバーや、 選択した実体のURIを表示するステータスバーの表示・非表示は、 メインメニュー → 編集 → 設定から、 「設定」ダイアログ内、 「環境」タブ中の「表示チェックボックスで設定できます。

ツールバー
ツールバー
ステータスバー
ステータスバー
設定ダイアログ
設定ダイアログ (「環境」タブ)

この他に、ノードを右クリックして現われるコンテキストメニューからも さまざまなコマンドが実行できます。 リンクのコンテキストメニューからは属性を選択できます。

コンテンツ

表示モード

セマンティックエディタには下記の2つの表示モードがあります。

実体の選択

ノードの展開

ハイパーノードの内容であるグラフを表示するサブウィンドウを開きます。

ウィンドウのスクロール

(サブ) ウィンドウをスクロールします。

ノードの作成

実体のインポート

実体のURIを以下のいずれかの操作で入力すると、 その実体をインポートできます。

ここで入力できるURIは、 セマンティックエディタで作られた実体のURI (ee8a55ce-d517-4d3f-9b61-33b325bb4274のようなもの) または外部の実体のURI (http://i-content.org/index.htmlのようなもの) です。

リンクの作成

実体同士 (通常はノード同士) を結び付けます。

テキストの編集

ノードの内容のテキストを編集します。 オントロジーノードの内容 (URI) も編集できます。

実体の移動とコピー

実体の位置を変更します。

リンクの端点の変更

リンクの先端 (3角形の部分) または末尾 (丸い部分) を他の実体にドラッグ&ドロップするとリンクの端点が付け換わります。

ツリー表示モードでリンクのいずれかの端を実体がないところにドラッグ&ドロップすると、 その端が付いていた実体の新たな出現がそこにできて、 ドラッグした端がその出現に付きます。

実体のタイプの設定

ノードがどのクラスのインスタンスか、 リンクがどの属性のインスタンスかを設定します。 クラスと属性は、システムオントロジーまたはプロジェクトオントロジーで定義されたものから選べます。

ノードの種別の変更

ノードには、 単文 (テキスト) /メディア/オントロジーという3つの種別があります。

サーバとの通信

サーバと通信することによって他の利用者とコンテンツを共有することができます。サーバとの通信には主に(再帰的) 同期を使って下さい。

通信によって実体の枠線の色が変化することがあります。 各色の意味は下記の通りです。

オントロジー

セマンティックエディタが初期状態で使用できるオントロジーは、 システムオントロジーに含まれる下記のものです。

他のオントロジーは必要に応じてプロジェクトオントロジーに入れて下さい。オントロジーに違反している実体のラベルは赤くなります。

システムオントロジーの内容
システムオントロジーの内容

従来システムオントロジーに含まれていた下記のオントロジーは、 他のオントロジーと共に`some ontologies you may include in your projectOntology'の中にあり、 メインメニュー → ブックマーク → 共有ブックマークから開くことができます。

言語的関係のオントロジー`rel (middle-grain linguistic relations)'は文間の関係 (談話関係) 等の意味的な関係を定義しています。 通常の文章に相当するコンテンツはこれらの関係を使って作ります。 上の図のツリーやグラフの例もこのオントロジーを使用しています。

オントロジーの例題

ここでは「サザエさん」の家系図を作ってみましょう。 以下に図で示すコンテンツはすべてグラフ表示モードになっていますが、 ツリー表示モードでも実質的に同じことができます。

家族関係を記述するためには、 そのためのオントロジーをプロジェクトオントロジーにインポートしてオントロジーを反映する必要があります。 ここでは、 予め用意されているオントロジー`fam: family relation'に基づいてグラフを作ります。

メインメニューブックマークから`some ontologies you may include ...'を開き、その下のサブメニューに`fam: family relation'があるのを確認します。

「メインメニュー → ブックマーク → 共有ブックマーク → `some ontologies...' → `fam: family relation'」確認
メインメニュー → ブックマーク → 共有ブックマーク → `some ontologies...' → `fam: family relation'」確認

確認したら`some ontologies...'の方をクリックして`some ontologies you may include in your projectOntology'を展開します。

some ontologies you may include in your projectOntologyの内容
`some ontologies you may include in your projectOntology'の内容

背景が緑色になっているのは、 このノードが現在作業中のプロジェクトに含まれていないということです。 ちなみに、 縁が点線になっているノードは実はこのハイパーノードの要素ではなく、 「ダミーノード」と呼ばれます。

もし`fam: family relation'ノードの縁がピンクになっていたら、 その最新の内容が未取得であることを表わしています。 いったん`fam: family relation'を開いてこのオントロジーの中味をダウンロードして下さい。

fam: family relation ontologyのダウンロード
`fam: family relation'のダウンロード

メインメニュー → オントロジ → プロジェクトオントロジプロジェクトオントロジーを開きます。

「メインメニュー → オントロジ → プロジェクトオントロジ」選択
メインメニュー → オントロジ → プロジェクトオントロジ」選択

プロジェクトオントロジーのウィンドウが開いたら、 ツリーモードにして`some ontologies...'にそろえます。

projectOntologyのウィンドウ
`projectOntology'のウィンドウ (ツリーモード)

`some ontologies...'の中から`fam: family relation'を`projectOntology'にコピー&ペーストします。

projectOntologyにコピー&ペースト
`projectOntology'にコピー&ペースト(直後)

ドラッグ&ドロップでプロジェクトオン トロジに移動 (カット&ペースト) すると、 `some ontologies...'ノードから`fam: family relation'オントロジーが削除されてしまうので注意して下さい。

カット&ペーストしてしまった場合は、元に戻す(Ctrl-Z) またはバージョンを戻す(Shift-↓) を実行して下さい。

`fam: family relation ontology'を開いている場合には背景が緑から白に変化してインポートが完了したことがわかります。

projectOntologyにコピー&ペースト(インポート完了)
`projectOntology'にコピー&ペースト(インポート完了)

インポートが終わったらオントロジを反映を実行します。

「メインメニュー → オントロジ →
   オントロジを反映」を選択
メインメニュー → オントロジ → オントロジを反映」を選択

オントロジを反映しないと、 後述のクラスの変更などができません。

以下のようなことを表わすグラフを作成しましょう。

`fam: family relation'オントロジーでは、 以下のクラスと属性 (プロパティ) が定義されています。

まず、サザエフグ田マスオとする夫婦ノードを作成します (このノードを便宜上「フグ田夫妻」と呼びます) 。 最初に空ノード(空テキストノード) を作成し、 そのクラスを`fam:MaritalCouple'に変更します。

ここでは夫婦ノードを空ノード (空テキストノード) にしていますが、 他の種別にすると次のようなことができます。

空ノード「フグ田夫妻」生成&選択
空ノード「フグ田夫妻」生成&選択
「コンテキストメニュー → クラス → 家族 → 夫婦 (fam:MaritalCouple) 」選択
コンテキストメニュー → クラス → 家族 → 夫婦(fam:MaritalCouple) 」選択

このように、 あるクラスをリンクの終点でないノードのタイプとして使うには、 そのクラスの`iOccur'属性の値が「自由」でなければなりません。

`iOccur'属性の値「自由」
`iOccur'属性の値「自由

クラスを変更したテキストノードは、テキストが空白の場合はクラスが太字で表示されます。

空ノードのクラス表示
空ノード「フグ田夫妻」のクラス表示

次に、 この夫婦ノード「フグ田夫妻」を他のノードと関連付けます。

夫婦は必ずを含みます。 `fam: family relation'オントロジーではこのことが定義されているので、必須リンク作成に相当するノード、 およびそれらと夫婦ノード「フグ田夫妻」との関係が簡単に作れます。

「メインメニュー → 操作 → 必須リンク作成」選択
メインメニュー → 操作 → 必須リンク作成」選択
必須リンク作成結果
必須リンク作成結果

生成された妻ノードのテキストをサザエにします。 妻ノード(空ノード「」) を長クリックしてテキストカーソルを作り、 テキストを入力して下さい。

テキスト入力結果
テキスト入力の結果 (サザエ)

同様に、 空ノード「」 (夫ノード) をテキストノード「フグ田マスオ」に変更します。

夫ノードのテキスト入力
夫ノードのテキスト入力

以上でフグ田夫妻ができました。

この夫婦の間には、 子供 (タラオ) がいます。フグ田夫妻ノードのコンテキストメニューからリンク&ノード作成を選択すると、フグ田夫妻を始とするリンクとその終点のノードが生成されます。

夫婦空ノード「フグ田夫妻」選択
夫婦空ノード「フグ田夫妻」選択
「コンテキストメニュー → リンク&ノード作成」選択
コンテキストメニュー → リンク&ノード作成」選択
リンク&ノード作成結果
リンク&ノード作成」結果

上図とちがって「フグ田夫妻」と「」 (または「」・「」) ノードが「」リンクで結ばれていない場合は、 リンクとノードをそれぞれ手動で、 リンクの属性を「」に、 ノードのクラスを「」または「」・「」にして下さい。

新しい「」リンクとノードを見やすい位置に移動したら、 タラオはなので、 新ノードが「」(or「」)ノードならばそのクラスを(or)からに変更し、 さらに名前を入力します。

「コンテキストメニュー → クラス → 男(fam:Male)」選択
コンテキストメニュー → クラス → 男(fam:Male) 」選択
クラス変更結果
クラス変更結果 (から)
テキスト入力結果
テキスト入力結果 (タラオ)

同様にして「磯野家」のグラフを作成します。

「磯野家」のグラフ作成
「磯野家」のグラフ作成

磯野夫妻」と「サザエ」の間の親子関係を表現するため、 前者 (「夫婦」ノード) から後者への「」リンクを作ります。 たとえば、CtrlキーまたはShiftキーを押した状態で「磯野夫妻」、 「サザエ」の順にノードを選択しておいてCtrl-Mでリンクを作り、 そのタイプを「」に設定します。

子リンク作成結果
」リンク作成結果

これで所期のグラフができました。

さらに、 普通の家系図風に配置を変更することもできます。

配置変更結果
家系図風の配置

上の図は本当の縦書きではなく、操作 → ノードの行数変更を使った一行一文字の横書きです。

この内容を後で使いたい場合は、ファイル → 名前を付けて保存を実行してプロジェクトファイルを作ります。