Есть ли такая вещь, как действительный фрагмент HTML5? - PullRequest
5 голосов
/ 09 ноября 2010

Я, очевидно, не могу определить, является ли фрагмент HTML действительным, не зная, как выглядит остальная часть документа (как минимум, мне понадобится тип документа, чтобы узнать, против каких правил я проверяю). Но учитывая следующий фрагмент HTML5:

<article><header></article>My header</header><p>My text</p></article>

Я, конечно, могу определить, что это неверно , не видя остальную часть документа. Итак, существует ли такая вещь, как «временно действительный» HTML или «действительный, если он вписывается в определенное место в действительном документе»?

Есть ли что-то еще, кроме следующего псевдокода?

def is_valid_fragment(fragment):
 tmp = "<!doctype html><html><head><title></title></head><body>" + fragment + "</body></html>"
 return my_HTML5_validator.is_valid_html5_document(tmp)

Ответы [ 2 ]

4 голосов
/ 09 ноября 2010

Вы, конечно, можете говорить о XML документах с правильной формой , и вы можете создать документ из любого отдельного элемента и его дочерних элементов. Таким образом, вы могли бы говорить о правильном формировании однокорневых фрагментов XHTML5. Вы можете иметь дело с многокорневым фрагментом (например, <img/><img/>), рассматривая его как последовательность документов или помещая его в какой-то синтетический контейнерный элемент - поскольку мы говорим только о корректной форме, это было бы хорошо.

Однако HTML5 по-прежнему допускает самозакрывающиеся теги SGML, такие как <hr> и т. Д., Самозакрытие которых можно определить только путем обращения к типу документа. Например, <div><hr></div> - это хорошо, а <div><tr></div> - нет. Если бы вы имели дело с узлами DOM, а не с текстом в качестве входных данных, это было бы не выпуском, но если у вас есть текст, вам понадобится парсер, который знает достаточно о HTML, чтобы иметь возможность работать с этими элементами. Помимо этого, однако, некоторых очень простых правил, взятых непосредственно из XML, было бы достаточно для правильной обработки.

Если вы хотите выйти за рамки правильности и взглянуть на некоторые аспекты достоверности , я думаю, вы все еще можете сделать это на уровне фрагментов с единым корнем с помощью XML. Как сказано в спецификации:

XML-документ действителен, если с ним связано объявление типа документа и если документ соответствует выраженным в нем ограничениям.

DTD может назвать любой элемент корневым, и механики затем позаботятся о проверке отношений между этим элементом и его дочерними элементами, их дочерними элементами и т. Д., А также различными другими ограничениями, составляющими действительность.

Опять же, вы можете перенести эту идею прямо в HTML. Однако я не знаю, как вы справляетесь с фрагментами с множественными корнями. И имейте в виду, что некоторые ограничения на весь документ (например, уникальные идентификаторы) могут сохраняться внутри фрагмента, но не в другом действительном документе после вставки в него фрагмента.

0 голосов
/ 09 ноября 2010

Вы можете проверить, правильно ли он сформирован.

...