Drupal と HTML5、さらに microdata を組み合わせる

コンテンツを見つけやすくて再利用しやすいものにする

Google、Yahoo、Bing の 3 社が共同で schema.org を発表したことで、microdata はさまざまな Web サイトのデータを利用したアプリケーションを作成する手段として急速に普及が進んでいます。この記事では、Web ページに microdata を追加するために、Drupal を使用する方法を説明します。microdata を追加して、Web ページのコンテンツを Google リッチスニペットなどのアプリケーションで簡単に利用できるようにしてください。

Lin Clark, Drupal Developer, Digital Enterprise Research Institute, NUI Galway

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



2011年 12月 02日

2011年 11月 08日 ― 読者からのコメントに対応し、著者によってリスト 1 の内容が置き換えられ、birthDate に span 要素が追加されました。

はじめに

2011年 5月、Google、Yahoo、Bing の 3 社が schema.org を発表した途端、誰もが構造化データについて話題にするようになりました。schema.org は、検索エンジンが Web ページを理解するための新たな手段です。Web コンテンツの作成者が Web ページにほんのわずかなメタデータ (語彙集のわずか 2 つか 3 つの用語) を加えるだけで、3 つすべての検索エンジンで、より有効で参考になる検索結果が表示されるようになります。

schema.org による追加のマークアップは、今のところまだ、schema.org を実装した多くのサイトの検索結果の表示方法を変えるには至っていません。それでも Web コンテンツの作成者は、schema.org によるマークアップを Web ページに追加して、3 つの主要な検索エンジンでそのマークアップが利用されるようにしようと積極的になっています。

構造化データを HTML に追加するための構文を扱った経験のない Web 作成者にとって、schema.org を追加するのは難題となります。構造化データのための構文として挙げられるのは、以下の 3 つです。

  • microformats
  • RDFa
  • microdata

このうち、Google (多くの Web 作成者にとって最も影響力の大きい検索エンジン) では microdata だけを処理する方向であると示唆していますが、さらなる難題として、上記の 3 つの構文のなかで最も新しい構文である microdata には、今のところ十分なツールのサポートがない状態です。

この記事では、Drupal を使用してページに microdata を追加する方法を説明します。Google リッチスニペットなどのアプリケーションで使用できるようにコンテンツを作成する方法を学んでください。

この記事のソース・コードは、「ダウンロード」からダウンロードすることができます。


microdata の概要

よく使われる頭文字語

  • FOAF: Friend Of A Friend
  • RDF: Resource Description Framework
  • RDFa: RDF in attributes

microdata は、構造化データを Web ページに追加する簡単な手段です。microdata で定義しているいくつかの属性 (itemtypeitemprop など) を HTML タグに埋め込むことで、Web ページの内容を示すことができます。microdata が HTML 5 仕様の編集者である Ian Hickson 氏によって提唱されたのは 2009年のことですが、その根本概念はずっと前から存在していました。

microdata のベースとなっている RDFa は、RDF を HTML に埋め込む手段の 1 つです。RDFa は 2004年、W3C の技術ノートという形で Mark Birbeck 氏によって発案され、次のバージョンの XHTML に統合されました。RDFa では propertyabout などの新しい HTML 属性をいくつか導入していますが、rel などの HTML 属性はそのまま使用しています。

RDFa は強力ではあるものの、属性が複雑に関係し合うことから、作成者が自分の作成した RDFa を正しいかどうかを判断しにくい場合があります。また、RDFa は XML の機能を一部継承していますが (名前空間接頭辞など)、これも混乱を招きがちです。

RDFa が発表されてから 1 年少し経つと、XHTML におけるもう 1 つの構造化データ・バージョンとして microformats プロジェクトが一般の開発者グループによって立ち上げられました。RDFa とは対照的に、microformats では Web コンテンツの作成者がすでに使い慣れている既存の XHTML 属性 (例えば、リンクに設定する rel 属性など) を使用しますが、これらの属性に多少のセマンティクスも加えます。それまでは、可視のコンテンツをマークアップすることだけに重点が置かれていましたが、それだと非表示のコンテンツが誤用されたり、可視のコンテンツと一致しなくなったりしやすいためです。

