Набор библиотек PHP, использующих словарь http://schema.org для реализации и вывода микроданных или семантики RDFa Lite 1.1.
Эта библиотека используется в CMS Joomla начиная с версии 3.2 (называется 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
откатывается к типу человека , и информация не теряется, даже если у текущего типа нет свойства автора, он будет отображать важную информацию для машин, поисковые системы знают, что существует человек John Doe
.
Вместо этого, если вы решите не отображать микроданные или семантику 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 в правильно отформатированные микроданные или семантику RDFa Lite 1.1.
Атрибуты data-*
являются новыми в HTML5. Они дают нам возможность встраивать пользовательские атрибуты данных во все элементы HTML. Поэтому, если вы отключите вывод библиотеки, HTML все равно будет проверяться. Суффикс по умолчанию, который будет искать библиотека, — data-sd
, где sd означает структурированные данные, но вы можете зарегистрировать более одного пользовательского суффикса.
Тип определяет, какая схема используется для следующей разметки. Для правильной интерпретации тип всегда должен иметь первый символ в верхнем регистре. Если тип является допустимой схемой, глобальная область действия страницы с этого момента обновляется до этой схемы. Плагин заменит тег данных на itemscope itemtype='https://schema.org/Type'
в случае семантики микроданных или 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 >
После объявления схемы следующим шагом является объявление отдельных свойств — объяснение содержимого и придание ему семантического значения.
Для правильной интерпретации свойство всегда должно иметь первый символ в нижнем регистре. Если окажется, что свойство является частью текущей схемы, плагин заменит тег данных на itemprop='property'
в случае семантики микроданных или property='property'
в случае семантики RDFa Lite 1.1. Если свойство не окажется допустимым свойством активной схемы, оно будет проигнорировано и будет проанализировано следующее доступное свойство.
< 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, плагин заменит тег данных на itemprop='property'
в случае семантики микроданных или property='property'
в случае RDFa Lite. 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
. И вам необходимо добавить семантику микроданных или 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
все необходимые свойства, указанные Google, Yandex, Baidu. PHPStructuredData лицензируется по лицензии MIT – подробности см. в файле LICENSE.