Количественная оценка семантического значения <p>в отличие от <div> - PullRequest
5 голосов
/ 19 ноября 2009

Я преобразовываю некоторый XML, который я не могу контролировать, в XHTML. Схема XML определяет тег <para> для абзацев и <unordered-list> и <ordered-list> для списков.

Часто в этом XML я нахожу списки, вложенные в абзацы. Таким образом, прямое преобразование заставляет <ul> s вкладываться в <p> s, что недопустимо в XHTML.

Я создал список способов справиться с этим, и вот наиболее очевидные из них:

  1. Только не беспокойся об этом. Браузеры будут в порядке. Какая разница. (Мне не нравится эта опция, но она есть!)
  2. Напишите в моем преобразовании модный компонент, который гарантирует, что все теги <para> будут закрыты до начала неупорядоченных списков и вновь открыты после. (Мне нравится этот вариант больше всего, но он сложен из-за нескольких уровней вложенности, и у нас может не быть бюджета для этого)
  3. Просто преобразуйте <para> в <div> и установите поля для элементов div, чтобы они выглядели как абзац в браузере. Это самое простое решение, которое выдает действительный XHTML, но оно берет из семантического значения разметки.

Мои вопросы:

  • Какую ценность я потеряю, если выберу вариант 3?
  • Это действительно имеет значение?
  • Какое реальное влияние на пользовательский опыт?
  • Если вы можете ссылаться на ссылки, сделайте это (на это легко спекулировать). Например, я думал, что это может повлиять на результаты поиска из Google Search Appliance, которое мы используем.
  • Если поисковые термины появляются в div, они имеют меньший вес?
  • Или между ними и предыдущими тегами заголовков меньше связи?

Как я могу это выяснить?

Ответы [ 3 ]

2 голосов
/ 19 ноября 2009

Я тоже с этим сталкивался.

Лично я считаю серьезной ошибкой часть стандарта в том, что p не может содержать списки. Я думаю, что это типично законно, поэтому оно должно быть законно в том, что изначально предназначалось для разметки текста.

Я могу быть за это пламенем, но XHTML рухнул и сгорел в реальном мире, независимо от того, была ли это хорошая идея или нет. Часто ужасный суп с тегами, который является современной разметкой HTML, будет существовать еще довольно долго, хотя бы потому, что плохая разметка и снисходительные браузеры будут продолжать увековечивать друг друга навсегда.

Таким образом, я склоняюсь к варианту 1.

Вариант 3 также жизнеспособен, на мой взгляд. Хотя у меня нет доказательств, я уверен, что ни одна поисковая система не настолько сумасшедшая, чтобы доверять большинству тегов форматирования, которые мы применяем к нашему HTML. Конечно, теги meta и a являются очевидными исключениями.

1 голос
/ 19 ноября 2009

Прежде всего, если вы не установите каждое свойство CSS, доступное сейчас, плюс каждое, возможно, доступное в будущем, то вы не сможете гарантировать, что ваш <div> будет соответствовать стилям WRT с <p>. (Хотя я согласен, что вы можете приблизиться, и это, вероятно, достаточно хорошо, но читайте дальше.) Я не знаю каких-либо визуальных браузеров или других инструментов, которые бы серьезно относились к ним по-разному, но это такой же артефакт, ИМХО текущей широко распространенной свободной интерпретации в сети, поскольку она близка по смыслу.

Является ли <ul> правильным преобразованием для каждого <unordered-list> в ваших исходных данных? Если они всегда отображаются как содержимое уровня блока вместо 1), 2) встроенного, 3) списка; тогда это безопасная ставка. Если это так, вы можете разбить абзац на два (и обернуть все это в <div>, если хотите).

Пример ввода:

<para>Yadda yadda: <unordered-list/> And so fin.</para>

Выход:

<div>
<p>Yadda yadda:</p>
<ul/>
<p>And so fin.</p>
</div>
0 голосов
/ 19 ноября 2009

Хорошей новостью является то, что любой из этих 3 вариантов будет работать.

На SO есть много-много людей, которые скажут вам, "если это работает, забудьте семантику и сделайте это". Так что Вариант 1 , вероятно, был бы фаворитом сайта, если бы всех здесь спросили.

Вариант 2 - мой фаворит, и он будет лучшим с точки зрения семантики. Я определенно сделал бы это, если бы время / бюджет позволяли.

Однако, Вариант 3 - это вторая секунда, и, надеюсь, это ответит на ваш вопрос: элемент <div> и элемент <p> практически идентичны. На самом деле, самая большая разница - это семантика. Каждый из них имеет только одно правило, примененное к ним в спецификации CSS большинства браузеров: display: block.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...