Um conjunto de bibliotecas PHP que usam o vocabulário http://schema.org para implementar e gerar semântica de Microdata ou RDFa Lite 1.1.
Esta biblioteca é utilizada no CMS Joomla desde a versão 3.2 (chamada JMicrodata).
Criado durante o Google Summer of Code 2013 e 2014.
A biblioteca foi projetada com estes objetivos em mente:
Compositor :
Adicione em seu arquivo composer.json
:
{
"require" : {
"palex/ PHPStructuredData " : " * "
}
}
Da fonte :
Execute git clone https://github.com/alexprut/PHPStructuredData.git
Download direto :
Baixe a última versão aqui
Suponhamos que você já tenha uma instância da biblioteca Microdata ou RDFa. E você precisa adicionar a semântica Microdata ou RDFa ao seguinte HTML que faz parte de um artigo ( por exemplo, $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>
A biblioteca Microdata
renderizará:
< 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 >
A biblioteca RDFa
renderizará:
< 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 >
Em vez disso, se você decidir alterar o tipo atual ( por exemplo, $sd->setType('Review');
).
A biblioteca Microdata
renderizará:
< 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 >
A biblioteca RDFa
renderizará:
< 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 >
Como você pode ver John Doe
faz fallback para o tipo Person , e não há perda de informações, mesmo que o Type atual não tenha uma propriedade de autor ele exibirá informações importantes para as máquinas, os mecanismos de busca sabem que existe um Person John Doe
.
Em vez disso, se você decidir não renderizar a semântica de Microdados ou RDFa, basta desabilitar a saída da biblioteca ( por exemplo, $sd->enable('false');
).
As bibliotecas Microdata
e RDFa
renderizarão:
< 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 >
Atualmente, as bibliotecas RDFa
e Microdata
não oferecem suporte a vários substitutos.
Se você deseja manter suas visualizações separadas da lógica, ParserPlugin
é uma classe PHP para analisar a marcação HTML e converter os atributos data-*
HTML5 em Microdata formatados corretamente ou semântica RDFa Lite 1.1.
Os atributos data-*
são novos no HTML5 e nos dão a capacidade de incorporar atributos de dados personalizados em todos os elementos HTML. Portanto, se você desabilitar a saída da biblioteca, o HTML ainda será validado. O sufixo padrão que a biblioteca irá procurar é data-sd
, onde sd significa dados estruturados, mas você pode registrar mais de um sufixo personalizado.
O tipo define qual esquema está sendo usado para a marcação a seguir. O Type deve sempre ter o primeiro caractere Maiúsculo para ser interpretado corretamente. Se o tipo for um esquema válido, o escopo global da página deste ponto em diante será atualizado para esse esquema. O plugin substituirá a tag de dados por itemscope itemtype='https://schema.org/Type'
no caso de semântica de microdados ou vocab='https://schema.org' typeof='Type'
no caso de RDFa Lite 1.1 semântica.
< div data-sd =" Article " >
< p > This is my article </ p >
</ div >
Isso será gerado usando a semântica Microdata
como:
< div itemscope itemtype =" http://schema.org/Article " >
< p > This is my article </ p >
</ div >
Ou usando a semântica RDFa
como:
< div vocab =" http://schema.org " typeof =" Article " >
< p > This is my article </ p >
</ div >
Uma vez declarado um esquema, o próximo passo é declarar propriedades individuais – explicando o conteúdo e dando-lhe significado semântico.
A propriedade deve sempre ter o primeiro caractere minúsculo para ser interpretada corretamente. Se a propriedade fizer parte do esquema atual, o plug-in substituirá a tag de dados por itemprop='property'
no caso de semântica de microdados ou property='property'
no caso de semântica RDFa Lite 1.1. Se a propriedade não for considerada válida do esquema ativo, ela será ignorada e a próxima propriedade disponível será analisada.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
</ div >
Isso será gerado usando a semântica Microdata
como:
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
</ div >
Ou usando a semântica RDFa
como:
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
</ div >
Às vezes você pode querer declarar explicitamente uma propriedade que só deve ser usada quando um esquema específico estiver ativo – por exemplo, se a propriedade tiver uma propriedade específica em um esquema, que é chamada de algo diferente em outro esquema.
É possível conseguir isso usando uma propriedade dependente de esquema. Isso funciona usando uma combinação entre Type e property , separados por um ponto final. Resumindo, se o escopo global atual for igual a Type e a propriedade fizer parte desse Type, o plugin substituirá a tag data por itemprop='property'
no caso de semântica de microdados ou property='property'
no caso de 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 >
Isso será gerado usando a semântica Microdata
como:
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
</ div >
Ou usando a semântica RDFa
como:
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
</ div >
É possível, usando uma combinação destas, especificar múltiplas propriedades, incluindo algumas que são específicas para um esquema e outras que são genéricas. A ordem dos blocos de construção não é significativa e um espaço em branco é usado como separador.
< 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 >
Isso será gerado usando a semântica Microdata
como:
< 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 >
Ou usando a semântica RDFa
como:
< 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 >
Às vezes é necessário aninhar esquemas – por exemplo, se você quiser descrever uma pessoa quando tiver o esquema Artigo aberto. Isso é possível usando esquemas aninhados. Para usar isso, basta anexar o esquema precedido por um ponto final, após a propriedade. Depois de terminar de usar o esquema aninhado, feche a tag que o contém e redefina o esquema original.
< 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 >
Isso será gerado usando a semântica Microdata
como:
< 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 >
Ou usando a semântica RDFa
como:
< 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 >
Suponhamos que você já tenha uma instância da biblioteca ParserPlugin
. E você precisa adicionar semântica de microdados ou RDFa ao seguinte HTML que faz parte de um artigo ( por exemplo, $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 >
A saída Microdata
será:
< 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 >
A saída RDFa
será:
< 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 >
Em vez disso, se você decidir alterar o tipo atual ( por exemplo, $scope="Review";
).
A saída Microdata
será:
< 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 >
A saída RDFa
será:
< 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 >
As bibliotecas PHPStructuredData
usam o arquivo types.json
para verificar e gerar a semântica validada, esse arquivo contém todos os tipos e propriedades disponíveis no vocabulário http://schema.org e foi gerado automaticamente com o https://github.com/ rastreador da web alexprut / Spider4Schema.
itemref
.StructuredData
.types.json
todas as propriedades necessárias especificadas pelo Google, Yandex, Baidu. PHPStructuredData é licenciado sob a licença MIT – consulte o arquivo LICENSE para obter detalhes.