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
не действуют.