Есть ли такая вещь, как действительный фрагмент HTML5?

StackOverflow https://stackoverflow.com/questions/4133503

  •  30-09-2019
  •  | 
  •  

Вопрос

Я, очевидно, не могу определить, действителен ли фрагмент 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)
Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top