Un ensemble de bibliothèques PHP qui utilisent le vocabulaire http://schema.org pour implémenter et générer la sémantique Microdata ou RDFa Lite 1.1.
Cette bibliothèque est utilisée dans le CMS Joomla depuis la version 3.2 (appelée JMicrodata).
Créé lors du Google Summer of Code 2013 et 2014.
La bibliothèque a été conçue avec ces objectifs en tête :
Compositeur :
Ajoutez votre fichier composer.json
:
{
"require" : {
"palex/ PHPStructuredData " : " * "
}
}
De la source :
Exécutez git clone https://github.com/alexprut/PHPStructuredData.git
Téléchargement direct :
Téléchargez la dernière version ici
Supposons que vous disposiez déjà d’une instance de la bibliothèque Microdata ou RDFa. Et vous devez ajouter la sémantique Microdata ou RDFa au code HTML suivant qui fait partie d'un article ( par exemple $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>
La bibliothèque Microdata
affichera :
< 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 >
La bibliothèque RDFa
rendra :
< 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 >
Au lieu de cela, si vous décidez de modifier le type actuel ( par exemple $sd->setType('Review');
).
La bibliothèque Microdata
affichera :
< 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 >
La bibliothèque RDFa
rendra :
< 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 >
Comme vous pouvez le voir, John Doe
utilise le type de personne et il n'y a aucune perte d'informations, même si le type actuel n'a pas de propriété d'auteur, il affichera des informations importantes pour les machines, les moteurs de recherche savent qu'il existe une personne John Doe
.
Au lieu de cela, si vous décidez de ne pas restituer la sémantique des microdonnées ou RDFa, vous désactivez simplement la sortie de la bibliothèque ( par exemple $sd->enable('false');
).
Les bibliothèques Microdata
et RDFa
rendront :
< 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 >
Actuellement, les bibliothèques RDFa
et Microdata
ne prennent pas en charge plusieurs solutions de secours.
Si vous souhaitez garder vos vues séparées de la logique, ParserPlugin
est une classe PHP permettant d'analyser le balisage HTML et de convertir les attributs data-*
HTML5 en microdonnées correctement formatées ou en sémantique RDFa Lite 1.1.
Les attributs data-*
sont nouveaux dans HTML5, ils nous donnent la possibilité d'intégrer des attributs de données personnalisés sur tous les éléments HTML. Donc si vous désactivez la sortie de la bibliothèque, le HTML sera toujours validé. Le suffixe par défaut recherché par la bibliothèque est data-sd
, où sd signifie données structurées, mais vous pouvez enregistrer plusieurs suffixes personnalisés.
Le type définit le schéma utilisé pour le balisage suivant. Le Type doit toujours avoir le premier caractère majuscule pour être correctement interprété. Si le type est un schéma valide, la portée globale de la page à partir de ce moment est mise à jour vers ce schéma. Le plugin remplacera la balise de données par itemscope itemtype='https://schema.org/Type'
dans le cas de la sémantique des microdonnées ou vocab='https://schema.org' typeof='Type'
dans le cas de RDFa Lite 1.1 sémantique.
< div data-sd =" Article " >
< p > This is my article </ p >
</ div >
Cela sera généré en utilisant la sémantique Microdata
comme :
< div itemscope itemtype =" http://schema.org/Article " >
< p > This is my article </ p >
</ div >
Ou en utilisant la sémantique RDFa
comme :
< div vocab =" http://schema.org " typeof =" Article " >
< p > This is my article </ p >
</ div >
Une fois qu'un schéma a été déclaré, l'étape suivante consiste à déclarer les propriétés individuelles – en expliquant le contenu et en lui donnant une signification sémantique.
La propriété doit toujours avoir le premier caractère en minuscule pour être correctement interprétée. Si la propriété fait partie du schéma actuel, le plugin remplacera la balise data par itemprop='property'
dans le cas de la sémantique des microdonnées ou property='property'
dans le cas de la sémantique RDFa Lite 1.1. Si la propriété ne s'avère pas être une propriété valide du schéma actif, elle sera ignorée et la prochaine propriété disponible sera analysée.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
</ div >
Cela sera généré en utilisant la sémantique Microdata
comme :
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
</ div >
Ou en utilisant la sémantique RDFa
comme :
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
</ div >
Parfois, vous souhaiterez peut-être indiquer explicitement une propriété qui ne doit être utilisée que lorsqu'un schéma spécifique est actif – par exemple, si la propriété possède une propriété spécifique dans un schéma, qui est appelée différemment dans un autre schéma.
Il est possible d'y parvenir en utilisant une propriété dépendante du schéma. Cela fonctionne en utilisant une combinaison entre Type et property , séparés par un point. En bref, si la portée globale actuelle est égale à Type et que la propriété fait partie de ce type, le plugin remplacera la balise de données par itemprop='property'
dans le cas de la sémantique des microdonnées ou property='property'
dans le cas 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 >
Cela sera généré en utilisant la sémantique Microdata
comme :
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
</ div >
Ou en utilisant la sémantique RDFa
comme :
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
</ div >
Il est possible, en utilisant une combinaison de celles-ci, de spécifier plusieurs propriétés, dont certaines sont spécifiques à un schéma et d'autres sont génériques. L'ordre des blocs de construction n'est pas significatif et un espace blanc est utilisé comme séparateur.
< 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 >
Cela sera généré en utilisant la sémantique Microdata
comme :
< 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 en utilisant la sémantique RDFa
comme :
< 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 >
Parfois, il est nécessaire d'imbriquer les schémas – par exemple si vous souhaitez décrire une personne lorsque le schéma Article est ouvert. Ceci est possible en utilisant des schémas imbriqués. Pour l'utiliser, il suffit d'ajouter le schéma précédé d'un point, après la propriété. Une fois que vous avez fini d'utiliser le schéma imbriqué, fermez la balise contenant et réinitialisez le schéma d'origine.
< 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 >
Cela sera généré en utilisant la sémantique Microdata
comme :
< 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 en utilisant la sémantique RDFa
comme :
< 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 >
Supposons que vous disposiez déjà d’une instance de la bibliothèque ParserPlugin
. Et vous devez ajouter la sémantique Microdata ou RDFa au code HTML suivant qui fait partie d'un article ( par exemple $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 >
La sortie Microdata
sera :
< 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 >
La sortie RDFa
sera :
< 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 >
Au lieu de cela, si vous décidez de modifier le type actuel ( par exemple $scope="Review";
).
La sortie Microdata
sera :
< 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 >
La sortie RDFa
sera :
< 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 >
Les bibliothèques PHPStructuredData
utilisent le fichier types.json
pour vérifier et générer une sémantique validée. Ce fichier contient tous les types et propriétés disponibles dans le vocabulaire http://schema.org et il a été généré automatiquement avec https://github.com/. Robot d'exploration Web alexprut/Spider4Schema.
itemref
.StructuredData
.types.json
toutes les propriétés requises spécifiées par Google, Yandex, Baidu. PHPStructuredData est sous licence MIT – voir le fichier LICENSE pour plus de détails.