HTML5 の microdata を活用する: 第 2 回、microdata を使用した次世代のアグリゲーション

microdata と Drupal を使用して、分散管理されるサイトを作成する

この連載の第 1 回では、microdata を schema.org の用語と組み合わせて使用することで、検索エンジンが検索結果のコンテンツを適切に表示できるようにする方法について説明しました。また、それと同じ microdata のマークアップを再利用し、Web サイト上の表示を改善する方法についても説明しました。この記事では、連携して作業を行うサイト所有者のグループのメンバーが microdata を使用することによって容易にサイト同士を接続し、中央のサイトでコンテンツを共有する方法について説明します。

Lin Clark, Drupal Developer, Independent Drupal Consultant

Author photoLin Clark は、Linked Data を専門とする Drupal 開発者です。Microdata や SPARQL Views など、複数の Drupal モジュールの保守を担当し、W3C HTML Data Task Force および Drupal の HTML5 イニシアチブに積極的に参加しています。カーネギー・メロン大学で教育を受けた彼女は、アイルランド国立大学ゴールウェイ校の Digital Enterprise Research Institute でリサーチ修士課程を終えようとしています。詳細については、lin-clark.com にアクセスしてください。



2012年 4月 05日

はじめに

この連載の他の記事

大規模な組織では、中央に集約されて標準化された大規模な IT システム (すべてが一体化された CMS など) に投資を行い、全員にそのシステムを使わせようとする場合がよくあります。残念なことに、全員にそのシステムを適切な方法で使わせようとするのは難題です。1 つのシステムで組織全体に対応するという方法では、見込んでいたような生産性が実現されることはめったにありません。特に、内部組織の間でやり取りがあまりなく、それぞれが独自に決定を下すような、あまり関係が密ではない内部組織を標準化あるいは管理しようとする場合、そうした 1 つのシステムですべてに対応することは困難です。あまり関係が密ではないながら相互に関係している複数の組織として、以下のような例が挙げられます。

  • 大学の学部
  • オープンソース・コミュニティーの企業や個人
  • アマチュア・スポーツの競技連盟に登録しているチーム

この連載の第 1 回では、microdata を使用することによって汎用のスクリプトを適用する方法を取り上げ、1 つの HTML スニペットを作成しました。その HTML スニペットはインタラクティブなイベント・マップを提供すると同時に、リッチ・スニペットを利用することによって Google、Bing、Yahoo! に表示される皆さんの Web ページの検索結果を効果的なものにしました。

よく使われる頭文字語

  • RDF: Resource Description Framework
  • RSS 2.0: Really Simple Syndication

この記事では、連携して作業を行うサイト所有者のグループのメンバーが 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 を生成したバックエンドのコードとは無関係です。


ターゲット・サイトを構築する

テストのためのソースが用意できたので、今度はアグリゲーション・サイトを構築します。まず、以下の手順で基本的なセットアップを行います。

  1. Drupal 7 をインストールし、以下のモジュールをダウンロードします。
    • Microdata Import
    • Feeds
    • Ctools
    • Job Scheduler
    • Libraries
    • HTTP Client
  2. Microdata Import と Feeds Admin UI を有効にします。すると他の 4 つの依存関係を有効にするように求められます。
  3. MicrodataPHP ライブラリーを sites/all/libraries/MicrodataPHP/MicrodataPhp.php としてダウンロードします。

    このライブラリーは HTML ページから microdata を抽出します。

