RDF schema.org et array.

  • Auteur de la discussion Auteur de la discussion ortolojf
  • Date de début Date de début
WRInaute accro
Bonjour

Voici le html et RDF :

HTML:
<div itemscope itemtype="https://schema.org/Movie">
        <h1 itemprop="name">Avatar</h1>
        <span>Director :<span itemprop="director">James Cameron</span> (born August 16, 1954)</span>
        <span itemprop="genre">Science fiction</span>
        <a href= "../movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>


Sa représentation JSON serait théoriquement :

JSON:
{
        "children": [
                {
                        "tag": "div",
                        "itemscope":"",
                        "itemtype": "https://schema.org/Movie",
                        "children": [
                                {
                                        "tag": "h1",
                                        "itemprop":"name",
                                        "text":"Avatar"
                                },
                                {
                                        "tag": "span",
                                        "text": "Director :",
                                        "children":
                                        {
                                                "tag": "span",
                                                "itemprop":"director",
                                                "text":"James Cameron"
                                        },
                                        "text": " (born August 16, 1954)"
                                },
                                {
                                        "tag": "span",
                                        "itemprop":"genre",
                                        "text":"Science fiction"
                                },
                                {
                                        "tag": "a",
                                        "href":"../movies/avatar-theatrical-trailer.html",
                                        "itemprop":"trailer",
                                        "text":"Trailer"   
                                }
                        ]
                }
        ]
}


Il y a un bug.

Le deuxième "text" : "text": " (born August 16, 1954)" est en double avec : "text": "Director :".

Je fixe la les clés à "text" au lieu de "content", car les "text" sont visibles ( en dehors des balises ).

Comment éliminer le doublon ?

Je compte faire une fonction affichant automatiquement les rdf.

Merci beaucoup de votre aide.
 
WRInaute accro
Voilà voilà :

Avec mon parser : array_to_rdf.php

A partir de :


PHP:
<?php
$array_rdf = array("tag" => "div",
        "itemscope itemtype" => "https://schema.org/Movie",
        array(
                array("tag" => "h1",
                "itemprop" => "name",
                "text" => "Avatar"),
                array("tag" => "span",
                "text1" => "Director :",
                array("tag" => "span",
                "itemprop" => "director",
                "text" => "James Cameron"
                ),
                "text2" => " (born August 16, 1954)"
                ),
                array("tag" => "span",
                "itemprop" => "genre",
                "text" => "Science fiction"),
                array("tag" => "a",
                "href" => "../movies/avatar-theatrical-trailer.html",
                "itemprop" => "trailer",
                "text" => "Trailer")
        )
);
?>


J'obtiens :

HTML:
<div itemscope itemtype="https://schema.org/Movie">
    <h1 itemprop="name">
    Avatar
    </h1>
    <span>
    Director :
        <span itemprop="director">
        James Cameron
        </span>
    (born August 16, 1954)
    </span>
    <span itemprop="genre">
    Science fiction
    </span>
    <a href="../movies/avatar-theatrical-trailer.html" itemprop="trailer">
    Trailer
    </a>
</div>


Super non ?

Amicalement.
 
WRInaute accro
J'ai un autre problème.

La balise SiteNavigationElement est connue pour poser des problèmes de cohérence.

Quelle est la meilleure solution entre ces deux affichages ?

HTML:
<nav>
        <ul>
                <li  itemscope itemtype="http://schema.org/SiteNavigationElement">
                        <a itemprop="url" href="http://example.com/link-1">
                                <span itemprop="name">Link 1</span>
                        </a>
                </li>
                <li  itemscope itemtype="http://schema.org/SiteNavigationElement">
                        <a itemprop="url" href="http://example.com/link-2">
                                <span itemprop="name">Link 2</span>
                        </a>
                </li>
        </ul>
</nav>

ou :

HTML:
<nav role="navigation" itemscope itemtype="http://schema.org/SiteNavigationElement">
        <ul>
                <li>
                        <a href="https://yoursite.com/" title="Link to Home" itemprop="url">
                                <span itemprop="name">Home</span>
                        </a>
                </li>
                <li>
                        <a href="https://yoursite.com/sample-page" title="Link to sample page" itemprop="url">
                                <span itemprop="name">sample page</span>
                        </a>
                </li>
        </ul>
</nav>


Spout : JSON-LD celà sépare ( il me semble ), le contenu sémantique ( donné par LD-JSON dans le <head> ), du contenu du site ( dans le <body> ).

Si c'est faux, merci de me détromper.

