Taxonomie, classes HTML, attributs personnalisés, microdata et RDFa

Ayant une heure à perdre, je me suis demandé de quelle manière nous pourrions structurer le nom d'un taxon biologique en HTML, voir sa hiérarchie, et surtout à l'aide de quels éléments et/ou attributs.

J'ai d'abord commencé par définir les propriétés minimales permettant de présenter un objet « taxon »(1) :

{
    "name": "taxon",
    "type": "object",
    "description": "Objet décrivant la nomenclature d'un taxon",
    "properties": {
        "rank": {
            "type": "string",
            "description": "Niveaux hiérarchiques d'un taxon",
            "enum": ["kingdom","phylum","class","order","family","genus","specie"]
        },
        "format": {
            "type": "string",
            "description": "Format du nom d'un taxon",
            "enum": ["binominal", "vernacular"]
        }
    }
}
Description des propriétés d'un objet taxon.

J'ai ensuite regardé ce que les technologies web metent à notre disposition. Les spécifications HTML 5 ont par exemple redéfini le rôle de l'élément « i » de manière à ce qu'il puisse être utilisé pour noter le nom d'une espéce vivante :

The i element represents a span of text in an alternate voice or mood, or otherwise offset from the normal prose in a manner indicating a different quality of text, such as a taxonomic designation, a technical term, an idiomatic phrase from another language, a thought, or a ship name in Western texts.

The i element

C'est donc cet élément que nous utiliserons pour structurer un nom d'espèce. Reste à savoir avec quoi nous allons préciser quel rang est renseigné ou quel format de nom nous utilisons. Plusieurs candidats se disputent cet honneur :

  • La méthode « historique » du web : l'attribut class.
  • Les attributs personnalisés, data-*.
  • les microdata.
  • le RDFa.

Quelques remarques techniques / sémantiques d'abord :

  • Les microdata ne semblent pas encore très bien implémentés dans les navigateurs web (gecko, webkit). Cela ne veut pas dire que l'on ne peut pas les utiliser, simplement que les API permettant de les manipuler ne sont pas disponibles.
  • Les attributs personnalisés sont déjà plus largement adoptés ; malheureusement, ces attributs ne sont pas pensés pour être accessibles par autre chose que le document dans lequel ils sont utilisés. Autrement dis, on peut très bien manipuler des éléments portant des attributs personnalisés avec du javascript et/ou des CSS par exemple, mais pas construire une source d'information qui serait « interrogeable de l'extérieur ».

Voici donc quelques tentatives de structurations des noms de taxons. Certaines (voire toutes) sont sans doute mauvaises...

<i class="taxon">
    <span class="rank-(domain|kingdom|phylum|class|order|family|genus|specie)">
        [...]
    </span>
</i>
<i class="taxon format-(binominal|vernacular)">[...]</i>
Utilisation de l'attribut class.
<i class="taxon">
    <span data-rank="(kingdom|phylum|class|order|family|genus|specie)">
        [...]
    </span>
</i>
<i class="taxon" data-format="(binominal|vernacular)">[...]</i>
Utilisation des attributs personnalisés data-*.
<i class="taxon" itemscope>
    <span itemprop="(kingdom|phylum|class|order|family|genus|specie)">
        [...]
    </span>
</i>
<i class="taxon format-(binominal|vernacular)" itemscope>[...]</i>
Utilisation des microdata
<i class="taxon" vocab="http://example.org/taxonomy/" typeof="taxon">
    <span property="(kingdom|phylum|class|order|family|genus|specie)">
        [...]
    </span>
</i>
<i class="taxon format-binominal" vocab="http://example.org/taxonomy/" typeof="taxon" property="name">[...]</i>
<i class="taxon format-vernacular" vocab="http://example.org/taxonomy/" typeof="taxon" property="name">[...]</i>
Utilisation de RDFa Lite.

Exemples avec l'espèce humaine :

<i class="taxon">
    <span class="rank-genus">Homo</span> 
    <span class="rank-specie">sapiens</span>