microformats には、構文解析をする汎用的な方法がないという問題があります。そのため、それぞれの microformats に対するサポートを追加しなければなりません。例えば、カレンダー・データと住所データの両方を処理するとしたら、お使いのパーサーが確実にその両方をサポートするようにするか、2 つの異なるパーサーをそれぞれに使用する必要があります。さらに、コミュニティーのプロセスを利用して新しい microformats を公開するのも簡単ではありません。

microdata には、microformats と RDFa の素晴らしい発想が結集されています。具体的には、microdata には以下の特徴があります。

  • 属性の数を減らし、属性を配置可能な場所も減らすことで、RDFa の複雑さを軽減しています。
  • 名前空間接頭辞を使用しません。
  • RDFa の汎用的な構文解析手法を引き継いでいるため、公開されたデータに対して実行されるツールをごく簡単に作成することができます。
  • ユーザーのグループがそれぞれに独自の属性値のセット (語彙集と呼ばれます) を作成して microdata で使用できるようにしています。

schema.org の語彙で microdata を追加する方法

schema.org は microdata と相性の良い語彙集です。語彙集を管理する認定団体はないことから、検索エンジンの所有者たちは、それぞれのニーズを満たす独自の語彙集を考案することが可能でした。語彙の大半が対象としているのは、人物、場所、イベント、娯楽、商業など、Google がすでにそのリッチスニペットで重点を置いている事項です。

いくつかの典型例 (「参考文献」を参照) を見れば、schema.org 用語をサイトに追加する方法がわかってくるはずです。一例として、リスト 1 に schema.org の用語で強化した映画の説明を示す単純なマークアップを記載します。

リスト 1. schema.org で強化された単純な映画用マークアップ
<div itemscope itemtype ="http://schema.org/Movie">
  <h1 itemprop="name"&g;Avatar</h1>
  <div itemprop="director" itemscope itemtype="http://schema.org/Person">
  Director: <span itemprop="name">James Cameron</span> 
            (born <span itemprop="birthDate">August 16, 1954)</span>
  </div>
  <span itemprop="genre">Science fiction</span>
  <a href="../movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>

追加のマークアップによる効果がどのようなものかは、すぐにはわからないかもしれません。それを知るには、上記のスニペットを含めたページを Web に公開した後、ページの URL を Google リッチスニペット・テスト・ツール (「参考文献」を参照) に入力します。図 1 にその結果の一部を示します。Web サーバーに簡単にアクセスできない場合には、Opera の開発者である Philip Jägenstedt 氏によって提供されている Live Microdata テスト・ツール (「参考文献」を参照) に上記のスニペットをコピー・アンド・ペーストするという方法もあります。

図 1. リスト 1 の例から抽出された schema.org の microdata
リスト 1 の例から抽出された schema.org の microdata を示すスクリーン・キャプチャー

このように、ツールは 2 つの項目に関する情報 (映画と、その映画の監督) を抽出しました。

microdata には、2 つの主要な概念として、「アイテム」と、アイテムの「プロパティー」があります。プロパティーには、ストリングまたは別のアイテムを設定することができます。例えば上記の場合、Movie タイプのアイテムがあり、このアイテムのプロパティーには、ストリングを値に持つ name というプロパティーや、Person タイプのアイテムを値に持つ director というプロパティーなどがあります。

あるアイテムについての話題を開始することをパーサーに知らせるには、itemscope 属性を使用します。さらに、itemtype 属性を使用して、そのアイテムのタイプをパーサーに知らせることもできます。

itemtype によって、itemprop 属性の値として使用できるプロパティーが決まります。例えば、schema.org サイトのアイテム・タイプ Movie のページには、映画に関して使用できるプロパティーのリストがあります (「参考文献」を参照)。ただし、このリストにない他のプロパティーでも、プロパティーの完全な URL を指定すれば、属性の値として使用することができます。例えば、FOAF 語彙集でも name プロパティーを指定しているので、schema.org の name プロパティーの代わりに FOAF の name プロパティーを使用するには、itemprop="http://xmlns.com/foaf/0.1/name" と指定します。