Je sais bien que Google préconise LD-JSON. ;)

Dans tous les cas, j'aurais besoin de savoir la syntaxe de SiteNavigationElement.

Merci beaucoup.
 
WRInaute accro
Hé bé...


1ère version ( plusieurs types ).

HTML:
<nav>
    <ul>
        <li itemscope itemtype="http://schema.org/SiteNavigationElement">
            <a itemprop="url" href="https://www.pronostics-courses.fr" title="Page d'accueil">
                <span itemprop="name">
                Page d'accueil
                </span>
            </a>
        </li>
        <li itemscope itemtype="http://schema.org/SiteNavigationElement">
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_nouvelles/new_courses.php" title="Courses du Jour">
                <span itemprop="name">
                Courses du Jour
                </span>
            </a>
        </li>
        <li itemscope itemtype="http://schema.org/SiteNavigationElement">
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_actuelles/new_courses.php" title="Courses d'aujourd'hui">
                <span itemprop="name">
                Courses d'aujourd'hui
                </span>
            </a>
        </li>
        <li itemscope itemtype="http://schema.org/SiteNavigationElement">
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_anciennes/action_old_courses,27,4,2021.html" title=" Courses du Mardi 27 Avril 2021">
                <span itemprop="name">
                Courses du Mardi 27 Avril 2021
                </span>
            </a>
        </li>
    </ul>
</nav>


2ème version ( 1 seul type ) :

HTML:
<nav role="navigation" itemscope itemtype="http://schema.org/SiteNavigationElement">
    <ul>
        <li>
            <a itemprop="url" href="https://www.pronostics-courses.fr" title="Page d'accueil">
                <span itemprop="name">
                Page d'accueil
                </span>
            </a>
        </li>
        <li>
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_nouvelles/new_courses.php" title="Courses du Jour">
                <span itemprop="name">
                Courses du Jour
                </span>
            </a>
        </li>
        <li>
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_actuelles/new_courses.php" title="Courses d'aujourd'hui">
                <span itemprop="name">
                Courses d'aujourd'hui
                </span>
            </a>
        </li>
        <li>
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_anciennes/action_old_courses,27,4,2021.html" title=" Courses du Mardi 27 Avril 2021">
                <span itemprop="name">
                Courses du Mardi 27 Avril 2021
                </span>
            </a>
        </li>
    </ul>
</nav>



Avec l'ancien détecteur de contenus enrichis de Google, pas d'erreur dans les deux cas, si ce n'est que pour la 1ère version, les 4 types sont affichés.

Avec le nouveau détecteur de Google, erreurs mais non précisées.

Comment savoir quelle erreurs il y a ?

J'ai généré ces deux pages html avec mon parseur : array_to_rdf.php

A partir de deux fichiers json.

Amicalement.
 
WRInaute accro
Bonjour

La balise SiteNavigationElement semble sur le net, être considérée comme obsolète voire inutile.

Pour afficher un menu d'url, celà passe les deux tests de Google ( ancien et nouveau ).

Les "<meta position" sont ajoutés automatiquement par le parser.

Ceci dans le cas où ce sont des ListItem ayant un "name".


JSON paramètre de array_to_rdf.php :

