spatie/schema-org
すべてのSchema.org タイプとそのプロパティに対して流暢なビルダーを提供します。 src
内のコードは Schema.org の JSON-LD 標準ファイルから生成されるため、コア語彙全体のオブジェクトとメソッドが提供されます。クラスとメソッドについては、クイック リファレンスとして完全に文書化されています。
SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness() を使用します。 ->名前('スパティー') ->メール('[email protected]') ->contactPoint(Schema::contactPoint()->areaServed('Worldwide'));echo $localBusiness->toScript();
<script type="application/ld+json">{"@context": "https://schema.org","@type": "LocalBusiness","name": "Spatie","email": " [email protected]","contactPoint": {"@type": "ContactPoint","areaServed": "ワールドワイド"}}</script>
私たちはクラス最高のオープンソース パッケージの作成に多くのリソースを投資しています。有料製品のいずれかを購入することで、私たちをサポートできます。
当社のどのパッケージを使用しているかについて、故郷から葉書を送っていただき、誠にありがとうございます。当社の住所は、お問い合わせページに記載されています。受け取ったすべてのポストカードをバーチャル ポストカード ウォールに公開します。
パッケージは、composer 経由でインストールできます。
コンポーザーには spatie/schema-org が必要です
すべてのタイプは、 SpatieSchemaOrgSchema
ファクトリ クラスを通じて、またはnew
キーワードを使用してインスタンス化できます。
$localBusiness = Schema::localBusiness()->name('Spatie');// 以下と同等です:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
すべての型は、予期されるデータ型の配列も受け入れます。たとえば、
sameAs
文字列または文字列の配列を受け入れます。
すべての型は、配列表記を介してプロパティにアクセスするための SPL のArrayAccess
も実装します。
$anotherLocalBusiness = new LocalBusiness();var_dump(isset($anotherLocalBusiness['name'])); // => false$anotherLocalBusiness['name'] = 'Spatie';var_dump(isset($anotherLocalBusiness['name'])); // => truevar_dump($anotherLocalBusiness['name']); // => 'Spatie'unset($anotherLocalBusiness['name']);var_dump(isset($anotherLocalBusiness['name'])); // => false
型は配列に変換したり、スクリプトにレンダリングしたりできます。
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // `toScript()` と同じ出力
さらに、オブジェクトでjson_encode()
呼び出すだけで、すべての型をプレーンな JSON 文字列に変換できます。
エコー json_encode($localBusiness);
Google の構造化データ テスト ツールを使用して、構造化データを再確認することをお勧めします。
v1.6.0 以降、すべての Enumeration の子タイプは定数を持つクラスとして使用できます。
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
型とプロパティに関する完全な API ドキュメントはありません。ソースまたは schema.org Web サイトを参照できます。
大きなスキーマ オブジェクトのチェーンを切断したくない場合は、 if
メソッドを使用して条件付きでスキーマを変更できます。
SpatieSchemaOrgLocalBusiness を使用;SpatieSchemaOrgSchema を使用;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->名前($ビジネス['名前']) ->if(isset($business['email']), 関数 (LocalBusiness $schema) use ($business) {$schema->email($business['email']); });
v2.6.0 以降、単純な文字列識別子の場合、 identifier
キーは@id
に置き換えられます。これは、 ld+json
構文の定義によるものです。
すべての schema.org 構文には、すでに URI と URL の組み込み表現が含まれています。たとえば、Microdata の「itemid」、RDFa 1.1 の「resource」、 JSON-LD の「@id」です。
— schema.org/docs // PR#102 // PR#157
カスタム プロパティを設定する必要がある場合は、 setProperty
メソッドを使用できます。
$localBusiness->setProperty('foo', 'bar');
プロパティを取得する必要がある場合は、 getProperty
メソッドを使用できます。オプションで 2 番目のパラメータを渡してデフォルト値を指定できます。
$localBusiness->getProperty('name'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // 'バズ'
すべてのプロパティは、 getProperties
メソッドを使用して配列として取得できます。
$localBusiness->getProperties(); // ['名前' => 'スパティ', ...]
addProperties
メソッドを使用すると、複数のプロパティを一度に設定できます。
$localBusiness->addProperties(['name' => 'value', 'foo' => 'bar']);
コンテキストとタイプは、 getContext
メソッドとgetType
メソッドを使用して取得できます。
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'ローカルビジネス'
Graph には多くのメソッドとユーティリティがあります。タイプセーフで最も簡単な方法は、 SpatieSchemaOrgSchema
クラス自体のオーバーロードされたメソッドを使用することです。これらのメソッドは、要求されたスキーマのすでに作成されているインスタンスまたは新しいインスタンスを取得します。
$graph = new Graph();// 製品とプレリンク組織を作成します$graph->product() ->名前('私のクールな製品') ->brand($graph->organization());// 作成されたスクリプトタグから組織を非表示にします$graph->hide(SpatieSchemaOrgOrganization::class);// 他の場所に組織を記入します$graph->organization() ->name('My Beautiful Company');// グラフをスクリプトにレンダリングする tagecho $graph;
これらのツールを使用すると、グラフは使用可能なすべてのスキーマのコレクションとなり、これらのスキーマを相互にリンクし、ヘルパー スキーマがスクリプト タグでレンダリングされるのを防ぐことができます。
場合によっては、同じタイプの複数のグラフ ノード (組織内のさまざまな人々の複数のPerson
ノードなど) を追跡する必要があります。これを行うには、グラフ インスタンスでノード識別子を使用できます。識別子を指定しない場合は、予約されたキーワードのdefault
識別子が使用されます。
use SpatieSchemaOrgGraph;use SpatieSchemaOrgperson;$graph = new Graph();// chaining$graph->person('freekmurze') を使用して Person を追加します ->givenName('フリーク') ->家族名('ファン・デル・ヘルテン') ->alternateName('freekmurze');//クロージャ$graphを使用して人物を追加します$graph->person('sebastiandedeyne', function(person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->家族名('デ・デイン') ->alternateName('セバスティアンデイン'); }); // クロージャを使用して人物を追加し、同じ識別子で 2 番目の呼び出しを行います$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') );$graph->person('グミビール') ->与えられた名前('トム') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// ランダムな人物を Graph から非表示にします$graph->hide(person::class, 'random ');エコー json_encode($graph);
{"@context":"https://schema.org","@graph":[ {"@type":"person","givenName":"Freek","familyName":"Van der Herten","alternateName":"freekmurze"}, {"@type":"人物","与えられた名前":"セバスチャン","家族名":"デ・デイン","代替名":"セバスティアンデイン"}, {"@type":"人物","alternateName":"グミビール","givenName":"Tom","familyName":"Witkowski"} 】 }
Schema.org では複数型のエンティティが許可されています。このパッケージでエンティティを使用するには、グラフと同様に機能するMultiTypedEntity
クラスを使用できます。
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('プレジデンシャル スイート');$mte->product()->offers( スキーマ::offer() ->名前('ワンナイト') ->価格(100000.00) ->価格通貨('USD') );$mte->product(function (Product $product) {$product->aggregateRating( スキーマ::aggregateRating() ->最高評価(5) ->最悪評価(4) ); });エコー json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "HotelRoom", "Product" ], "name":"プレジデンシャル スイート", "offers":{ "@type":"オファー", "name":"1 泊", "price":100000, "priceCurrency":"USD" }, "aggregateRating":{ "@type":"AggregateRating", "bestRating":5, "worstRating":4 } }
プロパティをどのようにマージするかという実際のルールはありません。舞台裏でのみarray_merge()
を使用します。したがって、MTE の異なる型で同じプロパティを定義することを避けるか、最後にどのプロパティが使用されるかが重要ではないように、すべてのプロパティが同じ値を保持するようにする必要があります。
Float
型は PHP の予約キーワードであるため使用できません。
Physician
タイプは、 health
拡張仕様のタイプを拡張するため使用できません。
最近の変更点の詳細については、CHANGELOG を参照してください。
$ コンポーザーテスト
詳細については、「貢献」を参照してください。
セキュリティに関するバグを見つけた場合は、問題トラッカーを使用する代わりに [email protected] にメールを送信してください。
このパッケージを自由に使用できますが、実稼働環境に届いた場合は、どのパッケージを使用しているかを記載した葉書を故郷から送っていただければ幸いです。
私たちの住所は、Spatie, Kruikstraat 22, 2018 Antwerp, Belgiumです。
いただいたはがきはすべて当社ホームページに掲載しております。
セバスチャン・デ・デイン
トム・ウィトコウスキー
すべての貢献者
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。