http://schema.org ボキャブラリを使用して Microdata または RDFa Lite 1.1 セマンティクスを実装および出力する PHP ライブラリのセット。
このライブラリは、バージョン 3.2 (JMicrodata と呼ばれる) 以降、Joomla CMS で使用されています。
Google Summer of Code 2013 と 2014 の間に作成されました。
このライブラリは次の目標を念頭に置いて設計されました。
作曲者:
あなたのcomposer.json
ファイルを追加してください:
{
"require" : {
"palex/ PHPStructuredData " : " * "
}
}
ソースより:
git clone https://github.com/alexprut/PHPStructuredData.git
直接ダウンロード:
ここから最新バージョンをダウンロードしてください
Microdata または RDFa ライブラリのインスタンスがすでにあると仮定します。そして、記事の一部である次の HTML に Microdata または RDFa セマンティクスを追加する必要があります (例: $sd = new PHPStructuredData Microdata('Article');
)。
<div <?php echo $ sd -> displayScope (); ?> >
<!-- Language -->
<?php echo $ sd -> content ( null , ' en-GB ' )-> property ( ' inLanguage ' )-> display ( ' meta ' , true ) ?>
<!-- Title -->
<?php echo $ sd -> content ( ' How to Tie a Reef Knot ' )-> property ( ' name ' )-> display (); ?>
<!-- Author-->
<span>
Written by <?php echo $ sd -> content ( ' John Doe ' )-> property ( ' author ' )-> fallback ( ' Person ' , ' name ' )-> display (); ?>
</span>
<!-- Date published -->
<?php echo $ sd -> content ( ' 1 January 2014 ' , ' 2014-01-01T00:00:00+00:00 ' )-> property ( ' datePublished ' )-> display (); ?>
<!-- Content -->
<?php echo $ sd -> content ( ' Lorem ipsum dolor sit amet... ' )-> property ( ' articleBody ' )-> display (); ?>
<div>
Microdata
ライブラリは以下をレンダリングします。
< div itemscope itemtype =' https://schema.org/Article ' >
<!-- Language -->
< meta itemprop =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span itemprop =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemprop =' author ' itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span itemprop =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
RDFa
ライブラリは以下をレンダリングします。
< div vocab =' https://schema.org ' typeof =' Article ' >
<!-- Language -->
< meta property =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span property =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span property =' author ' vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span property =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
代わりに、現在のタイプを変更することにした場合 (例: $sd->setType('Review');
)。
Microdata
ライブラリは以下をレンダリングします。
< div itemscope itemtype =' https://schema.org/Review ' >
<!-- Language -->
< meta itemprop =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span itemprop =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
Lorem ipsum dolor sit amet...
< div >
RDFa
ライブラリは以下をレンダリングします。
< div vocab =' https://schema.org ' typeof =' Review ' >
<!-- Language -->
< meta property =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span property =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
Lorem ipsum dolor sit amet...
< div >
ご覧のとおり、 John Doe
人物タイプにフォールバックし、情報の損失はありません。現在のタイプに作成者プロパティがない場合でも、マシンにとって重要な情報が表示されます。検索エンジンは人物John Doe
が存在することを認識します。 John Doe
。
代わりに、Microdata または RDFa セマンティクスをレンダリングしないことに決めた場合は、ライブラリ出力を無効にするだけです (例: $sd->enable('false');
)。
Microdata
ライブラリとRDFa
ライブラリは両方とも以下をレンダリングします。
< div >
<!-- Language -->
<!-- Title -->
How to Tie a Reef Knot
<!-- Author-->
< span >
Written by John Doe
</ span >
<!-- Date published -->
1 January 2014
<!-- Content -->
Lorem ipsum dolor sit amet...
< div >
現在、 RDFa
ライブラリとMicrodata
ライブラリはどちらも複数のフォールバックをサポートしていません。
ビューをロジックから分離しておきたい場合は、HTML マークアップを解析し、 data-*
HTML5 属性を正しくフォーマットされた Microdata または RDFa Lite 1.1 セマンティクスに変換するための PHP クラスであるParserPlugin
を使用します。
data-*
属性は HTML5 の新機能で、すべての HTML 要素にカスタム データ属性を埋め込むことができます。したがって、ライブラリ出力を無効にしても、HTML は引き続き検証されます。ライブラリが検索するデフォルトのサフィックスはdata-sd
です。ここで、 sd は構造化データを表しますが、複数のカスタム サフィックスを登録できます。
タイプは、次のマークアップにどのスキーマが使用されるかを定義します。正しく解釈されるためには、Type の最初の文字が常に大文字である必要があります。タイプが有効なスキーマの場合、この時点以降のページのグローバル スコープはこのスキーマに更新されます。プラグインは、データ タグをitemscope itemtype='https://schema.org/Type'
(Microdata セマンティクスの場合)、またはvocab='https://schema.org' typeof='Type'
RDFa Lite 1.1 の場合) に置き換えます。セマンティクス。
< div data-sd =" Article " >
< p > This is my article </ p >
</ div >
これは、 Microdata
セマンティクスを使用して次のように出力されます。
< div itemscope itemtype =" http://schema.org/Article " >
< p > This is my article </ p >
</ div >
または、 RDFa
セマンティクスを次のように使用します。
< div vocab =" http://schema.org " typeof =" Article " >
< p > This is my article </ p >
</ div >
スキーマが宣言されたら、次のステップは個々のプロパティを宣言し、内容を説明し、意味的な意味を与えることです。
プロパティが正しく解釈されるためには、最初の文字が常に小文字である必要があります。プロパティが現在のスキーマの一部であることが判明した場合、プラグインはデータ タグを、Microdata セマンティクスの場合はitemprop='property'
に、RDFa Lite 1.1 セマンティクスの場合はproperty='property'
に置き換えます。プロパティがアクティブなスキーマの有効なプロパティであることが見つからない場合、そのプロパティは無視され、次に使用可能なプロパティが解析されます。
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
</ div >
これは、 Microdata
セマンティクスを使用して次のように出力されます。
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
</ div >
または、 RDFa
セマンティクスを次のように使用します。
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
</ div >
場合によっては、特定のスキーマがアクティブな場合にのみ使用するプロパティを明示的に指定したい場合があります。たとえば、あるスキーマでは特定のプロパティがあり、別のスキーマでは別のプロパティと呼ばれる場合などです。
これは、スキーマに依存するプロパティを使用することで実現できます。これは、 Typeとproperty の両方をピリオドで区切って組み合わせて使用することで機能します。つまり、現在のグローバル スコープが Type に等しく、プロパティがその Type の一部である場合、プラグインはデータ タグを Microdata セマンティクスの場合はitemprop='property'
に、RDFa Lite の場合はproperty='property'
に置き換えます。 1.1.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
< p data-sd =" Article.wordcount " > 4 </ p >
</ div >
これは、 Microdata
セマンティクスを使用して次のように出力されます。
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
</ div >
または、 RDFa
セマンティクスを次のように使用します。
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
</ div >
これらを組み合わせて使用すると、スキーマに固有のプロパティと汎用のプロパティを含む複数のプロパティを指定できます。構成要素の順序は重要ではなく、空白が区切り文字として使用されます。
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
< p data-sd =" Article.wordcount " > 4 </ p >
< p data-sd =" Recipe.recipeCategory Article.articleSection description " > Amazing dessert recipes </ p >
</ div >
これは、 Microdata
セマンティクスを使用して次のように出力されます。
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
< p itemprop =" articleSection " > Amazing dessert recipes </ p >
</ div >
または、 RDFa
セマンティクスを次のように使用します。
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
< p property =" articleSection " > Amazing dessert recipes </ p >
</ div >
場合によっては、スキーマをネストする必要がある場合があります。たとえば、Article スキーマを開いているときに人物を説明したい場合などです。これは、ネストされたスキーマを使用して可能になります。これを使用するには、プロパティの後に、ピリオドを前に付けたスキーマを追加するだけです。ネストされたスキーマの使用が終了したら、それを含むタグを閉じて、元のスキーマを再設定します。
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
< p data-sd =" Article.wordcount " > 4 </ p >
< div data-sd =" author.Person " >
< p data-sd =" Person name " > John Doe </ p >
</ div >
< p data-sd =" Article keywords " > Cake </ p >
</ div >
これは、 Microdata
セマンティクスを使用して次のように出力されます。
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
< div itemprop =" author " itemscope itemtype =" http://schema.org/Person " >
< p itemprop =" name " > John Doe </ p >
</ div >
< p itemprop =" keywords " > Cake </ p >
</ div >
または、 RDFa
セマンティクスを次のように使用します。
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
< div property =" author " vocab =" http://schema.org " typeof =" Person " >
< p property =" name " > John Doe </ p >
</ div >
< p itemprop =" keywords " > Cake" </ p >
</ div >
ParserPlugin
ライブラリのインスタンスがすでにあると仮定します。そして、記事の一部である次の HTML に Microdata または RDFa セマンティクスを追加する必要があります (例: $parser = new PHPStructuredData ParserPlugin('microdata'); $scope='Article';
)。
< div data-sd =" <?php echo $scope;?> " >
<!-- Title -->
< span data-sd =" Review.itemReviewed name " >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span data-sd =" author.Person " >
< span data-sd =" name " > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta data-sd =' <?php echo $scope;?> datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span data-sd =' reviewBody articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
Microdata
出力は次のようになります。
< div itemscope itemtype =' https://schema.org/Article ' >
<!-- Title -->
< span itemprop =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemprop =' author ' itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span itemprop =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
RDFa
出力は次のようになります。
< div vocab =' https://schema.org ' typeof =' Article ' >
<!-- Title -->
< span property =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span property =' author ' vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span property =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
代わりに、現在のタイプを変更することにした場合 (例: $scope="Review";
)。
Microdata
出力は次のようになります。
< div itemscope itemtype =' https://schema.org/Review ' >
<!-- Title -->
< span itemprop =' itemReviewed ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemprop =' author ' itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span itemprop =' reviewBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
RDFa
出力は次のようになります。
< div vocab =' https://schema.org ' typeof =' Review ' >
<!-- Title -->
< span property =' itemReviewed ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span property =' author ' vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span property =' reviewBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
PHPStructuredData
ライブラリは、 types.json
ファイルを使用して、検証されたセマンティクスをチェックして出力します。このファイルには、http://schema.org ボキャブラリからの利用可能なすべてのタイプとプロパティが含まれており、https://github.com/ で自動的に生成されました。 alexprut/Spider4Schema Web クローラー。
itemref
サポートを追加します。StructuredData
に追加します。types.json
に追加します。 PHPStructuredDataは MIT ライセンスに基づいてライセンスされています。詳細については、LICENSE ファイルを参照してください。