JSON:
{
        "children": [
                {
                        "tag": "nav",
                        "children": [
                                {
                                        "tag": "ul",
                                        "itemscope itemtype":"http://schema.org/ItemList",
                                        "children": [
                                                {
                                                        "tag": "li",
                                                        "itemprop":"itemListElement",
                                                        "itemscope itemtype":"https://schema.org/ListItem",
                                                        "children": [
                                                                {
                                                                        "tag": "a",
                                                                        "itemprop":"url",
                                                                        "href": "https://www.pronostics-courses.fr",
                                                                        "title": "Page d\'accueil",
                                                                        "children": [
                                                                                {
                                                                                        "tag": "span",
                                                                                        "itemprop":"name",
                                                                                        "text": "Page d\'accueil"
                                                                                }
                                                                        ]
                                                                }
                                                        ]
                                                },
                                                {
                                                        "tag": "li",
                                                        "itemprop":"itemListElement",
                                                        "itemscope itemtype":"http://schema.org/ListItem",
                                                        "children": [
                                                                {
                                                                        "tag": "a",
                                                                        "itemprop":"url",
                                                                        "href": "https://www.pronostics-courses.fr/php/courses_nouvelles/new_courses.php",
                                                                        "title": "Courses du Jour",
                                                                        "children": [
                                                                                {
                                                                                        "tag": "span",
                                                                                        "itemprop":"name",
                                                                                        "text": "Courses du Jour"
                                                                                }
                                                                        ]
                                                                }
                                                        ]
                                                },
                                                {
                                                        "tag": "li",
                                                        "itemprop":"itemListElement",
                                                        "itemscope itemtype":"http://schema.org/ListItem",
                                                        "children": [
                                                                {
                                                                        "tag": "a",
                                                                        "itemprop":"url",
                                                                        "href": "https://www.pronostics-courses.fr/php/courses_actuelles/new_courses.php",
                                                                        "title": "Courses d\'aujourd\'hui",
                                                                        "children": [
                                                                                {
                                                                                        "tag": "span",
                                                                                        "itemprop":"name",
                                                                                        "text": "Courses d\'aujourd\'hui"
                                                                                }
                                                                        ]
                                                                }
                                                        ]
                                                },
                                                {
                                                        "tag": "li",
                                                        "itemprop":"itemListElement",
                                                        "itemscope itemtype":"http://schema.org/ListItem",
                                                        "children": [
                                                                {
                                                                        "tag": "a",
                                                                        "itemprop":"url",
                                                                        "href": "https://www.pronostics-courses.fr/php/courses_anciennes/action_old_courses,27,4,2021.html",
                                                                        "title": " Courses du Mardi 27 Avril 2021",
                                                                        "children": [
                                                                                {
                                                                                        "tag": "span",
                                                                                        "itemprop":"name",
                                                                                        "text": " Courses du Mardi 27 Avril 2021"
                                                                                }
                                                                        ]
                                                                }
                                                        ]
                                                }
                                        ]
                                }
                        ]
                }
        ]
}


Résultat :

HTML:
<nav>
    <ul itemscope itemtype="http://schema.org/ItemList">
        <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
            <a itemprop="url" href="https://www.pronostics-courses.fr" title="Page d'accueil">
                <span itemprop="name">
                Page d'accueil
                </span>
                <meta itemprop="position" content="1" />
            </a>
        </li>
        <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_nouvelles/new_courses.php" title="Courses du Jour">
                <span itemprop="name">
                Courses du Jour
                </span>
                <meta itemprop="position" content="2" />
            </a>
        </li>
        <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_actuelles/new_courses.php" title="Courses d'aujourd'hui">
                <span itemprop="name">
                Courses d'aujourd'hui
                </span>
                <meta itemprop="position" content="3" />
            </a>
        </li>
        <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="url" href="https://www.pronostics-courses.fr/php/courses_anciennes/action_old_courses,27,4,2021.html" title=" Courses du Mardi 27 Avril 2021">
                <span itemprop="name">
                Courses du Mardi 27 Avril 2021
                </span>
                <meta itemprop="position" content="4" />
            </a>
        </li>
    </ul>
</nav>
 
WRInaute accro
Ce que j'ai l'intention de faire...

En PHP :

Une fonction automatique génératrice de html en microdata , à partir de array/json sans contenu riche au départ.

De façon aussi abstraite et un paramètre peu complet au maximum.

J'ai déjà le parser de json, je peux fournir le code si vous voulez.

Amicalement.
 
WRInaute accro
Excusez-moi

Pour l'instant, j'ai simplement fixé les extraits enrichis des balises :

<ul>, <ol>, <li>, <body>.

J'aurais besoin d'avoir votre avis pour les balises de description :

<dl> , <dt> et <dd>.

Bien amicalement.



Code:
    BALISES                        TYPES
--------------------------------------------------------
                     
LISTE DESCRIPTION
*****************
--------------------------------------------------------
dl                    |            ?
--------------------------------------------------------
dt                    |            ?
--------------------------------------------------------
dd                    |            ?
--------------------------------------------------------


LISTE
*****
--------------------------------------------------------
ul                    |    'itemscope itemtype="http://schema.org/ItemList"'
--------------------------------------------------------
ol                    |    'itemscope itemtype="http://schema.org/ItemList"'
--------------------------------------------------------
li                    |    'itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"'
--------------------------------------------------------
 
WRInaute accro
Rebonjour

Voilà un tableau donnant les possibilités d'extraits enrichis pour les balises html.

Voir ci dessous :

Code:
    VOIR CONTENUS ENRICHIS DE CES BALISES.
    **************************************
            none    => pas d'extrait enrichi
            easy    => extrait enrichi ad libitum
            ?        => ne sais pas
            ??        => question


    BALISES                        TYPES
--------------------------------------------------------
                       