ソースを取得する場合に使用するインポートの設定を構成します。

  1. Structure (構造)」 -> 「Content types (コンテンツ・タイプ)」の順に選択し、2 つのコンテンツ・タイプを作成します。1 つはフィードを管理するためのコンテンツ・タイプ、もう 1 つはチュートリアル自体を保持するためのコンテンツ・タイプです。この 2 つをそれぞれ「Tutorial import」、「Tutorial」と呼ぶことにします。設定はすべてデフォルトのままにしておきます。
  2. Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを追加します。
  3. 「Basic Settings (基本設定)」セクションの左側の列で「Settings (設定)」をクリックします。「Attach to content type (コンテンツ・タイプに追加)」ドロップダウン・メニューから上記で作成したコンテンツ・タイプを選択して保存します。図 2 では「Tutorial import」が選択されています。
    図 2. 「Feeds importers (フィード・インポーター)」の基本設定を構成する
    「Feeds importers (フィード・インポーター)」の基本設定を構成する画面のスクリーン・キャプチャー
  4. 「Parser (パーサー)」の隣にある「Change (変更)」をクリックします。「Microdata Import Parser (from RSS/Atom) (Microdata Import パーサー (RSS/Atom から))」に切り換え、「Save (保存)」をクリックして保存します。

    「Changed parser plugin (パーサー・プラグインを変更)」という確認メッセージが画面上部に表示されるはずです。

  5. 「Processor (プロセッサー)」で「Settings (設定)」をクリックします。図 3 のように更新設定を「Update existing nodes (既存ノードを更新)」に変更し、「Tutorial」を選択してコンテンツ・タイプを変更します。

    「Text format (テキスト・フォーマット)」を「Filtered HTML (フィルタリングされた HTML)」に変更します。必ずしも信頼できないサイトからコンテンツをインポートするため、「Full HTML (完全な HTML)」を使用してはなりません。「Full HTML (完全な HTML)」を使用するとクロスサイト・スクリプティングに対して脆弱になってしまいます。

    図 3. ノードに追加するフィード項目を処理するための設定を構成する
    ノードに追加するフィード項目を処理するための設定を構成する画面を表示したスクリーン・キャプチャー
  6. 「Processor (プロセッサー)」で「Mapping (マッピング)」をクリックし、ソースのブログ記事のどの部分をターゲット・ノードのどこに追加するのかを定義します。使用可能な microdata コンテンツに関する情報をまだ追加していないので、一覧表示されるのは RSS/Atom で公開されている要素のみです。
  7. URL から URL へのマッピングを選択し、「Add (追加)」をクリックします。「UNIQUE TARGET (一意のターゲット)」チェック・ボックスにチェックを入れ、「Save (保存)」をクリックします。こうすることで、この後で実行する場合には必ず、ソースとターゲットの項目を対応させることができ、ソースの変更をすべてターゲットに反映させることができます。
  8. 「Title (タイトル)」から「Title (タイトル)」へのマッピングを選択し、「Add (追加)」をクリックします。
  9. 「Description (概要)」から「Body (本体)」へのマッピングを選択し、「Add (追加)」をクリックします (図 4)。
図 4. ソースからターゲットにマッピングする
ソースからターゲットにマッピングする画面のスクリーン・キャプチャー

上記をテストするために、以下の手順でコンテンツをインポートします。

  1. Add content (コンテンツを追加)」をクリックし、新しい「Tutorial import」を追加します。
  2. そのタイトルを「Source 1」とします。
  3. 「Feed URL (フィードの URL)」フィールドにソースのフィードを追加し、「Save (保存)」をクリックします。
  4. 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 を使用するように、マッピングを変更します。

  1. Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを編集します。
  2. 「Parser (パーサー)」で「Settings (設定)」をクリックします。サンプル・ソースのページの URL をフィールドに入力します (図 7)。

    このサンプル・ページを構文解析することにより、どのプロパティーを使用できるのかを確認します。そのため、このサンプルは可能な限り完全なものにする必要があります。この設定を保存します。

    図 7. サンプル・ページを使用してプロパティーへのパスを指定する
    サンプル・ページを使用してプロパティーへのパスを指定する画面のスクリーン・キャプチャー
  3. 「Processor (プロセッサー)」で「Mapping (マッピング)」をクリックします。「description (概要)」の行で「Remove (削除)」にチェックを入れ、「Save (保存)」をクリックします。これで RSS の description と body フィールドの間のマッピングが削除されます。
  4. Select a source (ソースを選択)」ドロップダウン・メニューをクリックします。このメニュー・リストにはサンプル・ソースから判断して追加された新しいソース要素が含まれています。
  5. 新しい「description」要素 (リストの 2 番目に表示されている「description」要素) を選択し、その要素を「body」にマッピングして「Add (追加)」をクリックします (図 8)。
    図 8. description 要素のマッピングを更新する
    description 要素のマッピングを更新する画面のスクリーン・キャプチャー
  6. 「Source 1 Tutorial import」を見つけ、「Import (インポート)」タブをクリックします。「Import (インポート)」ボタンをクリックするとノードが更新されます。これで、「Audience (対象読者)」と「Module (モジュール)」のテキストが description 要素から切り離されました (図 9)。
    図 9. RSS の description の代わりに microdata の description を使用するように更新されたノード
    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 要素用のフィールドを作成し、そのフィールドに対するマッピングを作成する必要があります。

  1. Structure (構造)」 -> 「Content types (コンテンツ・タイプ)」の順に選択し、「Tutorial」コンテンツ・タイプの「Manage fields (フィールドを管理)」をクリックします。
  2. audience のテキスト・フィールドを追加します。
  3. Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを編集します。
  4. 「Processor (プロセッサー)」で「Mapping (マッピング)」をクリックします。
  5. 新しい「Audience (対象読者)」フィールドに「keywords/audience」要素をマッピングし、「Add (追加)」をクリックします (図 10)。
    図 10. keywords/audience プロパティーをマッピングに追加する
    keywords/audience プロパティーをマッピングに追加する画面のスクリーン・キャプチャー
  6. 再度「Source 1 Tutorial import」を見つけ、「Import (インポート)」をクリックします。更新されたチュートリアルのページにアクセスすると、「Audience (対象読者)」フィールドに内容が追加されていることがわかります (図 11)。
