5568 sujets

Sémantique web et HTML

Bonjour à tous !
Ca fait un bon moment que je cherche un peu partout sur le web et que je regarde comment sont conçus les forums et autres cms répandus pour résoudre ce petit problème. Je m'explique.

Je conçois un site web dans lequel on peut poster des brèves. Chaque brève se présente -très brièvement- comme suit:
<p>
   Entête
</p>
<p>
   Corps de texte
</p>

Comme dans beaucoup de structures du genre, le Corps de texte est en fait mis en forme par une fonction php convertissant les bbtags en balises html. Le Corps de texte est donc en fait -en simplifiant toujours:
<p>
   <? echo 'bbtags($texte)'; ?>
</p>


Maintenant le problème: je voudrais intégrer, dans ma fonction bbtags, un tag permettant de faire des citations (très répendu et plutot pratique). Et je voudrais qu'une citation soit représentée dans un bloc avec certains styles. Une présentation de citation classique, en somme.
Mais comment diable faire pour pouvoir mettre un bloc de citation dans des balises <p> sans devoir s'embarquer dans des regex blindés de conditions super complexes ?
J'imagine qu'on ne peut pas mettre de <blockquote> dans des <p> (ça me parait logique), ni des <div>; un <span> ne conviendrait évidemment pas.
Bref, je patauge un peu en quête d'une solution "simple et propre".

En résumé
Je cherche un moyen de faire des blocs de citations dans des balises <p>

PS: j'ai déjà envisagé de remplacer mes <p> par des <div> ayant les mêmes propriétés, ce qui me permettrait de pouvoir proprement y insérer d'autres <div>, mais d'un point de vue sémantique je ne trouve pas ça top.
Modifié par mOrbide (08 Jun 2007 - 09:01)
Bonjour,

La seule chose qui soit "sémantiquement pas top" dans l'affaire, c'est de vouloir utiliser des paragraphes là où ils ne sont pas pertinents, c'est à dire si le contenu est susceptible d'être autre chose que des éléments de phrases.

Donc div comme conteneur par défaut du corps de texte est parfaitement approprié si ce corps de texte est susceptible de contenir des éléments blockquote ou autres (je pense aux listes par exemple).

Sinon, certaines citations peuvent également être de simples éléments q, qui eux font partie du contenu valide des paragraphes.

div et blockquote, p et q: le choix dépendra de la marge de manoeuvre que l'on souaite laisser au rédacteur du contenu...
Modifié par Laurent Denis (08 Jun 2007 - 07:08)
Laurent Denis a écrit :
La seule chose qui soit "sémantiquement pas top" dans l'affaire, c'est de vouloir utiliser des paragraphes là où ils ne sont pas pertinents, c'est à dire si le contenu est susceptible d'être autre chose que des éléments de phrases.

Ce n'est pas faux, je ne l'avais pas vu comme ça. Merci pour cet éclaircicement Smiley smile
Laurent Denis a écrit :
div et blockquote, p et q: le choix dépendra de la marge de manoeuvre que l'on souaite laisser au rédacteur du contenu...

Exactement. Mais justement ici, la liberté est plutot restreinte mais en même temps pas minimaliste non plus...

Bon la solution des div semble donc être la plus logique.
Une question tout de même (toujours point de vue sémantique): est-ce correct si je donne à mon div exactement les mêmes propriétés qu'à mon p ? Et donc de me retrouver avec un résultat du genre
<div class="elmt">
   Des phrases.
   <div class="citation">
      Une citation
   </div>
   Des phrases.
   <ul>
      <li>Un élément</li>
      <li>Un autre élément</li>
   </ul>
   Des phrases encore.
</div>

Ou le fait que mes phrases soient dans du div et non dans du p est-il incorrect/imparfait (selon le niveau de purisme... xD) ?
<div class="elmt">
   Des phrases.


C'est un texte anonyme. Rien de dramatique, plus facile à produire sans doute, mais peu maniable pour la suite. Mieux vaudrait générer systématiquement des paragraphes balisant ces phrases dans la <div class="élmt">.


   <div class="citation">
      Une citation
   </div>


Non, pour le coup, div est très mal employé. blockquote est fait pour cela. Une contrainte à rappeler: en (X)HTML strict, blockquote ne pourra pas contenir de texte anonyme, mais uniquement des éléments de type paragraphe, listes, etc. Donc, le transitionnel sera sans doute plus adapté.
Laurent Denis a écrit :
<div class="elmt">
   Des phrases.


C'est un texte anonyme. Rien de dramatique, plus facile à produire sans doute, mais peu maniable pour la suite. Mieux vaudrait générer systématiquement des paragraphes balisant ces phrases dans la <div class="élmt">.

C'est clairement moins maniable par après. Je pense que je vais l'utiliser comme cela pour l'instant, et essayer de mettre au point un regex par après, afin de générer les p. Je viens de faire une recherche rapide, mais rien trouvé le définissant clairement.

Laurent Denis a écrit :

   <div class="citation">
      Une citation
   </div>


Non, pour le coup, div est très mal employé. blockquote est fait pour cela. Une contrainte à rappeler: en (X)HTML strict, blockquote ne pourra pas contenir de texte anonyme, mais uniquement des éléments de type paragraphe, listes, etc. Donc, le transitionnel sera sans doute plus adapté.

Aw... Donc (si j'ai bien compris) si quelqu'un cite un post dans lequel il y a du blabla et des listes etc, ça va être le bronx dans le blockquote si je n'ai pas correctement généré les p.
Bon ben je vais redéterrer mon formulaire de regex... Smiley bawling

Question de pur néophyte tout de même, avant de cloturer: qu'appelle-t-on du texte anonyme ? Un texte "non balisé" en ligne, flottant dans un bloc ?
Le texte anonyme est une expression dérivée en fait de CSS. Dans l'exemple ci-dessus, un moteur de rendu CSS doit générer une boîte de type bloc supplémentaire pour l'affichage du texte "Des phrases", bien que celui-ci ne soit pas spécifiquement balisé. Cette boîte n'étant pas déterminée par un élément HTML, elle est dite "anonyme" par la spécification.

Dans HTML, ces contenus sont une des différences majeures entre les déclinaisons strict (où ils sont invalides dans certains éléments comme body, form, blockquote) et transitional (où ils sont valides). L'idée étant de favoriser en strict un balisage aussi précis que possible.

Sinon, pour rebondir sur strict, transitional et cette question du balisage :

Disons qu'il est en général très difficile de parvenir à un balisage vraiment précis et significatif des "espaces publics" type news, forums, commentaires etc. Les rédacteurs:
- réclament une certaine liberté (faire autre chose que rentrer leur texte dans des champs complètement préformatés) et des outils tels que la citation, les listes, etc.
- mais ne vont pas nécessairement utiliser la syntaxe mise à leur disposition de manière pertinente (ma propre manière de faire systématiquement des listes à coups de simples tirets sur ce forum en est un bon exemple).

A moins de mettre en oeuvre un traitement assez lourd, il est donc prudent de les traiter en (X)HTML transitional, tout à fait adapté à cette problématique. C'est même une de ses raisons d'être Smiley cligne
Modifié par Laurent Denis (08 Jun 2007 - 08:31)
Hé bien je me coucherai (nettement) moins con.
Un grand merci pour tous ces éclaircicements Smiley smile

J'essaierai de repasser quand j'aurai mis au point mon regex.

Bonne journée, et encore merci !