BALISES BLOCK
*************
--------------------------------------------------------
html                |            none
--------------------------------------------------------
body                |    'itemscope itemtype="http://schema.org/WebPage"'
--------------------------------------------------------
--------------------------------------------------------
main                |            easy
--------------------------------------------------------
header                |            easy
--------------------------------------------------------
footer                |            easy
--------------------------------------------------------
div                    |            easy
--------------------------------------------------------
p                    |            easy
--------------------------------------------------------
picture                |            easy
--------------------------------------------------------
a                    |    'itemprop="url"' ?
--------------------------------------------------------


CONTENU SECTIONNANT
*******************
--------------------------------------------------------
article                |            easy
--------------------------------------------------------
aside                |            easy
--------------------------------------------------------
section                |            easy
--------------------------------------------------------
--------------------------------------------------------
nav                    |            easy
--------------------------------------------------------


TITRAILLE
*********
--------------------------------------------------------
h1 ... h6            |            easy
--------------------------------------------------------
hgroup                |            easy
--------------------------------------------------------


LISTE DESCRIPTION
*****************
--------------------------------------------------------
dl                    |            ??
--------------------------------------------------------
dt                    |            ??
--------------------------------------------------------
dd                    |            ??
--------------------------------------------------------


LISTE
*****
--------------------------------------------------------
ul                    |    'itemscope itemtype="http://schema.org/ItemList"'
--------------------------------------------------------
ol                    |    'itemscope itemtype="http://schema.org/ItemList"'
--------------------------------------------------------
li                    |    'itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"'
--------------------------------------------------------


TABLE
*****
--------------------------------------------------------
table                |    'itemscope itemtype="http://schema.org/Table"'
--------------------------------------------------------
caption                |    'itemprop="description"'
--------------------------------------------------------
tr                    |            none
--------------------------------------------------------
thead                |            easy
--------------------------------------------------------
colgroup            |            none
--------------------------------------------------------
col                    |            none
--------------------------------------------------------
th                    |            easy
--------------------------------------------------------
tbody                |            easy
--------------------------------------------------------
td                    |            easy
--------------------------------------------------------
tfoot                |            easy
--------------------------------------------------------


FORM
****
--------------------------------------------------------
form                |            easy
--------------------------------------------------------
legend                |            easy
--------------------------------------------------------
label                |            easy
--------------------------------------------------------
select                |            easy
--------------------------------------------------------
optgroup            |            none
--------------------------------------------------------
option                |            none
--------------------------------------------------------
fieldset            |            easy
--------------------------------------------------------
button                |            easy
--------------------------------------------------------
input                | inline.    easy
--------------------------------------------------------
textarea            |            easy
--------------------------------------------------------
progress            |            none
--------------------------------------------------------
meter                |            none
--------------------------------------------------------
output                |            none
--------------------------------------------------------
datalist            |            none
--------------------------------------------------------


BALISES INLINE
**************
--------------------------------------------------------
br                    |            none
--------------------------------------------------------
hr                    |            none
--------------------------------------------------------
span                |            easy
--------------------------------------------------------
span                |    itemprop="item" ( si précédé par ListItem )
--------------------------------------------------------


META DONNEES
************
--------------------------------------------------------
meta                |            easy
--------------------------------------------------------
AJOUT => meta        |    'itemprop="position" content=' . chaine($position)    ( si $listItem == 2 )
--------------------------------------------------------
link                |            easy
--------------------------------------------------------
template            |            easy
--------------------------------------------------------
script                |            none
--------------------------------------------------------
noscript            |            none
--------------------------------------------------------
style                |            none
--------------------------------------------------------
title                |            none
--------------------------------------------------------


BALISAGE TEXTE                    NONE
**************                    ****
--------------------------------------------------------
small                |
--------------------------------------------------------
strong                |
--------------------------------------------------------
b                    |
--------------------------------------------------------
code                |
--------------------------------------------------------
ins                    |
--------------------------------------------------------
i                    |
--------------------------------------------------------
s                    |
--------------------------------------------------------
del                    |
--------------------------------------------------------
em                    |
--------------------------------------------------------
mark                |
--------------------------------------------------------
q                    |
--------------------------------------------------------
sub                    |
--------------------------------------------------------
sup                    |
--------------------------------------------------------
u                    |
--------------------------------------------------------


AJOUT c'est parce que mon parser json/html => rdf, ajoute automatiquement une ligne <meta itemprop="position" etc... après chaque ListItem.

Merci si vous voulez de m'aider à compléter ce tableau, ç-à-d à remplacer le cas échéant, les ?? et easy.