図 11. 「Audience (対象読者)」の情報が更新されたノード (フル・ノード・ビューの場合)
「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 属性を使用します。itemiditemscope 属性や 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 の構成方法はターゲット・サイトの場合もソース・サイトの場合も同じで、以下のとおりです。

  1. Structure (構造)」 -> 「Content types (コンテンツ・タイプ)」の順に選択し、「Tutorial」コンテンツ・タイプの「Manage fields (フィールドを管理)」をクリックします。
  2. 図 12 のように「Related Modules (関連モジュール)」というラベルのフィールドを追加します。フィールド・タイプとしては「Term reference (用語参照)」を選択し、フォーム要素として「Web Taxonomy autocomplete (Web Taxonomy 自動補完)」ウィジェットを選択します。
    図 12. Web Taxonomy フィールドを追加する
    Web Taxonomy フィールドを追加する画面のスクリーン・キャプチャー
  3. 語彙として「Drupal Full Projects (Drupal フル・プロジェクト)」を選択し、「Save (保存)」をクリックしてフィールドの設定を保存します。
  4. 値の数を「Unlimited (無制限)」に変更し、「Save (保存)」をクリックして設定を保存します。

これで、チュートリアルを編集してモジュール名を入力することで Web Taxonomy フィールドをテストすることができます。自動補完フィールドには図 13 のように候補が表示されるはずです。候補の 1 つを選択してチュートリアルを保存すると、そのチュートリアルを表示する際にそのタグが表示されるようになります。クリックして用語のページに進むと、用語に対して ID として使用している URL が表示されます。

図 13. Drupal フル・プロジェクトに対する Web Taxonomy の自動補完
Drupal フル・プロジェクトに対する Web Taxonomy の自動補完の画面のスクリーン・キャプチャー

このフィールドをソースで構成する場合には、コントリビュートされた Token モジュールをダウンロードして有効にし、その用語に割り当てられた itemid を変更します。「Structure (構造)」 -> 「Taxonomy (タクソノミー)」の順に選択し、Drupal フル・プロジェクトの語彙を編集します。itemid に使用するトークンのフィールドの値を [term:web_tid] に変更します。するとその用語に対し、ローカル・パスの代わりにグローバルな Web Term ID が使用されるようになります。


関連モジュールを利用する

ここまでの段階で、Web Taxonomy フィールドを利用できるようになり、このフィールドをテストすることができました。今度はこのフィールドへのインポートを行います。

  1. Structure (構造)」 -> 「Feeds importers (フィード・インポーター)」の順に選択し、インポーターを編集します。
  2. about:itemid」を「Related Modules: Web Term ID (関連モジュール: Web Term ID)」にマッピングし、「Add (追加)」をクリックします。
  3. 再度「Source 1 Tutorial import」を見つけ、「Import (インポート)」をクリックします。すると、図 14 のように関連モジュールが追加されたことがわかります。
図 14. 関連モジュールが追加されて更新されたノード
2 つの関連モジュールが追加されて更新されたノードの画面のスクリーン・キャプチャー

これでインポートの設定を完全に構成できたので、複数の「Tutorial import」ノードを作成し、複数のサイトからデータをインポートすることができます。(「Tutorial import」ノードを作成して「Source 2」フィードを追加します。) インポートされたデータはすべて、Drupal が理解できる形で構成されるようになりました。チュートリアルの集合全体をファセットでブラウズするためのユーザー・インターフェースは容易に作成することができます。


Microdata Import 以上の機能が必要な場合

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 である場合でも) を使用して、共通の製品にコントリビュートできるようになることです。

参考文献

学ぶために

製品や技術を入手するために

  • 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: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source, Web development
ArticleID=807622
ArticleTitle=HTML5 の microdata を活用する: 第 2 回、microdata を使用した次世代のアグリゲーション
publish-date=04052012