Согласно спецификации XML, это - определение пустого элемента:
Элемент без содержания, как говорят, пуст.] Представление пустого элемента является или начинать-тегом, сразу сопровождаемым конечным тэгом или пустым тегом элементов.
(см.: http://www.w3.org/TR/REC-xml/#NT-content)
Теперь, у меня нет проблемы при понимании пустых тегов элементов:
и никакое недоразумение не возможно. Но это кажется мне, стандарт противоречит себе в другом случае: с одной стороны, это говорит что любой тег без content
пусто, с другой стороны, это говорит, что это может быть представлено начинать-тегом, сопровождаемым сразу конечным тэгом. Но если мы смотрим на определение content
:
[43] content ::= CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*
Это кажется мне этим content
состоит из двух дополнительных частей, CharData?
и группа ()*
. Но так как обе этих части являются дополнительными, это означало бы, что ничто (как в, отсутствие символов) не соответствует этому производству. ТАКИМ ОБРАЗОМ, если я попытался бы соответствовать этому определению содержания к тому, что внутри
Я получил бы положительное совпадение. Так, с одной стороны, это - пустой тег, потому что это - "начинать-тег, сразу сопровождаемый конечным тэгом", с другой стороны, это не пусто, потому что между тегами я могу положительно соответствовать определению порождающего правила [43] для содержания, в этом случае это содержит содержание, что означает, что это не может быть пусто.
Кто-либо может объяснить, какие правила имеют приоритет? Кто-либо знает о каком-либо DOM или реализациях синтаксического анализатора, которые имеют различные мнения об этом?
Но поскольку обе эти части являются необязательными, это будет означать, что ничто (например, отсутствие символов) не соответствует этому продукту.
Это может быть правдой, но формулировка в спецификации по этому вопросу довольно ясна. В следующем абзаце есть даже примеры для пустых элементов.
<IMG align="left"
src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>
Таким образом, единственный способ (в данном контексте, с окружающей формулировкой и примерами) прочитать
Элемент без содержимого
- это включить «содержимое, которое (при сопоставлении с продукцией) полностью пустое» ( т.е. нулевой длины, даже не пробела).
<element />
и
<element></element>
оба являются пустыми элементами. Для получения такого результата необходимо интерпретировать любое производство по стандартам.