Czy dokumenty SVG obsługują niestandardowe atrybuty danych?

87

W HTML5 elementy mogą mieć dowolne metadane przechowywane w atrybutach XML, których nazwy zaczynają się od data-np <p data-myid="123456">. Czy to też jest część specyfikacji SVG?

W praktyce ta technika działa dobrze dla dokumentów SVG w wielu miejscach. Ale chciałbym wiedzieć, czy jest to część oficjalnej specyfikacji SVG, czy nie, ponieważ format jest na tyle młody, że nadal istnieje wiele niekompatybilności między przeglądarkami, zwłaszcza w telefonach komórkowych. Dlatego przed przystąpieniem do kodowania chciałbym wiedzieć, czy mogę oczekiwać, że przyszłe przeglądarki będą zgodne z obsługą tego.

Znalazłem tę wiadomość z listy dyskusyjnej grupy roboczej, mówiącą, że „oczekują, że [oni] będą” ją wspierać. Czy to stało się oficjalne?

Leopd
źródło

Odpowiedzi:

121

Podczas gdy inne odpowiedzi są poprawne technicznie, pomijają one fakt, że SVG zapewnia alternatywny mechanizm dla data-*. SVG pozwala na dołączenie dowolnego atrybutu i tagu , o ile nie koliduje z istniejącymi (innymi słowy: powinieneś używać przestrzeni nazw).

Aby użyć tego (równoważnego) mechanizmu:

  • użyj mydata:idzamiast data-myid, jak to:<p mydata:id="123456">
  • upewnij się, że zdefiniowałeś przestrzeń nazw w otwierającym tagu SVG, na przykład: <svg xmlns:mydata="http://www.myexample.com/whatever">

EDYCJA: SVG2 , obecnie rekomendacja kandydata W3C (04 października 2018), będzie obsługiwać data-bezpośrednio (bez przestrzeni nazw, tak samo jak HTML). Jednak minie trochę czasu, zanim wsparcie stanie się powszechne. Dzięki @cvrebert za wskazanie tego .

johndodo
źródło
7
Trzecia część równania: el.getAttribute('mydata:id')aby uzyskać dane dołączone do elementu SVG. (Uwaga: jeśli używasz d3, przestrzeń nazw zostanie domyślnie usunięta, a ty po prostu el.getAttribute('id').)
ericsoco
2
To powinna być akceptowana odpowiedź. SVG to rozszerzenie XML, które pozwala na używanie tagów z różnych przestrzeni nazw.
Melle,
1
Dlaczego przestrzeń nazw musi być niestandardowa? Dlaczego zadeklarowanie przestrzeni nazw HTML5 w dokumencie nie wystarczyłoby do użycia data-*w SVG?
Fabien Snauwaert
2
Do Twojej wiadomości, niezależnie od tego, czy używasz prywatnej przestrzeni nazw (np .:), czy przestrzeni <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>nazw xhtml, żadne z nich nie będzie sprawdzane na validator.w3.org/check (używając SVG 1.1), ale oba działają w przeglądarce. To wtedy można użyć jednej getAttributelub getAttributeNSpobrać dane.
Fabien Snauwaert
29

data-*Atrybut jest częścią HTML5. To nie jest ogólny atrybut XML.

Obecna rekomendacja SVG W3C to SVG 1.1 (od 2011-08). Nie zezwala na ten atrybut, ponieważ możesz sprawdzić listę atrybutów .

To samo dotyczy wersji roboczej SVG 2 (od 2012-08). Aktualizacja (2015) : Wygląda na to , że ma obsługiwać data-*atrybuty w SVG 2 (obecnie nadal robocza wersja robocza).

unor
źródło
19

data-*atrybuty elementów SVG są oficjalnie obsługiwane w bieżącej wersji roboczej SVG2. Widzieć:

cvrebert
źródło
9

istnieje bardziej ogólny mechanizm.

svg obsługuje descelementy, które mogą zawierać dowolny plik XML z innych przestrzeni nazw. połącz instancje tych elementów lub węzłów potomnych z własnej przestrzeni nazw za pomocą identyfikatorów zależnych lub atrybutów refid.

to jest odpowiednia część specyfikacji (5.4) .

zwijanie
źródło
1
Dzięki za wskazówkę. Czy powinienem wywnioskować, że SVG oficjalnie nie obsługuje data-atrybutów?
Leopd
2
Nie jest descprzeznaczony ze względu na dostępność?
matanster
@matt Nie sądzę, przynajmniej w oparciu o stabndard.
zwiastun
1
@matt Niekoniecznie. Afaik standard wspominałby tylko o celu adnotacji niezależnie od jakiegokolwiek renderowania. Nie jest to sprzeczne z przydatnością elementu do celu. W szczególności jest post na blogu omawiający użycie aria-labelledbyatrybutów i elementów opisu jako dostępnych etykiet. MDN zaleca podobne zastosowanie. biorąc pod uwagę mnogość wyników Google, najlepsze praktyki dotyczące dostępnych plików SVG mogą być warte własnego pytania,
collapsar
1
@RockyRoad: niezupełnie - specyfikacja SVG wyraźnie zezwala na takie atrybuty (w przeciwieństwie do na przykład HTML / XHTML, który tego nie robi). Zauważ również, że chociaż możesz (niewłaściwie) użyć descelementów ripowania dla dowolnych danych, (IMHO) jest dość oczywiste z linku, że nie było to zamierzone przeznaczenie descelementu. Nie mówię, że nie powinieneś tego robić, tylko że jest lepszy sposób.
johndodo