Movie の <div> 内に含まれるすべてのプロパティーは、div の終わりに達するまで、または (リスト 1 のように) Movie 内の div に設定された itemscope に達するまでは、映画のプロパティーとして認識されます。itemscope 属性は、別の事柄 (リスト 1 の場合は「人物」) について話題にすることを示すため、birthplace プロパティーは Movie ではなく Person の属性として理解されます。

このように、ちょっとした構造がコンテンツに追加されていれば、どのツールでも関連情報を抽出しやすくなります。HTML に属性を追加することによって、Web ページ内のデータは、まるで Excel スプレッドシートやデータベースに含まれるデータであるかのように簡単に処理できるようになります。

microdata はかなり単純なものですが、手作業でコンテンツに追加して保守をするとなると、やはり厄介な作業になる可能性があります。microdata の生成をサポートするツールはいくつかあります。その 1 つが、Drupal の Microdata モジュールです (「参考文献」を参照)。


Drupal を使用して Web ページに microdata を追加する方法

Drupal は、Web のおよそ 2% で利用されているコンテンツ管理システムです。サイト管理者は Drupal のユーザー・インターフェースを使用して、ユーザーからコンテンツを収集するためのフォームを作成することができます。フォームを作成すると、Drupal が自動的にフォームのデータに対応する適切なテーブルとフィールドをデータベース内に作成し、データの表示を構成可能なように処理してくれます。

Drupal は特に構造化データに適しています。その理由は、コンテンツの扱い方にあります。Drupal ではコンテンツを、フィールド値という形のプロパティーを持つ個別の要素 (エンティティーと呼ばれます) として扱うためです。Drupal 7 では、RDFa を使用して構造化データを HTML に追加する機能が Drupal コアに統合されました。

2011年 6月 2日の発表以来、schema.org の取り組みは進展を続けており、同様のサポートは microdata の出力に対しても追加されています。microdata モジュールは今でも開発中で、実際のサイトで使用可能な状態には至っていません。ただし、テスト・サイトでの実験として、microdata モジュールを使用してフィールドの microdata を生成し、その microdata に基づいてリッチスニペットでの表示をテストすることは可能です。

これから、上記の例を Drupal を使用して作成し直します。「参考文献」を参照しつつ、Drupal の以下のモジュールの最新リリースをダウンロードして、使用できるようにしてください。

  • microdata
  • Entity API
  • CTools

コンテンツ・タイプをマークアップする

ユーザーが特定のエンティティーで収集および保管するフィールド値を定義するには、「コンテンツ・タイプ」を使用します。例えば、「製品」というコンテンツ・タイプを作成し、このコンテンツ・タイプに製品の価格、選択可能な色、サイズ、そしてメーカーの型番を収集するためのフォーム・フィールドを設定すれば、在庫の管理が楽になります。

この演習では、映画のコンテンツ・タイプを作成します。「Structure (構造)」 > 「Content Types (コンテンツ・タイプ)」の順に選択し、「Add Content type (コンテンツ・タイプの追加)」をクリックし、以下の情報を入力してください。

  • Name (名前): 「Movie
  • Description (説明): 「A page describing a movie
  • Comment settings (コメント設定): 「Closed (クローズド)」を選択します。このページには、コメント機能は必要ありません。
  • microdata settings (microdata 設定): アイテム・タイプとして「http://schema.org/Movie」を追加します。

    タイトルは特殊なフィールドで、専用の編集画面はありません。したがって、タイトルもコンテンツ・タイプに追加して、name プロパティーを使ってタイトルをマークアップします。

このサンプルが機能するかどうかをテストするには、Movie アイテムを新規に作成する必要があります。「Add content (コンテンツの追加)」に進んで Movie アイテムを作成した後、リッチスニペット・テスト・ツールを使って、Web ページからデータを抽出できるかどうかを確かめてください。サンプルが正常に機能する場合、「Type」が「http://schema.org/movie」で、「name」が「Cool Hand Luke」となっている 1 つのアイテムが表示されるはずです (図 2 を参照)。

