一组 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 许可证获得许可 - 有关详细信息,请参阅许可证文件。