Les valeurs none correspondent théoriquement, aux balise html sans snippet.

Pour Spout : C'est vrai que c'est pour du microdata à remplacer par du LD_JSON, mais Google donne un algorithme automatique pour aller du former au later.

Je m'entraîne.

Je projette cette fonction automatique de production d'extraits enrichis.

Amicalement.
 
WRInaute accro
Bonjour

Premier essai de parser JSON => JSON-LD ( en PHP ) :

L'array du début est la résultante sur la variable json $array_rdf , de la fonction :

$array_rdf = json_decode($array_rdf, true, 512, JSON_OBJECT_AS_ARRAY);

Le contenu JSON-LD en dessous de l'array, est produit par le parser.

Je n'ai pas testé d'autre variable json pour l'instant.


Code:
Array
(
    [children] => Array
        (
            [0] => Array
                (
                    [tag] => nav
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [tag] => ul
                                    [itemscope itemtype] => https://schema.org/ItemList
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [tag] => li
                                                    [itemprop] => itemListElement
                                                    [itemscope itemtype] => https://schema.org/ListItem
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [tag] => a
                                                                    [itemprop] => url
                                                                    [url] => https://www.pronostics-courses.fr
                                                                    [title] => Page d'accueil
                                                                    [children] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [tag] => span
                                                                                    [itemprop] => name
                                                                                    [text] => Page d'accueil
                                                                                )
                                                                        )
                                                                )
                                                        )
                                                )
                                            [1] => Array
                                                (
                                                    [tag] => li
                                                    [itemprop] => itemListElement
                                                    [itemscope itemtype] => https://schema.org/ListItem
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [tag] => a
                                                                    [itemprop] => url
                                                                    [url] => https://www.pronostics-courses.fr/php/courses_nouvelles/new_courses.php
                                                                    [title] => Courses du Jour
                                                                    [children] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [tag] => span
                                                                                    [itemprop] => name
                                                                                    [text] => Courses du Jour
                                                                                )
                                                                        )
                                                                )
                                                        )
                                                )
                                            [2] => Array
                                                (
                                                    [tag] => li
                                                    [itemprop] => itemListElement
                                                    [itemscope itemtype] => https://schema.org/ListItem
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [tag] => a
                                                                    [itemprop] => url
                                                                    [url] => https://www.pronostics-courses.fr/php/courses_actuelles/new_courses.php
                                                                    [title] => Courses d'aujourd'hui
                                                                    [children] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [tag] => span
                                                                                    [itemprop] => name
                                                                                    [text] => Courses d'aujourd'hui
                                                                                )
                                                                        )
                                                                )
                                                        )
                                                )
                                            [3] => Array
                                                (
                                                    [tag] => li
                                                    [itemprop] => itemListElement
                                                    [itemscope itemtype] => https://schema.org/ListItem
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [tag] => a
                                                                    [itemprop] => url
                                                                    [url] => https://www.pronostics-courses.fr/php/courses_anciennes/action_old_courses,27,4,2021.html
                                                                    [title] =>  Courses du Mardi 27 Avril 2021
                                                                    [children] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [tag] => span
                                                                                    [itemprop] => name
                                                                                    [text] =>  Courses du Mardi 27 Avril 2021
                                                                                )
                                                                        )
                                                                )
                                                        )
                                                )
                                        )
                                )
                        )
                )
        )
)




<script type="application/ld+json">
{
    "@context":"https://schema.org/",
    "@type":"ItemList",
    {
        "@type":"ListItem",
        {
            "url":"https://www.pronostics-courses.fr",
            "title":"Page d'accueil",
            "name":"Page d'accueil",
            "position":1
        },
        "@type":"ListItem",
        {
            "url":"https://www.pronostics-courses.fr/php/courses_nouvelles/new_courses.php",
            "title":"Courses du Jour",
            "name":"Courses du Jour",
            "position":2
        },
        "@type":"ListItem",
        {
            "url":"https://www.pronostics-courses.fr/php/courses_actuelles/new_courses.php",
            "title":"Courses d'aujourd'hui",
            "name":"Courses d'aujourd'hui",
            "position":3
        },
        "@type":"ListItem",
        {
            "url":"https://www.pronostics-courses.fr/php/courses_anciennes/action_old_courses,27,4,2021.html",
            "title":" Courses du Mardi 27 Avril 2021",
            "name":" Courses du Mardi 27 Avril 2021",
            "position":4
        }
    }
}
 
Discussions similaires
Haut