XML (на български се произнася екс-ем-ел, от английски: Extensible Markup Language – екстензивен, широкообхватен маркиращ език) е стандарт (метаезик), дефиниращ правила за създаване на специализирани маркиращи езици, както и синтаксисът, на който тези езици трябва да се подчиняват. Сам по себе си той е безполезен, защото указва само как да бъде структуриран един документ (чрез маркиране с етикети), но не и какво означават отделните маркери (етикети). Ето защо е по-правилно да се нарече метаезик, отколкото език – обикновените езици имат семантика, т.е. предават някаква информация, докато XML указва само граматиката (по-точно синтаксиса) на езиците, базирани на него.
Ползата от XML се състои в това, че синтаксисът (структурирането) на документите се измисля само веднъж, а специализираните маркиращи езици само дефинират семантиката, т.е. набора от маркиращи етикети и тяхното значение. Другата изгода е, че XML прави възможно разработването на семантично агностични програмни средства, които могат да обработват всички XML базирани езици, дори и такива, които не са съществували по време на съставянето на софтуера. Тези програмни средства могат след това да се използват и в изработването на софтуер, който е написан за конкретен XML език. Или накратко – разделянето на синтаксиса от семантиката е поредното въплъщение на принципа „Разделяй и владей“.
XML е създаден като олекотена версия на SGML, целящ по-лесното му внедряване и налагане сред разработчиците. Създаден е от консорциума (World Wide Web Consortium) и съответно е добре пригоден за употреба в интернет пространството.
В XML информацията се маркира, като се загражда с етикети:
<name>Иван Димитров Георгиев</name>
Тук текстът Иван Димитров Георгиев е маркиран с етикет <name>, като по този начин е указано, че маркирания къс информация искаме да бъде разглеждан като едно цяло, имащо определено значение. Етикетите вървят по двойки – отварящ и затварящ, маркиращи съответно началото и края на маркирания текст.
Освен това етикетите могат да се влагат един в друг, така че да са получи йерархична организация на информацията:
<person>
<name>Иван Димитров Георгиев</name>
<country>България</country>
<language>български</language>
<language>руски</language>
</person>
По горния начин може да се маркира информация, свързана с отделни хора. В примера цялата информация е маркирана с етикет <person>
, тъй като се отнася за един човек.
Това, което XML указва, е как да бъдат използвани етикетите. Например всеки документ трябва да започва с коренов етикет, така че цялата информация ще бъде маркирана от поне един етикет. Друго правило е изискването етикетите да не се припокриват (кръстосват) като в следващия пример:
<person><name>Иван Димитров Георгиев</person></name>
Правилно е следното:
<person><name>Иван Димитров Георгиев</name></person>
Документ, който се подчинява на тези (и много други) правила, описани в XML-стандарта, се нарича добре оформен XML-документ. Това, че един документ е добре оформен, гарантира, че всички програми, написани според стандарта, ще могат да го манипулират така, както всички останали валидни XML-документи. Обикновено първата стъпка преди програмната обработка на един документ е проверката за оформеност. Има много широкодостъпни програмни средства, които извършват тази проверка.
Тъй като XML не се занимава със семантичната страна на документите, следният текст също е част от добре оформен XML-документ:
<name>
<person>България</person>
</name>
Вероятно е желателно етикетът <name>
да се среща само в <person>
етикет, но не и в <language>
етикет, тъй като с него е по-подходящо да се маркира име на човек. Също така ще е добре, ако държавата, в която живее човекът, бъде маркирана винаги с етикет <country>
, а не с някой друг.
Именно това е ролята на XML разширенията – да опишат допълнителни синтактични правила като това кои етикети къде могат да се срещат, както и да се изясни тяхната семантика (значение). Тези допълнителни синтактични правила са в тясна зависимост от семантиката на етикетите и по това се различават от общите XML правила. Описването им лесно може да се формализира, за която цел са създадени специални езици. Тези езици се наричат XML схеми (XML schemas) и задават допълнителните синтактични правила, на които трябва да отговаря документ, написан според някой от резширяващите XML стандарти.
Документи, които отговарят на правилата, описани в дадена XML схема, се наричат валидни. Валидните документи винаги са и добре оформени. Една от най-простите XML схеми е DTD (Document Type Definition – Дефиниция на документен тип). Схемата, на която отговаря XML документът, се посочва в началото му и следва определен от XML синтаксис:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Горният код показва, че документът е написан според стандарта на Web Consortium, XHTML 1.0 Transitional (който представлява разширение на XML). Формалността на описанието в XML схемите позволява проверката за валидност на документите да се автоматизира.
Втората задача на разширяващите стандарти – описване на семантиката – е по-трудна и обикновено се описва в изказен, полуформален текст, предназначен да бъде четен от хора (за разлика от XML схемите, които са формални и могат да се разбират от програмите). Спазването на семантиката е изцяло задължение на този, който съставя документа, и не може да бъде проверено от програма.
Това са маркиращи езици, които са написани според XML стандарта. Всеки такъв език може да се разглежда като подмножество на XML.
Има множество стандарти, които са създадени да работят в тясно сътрудничество с XML.