一組 PHP 函式庫,使用 http://schema.org 詞彙來實作和輸出 Microdata 或 RDFa Lite 1.1 語意。
該函式庫從 3.2 版開始在 Joomla CMS 中使用(稱為 JMicrodata)。
創建於 Google Summer of Code 2013 和 2014 期間。
該庫的設計考慮到了以下目標:
作曲家:
新增到您的composer.json
檔案中:
{
"require" : {
"palex/ PHPStructuredData " : " * "
}
}
來源:
運行git clone https://github.com/alexprut/PHPStructuredData.git
直接下載:
從這裡下載最新版本
假設您已經有一個 Microdata 或 RDFa 函式庫的實例。您需要將 Microdata 或 RDFa 語意新增至以下 HTML,這是文章的一部分(例如$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
回退到Person類型,並且不會丟失信息,即使當前類型沒有author屬性,它也會顯示機器的重要信息,搜索引擎知道有一個 Person 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
函式庫都不支援多重回退。
如果您想要讓視圖與邏輯分離, ParserPlugin
是一個 PHP 類,用於解析 HTML 標記並將data-*
HTML5 屬性轉換為格式正確的 Microdata 或 RDFa Lite 1.1 語意。
data-*
屬性是 HTML5 中的新屬性,它們使我們能夠在所有 HTML 元素上嵌入自訂資料屬性。因此,如果停用庫輸出,HTML 仍將被驗證。該庫將搜尋的預設後綴是data-sd
,其中 sd 代表結構化數據,但您可以註冊多個自訂後綴。
此類型定義以下標記使用哪個架構。類型必須始終將第一個字元大寫才能正確解釋。如果該類型是有效架構,則從此時開始頁面的全域範圍將更新為該架構。該外掛程式將以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 >
有時有必要嵌套架構 - 例如,如果您想在開啟文章架構時描述一個人。使用嵌套模式可以實現這一點。要使用它,只需在屬性後面附加一個以句號開頭的架構即可。使用完巢狀架構後,關閉包含標籤,然後重新設定原始架構。
< 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
函式庫的實例。並且您需要將 Microdata 或 RDFa 語意新增至以下 HTML,這是文章的一部分(例如$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 網路爬蟲。
itemref
支援。StructuredData
新增多個後備支援。types.json
。 PHPStructuredData根據 MIT 許可證獲得許可 - 有關詳細信息,請參閱許可證文件。