図 2. コンテンツ・タイプとタイトルをマッピングした後に抽出された microdata
コンテンツ・タイプとタイトルをマッピングした後に抽出された microdata を示すスクリーン・キャプチャー

このコンテンツ・タイプは Movie として認識され、そのタイトルが示されましたが、この映画に関する情報はそれだけではありません。


テキスト・フィールドのマークアップ

コンテンツに関する追加情報は、フィールドをコンテンツ・タイプに追加することによって収集します。このサンプルでは、映画専用のフィールドとして映画のジャンルを追加します。

コンテンツ・タイプにジャンルを追加するために、「Structure (構造)」 > 「Content Types (コンテンツ・タイプ)」の順に選択し、Movie コンテンツ・タイプの「manage fields (フィールドの管理)」をクリックします。ジャンルを収集するには、テキスト・フィールドを使用します。以下の情報を入力してください。

  • Label (ラベル): 「Genre
  • Field name (フィールド名): 「genre
  • Type of data to store (フィールド・タイプ): 「Text
  • Form element to edit the data (フィールド・ウィジェット): 「Text field

Save (保存)」をクリックし、表示される次のページでさらに「Save field settings (フィールド設定を保存)」をクリックします。フィールド・インスタンスの構成フォームの一番下に、「GENRE MICRODATA MAPPING (Genre microdata のマッピング)」と表示されているはずです (図 3 を参照)。「Field property (フィールド・プロパティー)」に「genre」と入力して「Save (保存)」をクリックします。

図 3. テキスト・フィールドをマッピングするためのインターフェース
テキスト・フィールドをマッピングするためのインターフェースを示すスクリーン・キャプチャー

コンテンツを編集して映画のジャンルを追加してください。リッチスニペットを最新の情報に更新すると、「Type」と「name」の他に、「genre」も表示されるはずです。

画像フィールドをマークアップする

サンプルでは画像を使用しませんでしたが、このコンテンツ・タイプには、例えば映画のポスターなどの画像を追加することができます。この場合、リッチスニペットには画像のサムネールが表示されます。

コンテンツ・タイプに画像を追加するには、「Structure (構造)」 > 「Content Types (コンテンツ・タイプ)」の順に選択し、「manage fields (フィールドの管理)」をクリックし、以下の情報を入力します。

  • Label (ラベル): 「Poster
  • Field name (フィールド名): 「poster
  • Type of data to store (フィールド・タイプ): 「Image
  • Form element to edit the data (フィールド・ウィジェット): 「Image

ポスターには image schema.org プロパティーを使用します。「Field property (フィールド・プロパティー)」フィールドには、「image」と入力します (図 4 を参照)。

図 4. 画像フィールドをマッピングするためのインターフェース
画像フィールドをマッピングするためのインターフェースを示すスクリーン・キャプチャー

Movie アイテムを編集して画像を追加し、保存します。リッチスニペットを再度テストすると、「image」プロパティーの URL として、「http://lin-clark.com/sites/default/files/cool-hand-luke.jpg」が表示されるはずです (図 5 を参照)。このアイテムには他にも、「Type」として「http://schema.org/movie」が、「name」として「Cool Hand Luke」が、そして「genre」として「prison drama」が表示されます。

図 5. テキストおよび画像フィールドから抽出された microdata
テキストおよび画像フィールドから抽出された microdata を示すスクリーン・キャプチャー

リッチスニペットにはポスターのサムネールも表示されるはずです (図 6 を参照)。Google のテスト・ツールは活発に開発が進められているので、それに伴いリッチスニペットでのこのマークアップの表示内容は変わります。下記のリッチスニペットのスクリーン・キャプチャーは 9月 14日に撮ったものですが、9月 19日には表示内容が変わっていました。

図 6. リッチスニペットでの映画の表示
リッチスニペットでの映画の表示を示すスクリーン・キャプチャー。これは 9月 14日に撮ったものですが、9月 19日には表示内容が変わっていました。

フィールド・フォーマッターで microdata を使用可能にする方法

