Scalable Vector Graphics
(скорочено SVG) (з англ.
масштабована векторна граф?ка
) ? специф?кац?я
мови розм?тки
, що базу?ться на
XML
, та
формат файл?в
для двом?рно? векторно? граф?ки, як статично?, так ?
ан?мовано?
та ?нтерактивно?. SVG може бути виключно декларативним, або м?стити описи сценар??в. Зображення можуть м?стити зовн?шн? л?нки шляхом застосування простих
XLink
-?в.
[2]
Ця специф?кац?я ? в?дкритим стандартом, розробленим робочою групою
англ.
SVG Working Group
орган?зац??
World Wide Web Consortium
.
SVG був розроблений робочою групою W3C SVG Working Group, починаючи в?д
1998
, п?сля того як
Macromedia
та
Microsoft
ввели
Vector Markup Language
(VML), ? водночас
Adobe Systems
та
Sun Microsystems
представили конкуруючий формат
PGML
. Робочу групу очолив Chris Lilley з W3C.
- SVG 1.0 набув статусу рекомендац?? W3C 4 вересня 2001.
[3]
- SVG 1.1 став рекомендац??ю W3C 14 с?чня 2003.
[4]
Специф?кац?я SVG 1.1 ма? модульну структуру, щоб дозволити реал?зовувати п?дмножину формату в проф?лях. Кр?м цього, м?ж SVG 1.1 та SVG 1.0 дуже мало в?дм?нностей.
- SVG Tiny та SVG Basic (Моб?льний проф?ль SVG) стали рекомендац??ю W3C водночас, 14 с?чня 2003. Вони описан? як проф?л? SVG 1.1.
- SVG Tiny 1.2 став кандидатом в рекомендац?? W3C 10 серпня 2006.
[5]
[6]
, ? оф?ц?йною рекомендац??ю W3C ? 22 грудня 2008
[7]
. SVG Full 1.2 ? робочим нарисом (W3C Working Draft). SVG Tiny 1.2 спочатку був випущений як проф?ль, але п?зн?ше перероблений у повноц?нну специф?кац?ю, включаючи вс? необх?дн? частини в?д SVG 1.1 та SVG 1.2. SVG 1.2 Full дода? модул? всередину ядра SVGT 1.2.
- SVG Print дода? багатостор?нков? документи ? обов'язкову п?дтримку управл?ння кольорами.
Microsoft
при?дналася до W3C SVG Working Group на початку 2010 року
[12]
, п?сля тривалих вагань стосовно власницьких р?шень ? конкуруючих р?шень в царин? вебграф?ки.
- Текстовий формат ? файли SVG можна читати ? редагувати за допомогою звичайних текстових редактор?в. Працювати з SVG без засоб?в в?зуального програмування не складн?ше н?ж з
HTML
. При прогляданн? документ?в SVG, що м?стять граф?ку, ? доступ до проглядання коду файлу, що прогляда?ться, ? можлив?сть збереження всього документу. Кр?м того, SVG файли зазвичай виходять меншими за розм?ром, н?ж пор?внянн? за як?стю зображення у форматах
JPEG
або
GIF
, а також добре п?ддаються стисненню.
- Масштабован?сть ? SVG ? векторним форматом. ?сну? можлив?сть зб?льшити будь-яку частину зображення SVG без втрати якост?. Додатково, до елемент?в SVG документу можливо застосовувати ф?льтри ? спец?альн? модиф?катори для створення ефект?в, под?бних вживаним при обробц? растрових зображень (розмиття, витискування, складн? системи трансформац?? тощо). В текст? SVG-коду ф?льтри описуються тегами, в?зуал?зац?ю яких забезпечу? зас?б перегляду, що не вплива? на розм?р початкового файлу, забезпечуючи при цьому необх?дну ?люстративну виразн?сть.
- Широко доступне використання растрово? граф?ки в SVG документах. ? можлив?сть вставляти елементи ?з зображеннями у форматах
PNG
,
GIF
або
JPG
.
- Текст в граф?ц? SVG ? текстом, а не зображенням, тому його можна вид?ляти ? коп?ювати, в?н ?ндексу?ться пошуковими машинами, не потр?бно створювати додатков? метафайли для пошукових сервер?в.
- Ан?мац?я
реал?зована в SVG за допомогою мови
SMIL
(Synchronized Multimedia Integration Language), розроблено? також консорц?умом
W3C
. П?дтримуються
скриптов? мови
на основ? специф?кац??
ECMAScript
. SVG-елементами можна керувати за допомогою
JavaScript
.
Застосування
скрипт?в ? ан?мац?? в SVG дозволя? створювати динам?чну ? ?нтерактивну граф?ку. У SVG забезпечу?ться под??ва модель, в?дстежуються под?? (завантаження стор?нки, зм?на ?? параметр?в, под?? миш?, клав?атури тощо). Ан?мац?я може запускатися по певн?й под?? (наприклад ≪onmouseover≫ або ≪onclick≫), що дода? граф?ц? ?нтерактивн?сть. У кожного елементу ? сво? власн? под??, до яких можна прив'язувати окрем? скрипти.
- SVG ? в?дкритий
стандарт
. На в?дм?ну в?д деяких ?нших формат?в, SVG не ? чи?юсь власн?стю.
- SVG документи легко ?нтегруються з
HTML
?
XHTML
документами. Зовн?шн? SVG п?дключаються через тег <embed>, значення атрибуту src ?м'я файлу з розширенням ≪.svg≫, що м?стить розм?тку SVG. Атрибути width ? height визначають розм?ри област? SVG по горизонтал? ? по вертикал?. Елементи SVG сум?сн? з
HTML
?
DHTML
.
- Сум?сн?сть з
CSS
(
англ.
Cascading Style Sheets
). В?дображенням (форматуванням ? декоруванням) SVG елемент?в можна управляти за допомогою таблиц? стил?в CSS 2.0 ? ?? розширень, або безпосередньо за допомогою атрибут?в SVG елемент?в.
SVG нада? вс? переваги
XML
:
- Можлив?сть роботи в р?зних середовищах.
- ?нтернац?онал?зац?я (п?дтримка
Юн?коду
).
- Широка доступн?сть для р?зних застосувань.
- Легка модиф?кац?я через стандартн?
API
? наприклад,
DOM
. SVG п?дтриму? стандартизовану W3C об'?ктну модель документу DOM, забезпечуючи доступ до будь-якого елементу, що да? широк? можливост? з динам?чно? модиф?кац?? елемент?в, ?хн?х атрибут?в ? под?й.
- Легке перетворення таблицями стил?в
XSLT
. Як будь-який заснований на
XML
формат, SVG да? можлив?сть використовувати для його обробки таблиц? трансформац?? (XSLT). Перетворюючи XML-дан? в SVG за допомогою простого XSL, можна легко отримати граф?чне представлення будь-яких даних, наприклад в?зуал?зувати х?м?чн? молекули, описаних на мов? CML (Chemical Markup Language).
Перший рядок ? стандартний заголовок XML, оголошення (
англ.
XML declaration
), який вказу? верс?ю XML (version) (зазвичай ≪1.0≫) ? кодування символ?в (encoding) (бажано використовувати
Юн?код
кодування
UTF-8
або
UTF-16
, але ?нш? так само допустим?, наприклад,
Windows-1251
?
KOI-8
):
<?xml version="1.0" encoding="UTF-8"?>
У другому ? третьому рядках повинен розташовуватися заголовок DOCTYPE, що визнача? тип документа (Document Type Definitions)
DTD
:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
На жаль, в деяких випадках при застосуванн?
Mozilla Firefox
з вбудованим переглядачем SVG, зм?ст оголошення DOCTYPE може бути джерелом помилок. ? рекомендац?? не використовувати декларац?ю DOCTYPE в SVG верс?й 1.0 ? 1.1. Натом?сть рекомендовано включати атрибут baseProfile в кореневий елемент <svg> з? значенням ≪full≫
[13]
. Якщо з якихось причин декларац?я DOCTYPE в документ? необх?дна, рекомендовано використовувати порожню декларац?ю, як в приклад?.
<!DOCTYPE svg [
<!-- ваш? дан? -->
]>
У четвертому рядку, розм?щу?ться кореневий елемент документа з вказ?вкою простору ?мен SVG
<svg
version =
"1.1"
baseProfile=
"full"
xmlns =
"http://www.w3.org/2000/svg"
xmlns:xlink =
"http://www.w3.org/1999/xlink"
xmlns:ev =
"http://www.w3.org/2001/xml-events"
height =
"100%"
width =
"100%"
>
</svg>
Дал? йде решта тексту документа, вкладена в кореневий елемент, де власне розташовуються елементи, що описують зм?ст кодовано? сцени. Завершу?ться документ завжди закриттям кореневого тегу
</svg>
.
Простий статичний документ SVG (м?стить: контур
квадрата
розм?ром 400
п?ксел?в
? три нап?впрозор?
кола
рад?усом
100 п?ксел?в, по центру квадрата, кожне коло зм?щу?ться в?д центру квадрата приблизно на п?в рад?усу).
Для в?дображення малюнку потр?бний браузер з вбудованим переглядом формату чи з? встановленим плаг?ном.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<svg
version =
"1.1"
baseProfile=
"full"
xmlns =
"http://www.w3.org/2000/svg"
xmlns:xlink =
"http://www.w3.org/1999/xlink"
xmlns:ev =
"http://www.w3.org/2001/xml-events"
height =
"400px"
width =
"400px"
>
<rect
x=
"0"
y=
"0"
width=
"400"
height=
"400"
fill=
"none"
stroke=
"black"
stroke-width=
"5px"
stroke-opacity=
"0.5"
/>
<g
fill-opacity=
"0.7"
stroke=
"black"
stroke-width=
"0.5px"
>
<circle
cx=
"200px"
cy=
"200px"
r=
"100px"
fill=
"red"
transform=
"translate( 0,-50)"
/>
<circle
cx=
"200px"
cy=
"200px"
r=
"100px"
fill=
"blue"
transform=
"translate( 70, 50)"
/>
<circle
cx=
"200px"
cy=
"200px"
r=
"100px"
fill=
"green"
transform=
"translate(-70, 50)"
/>
</g>
</svg>
Оск?льки код SVG займа? досить багато м?сця, була створена ≪обгортка≫ SVGZ, коли файл SVG упаковують в
gzip
, а отриманому арх?ву зазвичай надають розширення ≪SVGZ≫.
SVG добре стиска?ться
[14]
, оск?льки це текстовий XML-документ, що ма? регулярну структуру.