HTML 5, встроенный SVG и понимание пространства имен для SVG DOM

Следующие вопросы меня путают. Я знаю, что они связаны, но...

  • Известно ли пространство имен HTML 5 (для включения тегов SVG/других диалектов XML)?
  • Если это не так, то как насчет этого -

    Я прочитал эту старую ссылку, но я совершенно смущен... потому что Mozilla говорит: "Чтобы динамически изменять встроенный SVG, необходимо выполнить скриптинг this way" - так, наконец, как я могу динамически изменять встроенный SVG (если HTML 5 не является пространством имен)?

  • Или страница должна обслуживаться как (X) HTML 5?


Подробности -
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>hello-SVG</title>
</head>
<body>
    <svg width="200" height="200">
        <rect x="0" y="0" width="100" height="100" fill="blue"></rect>
    </svg>
</body>
</html>

Вышеприведенный код - это правильный способ визуализации rect (используя SVG) в HTML 5. Теперь, чтобы изменить SVG с помощью JavaScript, Mozilla рекомендует использовать этот API. И мой вопрос: в чем смысл, если HTML 5 не является пространством имен? В таких случаях браузеры автоматически переключаются на (X) HTML 5?

Я прочитал этот комментарий к SO, и я нахожу его ближе всего к ответу, который я ищу -

Я предполагаю, что ситуация с HTML 5 SVG в основном "SVG без пространства имен получает пространство имен, добавленное во время разбора (но после этого это просто как (X) HTML раньше)".

Ответы

Ответ 1

HTML5 определяет HTML, XHTML и DOM.

DOM - это пространство имен. Когда вы используете методы DOM, вы должны учитывать, какое пространство имен находится в каждом элементе, но по умолчанию это пространство имен HTML (http://www.w3.org/1999/xhtml).

HTML и XHTML - это сериализации, которые преобразуются в DOM посредством парсинга.

XHTML - это пространство имен, а документы XHTML применяют пространства имен в соответствии с правилами XML, поэтому все пространства имен должны быть назначены каждому элементу явно. XHTML преобразуется в DOM с использованием анализатора XML.

HTML также является пространством имен, но пространства имен назначаются неявно. HTML преобразуется в DOM с помощью парсера HTML, который знает, какие элементы входят в пространство имен. То есть, он знает, что <div> идет в пространстве имен http://www.w3.org/1999/xhtml и что <svg> идет в пространстве имен http://www.w3.org/2000/svg. Элементы типа <script> могут находиться в пространстве имен http://www.w3.org/1999/xhtml или http://www.w3.org/2000/svg в зависимости от контекста, в котором они отображаются в HTML-коде.

Анализатор HTML знает о HTML elements, SVG elements и MathML elements и других. Нет возможности использовать элементы из других пространств имен, неявно или явно. То есть атрибуты xmlns не действуют.