通常サイトに載せるようなデータのほとんどは、テキスト・フィールドと画像フィールドで対処することができますが、対処しきれないタイプのデータもあります。サイト管理者が必要とする可能性のある、あらゆるタイプのデータに対処できるように、Drupal のフィールド・システムはユーザーに基本的なフィールド・タイプの選択肢を提示し、API を使用してモジュールに新しいフィールド・タイプを定義できるようにしています。モジュールには、フィールド・タイプごとにさまざまなデータ収集フォーム (ウィジェット)、データ・ストレージ、および表示 (フォーマッター) を定義することができます。このようなフィールド・モジュールをインストールすれば、サイト管理者はコードをまったく作成することなく、ウィジェットとフォーマッターを構成できるというわけです。

HTML 内での microdata の属性の配置場所には厳格な要件があります。そのため、Drupal のフィールド・タイプごとに、フォーマッター内での属性の配置場所を定義する必要があります。Drupal コアで定義しているフィールド・タイプのほとんどは microdata をサポートしていますが、広く用いられているフィールド・タイプのなかには、まだ microdata をサポートしていないものも数多くあります。

コントリビュート・モジュールに定義されているフィールド・フォーマッターを使用する場合、microdata をサポートしているかどうかを追跡している表を確認することができます。フィールド・フォーマッターがまだ microdata をサポートしていないとしても、そのフィールド・フォーマッターを使用できないわけではありません。フィールド・フォーマッターに microdata のサポートを追加するのは簡単です。microdata をサポートするための変更を盛り込んだパッチを作成して、そのモジュールに貢献することもできます。これは、Drupal 開発者コミュニティーへの素晴らしい参加方法です。

schema.org のサンプルでは、映画の予告編へのリンクがマークアップされています。この記事を執筆している時点で、Drupal Link モジュールが定義しているリンク・フィールド・フォーマッターは microdata をサポートしていませんが、そのサポート状況を変えることはできます。

これから、Link モジュールに microdata のサポートを追加する方法を説明します。以降のサンプル・コードで使用している Link モジュールのコードは 2011年 9月 20日時点のものです。このコードは、記事に付属のダウンロード・ファイルに含まれています (Link モジュールの最新バージョンは変わっているため、microdata のサポートが追加されている可能性があります)。

プロパティーを登録する

リンク・フィールドには、microdata を使って公開するのにちょうどよい以下の 2 つのデータがあります。

  • リンクの URL
  • その URL へのリンク・テキスト

上記のデータを公開することに決めたら、Entity API モジュールの 1 つ、Entity Property API を使用して、この 2 つのプロパティーをシステムに通知する必要があります。

プロパティー情報をフィールド定義に追加し、その定義を link_field_info によって登録します。フィールド定義には、フィールド自体の property_type、そして property_callbacks を追加します (リスト 2 を参照)。

リスト 2. link_field_info にフィールドのプロパティー情報を追加する
/**
 * Implements hook_field_info().
 */
