大規模な組織では、中央に集約されて標準化された大規模な IT システム (すべてが一体化された CMS など) に投資を行い、全員にそのシステムを使わせようとする場合がよくあります。残念なことに、全員にそのシステムを適切な方法で使わせようとするのは難題です。1 つのシステムで組織全体に対応するという方法では、見込んでいたような生産性が実現されることはめったにありません。特に、内部組織の間でやり取りがあまりなく、それぞれが独自に決定を下すような、あまり関係が密ではない内部組織を標準化あるいは管理しようとする場合、そうした 1 つのシステムですべてに対応することは困難です。あまり関係が密ではないながら相互に関係している複数の組織として、以下のような例が挙げられます。
- 大学の学部
- オープンソース・コミュニティーの企業や個人
- アマチュア・スポーツの競技連盟に登録しているチーム
この連載の第 1 回では、microdata を使用することによって汎用のスクリプトを適用する方法を取り上げ、1 つの HTML スニペットを作成しました。その HTML スニペットはインタラクティブなイベント・マップを提供すると同時に、リッチ・スニペットを利用することによって Google、Bing、Yahoo! に表示される皆さんの Web ページの検索結果を効果的なものにしました。
この記事では、連携して作業を行うサイト所有者のグループのメンバーが microdata を使用することによって互いのサイト同士を容易に接続し、中央に集約されたグループ・サイトでコンテンツを共有できるようにする方法について説明します。各メンバーが HTML マークアップにいくつかの属性を追加することに合意することで、関係が密ではない組織が自分達の情報システムの独立性を維持しつつ、共同プロジェクトを構築することができます。
シナリオ: Drupal のための分散ドキュメンテーション・システムを構築する
多くのオープンソース・プロジェクトでは、ドキュメントをソフトウェアの最新の状態に対応した確実な内容に維持するために苦労しています。それと同時に、プロジェクトのコントリビューターはブログ記事を使用して詳細な技術的説明を共有します。これらのブログ記事は、多くの場合 Planet に集約されます。Planet はブロガーを選択してブログ記事を収集するブログ・アグリゲーターです (「参考文献」を参照)。
Planet はコミュニティーの最新のイベントや議論に参加するための効果的な手段となりますが、連携して作業をするための技術としては十分ではありません。Planet によって集約されたブログ記事のアーカイブをフィルタリングしようとすると、元の構造化データはほとんど失われているため、簡単にはフィルタリングすることができません。集約されたブログ記事がタグなどの有用な構造化データを含んでいる場合であっても、さまざまなサイトからのブログ記事は用語が異なる場合や、用語の綴りが異なる場合がよくあります。そのため、ブログ記事を効率良くソートすることができません。
この問題は、ブログ記事そのものとブログ記事に関する重要な追加情報を併せて収集するアグリゲーターを作成することで解決することができます。そのアグリゲーターを使用してブログ記事をナビゲートすると、そのプロジェクトのメイン・サイト内の適切な場所にブログ記事を配置することができます。
ここでは架空のシステムによって Drupal のドキュメントを作成します。広く使用されている一部の Drupal サブシステム (Drupal ではモジュールと呼ばれます) については、ブログ記事では詳しく説明されていますが、Drupal.org のハンドブックには適切なドキュメントがありません。目標とするのは、Planet によって収集された優れたドキュメントを、検索が容易な Drupal.org の構造へ移行することです。
最初のタスクは、どんな情報をブログ記事から中央のドキュメンテーション・システムに渡す必要があるかを判断することです。例えば、あるブログ記事の内容がどのモジュールについてのものなのかを示したいとします。モジュールは、メジャー・バージョンによって動作が異なることがよくあるため、そのチュートリアルがモジュールの特定のバージョンに特有の内容であるかどうかを示すのは良い考えです。
Drupal に関して作業を行う場合、コンテンツの編集からバックエンドの開発に至るまで、さまざまな役割があります。そこで、あるブログ記事がどの役割の人に役立つかを示すことができると便利です。図 1 のドキュメンテーション・レコードは、タイトル、概要、対象読者 (Audience)、関連モジュール (Related Modules) を示しています。
図 1. ドキュメンテーション・レコードの例
このシナリオでデータを共有するために必要なことは非常に単純で、ソースであるブログ記事から中央のサイトに以下の項目を渡せばよいのです。
- タイトル
- 概要
- URL
- 対象読者
- モジュール
タイトル、概要、URL は RSS の構造化フォーマットに、既に含まれています。そのため、対象読者とモジュールに関する構造化データを取得するためのソリューションが必要となります。そこで microdata を使用します。ただし microdata を扱う前に、テスト用のソース・サイトとターゲット・サイトを構築する必要があります。
受信したブログ記事を構文解析して処理するために、Microdata Import モジュールを使用します。このモジュールで想定している入力はフィードの URL なので、ソースは RSS または Atom を出力できなければなりません。
そのために、microdata を自動的に追加するツールを備えた Drupal のような CMS を使用することも、(microdata 属性を削除するものでない限り) 別のブログ・システムを使用することもできます。Microdata Import モジュールの場合、インポートされる各項目が 1 つのフィード項目に関連付けられている必要があるため、各チュートリアルをそれぞれ個別のページに投稿するようにします。
このシナリオでは、Blogger と Drupal Gardens でホストされるブログ・プラットフォームを使用します。皆さんは独自のソースを設定することも、以下のソースを使用することもできます。
必要な情報はすべて HTML マークアップに直接含まれているため、ソースのためにどのようなツールを使用しても影響はありません。HTML の microdata は標準的な読み取り専用の API として機能し、その microdata を生成したバックエンドのコードとは無関係です。
テストのためのソースが用意できたので、今度はアグリゲーション・サイトを構築します。まず、以下の手順で基本的なセットアップを行います。
- Drupal 7 をインストールし、以下のモジュールをダウンロードします。
- Microdata Import
- Feeds
- Ctools
- Job Scheduler
- Libraries
- HTTP Client
- Microdata Import と Feeds Admin UI を有効にします。すると他の 4 つの依存関係を有効にするように求められます。
- MicrodataPHP ライブラリーを sites/all/libraries/MicrodataPHP/MicrodataPhp.php としてダウンロードします。
このライブラリーは HTML ページから microdata を抽出します。
ソースを取得する場合に使用するインポートの設定を構成します。
- 「Structure (構造)」 -> 「Content types
(コンテンツ・タイプ)」の順に選択し、2 つのコンテンツ・タイプを作成します。1 つはフィードを管理するためのコンテンツ・タイプ、もう 1
つはチュートリアル自体を保持するためのコンテンツ・タイプです。この 2 つをそれぞれ「
Tutorial import」、「Tutorial」と呼ぶことにします。設定はすべてデフォルトのままにしておきます。 - 「Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを追加します。
- 「Basic Settings (基本設定)」セクションの左側の列で「Settings (設定)」をクリックします。「Attach to content type
(コンテンツ・タイプに追加)」ドロップダウン・メニューから上記で作成したコンテンツ・タイプを選択して保存します。図 2 では「Tutorial
import」が選択されています。
図 2. 「Feeds importers (フィード・インポーター)」の基本設定を構成する
- 「Parser (パーサー)」の隣にある「Change (変更)」をクリックします。「Microdata Import Parser
(from RSS/Atom) (Microdata Import パーサー (RSS/Atom から))」に切り換え、「Save (保存)」をクリックして保存します。
「Changed parser plugin (パーサー・プラグインを変更)」という確認メッセージが画面上部に表示されるはずです。
- 「Processor (プロセッサー)」で「Settings (設定)」をクリックします。図 3
のように更新設定を「Update existing nodes (既存ノードを更新)」に変更し、「Tutorial」を選択してコンテンツ・タイプを変更します。
「Text format (テキスト・フォーマット)」を「Filtered HTML (フィルタリングされた HTML)」に変更します。必ずしも信頼できないサイトからコンテンツをインポートするため、「Full HTML (完全な HTML)」を使用してはなりません。「Full HTML (完全な HTML)」を使用するとクロスサイト・スクリプティングに対して脆弱になってしまいます。
図 3. ノードに追加するフィード項目を処理するための設定を構成する
- 「Processor (プロセッサー)」で「Mapping (マッピング)」をクリックし、ソースのブログ記事のどの部分をターゲット・ノードのどこに追加するのかを定義します。使用可能な microdata コンテンツに関する情報をまだ追加していないので、一覧表示されるのは RSS/Atom で公開されている要素のみです。
- URL から URL へのマッピングを選択し、「Add (追加)」をクリックします。「UNIQUE TARGET (一意のターゲット)」チェック・ボックスにチェックを入れ、「Save (保存)」をクリックします。こうすることで、この後で実行する場合には必ず、ソースとターゲットの項目を対応させることができ、ソースの変更をすべてターゲットに反映させることができます。
- 「Title (タイトル)」から「Title (タイトル)」へのマッピングを選択し、「Add (追加)」をクリックします。
- 「Description (概要)」から「Body (本体)」へのマッピングを選択し、「Add (追加)」をクリックします (図 4)。
図 4. ソースからターゲットにマッピングする
上記をテストするために、以下の手順でコンテンツをインポートします。
- 「Add content (コンテンツを追加)」をクリックし、新しい「Tutorial import」を追加します。
- そのタイトルを「
Source 1」とします。 - 「Feed URL (フィードの URL)」フィールドにソースのフィードを追加し、「Save (保存)」をクリックします。
- 「Import (インポート)」タブを選択して「Import (インポート)」をクリックします。1 つまたは複数のノードが作成されたことを示すメッセージが表示されるはずです (図 5)。
図 5. ソースからインポートされたノード
ホーム・ページにアクセスし、ブログ記事がインポートされたことを確認します。しかし作業はまだ終わりではありません。ブログ記事全体が既にインポート済みなので、なぜそれ以上のことが必要なのかよくわからないかもしれませんが、元のブログ記事の構造を維持しなかったため、まだブログ記事を対象読者やモジュールによってフィルタリングすることはできません。そこで microdata が登場します。
図 6. インポートされたノード
適切にフィードを取得できるようになったので、マークアップに microdata を追加し、ブログ記事と共に microdata を取得できるようにします。リスト 1 にブログ記事の基本的なマークアップを示します。
リスト 1. ブログ記事の基本的な HTML マークアップ
<h2>Building modules on top of SPARQL Views</h2>
<div>
<p>This video demonstrates how you can build a module that installs a
View powered by a SPARQL query whenever it is enabled.</p>
<b>Audience:</b> Developer <br />
<b>Modules:</b>
<ul>
<li>Views</li>
<li>SPARQL Views</li>
</ul>
</div>
|
このコンテンツが記事であることを示す必要があります。このシナリオでは schema.org の語彙を使用して記事をマークアップします。schema.org の語彙にはアノテーションを付ける必要がある対象のほとんどに対する用語が含まれているからです (「参考文献」を参照)。連携して作業を行うブロガー全員が同意する場合には、別の語彙を使用することもできます。(「Drupal と HTML5、さらに microdata を組み合わせる」(「参考文献」を参照) の中で、私は microdata を追加する方法について詳細に説明しています。その記事では、手作業で microdata を追加する方法と、そのプロセスを Microdata モジュールを使用して自動化する方法を説明しています。)
タイトルは RSS
フィードから取得するので、タイトルをマークアップする必要はありません。ただしタイトルをマークアップすると、他の利用者がタイトルのデータを再利用しやすくなります。そのためにはリスト
2 のように name プロパティーを使用します。タイトルは記事の div の外部にあるため、タイトルを指定する meta 要素を div の中に追加する必要があります。概要には description
プロパティーを使用します。このプロパティーを使用することで、RSS の description 要素を使用する場合よりもアクセス対象をきめ細かく分けることができます。
リスト 2. 基本的な microdata をブログ記事に追加する
<h2>Building modules on top of SPARQL Views</h2>
<div itemscope="" itemtype="http://schema.org/Article">
<meta itemprop="name" content="Building modules on top of SPARQL Views" />
<p itemprop="description">This video demonstrates how you can build a module
that installs a View powered by a SPARQL query whenever it is enabled.</p>
...
</div>
|
ブログ記事に microdata のマークアップが追加されたので、ブログ記事のテキストから概要のみを抽出することができます。これにより、対象読者と関連モジュールが概要から除外されますが、対象読者と関連モジュールは後でそれぞれのフィールドに入れることになるので、これは好都合です。RSS の descriptionではなく microdata の description を使用するように、マッピングを変更します。
- 「Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを編集します。
- 「Parser (パーサー)」で「Settings (設定)」をクリックします。サンプル・ソースのページの URL をフィールドに入力します
(図 7)。
このサンプル・ページを構文解析することにより、どのプロパティーを使用できるのかを確認します。そのため、このサンプルは可能な限り完全なものにする必要があります。この設定を保存します。
図 7. サンプル・ページを使用してプロパティーへのパスを指定する
- 「Processor (プロセッサー)」で「Mapping (マッピング)」をクリックします。「description (概要)」の行で「Remove (削除)」にチェックを入れ、「Save (保存)」をクリックします。これで RSS の description と body フィールドの間のマッピングが削除されます。
- 「Select a source (ソースを選択)」ドロップダウン・メニューをクリックします。このメニュー・リストにはサンプル・ソースから判断して追加された新しいソース要素が含まれています。
- 新しい「description」要素 (リストの 2 番目に表示されている「description」要素)
を選択し、その要素を「body」にマッピングして「Add (追加)」をクリックします (図 8)。
図 8. description 要素のマッピングを更新する
- 「Source 1 Tutorial import」を見つけ、「Import
(インポート)」タブをクリックします。「Import
(インポート)」ボタンをクリックするとノードが更新されます。これで、「Audience (対象読者)」と「Module (モジュール)」のテキストが
description 要素から切り離されました (図 9)。
図 9. RSS の description の代わりに microdata の description を使用するように更新されたノード
この更新により、description の不要部分が削除されただけではなく、インポートされた情報がすべて完全に更新されました。ソースのブログ記事で内容を変更すると、この図 9 のノードにもその新しい内容が表示されるはずです。この更新機能は cron で実行するように構成されているため、この機能を手動でトリガーして定期的な更新を行う必要はありません。これを見ると Feeds システムの強力さがわかります。Feeds システムによって、連携するサイトの効果的なネットワークを作成するために必要な自動同期が容易に実現されます。
ここまでで、すべてのブログ記事に共通する一部の情報、つまりタイトルと説明をマークアップしました。このセクションでは、今回のシナリオに特化した情報についての説明に移ります。今回のシナリオで重要なことは、連携して作業を行うサイト所有者のグループのメンバーと関わることで、彼らが提供しているコンテンツについて彼らが元々どのように考えているかを理解することが重要です。この情報は、(外部の理想に従ったものではなく) 連携して作業を行う人たちのメンタル・モデルを反映しているはずです。
Drupal コミュニティーでは既に一連の役割が明確に定義されており、Drupal に関するカンファレンスでのトラックもこの役割によって分類されています。Drupal の Skill Map プロジェクトでは以下の役割を定義しています。
- System Architect (システム・アーキテクト)
- Developer (開発者)
- Themer (テーマ設計者)
- Site Builder (サイト・ビルダー)
- Content Editor (コンテンツ・エディター)
- Design/UX (デザイナー/ユーザー・エクスペリエンス設計者)
- Project Manager (プロジェクト・マネージャー)
- Drupal Marketer (Drupal マーケター)
この 8 つのグループのうち、ブログ記事の対象読者がどのグループ (複数の場合もあり) に属するのかを示す必要があります。残念ながら、schema.org の語彙には
audience (対象読者) という概念がないため、以下の 2 つの選択肢のいずれかで itemprop を扱うことになります。
- schema.org のドキュメントに記述されている拡張メカニズムを使用して schema.org を拡張する方法。そのためには既存のプロパティーを取得して末尾に
/audienceを追加します。例えば
keywordsプロパティーを拡張してkeywords/audienceにするためには以下のようにします。Audience: <span itemprop="keywords/audience">Developer</span>
- 別の語彙の用語を使用するか、独自の語彙を作成する方法
例えば Tutorial 語彙に audience プロパティーがある場合 (そして audience プロパティーの値としてストリングを使用できる場合) には、そのプロパティーを使用することができます。http://schema.org/Article の
itemtypeを使用するので、これまで使用してきた短縮形のプロパティー名ではなく完全な URL によって Tutorial 語彙のプロパティーを参照する必要があります。完全な URL はhttp://tutorial-vocabulary.org/audienceのようになります。正確な URL は、その語彙のドキュメントで指定します。その URL を以下のようにしてitemprop属性に含めます。Audience: <span itemprop="http://tutorial-vocabulary.org/audience">Developer</span>
このシナリオでは最初の選択肢を採用し、schema.org を拡張します。手作業で microdata を追加する場合には、リスト
3 をコピーして body に貼り付けます。Drupal を使用してソース・サイトに microdata を自動的に追加する場合には、ブログ記事に List (text)
フィールドを作成すると、対象読者を選択するためのチェック・ボックスがブログ記事に追加されます。そのフィールドの設定に keywords/audience プロパティーを追加すると、適切な microdata が自動的に出力されます。
利用する側のサイトのコンテンツに audience 要素を追加するためには、対象となるコンテンツ・タイプに対して audience 要素用のフィールドを作成し、そのフィールドに対するマッピングを作成する必要があります。
- 「Structure (構造)」 -> 「Content types (コンテンツ・タイプ)」の順に選択し、「Tutorial」コンテンツ・タイプの「Manage fields (フィールドを管理)」をクリックします。
- audience のテキスト・フィールドを追加します。
- 「Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを編集します。
- 「Processor (プロセッサー)」で「Mapping (マッピング)」をクリックします。
- 新しい「Audience (対象読者)」フィールドに「
keywords/audience」要素をマッピングし、「Add (追加)」をクリックします (図 10)。
図 10.keywords/audienceプロパティーをマッピングに追加する
- 再度「Source 1 Tutorial import」を見つけ、「Import (インポート)」をクリックします。更新されたチュートリアルのページにアクセスすると、「Audience (対象読者)」フィールドに内容が追加されていることがわかります (図 11)。
図 11. 「Audience (対象読者)」の情報が更新されたノード (フル・ノード・ビューの場合)
ブログ記事を対象読者によって分類するには、ストリングを使用するのが適していることは言うまでもありません。対象読者の役割はそれほど多くはなく、時間の経過によって役割の種類に変更があることもほとんどありません。新しい役割の追加などの変更がある場合には、連携して作業を行う人たちに「Audience (対象読者)」フィールドの設定を更新させることは、それほど困難なことではありません。
ただし関連モジュールによって分類する場合は別です。Drupal には 14,000 個のモジュールがあり、そのほとんどには複数のバージョンがあります。それはつまり、少なくとも 14,000 種類の異なるタグがあるということです。これらのタグのフォーマットはそれぞれ大きく異なる可能性があります。さらに、モジュール・メンテナーは何千人もおり、彼らは自分達のモジュールの名前をいつでも変更することができます。
モジュールを参照するためには、ストリングとは違った不変の何かが必要です。勝手に変更できない識別子の 1 つとして、Drupal.org で規定されているモジュール URL があります (例えば、Views モジュールの場合は http://drupal.org/project/views など)。この URL は、モジュールに対する一貫した識別子として使用することができます。
モジュールのバージョンを追加するために、そのモジュール項目のプロパティーを追加することができます。ただしこの記事のシナリオでは、各バージョンに対して異なる ID
を使用した方が簡単です。例えば、Views 7.x-3.x を特定するためには URL として http://drupal.org/project/views/7/3 を使用します。現状では、この URL にアクセスしてもページが表示されるわけではありませんが、その URL のページに Views 7.x-3.x のチュートリアルがすべて表示され、そのページからそのリリースをダウンロードすることができる、という状況は容易に想像することができます。
値に対して ID の代わりにストリングを使用するためには、microdata の itemid
属性を使用します。itemid は itemscope 属性や
itemtype 属性と同じタグに配置されます。itemtype には Google 専用の schema.org
の用語 http://schema.org/SoftwareApplication を使用します。about プロパティーを使用すると、その Article (記事) がモジュールに関する記事であることを伝えることができます。
表示されるコンテンツは相変わらず name
のストリングです。このストリングを皆さんが使用するわけではありませんが、このストリングによって他の利用者は皆さんのデータを利用しやすくなるかもしれません。リスト 3
のように、このストリングをモジュールの name プロパティーとして公開します。
リスト 3. 関連モジュールの microdata を追加する
<p>Modules:
<ul>
<li itemprop="about" itemscope=""
itemtype="http://schema.org/SoftwareApplication"
itemid="http://drupal.org/project/views/7/3">
<span itemprop="name">Views</span>
</li>
<li itemprop="about" itemscope=""
itemtype="http://schema.org/SoftwareApplication"
itemid="http://drupal.org/project/sparql_views/7/2">
<span itemprop="name">SPARQL Views</span>
</li>
</ul>
</p>
|
これをすべて手作業で追加するのは簡単ではありません。可能であれば、それを支援するツールが必要です。ソースに Drupal を使用する場合には、私が作成した Web Taxonomy モジュールを使用すると、コンテンツ作成者は自分達のブログ記事にタグを付けることができます。Web Taxonomy を使用すると、Web 上で定義されたタクソノミーによって結果が自動補完されます。ある用語を選択すると、その用語がサイトにインポートされます。これはつまり、Drupal プロジェクトの語彙に含まれる何万もの用語をデータベースに格納しなくても利用できるということです。新しいタグが追加された場合やタグが変更された場合には、自動補完フィールドがそのタグにアクセスしてくれるので、皆さんはそのタグについて考える必要すらありません。
また、Web Taxonomy を使用して関連モジュールを利用することもできます。そのため、ターゲット・サイトでも Web Taxonomy を構成する必要があります。
関連モジュールに対して Web Taxonomy を構成する
Web Taxonomy をダウンロードして有効にします。Web Taxonomy を構成するためには、どの外部タクソノミーを使用するのか、またそのタクソノミーへどのようにしてアクセスするのか、といったことを定義するモジュールも必要です。Drupal フル・プロジェクト用に私が作成したモジュールは http://drupal.org/sandbox/linclark/1363774 で入手することができます。このモジュールを有効にすると、新しい Drupal フル・プロジェクトの語彙がサイトに追加されます。
Web Taxonomy の構成方法はターゲット・サイトの場合もソース・サイトの場合も同じで、以下のとおりです。
- 「Structure (構造)」 -> 「Content types (コンテンツ・タイプ)」の順に選択し、「Tutorial」コンテンツ・タイプの「Manage fields (フィールドを管理)」をクリックします。
- 図 12 のように「Related Modules
(関連モジュール)」というラベルのフィールドを追加します。フィールド・タイプとしては「Term reference
(用語参照)」を選択し、フォーム要素として「Web Taxonomy autocomplete (Web Taxonomy 自動補完)」ウィジェットを選択します。
図 12. Web Taxonomy フィールドを追加する
- 語彙として「Drupal Full Projects (Drupal フル・プロジェクト)」を選択し、「Save (保存)」をクリックしてフィールドの設定を保存します。
- 値の数を「Unlimited (無制限)」に変更し、「Save (保存)」をクリックして設定を保存します。
これで、チュートリアルを編集してモジュール名を入力することで Web Taxonomy フィールドをテストすることができます。自動補完フィールドには図 13 のように候補が表示されるはずです。候補の 1 つを選択してチュートリアルを保存すると、そのチュートリアルを表示する際にそのタグが表示されるようになります。クリックして用語のページに進むと、用語に対して ID として使用している URL が表示されます。
図 13. Drupal フル・プロジェクトに対する Web Taxonomy の自動補完
このフィールドをソースで構成する場合には、コントリビュートされた Token モジュールをダウンロードして有効にし、その用語に割り当てられた itemid を変更します。「Structure (構造)」 ->
「Taxonomy (タクソノミー)」の順に選択し、Drupal
フル・プロジェクトの語彙を編集します。itemid に使用するトークンのフィールドの値を [term:web_tid] に変更します。するとその用語に対し、ローカル・パスの代わりにグローバルな Web Term ID が使用されるようになります。
ここまでの段階で、Web Taxonomy フィールドを利用できるようになり、このフィールドをテストすることができました。今度はこのフィールドへのインポートを行います。
- 「Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを編集します。
- 「
about:itemid」を「Related Modules: Web Term ID (関連モジュール: Web Term ID)」にマッピングし、「Add (追加)」をクリックします。 - 再度「Source 1 Tutorial import」を見つけ、「Import (インポート)」をクリックします。すると、図 14 のように関連モジュールが追加されたことがわかります。
図 14. 関連モジュールが追加されて更新されたノード
これでインポートの設定を完全に構成できたので、複数の「Tutorial import」ノードを作成し、複数のサイトからデータをインポートすることができます。(「Tutorial import」ノードを作成して「Source 2」フィードを追加します。) インポートされたデータはすべて、Drupal が理解できる形で構成されるようになりました。チュートリアルの集合全体をファセットでブラウズするためのユーザー・インターフェースは容易に作成することができます。
Microdata Import を使用すると、組織の境界を越えて知識を共有することができます。ただし、それだけでは不十分な場合があります。Microdata Import はインポートされるページとサイト上のページとの間に 1 対 1 の関係があることを前提にしています。上記のシナリオではそれで問題ありません。チュートリアルに関する情報を、そのチュートリアルのページそのものから提供すればよいからです。
しかし場合によると、別のサイトにコンテンツを公開している別の人々も同じ項目に関して情報を追加できるようにしたい場合があります。例えば、ある大学の教授が 2 つの学部で合同の予定がある場合、それぞれの学部は他方の学部と調整しなくても、その教授に関する情報を自分達の学部のサイトに追加できるようにする必要があります。Microdata Import を使用した場合でも、ソースとフィード・インポーターを構成することによってそれを実現できるかもしれませんが、もっと容易に実現する方法があります。
1 つは microdata を RDF に変換する方法です。HTML Data Task Force は現在、microdata から RDF へのマッピングのドラフト仕様を最終決定しようとしています。このマッピングにより、MicrodataPHP ライブラリーなどのパーサーは microdata でマークアップされたページから確実に RDF を生成することができます。Gregg Kellogg 氏 (このマッピング仕様の策定にあたっているリーダー) が開発したツールである RDF distiller は既にこのマッピングを実装しています。RDF distiller は Ruby gem として入手することができます。彼のサイトでは API も提供しています。
IT の世界で組織や技術の境界を超えて Web コンテンツのオーサリングを協力して行う方法を見つけ出すことは大きな課題です。microdata はコンテンツの構造を HTML 自体に埋め込むことにより、あまり関係が密ではない人々や組織のグループが共同プロジェクトで協力して作業を行いやすくします。最も重要な点は、microdata を使用することで、連携して作業を行う人たちが彼ら独自のフレームワーク (たとえそのフレームワークが単にハンドコーディングされただけの HTML である場合でも) を使用して、共通の製品にコントリビュートできるようになることです。
学ぶために
- 「HTML5
の microdata を活用する: 第 1 回、microdata に対して jQuery を使用する」(Lin Clark 著、developerWorks、2011年11月): この連載の第 1 回の記事を読んでください。そして、1 つの HTML スニペットを作成することで、インタラクティブなイベント・マップを提供すると同時に、リッチ・スニペットを利用することによって Google、Bing、Yahoo! に表示される皆さんの Web ページの検索結果を効果的なものにする方法を学んでください。
- 「Drupal と
HTML5、さらに microdata を組み合わせる」(Lin Clark 著、developerWorks、2011年11月): Drupal を使用して Web ページに microdata を追加する方法を解説した記事を読んでください。
- schema.org: このスキーマのコレクションについて学んでください。これらの HTML タグを使用することで、主な検索プロバイダーによって認識されるようにページをマークアップすることができます。
- schema.orgを使いましょう: schema.org のサイトにあるチュートリアルを通じ、schema.org の用語を配置する方法を学んでください。
- 「セマンティック
Web、Linked Data、そして Drupal: 第 1 回 RDF を使ってデータを公開する」(Lin Clark 著、developerWorks、2011年4月): Web データの相互運用性を改善してデータ共有を効率化する方法を学んでください。この記事では一例として、RDF でコンテンツを公開することによって Drupal 7 を使用して Linked Data を公開する方法を解説しています。
- 「セマンティック
Web、Linked Data、そして Drupal: 第 2 回 Drupal 7 と SPARQL Views を使って複数の関連するデータ・セットを合成する」(Stéphane Corlosquet と Lin Clark の共著、developerWorks、2011年5月): 「データの Web」で現在使用可能になっている既存の Linked Data を利用する方法、そして複数の異なるエンドポイントからデータを取得して Drupal 7 サイトを強化する方法を学んでください。
- セマンティック Web に関する
Scientific American の記事: この大きな影響を与えた記事を読んでください。この記事は Tim Berners-Lee 氏、James Hendler 氏、Ora Lassila 氏によって執筆されたものです。
- Linked
Data: Tim Berners-Lee 氏が Linked Dataについて語った ReadWriteWeb のインタビュー記事を読んでください。
- Linked Data の設計上の問題: Linked Data について、Tim Berners-Lee 氏が書いた記事から学んでください。
- 「リッチ
スニペット (microdata、microformats、RDFa) - ウェブマスター ツール ヘルプ」: Google のサイトでリッチ・スニペットと構造化データについて学んでください。
- 「Implement
Semantic web standards in your Web site」(Rob Crowther 著、developerWorks、2008年5月): PHP と MySQL を使用して単純なソーシャル・ネットワーキング・サイトを構築してください。このサイトはセマンティック URI (Uniform Resource Identifier) の仕組みの一部として、hCard や FOAF (Friend of a Friend) などのセマンティック Web 標準を実装しています。
- FOAF Vocabulary
Specification 0.98: FOAF 言語について学んでください。FOAF は名前付きプロパティーやクラスの辞書として W3C の RDF 技術を使用して定義されています。
- Dublin Core Metadata Initiative
(DCMI): このオープンな組織について学んでください。DCMI は広範な目的やビジネス・モデルをサポートする相互運用可能なメタデータ標準を開発しています。
- SIOC
(Semantically-Interlinked Online Communities) Core Ontology Specification: オンライン・コミュニティー (掲示板、ウィキ、ブログなど) の情報をセマンティック Web 上に記述するために必要な中心的概念と性質について学んでください。
- SPARQL Explorer
for http://dbpedia.org/sparql: Web 上で利用できるデモ用のクエリー・インターフェースを試してください。
- New to XML には、XML を学ぶために必要なリソースが豊富に用意されています。
- developerWorks の Web development ゾーン: Web ベースのさまざまなソリューションを解説した記事が豊富に用意されています。
- developerWorks の XML ゾーン:
DTD、スキーマ、XSLT など、XML の領域でのスキルを磨くためのリソースが豊富に用意されています。XML の技術文書一覧には、広範な話題を網羅した技術記事やヒント、チュートリアル、技術標準、IBM Redbooks が豊富に用意されています。
- IBM XML certification: XML および関連技術において IBM 認定技術者になる方法を参照してください。
- developerWorks の Technical events
and webcasts: 最新情報を入手してください。
- developerWorks on-demand
demos: 初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。
- developerWorks on Twitter: 今すぐ Twitter に参加して developerWorks のツイートをフォローしてください。
- developerWorks
podcasts: ソフトウェア開発者のための興味深いインタビューや議論を聞いてください。
製品や技術を入手するために
- RDF Distiller: microdata から RDF へのマッピングをテストしてください。
- Google の Rich Snippets
Testing Tool: リッチ・スニペットをテストしてください。
- Live Microdata テスト・ツール: Opera 開発者の Philip Jägenstedt が microdata のテスト用に作成した、もう 1 つのツールを入手してください。
- IBM 製品の評価版: IBM 製品の評価版をダウンロードするか、あるいは IBM SOA Sandbox のオンライン試用版で、DB2、Lotus、Rational、Tivoli、WebSphere などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。
議論するために
- developerWorks
プロフィール: 今すぐプロフィールを作成し、ウォッチ・リストを設定してください。
- XML
ゾーンのディスカッション・フォーラム: これらのフォーラムでは XML に関連する議論が行われています。
- developerWorks コミュニティー: ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、ウィキを調べることができます。
