Поддерживают ли документы SVG пользовательские атрибуты данных?

В HTML5 элементы могут иметь произвольные метаданные, хранящиеся в XML-атрибутах, имена которых начинаются с data-, например <p data-myid="123456">. Это тоже часть спецификации SVG?

На практике этот метод отлично работает для документов SVG во многих местах. Но я хотел бы знать, входит ли он в официальную спецификацию SVG или нет, потому что формат достаточно молод, и между браузерами все еще существует много несовместимостей, особенно в мобильных устройствах. Поэтому, прежде чем приступать к коду, я хотел бы знать, могу ли я ожидать, что будущие браузеры будут поддерживать это.

Я нашел это сообщение в списке рассылки рабочей группы, в котором говорится, что они "ожидают [они ] будет" поддерживать его. Это стало официальным?


person Leopd    schedule 20.03.2013    source источник


Ответы (4)


Хотя другие ответы технически правильны, они не учитывают тот факт, что SVG предоставляет альтернативный механизм для data-*. SVG позволяет включать любые атрибуты и теги, если они не не конфликтуют с существующими (другими словами: вы должны использовать пространства имен).

Чтобы использовать этот (эквивалентный) механизм:

  • используйте mydata:id вместо data-myid, например: <p mydata:id="123456">
  • убедитесь, что вы определили пространство имен в открывающем теге SVG, например: <svg xmlns:mydata="http://www.myexample.com/whatever">

EDIT: SVG2, в настоящее время является кандидатом в рекомендации W3C (4 октября 2018 г.) , будет поддерживать data- напрямую (без пространств имен, как в HTML). Однако пройдет некоторое время, прежде чем поддержка станет широко распространенной. Спасибо @cvrebert за указание на это.

person johndodo    schedule 28.11.2013
comment
Третья часть уравнения: el.getAttribute('mydata:id') для получения данных, прикрепленных к элементу SVG. (Примечание: если вы используете d3, пространство имен будет удалено по умолчанию, и вы просто el.getAttribute('id').) - person ericsoco; 27.02.2016
comment
Это должен быть принятый ответ. SVG — это расширение XML, позволяющее использовать теги из разных пространств имен. - person Melle; 04.07.2016
comment
Почему пространство имен должно быть настраиваемым? Почему недостаточно объявить пространство имен HTML5 в документе, чтобы использовать data-* в SVG? - person Fabien Snauwaert; 13.02.2017
comment
К вашему сведению, независимо от того, используется ли частное пространство имен (например: <svg xmlns="http://www.w3.org/2000/svg" xmlns:mydata="http://www.myexample.com/whatever"><text x="10" y="20" mydata:id="something">SVG</text></svg>) или пространство имен xhtml, ни одно из них не будет проверяться на validator.w3.org. /check (используя SVG 1.1), но оба работают в браузере. Затем можно использовать либо getAttribute, либо getAttributeNS для получения данных. - person Fabien Snauwaert; 22.02.2017

data-* является частью HTML5. Это не общий XML-атрибут.

Текущая рекомендация SVG W3C: SVG 1.1 (от 2011-08). Этот атрибут не разрешен, так как вы можете проверить его в списке атрибутов. .

то же самое относится и к Рабочий проект SVG 2 (от 2012-08). Обновление (2015 г.): кажется, что оно предназначено для поддержка атрибутов data-* в SVG 2 (в настоящее время все еще находится в стадии разработки).

person unor    schedule 22.03.2013


есть более общий механизм.

svg поддерживает элементы desc, которые могут содержать произвольный xml из других пространств имен. связать экземпляры этих элементов или дочерних узлов из вашего собственного пространства имен с помощью зависимых идентификаторов или атрибутов refid.

это важная часть спецификации (5.4).

person collapsar    schedule 22.03.2013
comment
Спасибо за указатель. Должен ли я сделать вывод, что SVG официально не поддерживает атрибуты data-? - person Leopd; 22.03.2013
comment
Разве desc не предназначено для доступности? - person matanster; 30.04.2014
comment
@matt Я так не думаю, по крайней мере, исходя из стабндарда. - person collapsar; 01.05.2014
comment
@матовый Не обязательно. Afaik, в стандарте будет упоминаться только цель аннотации независимо от какого-либо рендеринга. Это не противоречит пригодности элемента для этой цели. В частности, есть запись в блоге, в которой обсуждается использование атрибутов aria-labelledby и элементов desc в качестве доступных меток. MDN рекомендует аналогичное использование. учитывая множество результатов Google, лучшие практики для доступного svg могут стоить отдельного вопроса, - person collapsar; 01.05.2014
comment
+1. Хотя предложение johndodo (использование пользовательского пространства имен) может быть лучше для предоставления функции, подобной набору данных, это функция XML, а не SVG. Использование desc было бы проще для комментария общего назначения. - person RockyRoad; 11.02.2016
comment
@RockyRoad: не совсем - спецификация SVG явно разрешает такие атрибуты (в отличие, например, от HTML/XHTML, которые этого не делают). Также обратите внимание, что, хотя вы можете (неправильно) использовать элементы description для произвольных данных, из ссылки (ИМХО) совершенно очевидно, что это не было предполагаемой целью элемента desc. Не говорю, что вы не должны этого делать, просто есть лучший способ. - person johndodo; 12.07.2016