function link_field_info() {
return array(
    'link_field' => array(
      'label' => t('Link'),
     'description' => t('Store a title, href, and attributes in the database to
 assemble a link.'),
      // ...
      'property_type' => 'field_item_link',
      'property_callbacks' => array('link_field_property_info_callback'),
    ),
  );
}

プロパティー・タイプを通じて、システムはフィールドのデータ・タイプを知ることができます。field_item_link は認識されているデータ・タイプでもエンティティーでもないため、処理される時点でデータ・タイプは struct にデフォルト設定されます。この struct は、マークアップするプロパティー (リンクの URL とリンク・テキスト) のコンテナーとしての役目を果たします。これは単なるコンテナーに過ぎないため、microdata はフィールド自体に対して使用可能にするのではなく、フィールドのプロパティーに対して使用可能にします。

プロパティー・コールバックは、コンポーネント・プロパティーに同じプロパティー・タイプの情報を登録する関数です。microdata でプロパティーをマークアップするには、各プロパティーで microdata を TRUE に設定します (リスト 3 を参照)。こうすることにより、これらのプロパティーの microdata を追加するためのグラフィカル・ユーザー・インターフェースが提供されます。

リスト 3. プロパティー・コールバックでフィールドのプロパティーを登録する
/**
 * Additional callback to adapt the property info of link fields.

 * @see entity_metadata_field_entity_property_info().
 */

function link_field_property_info_callback(&$info, $entity_type, $field, $instance,
$field_type) {
  $property = &$info[$entity_type]['bundles'][$instance['bundle']]['properties']
[$field['field_name']];


  $property['property info'] = array(
    'title' => array(
     'type' => 'text',
     'label' => t('The title of the link.'),
     'microdata' => TRUE,
   ),
   'url' => array(
     'type' => 'uri',
     'label' => t('The URL of the link.'),
      'microdata' => TRUE,
    ),
  );
 if ($instance['settings']['title'] == 'none') {
   unset($property['property info']['title']);
 }
}

ユーザー・インターフェースはプロパティー情報からラベルを抽出し、そのタイプによって、表示するフォーム・フィールドのタイプを判断します。プロパティーがストリングではなくアイテムの場合には、itemtype フィールドも表示されます。図 7 に、予告編の 2 つのプロパティーとなっている、リンクのタイトルと、リンクの URL の例を示します。

図 7. リンクの microdata マッピング・フォーム
リンクの microdata マッピング・フォームを示すスクリーン・キャプチャー

これで、フィールド構成フォームでフィールドのプロパティーに使用する語彙集の用語を指定することができます。ただし、属性が HTML に挿入されるようにするには、多少のコードを追加しなければなりません。

テーマを設定した出力に microdata を追加する

microdata を追加するには、フィールドの HTML 出力を変更する必要があります。例えば、ソフトウェア・アプリケーションへのリンクを追加するとしたら、リンク・テキスト (ソフトウェアの名前) に name プロパティーを使用し、リンク自体に url プロパティーを使用することになります。このように出力を変更するために、リスト 4 に、URL の itemprop を <a> タグに追加し、テキストの itemprop を設定した span でテキスト・コンテンツを囲む方法を示します。

リスト 4. microdata を挿入する前と挿入した後のリンク
<a href="http://drupal.org">Drupal</a>

<a itemprop="url" href="http://drupal.org"><span itemprop="name">Drupal</span></a>

このようにコードを変更するよりも、Link モジュールにこれらの属性を挿入させるほうが簡単です。フィールドのデータベースに保管されたコンテンツを HTML に変換するために、フィールド・フォーマッター・モジュールにはそれぞれ独自の view 関数があります。一部のフォーマッターは、HTML を生成するために view 関数の中でテーマ関数を使用します。その一例は、theme_link_formatter_link_default() です。多くの場合、テーマ関数には、field_formatter_view 関数から microdata 属性を渡す必要があります。

Link モジュールでは、フォーマッターがすでに item 変数を使って <a> タグに配置する属性の配列を渡しています。その配列に URL の itemprop を追加すれば、必要に応じて自動的に microdata が出力されるようにすることができます (リスト 5 を参照)。

リスト 5. hook_field_formatter_view に microdata を追加する
/**
 * Implements hook_field_formatter_view().
 */
function link_field_formatter_view($entity_type, $entity, $field, $instance, 
         $langcode, $items, $display) {
  $elements = array();
  $microdata = array();

  // If the microdata module is enabled, the microdata mapping will have been
  // passed in via the entity.
  if (module_exists('microdata')) {
    $microdata = $entity->microdata[$field['field_name']];
  }

  foreach ($items as $delta => $item) {
    // Add the url attributes to $item['attributes'] because the theme function
    // will pass it through to l(), properly placing the itemprop for the url.
    if (isset($microdata['url'])) {
      $item['attributes'] += $microdata['url']['#attributes'];
    }
    // Pass the microdata array to the theme function so it can be used to place
    // the link title's attribute.
    $elements[$delta] = array(
      '#markup' => theme('link_formatter_'. $display['type'], array('element' => $item, 
      'field' => $instance, 'microdata' => $microdata)),
    );
  }
  return $elements;
}

その一方、テキスト・コンテンツの属性を自動的に配置する方法はありません。したがって、テキスト・コンテンツの属性をテーマ関数に渡し、テーマ関数がこれらの属性を使用するように変更する必要があります。

microdata の変数をテーマ関数に渡した後は、itemprop を含めた <span> タグでタイトルを囲むことができます。リスト 6 のコードは、テキストの itemprop の有無をチェックし、これが存在する場合には microdata を追加します。

リスト 6. テーマ関数の中で microdata を追加する
/**
 * Theme function for 'default' text field formatter.
 */
function theme_link_formatter_link_default($vars) {
  $url = $vars['element']['url'];
  $microdata = $vars['microdata'];
  // If there is an itemprop set for the title, wrap the title in a span and
  // add the itemprop to that span.
  if (!empty($microdata['title'])) {
    $title = '<span ' . drupal_attributes($microdata['title']['#attributes']) 
                . '>' . $vars['element']['title'] . '</span>';
  }
  else {
    $title = $vars['element']['title'];
  }

  // Create the array of options to pass to l().
  $link_options = $vars['element'];
  unset($link_options['element']['title']);
  unset($link_options['element']['url']);
  
  // Display a normal link if both title and URL are available.
  if (!empty($title) && !empty($url)) {
    return l($title, $url, $link_options);
  }
  // If only a title, display the title.
  elseif (!empty($title)) {
    return check_plain($title);
  }
  // If only a url, display the full url as a link.
  elseif (!empty($url)) {
    return l($url, $url, $link_options);
  }
}

これで、フォーマッターの microdata 出力をテストすることができます。


コミュニティーへの変更内容の寄付

Drupal が強力な技術ソリューションとなっている 1 つの要因は、Drupal コミュニティーを構成している多数のコントリビューターです。これらのコントリビューターは、Drupal に熱中しているだけではありません。その多くは、自分のサイト用に作成したコード・フィックスを他のユーザーが使用できるようにパッチとして投稿しています。

独自のプロジェクトでフィールド・フォーマッターに microdata を追加した場合には、その成果を Drupal コミュニティーに寄付することができます。それにはまず、該当するモジュールの「issue queue (問題キュー)」に問題を投稿し、そのモジュールで microdata をサポートするように提案します。このような問題は、「feature request (フィーチャー・リクエスト)」と呼ばれています。そして、フィーチャー・リクエストに関連する変更内容を盛り込んだパッチを投稿すればよいのです (Drupal プロジェクトのパッチを作成する方法を説明している優れたチュートリアルもあります)。パッチを投稿したら、フィーチャー・リクエストに「needs review (要レビュー)」のマークを付けてください。


まとめ

この記事では、Drupal を使用してページに microdata を追加し、そのコンテンツを Google リッチスニペットなどのアプリケーションで使用できるようにする方法を説明しました。Drupal に新たに加わった microdata モジュールを使用すれば、基本的なフィールド・タイプの microdata 出力を構成したり、カスタム・フィールド・タイプに microdata 出力を追加したりすることができます。それによって、皆さんのデータをベースに他の人々がアプリケーションを作成できるようになります。


ダウンロード

内容ファイル名サイズ
Article source codemicrodata-source2.zip820KB

参考文献

学ぶために

  • schema.org: このスキーマのコレクションについて詳しく学んでください。Web マスターはこれらのスキーマ、つまり HTML タグを使用して、主要な検索プロバイダーで認識されるようにページをマークアップすることができます。
  • Getting started with schema.org: このチュートリアルで、microdata を使ってコンテンツをマークアップする方法、schema.org の語彙を使用する方法を学んでください。高度なトピックも取り上げられています。
  • Itemtype の URL: itemtype の URL (http://schema.org/Movie など) にアクセスして、schema.org アイテムで使用できるプロパティーを調べてください。
  • microdata のサポート: このページで、フィールド・フォーマッターが microdata をサポートしているかどうかを調べられます。
  • データ・タイプ: Drupal での microdata がどのようにエンティティー・プロパティーを使用するかを調べてください。
  • セマンティック 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 を使用して複数の関連するデータ・セットを合成する」(Lin Clark 著、developerWorks、2011年5月): 「データの Web」で現在使用可能になっている既存の Linked Data を利用する方法、そして複数の異なるエンドポイントからデータを取得して Drupal 7 サイトを強化する方法を学んでください。
  • Creating Patches for Drupal Projects: パッチとは何か、そして Drupal プロジェクトのコンテキストでパッチを使用する方法を学んでください。Drupal HTML5 イニシアチブのリーダー、Jacine Luisi が手ほどきします。
  • セマンティック Web に関する Scientific American の記事: Tim Berners-Lee 氏、James Hendler 氏、および Ora Lassila 氏によるセマンティック Web に関するこの画期的な記事を読んでください。
  • Linked Data: ReadWriteWeb に掲載されている Tim Berners-Lee 氏への Linked Data に関するインタビューを読んでください。
  • Linked Data の設計問題: Linked Data の設計に関する問題について Tim Berners-Lee 氏が説明しています。
  • リッチ スニペット (microdata、microformats、RDFa) – ウェブマスター ツール ヘルプ」: Google リッチスニペットの詳細、そして Web コンテンツにラベルを付けてデータの種類 (レストランの名前、住所、評価など) を明確にする方法を学んでください。
  • Implement Semantic web standards in your Web site」(Rob Crowther 著、developerWorks、2008月5月): PHP と MySQL を使用して、セマンティック URI (Uniform Resource Identifier) スキームの一環としてのセマンティック Web 標準 (hCard や FOAF (Friend Of A Friend) など) を実装する単純なソーシャル・ネットワーキング・サイトを作成してください。
  • Developing Drupal publications to support standards-based XML」(Garrick Bodine、Stephanie Schlitz 共著、developerWorks、2011年2月): TEI (またはその他の) XML 文書の公開をサポートするように Drupal インストール済み環境をカスタマイズする方法を学んでください。
  • Drupal Installation Guide: インストールのための準備内容、インストール・スクリプトの実行方法、そしてインストール・スクリプトが完了した後の手順を読んでください。
  • Install Drupal 7 with the Acquia Stack Installer: この動画を見て、Acquia Stack Installer を使用して Drupal 7 をインストールするステップ・バイ・ステップの手順を学んでください。
  • FOAF Vocabulary Specification 0.98: W3C の RDF 技術を使用した名前付きプロパティーおよびクラスの辞書として定義された FOAF 言語について調べてください。
  • Dublin Core Metadata Initiative (DCMI): 広範な目的とビジネス・モデルをサポートする相互運用可能なメタデータの開発に取り組んでいる、このオープン組織について学んでください。
  • SIOC (Semantically-Interlinked Online Communities) Core Ontology Specification: セマンティック Web のオンライン・コミュニティーからの情報 (掲示板、ウィキ、Web ログなど) を記述するために必要となる主要概念およびプロパティーについて学んでください。
  • SPARQL Explorer for http://dbpedia.org/sparql: Web で使用できるデモ用クエリー・インターフェースを試してください。
  • New to XML: XML を学ぶために必要なリソースを入手してください。
  • developerWorks の XML エリア: DTD、スキーマ、XSLT を含め、XML 分野でのスキルを磨くための資料を見つけてください。広範な技術に関する記事とヒント、チュートリアル、標準、そして IBM Redbooks については、XML 技術文書一覧を参照してください。
  • IBM XML 認定: XML や関連技術の IBM 認定技術者になる方法について調べてください。
  • developerWorks の Technical events and webcasts: これらのセッションで最新情報を入手してください。
  • Twitter での developerWorks: 今すぐ登録して developerWorks のツイートをフォローしてください。
  • developerWorks podcasts: ソフトウェア開発者向けの興味深いインタビューとディスカッションを聞いてください。
  • developerWorks オンデマンド・デモ: 初心者向けの製品のインストールおよびセットアップから熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。

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

議論するために

コメント

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=776909
ArticleTitle=Drupal と HTML5、さらに microdata を組み合わせる
publish-date=12022011