</i>
<i class="taxon format-binominal">Homo sapiens</i>
<i class="taxon format-vernacular">Etre humain</i>
Utilisation des classes pour décrire l'espèce humaine.
<i class="taxon">
    <span data-rank="genus">Homo</span> 
    <span data-rank="specie">sapiens</span>
</i>
<i class="taxon" data-format="binominal">Homo sapiens</i>
<i class="taxon" data-format="vernacular">Etre humain</i>
Utilisation des attributs personnalisés pour décrire l'espèce humaine.
<i class="taxon" itemscope>
    <span itemprop="genus">Homo</span> 
    <span itemprop="specie">sapiens</span>
</i>
<i class="taxon" itemscope itemprop="name">Homo sapiens</i>
<i class="taxon" itemscope itemprop="name">Etre humain</i>
Utilisation des microdata pour décrire l'espèce humaine.
<i class="taxon" vocab="http://example.org/taxonomy/" typeof="taxon">
    <span property="genus">Homo</span>
    <span property="specie">sapiens</span>
</i>
<i class="taxon format-binominal" vocab="http://example.org/taxonomy/" typeof="taxon" property="name">Homo sapiens</i>
<i class="taxon format-vernacular" vocab="http://example.org/taxonomy/" typeof="taxon" property="name">Etre humain</i>
Utilisation de RDFa Lite pour désigner l'espèce humaine.
<dl class="taxon">
    <dt>Règne</dt>
    <dd class="rank-kingdom">Animal</dd>
    <dt>Phylum</dt>
    <dd class="rank-phylum">vertébrés</dd>
    <dt>Classe</dt>
    <dd class="rank-class">mammifères</dd>
    <dt>Ordre</dt>
    <dd class="rank-order">primates</dd>
    <dt>Famille</dt>
    <dd class="rank-family">hominidés</dd>
    <dt>Genre</dt>
    <dd class="rank-genus">Homo</dd>
    <dt>Espèce</dt>
    <dd class="rank-specie">sapiens</dd>
</dl>
Description de l'espèce humaine avec une liste de description.
<ul class="taxon">
    <li class="rank-kingdom">Animal
        <ul>
            <li class="rank-phylum">vertébrés
                <ul>
                    <li class="rank-class">mammifères
                        <ul>
                            <li class="rank-order">primates
                                <ul>
                                    <li class="rank-family">hominidés
                                        <ul>
                                            <li class="rank-genus">Homo
                                                <ul>
                                                    <li class="rank-specie">sapiens</li>
                                                </ul>
                                            </li>
                                        </ul>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
Description de l'espèce humaine en précisant la hiérarchie des rangs.

Sur la nomenclature des noms :

What's in a name ? Scientific names for animals in popular writing. International Commission on Zoological Nomenclature

Sur les techniques web disponibles :

HICKSON, Ian. HTML Microdata. W3C, . Encore au stade de brouillon (WD).

SPORNY, Manu. RDFa Lite 1.1. W3C, . Encore au stade de recommandation candidate (CR). Voir aussi http://rdfa.info/.

HICKSON, Ian ; BERJON, Robin ; FAULKNER, Steve, et al.. HTML 5. W3C, . 3.2.5.9 Embedding custom non-visible data with the data-* attributes

HICKSON, Ian ; BERJON, Robin ; FAULKNER, Steve, et al.. HTML 5. W3C, . 4.6.16 The i element

Sur l'utilisation de ces techniques :

MILLS, Chris. Microdata & the microdata DOM API. dev.opera.com,

STUDHOLME, Oli. Extending HTML5 — Microdata. HTML5 Doctor,

Sur le débat microdata contre RDFa :

SPORNY, Manu. An Uber-comparison of RDFa, Microdata and Microformats. The Beautiful, Tormented Machine,

JÄGENSTEDT, Philip. Microformats vs RDFa vs Microdata. blog.foolip.org,

SIVONEN, Henri. Schema.org and Pre-Existing Communities. hsivonen.iki.fi,

Et je découvre au moment de finir d'écrire ce billet qu'un microformat est en cours de développement : species.