Кіріспе

Кездейсоқ деректерді кодтау үшін W3C ұсынған таңбалау тілі

Кейіңгі таңбалау тілі (XML) – кез келген деректерді сақтау, тарату және қайта құру үшін қолданылатын таңбалау тілі және файл форматы. Ол құжаттарды адам және машина оқи алатын форматта кодтау ережелерін анықтайды. 1998 жылғы World Wide Web Consortium ұсынған XML 1.0 спецификациясы және оған байланысты бірнеше спецификациялар – барлығы да ашық, тегін стандарттар – XML-ді анықтайды. XML-дің жобалау мақсаттары қарапайымдылық, жалпыламалық және Интернетте қолдануға ыңғайлы болуын баса назар аударады. Бұл мәтіндік дерек форматы, түрлі адам тілдерін қолдау үшін Unicode арқылы күшті қолдауға ие. XML дизайны құжаттарға бағытталған болғанымен, бұл тіл веб-қызметтерде қолданылатын сияқты кез келген дерек құрылымдарын көрсету үшін кеңінен қолданылады. XML-ге негізделген тілдерді анықтауға көмектесетін бірнеше схемалық жүйелер бар, сондай-ақ бағдарламашылар XML деректерін өңдеуге көмектесетін көптеген қолданбалық бағдарламалау интерфейстерін (API) жасады.

Шолу

XML-дің басты мақсаты – деректерді сақтау, тарату және қайта құру арқылы сериалдау, яғни кез келген мәліметті тіркеу. Екі түрлі жүйенің ақпарат алмасуы үшін олар файл форматы туралы келісімге келуі керек. XML осы процесті стандарттайды. Сондықтан, ол ақпаратты ұсыну үшін жасанды тілге (lingua franca) ұқсас. XML – деректерді белгілейтін, жіктейтін және құрылымдық түрде ұйымдастыратын таңбалау тілі. Оған RSS, Atom, Office Open XML, OpenDocument, SVG, COLLADA және XHTML кіреді. XML сондай-ақ SOAP және XMPP сияқты байланыс протоколдарының негізгі тілін қамтамасыз етеді. Бұл Асинхронды JavaScript және XML (AJAX) бағдарламалау әдісінде қолданылатын хабар алмасу форматтарының бірі. Денсаулық сақтау деңгейі 7, OpenTravel Alliance, FpML, MISMO және Ұлттық ақпарат алмасу моделі сияқты көптеген салалық дерек стандарттары XML-ге және XML схемасының мүмкіндіктеріне негізделген. Баспа саласында Дарвиннің ақпараттық типтеу архитектурасы – XML индустриясының дерек стандарты болып табылады. XML түрлі баспа форматтарын қолдау үшін кеңінен қолданылады. XML-дің қолданылуының бір мысалы – IWXXM стандарттарына сәйкес Операциялық метеорология (OPMET) ақпаратын беру.

Кейіпкерлер және қашу

XML құжаттары толығымен Юникод репертуарына жататын таңбалардан тұрады. Нақты бір шектеулі басқару таңбаларын қоспағанда, Юникодпен анықталған кез келген таңба XML құжатының мазмұнында болуы мүмкін. XML құжатты құрайтын Юникод таңбаларының кодталуын анықтауға және әлдебір себептермен тікелей қолданылмаған таңбаларды көрсетуге мүмкіндік береді.

Кодтауды анықтау

Юникод таңбалар жиынтығы сақтау немесе тарату үшін әртүрлі тәсілдермен байттарға түрлендіріле алады, бұл тәсілдер "кодтаулар" деп аталады. Юникод өзінің толық репертуарын қамтитын кодтауларды анықтайды; ең танымалдары – UTF-8 (XML стандарты BOM болмағанда оны пайдалануды ұсынады) және UTF-16. Юникодтан бұрын пайда болған көптеген басқа мәтіндік кодтаулар да бар, мысалы ASCII және түрлі ISO/IEC 8859; олардың таңба репертуарларының барлығы Юникод таңбалар жиынтығының ішкі жиынтықтары болып табылады. XML Юникодта анықталған кез келген кодтауды, сондай-ақ оның таңбалары Юникодта да кездесетін басқа кодтауларды қолдануға мүмкіндік береді. XML сонымен қатар XML процессорына алдын ала білмей-ақ қолданылып жатқан кодтауды сенімді түрде анықтауға мүмкіндік беретін механизмді ұсынады. UTF-8 және UTF-16 кодтауларынан басқа кодтаулар әр XML талдаушысымен міндетті түрде қолдау көрсетілмейді (ал кейбір жағдайларда тіпті стандарт оны қолдауды талап етсе де UTF-16 да қолдау көрсетілмейді).

Синтаксистік дұрыстық және қателерді өңдеу

XML-спецификациясы XML-құжатты жақсы қалыптасқан мәтін ретінде анықтайды, яғни ол спецификацияда келтірілген синтаксис ережелерінің тізімін қанағаттандырады. Бұл тізімдегі негізгі тармақтар: Құжатта тек дұрыс кодталған, заңды Unicode таңбалары болуы керек. < және & сияқты арнайы синтаксистік таңбалар, олардың белгілеу рөлдерін атқаратын кезде ғана пайда болады. Элементтерді шектеуге арналған бастау тегі, аяқтау тегі және бос элемент тегі дұрыс ұяластырылған болуы керек, ешқайсысы жоқ немесе бір-бірімен қабаттаспауы тиіс. Тегтердің атаулары әріптердің үлкендігі мен кішілігіне сезімтал; бастау тегі мен аяқтау тегі дәл сәйкес келуі керек. Тегтердің атауларында ! "#$%&' *+,/;<=>? @[\]^`{|}~ сияқты таңбалар мен бос орын болмауы керек, сондай-ақ олар " ", ". " немесе сандық санмен бастала алмайды. Барлық басқа элементтерді қамтитын жалғыз түбір элемент болуы керек. XML-құжатының анықтамасы жақсы қалыптасқандық ережелерін бұзатын мәтіндерді қамтымайды; олар жай ғана XML емес. Мұндай бұзушылыққа тап болған XML процессор осындай қателер туралы хабарлауға және қалыпты өңдеуді тоқтатуға міндетті. Бұл саясат, кейде "қатаң қателіктерді өңдеу" деп аталады, HTML-ді өңдейтін бағдарламалардың мінез-құлқынан ерекшеленеді, олар ауыр белгілеу қателері болған жағдайда да ақылға қонымды нәтиже беруге арналған. XML-дің бұл саладағы саясаты Постель заңының бұзылуы ретінде сынға ұшырады ("Жіберген нәрсеңде консервативті бол, ал қабылдаған нәрсеңде либералды бол"). XML-спецификациясы жарамды XML-құжатты, құжат түрін анықтау (DTD) ережелеріне сәйкес келетін, жақсы қалыптасқан XML-құжат ретінде анықтайды.

Схемалар мен растау

XML құжаты жақсы қалыптасқаннан өзге, жарамды да болуы мүмкін. Бұл құжатта құжат түрінің анықтамасы (DTD) бар екенін, оның элементтері мен атрибуттары сол DTD-да жарияланып, DTD-да белгіленген грамматикалық ережелерге сәйкес келетінін білдіреді. XML процессорлары XML құжаттарының жарамдылығын тексеруіне байланысты жарамды процессорлар және жарамсыз процессорлар деп жіктеледі. Жарамсыздық қатесін анықтаған процессор оны хабарлай алады, бірақ әдеттегі өңдеуді жалғастыра береді. DTD – схема немесе грамматиканың мысалы. XML 1.0 алғаш рет жарияланғалы бері XML үшін схема тілдері саласында көп жұмыс атқарылды. Мұндай схема тілдері әдетте құжатта қолданылатын элементтер жиынтығын, оларға қолданылатын атрибуттарды, олардың пайда болу ретін және рұқсат етілген ата-бала қатынастарын шектейді.

RELAX NG

RELAX NG (Regular Language for XML Next Generation) бастапқыда OASIS ұйымымен анықталды және қазір стандарт болып табылады (ISO/IEC 19757 – DSDL стандартының 2-бөлімі: тұрақты грамматикаға негізделген деректерді тексеру). RELAX NG схемаларын XML-ге негізделген синтаксис немесе XML-ге негізделмеген, ықшам синтаксис түрінде жазуға болады; екі синтаксис те изоморфты, ал Джеймс Кларктың Trang деп аталатын түрлендіру құралы оларды ақпаратты жоғалтпай бір-біріне ауыстыра алады. RELAX NG, XML схемасына қарағанда, анықтамасы мен деректерді тексеру жүйесі жайлырақ, сондықтан оны пайдалану және іске асыру оңай. Ол сонымен қатар дерек типінің қосымша модульдерін қолдану мүмкіндігіне де ие; мысалы, RELAX NG схемасын жасаушы XML құжатындағы мәндердің XML схемасы дерек типтерінің анықтамаларына сәйкес болуын талап ете алады.

Схематон

Schematron – XML құжатындағы белгілі бір үлгілердің болуын немесе болмауын растауға арналған тіл. Ол көбінесе XPath өрнектерін пайдаланады. Schematron қазір стандарт болып табылады (ISO/IEC 19757 – DSDL ережелерге негізделген валидациясының 3-бөлімі).

DSDL және басқа схема тілдері

DSDL (Document Schema Definition Languages) – бұл ISO/IEC стандартының (ISO/IEC 19757) көп бөлімді құралы, ол әрқайсысы нақты мәселелерге бағытталған шағын схема тілдерінің толық жиынтығын біріктіреді. DSDL құрамына RELAX NG толық және ықшам синтаксисі, Schematron нақтылау тілі, сондай-ақ дерек түрлерін, символдар жинағының шектеулерін, атауларды өзгерту және нысандарды кеңейту тілдері, және құжат фрагменттерін атау кеңістігі негізінде әртүрлі тексерушілерге бағыттау үшін тілдер кіреді. DSDL схема тілдері әлі XML схемаларына қолдау көрсетпейді және белгілі бір дәрежеде өнеркәсіптік баспагерлердің XML схемаларының басылымдар үшін тиімділігіне жауабы болып табылады. Кейбір схема тілдері белгілі бір XML форматының құрылымын ғана сипаттап қоймай, сонымен қатар осы форматқа сәйкес жеке XML файлдарын өңдеуге әсер етуге шектеулі мүмкіндіктер ұсынады. DTD және XSD-де мұндай мүмкіндік бар; мысалы, олар ақпараттық жиынтықты кеңейту және атрибуттарға әдепкі мәндер беру мүмкіндігін қамтамасыз етеді. RELAX NG және Schematron мұндай мүмкіндіктерді қасақана ұсынбайды.

Бағдарламалау интерфейстері

XML-дің жобалау мақсаттарының бірі – "XML құжаттарын өңдейтін бағдарламаларды жазу оңай болуы керек". Pull parsers-тың мысалдары: Perl-дегі Data::Edit::Xml, Java бағдарламалау тіліндегі StAX, Smalltalk-тағы XMLPullParser, PHP-дегі XMLReader, Python-дағы ElementTree.iterparse, Red-тегі SmartXML, .NET Framework-тегі System.Xml.XmlReader және DOM traversal API (NodeIterator және TreeWalker). Pull parser XML құжатындағы әртүрлі элементтерді, атрибуттарды және деректерді тізбектей кезегімен қарап шығатын итератор құрайды. Бұл итераторды пайдаланатын код ағымдағы элементті тексеріп (мысалы, бастапқы тег, соңғы тег немесе мәтін екенін анықтау үшін) оның атрибуттарын (жергілікті атауы, атау кеңістігі, XML атрибуттарының мәндері, мәтіннің мәні және т.б.) қарастыра алады, сондай-ақ итераторды келесі элементке жылжыта алады. Осылайша, код құжатты қарап шығу барысында одан ақпаратты алады. Рекурсивті түсу әдісі деректерді талдауды жүзеге асыратын кодтағы типтелген жергілікті айнымалылар түрінде сақтауға ыңғайлы, ал SAX, мысалы, талданатын элементтің басты элементтері болып табылатын элементтер тізімінде аралық деректерді қолмен сақтауды қажет етеді. Pull parsing кодын түсіну және күтіп ұстау SAX parsing кодына қарағанда оңайырақ болуы мүмкін.

Құжат объектісінің үлгісі

Document Object Model (DOM) - құжаттың мазмұнын көрсететін түйін объектілерінің ағашы ретінде қарастырылатын құжаттың барлық бөлімдерін шарлауға мүмкіндік беретін API. DOM құжатын талдағыш жасауға болады немесе пайдаланушылар қолмен (шектеулермен) құра алады. DOM түйіндеріндегі дерек түрлері абстрактілі болып табылады; іске асырулар өздерінің бағдарламалау тіліне қатысты байланыстарды ұсынады. DOM іске асырулар көбінесе көп жадты қажет етеді, себебі олар әдетте құжатты жадқа толығымен жүктеуді және қол жеткізуге рұқсат берілгенге дейін нысандар ағашы ретінде құруды талап етеді.

Деректерді бекіту

XML деректерін байлау – XML құжаттарымен жұмыс істеуді қажет ететін қосымшаларды дамытуды жеңілдететін техника. Ол DOM талдағышы құратын жалпы нысандарды пайдаланудың орнына, XML құжатын күшті типтелген нысандар иерархиясына бейімдеуді қамтиды. Соның нәтижесінде кодты оқу және қолдау оңайырақ болады, сондай-ақ, орындалу кезінде емес, компиляция кезінде мәселелерді анықтауға көмектеседі. XML деректерін байлау, әсіресе құжат құрылымы белгілі және қолданба жазылған кезде тоқталған жағдайларда тиімді. XML деректерінің күшті типтелген ұсынылымын жасау арқылы дамытушылар автоматты толықтыру, кодты қайта құру және кодты бөліп көрсету мүмкіндіктерін ұсынатын қазіргі заманғы интеграцияланған даму орталарын (IDE) пайдалана алады. Бұл дұрыс және тиімді кодты жазуды жеңілдетеді және қателер мен ақаулардың ықтималдығын азайтады. Деректерді байлау жүйелерінің мысалдары: Java Architecture for XML Binding (JAXB), .NET Framework-тегі XML сериализациясы және gSOAP-тағы XML сериализациясы.

XML дерек түрі ретінде

XML басқа тілдерде бірінші дәрежелі деректер түрі ретінде пайда болды. ECMAScript for XML (E4X) кеңейтуі ECMAScript/JavaScript тіліне екі арнайы нысанды (XML және XMLList) JavaScript үшін анықтайды, олар XML құжат түйіндері мен XML түйін тізімдерін жеке нысандар ретінде қолдайды және ата-бала қатынастарын белгілейтін нүктелік нотацияны пайдаланады. E4X Mozilla 2.5+ браузерлері (қазір тоқтатылған) және Adobe Actionscript қолдауымен қолдалады, бірақ кеңінен тараған жоқ. Осыған ұқсас нотациялар Microsoft NET 3.5 және одан жоғары нұсқаларындағы Microsoft LINQ және Scala (Java VM-ді пайдаланатын) жүйелерінде де қолданылады. XML-ді манипуляциялауға арналған арнайы мүмкіндіктері бар Linux сияқты қабық ұсынатын xmlsh ашық кодты қолданбасы да XML-ді деректер түрі ретінде қарастырады, <[ ]> нотациясын қолданады. Ресурсты сипаттау шеңбері rdf:XMLLiteral дерек түрін анықтайды, ол қапталған, канондық XML деректерін сақтауға арналған. Facebook PHP және JavaScript тілдеріне XHP және JSX деп аталатын кеңейтулер жасады, олар XML-ді E4X сияқты негізгі синтаксиске қосады.

Тарих

XML – SGML (ISO 8879) қолданбалық профилі. SGML-дің динамикалық ақпаратты көрсетудегі мүмкіндіктерін 1980-ші жылдардың соңында, Интернет пайда болғанға дейін, алғашқы цифрлық медиа баспагерлері түсінді. 1990 жылдардың ортасына қарай SGML-ді меңгерген мамандар жаңа Әлемдік желімен тәжірибе жинап, SGML веб-сайттың өсуімен байланысты туындауы мүмкін проблемаларды шешуге көмектеседі деп сенді. Дэн Коннолли 1995 жылы W3C штатына қосылғанда SGML-ді W3C қызметтерінің тізіміне қосты; жұмыс 1996 жылдың ортасында Sun Microsystems инженері Джон Босак жарғыны жасап, серіктестерді тартқан кезде басталды. Босак SGML және Желі саласында тәжірибесі бар адамдардың шағын қауымдастығымен байланыста болды. XML-ді он бір мүшеден тұратын жұмыс тобы құрастырды, оған (шамамен) 150 мүшелі Қызығушылар тобы қолдау көрсетті. Техникалық талқылаулар Қызығушылар тобының электрондық пошта тізімінде өтті, ал мәселелер консенсус арқылы немесе, ол мүмкін болмаған жағдайда, жұмыс тобының көпшілік дауысымен шешілді. Майкл Сперберг Маккуин 1997 жылдың 4 желтоқсанында жобалау шешімдері мен олардың негіздемелерін жинақтады. Джеймс Кларк жұмыс тобының техникалық жетекшісі болды, ерекше бос элемент синтаксисін (<empty />) және "XML" атауын енгізді. Талқылауға ұсынылған басқа атаулар "MAGMA" (Жалпыға таралған таңбалау қолданбалары үшін минималды архитектура), "SLIM" (Интернет таңбалауы үшін құрылымдалған тіл) және "MGML" (Минималды жалпыға таралған таңбалау тілі) болды. Анықтаманың бастапқы редакторы – Тим Брей және Майкл Сперберг Маккуин. Жобаның ортасында Брей Netscape компаниясымен консультациялық келісімге келді, бұл Microsoft компаниясының қарсылығын тудырды. Брейден редакторлық қызметтен уақытша бас тарту сұраныс жасалды. Бұл жұмыс тобында қарқынды пікірталасқа әкелді, нәтижесінде Microsoft-тың Жан Паоли үшінші редактор болып тағайындалды. XML жұмыс тобы негізінен электрондық пошта және апталық телеконференциялар арқылы байланысты. Басты жобалау шешімдері 1996 жылдың тамызы мен қарашасы аралығында, XML-дің бірінші жұмыс нұсқасы жарияланған кезде қабылданды. 1997 жылы жобалау жұмысы жалғасты, ал XML 1.0 1998 жылдың 10 ақпанында W3C ұсынысы болды.

1.0 және 1.1

Біріншісі (XML 1.0) 1998 жылы анықталды. Одан бері ол шағын түзетулерге ұшырады, жаңа нұсқа нөмірі берілмеді және қазіргі уақытта 2008 жылдың 26 қарашасында жарияланған бесінші басылымында. Ол кеңінен қолданылады және әлі де жалпы пайдалану үшін ұсынылады. Екіншісі (XML 1.1) бастапқыда 2004 жылдың 4 ақпанында, XML 1.0 үшінші басылымымен бірдей күні жарияланды және қазіргі уақытта 2006 жылдың 16 тамызында жарияланған екінші басылымында. Ол кейбір жағдайларда XML-ді пайдалануды жеңілдетуге арналған (кейбір дау тудыратын) мүмкіндіктерді қамтиды. Негізгі өзгерістер – EBCDIC платформаларында қолданылатын жол соңындағы символдарды және Unicode 3.2 стандартында жоқ жазулар мен символдарды пайдалануға мүмкіндік беру. XML 1.1 кеңінен қолданылмаған және оны пайдалануды тек оның ерекшеліктеріне мұқтаж адамдарға ғана ұсынуға болады. XML 1.0 бесінші басылымы шығар алдында, XML 1.1 элемент және атрибут атаулары мен бірегей идентификаторларда қолданылатын символдарға қатысты қатаң талаптарға ие болды: XML 1.0-дың алғашқы төрт басылымында символдар тек Unicode стандартының белгілі бір нұсқасын (Unicode 2.0-дан Unicode 3.2-ге дейін) пайдалана отырып тізімделді. Бесінші басылым XML 1.1 механизмін алмастырады, ол болашаққа бағытталған, бірақ артықшылықты азайтады. XML 1.0 бесінші басылымындағы және XML 1.1 барлық басылымдарында қолданылатын тәсіл – атауларда тек белгілі бір символдарға тыйым салынады, ал қалғандары болашақ Unicode нұсқаларындағы сәйкес атау символдарына рұқсат береді. Бесінші басылымда XML атауларында бали, чам немесе финикия жазуларындағы символдар болуы мүмкін, Unicode 3.2-ден кейін Unicode стандартына қосылған көптеген басқа жазулардың ішінде. XML 1.1 қолдайтын басқару символдарының арасында екі жол үзілу коды бар, олар бос орын символдары ретінде қарастырылуы керек, және олар тікелей жазылуы мүмкін жалғыз басқару кодтары.

2.0

XML 2.0 туралы әңгіме болды, бірақ ешқандай ұйым мұндай жобаға қатысты жұмыс жоспарларын жарияламады. XML SW (skunkworks үшін SW), XML-дің бастапқы әзірлеушілерінің бірі жазған, XML 2.0 қандай болуы мүмкін екендігіне қатысты бірнеше ұсыныстарды қамтиды, оның ішінде синтаксистен DTD-ді алып тастау, сондай-ақ XML атау кеңістіктерін, XML базасын және XML ақпараттық жиынтығын негізгі стандартқа енгізу.

MicroXML-тің түрі

2012 жылы Джеймс Кларк (XML жұмыс тобының техникалық жетекшісі) және Джон Кован (XML 1.1 спецификациясының редакторы) W3C ішінде MicroXML Community Group қауымдастығын құрып, XML-дің айтарлықтай қысқартылған, маңызды бөлігі үшін спецификация жариялады.

Бинарлық XML

World Wide Web Consortium-да XML Information Set-тің екілік кодтамасының қолданылу аясы мен ерекшеліктерін алдын ала зерттейтін XML екілік сипаттама жұмыс тобы жұмыс істейді. Бұл жұмыс тобының ресми стандарттарды жасауға міндеті жоқ. XML анықтама бойынша мәтіндік форматта болғандықтан, ITU T және ISO өздерінің екілік форматын (ITU T Rec. X.891 және ISO/IEC 24824 1) шатастырудың алдын алу үшін Fast Infoset деп атап жүр.

Сын

XML және оның кеңейтімдері көлемділігі, күрделілігі және артық айтылуы үшін жиі сынға ұшырайды. XML-дің негізгі ағаш моделін бағдарламалау тілдерінің немесе дерекқорының типтік жүйелеріне бейімдеу қиын болуы мүмкін, әсіресе XML жоғары құрылымды деректерді қолданбалар арасында алмасу үшін қолданылғанда, бұл оның бастапқы жобалау мақсаты емес еді. Дегенмен, XML деректерді байланыстыру жүйелері қолданбаларға деректерді XML-дің тікелей бейнелеуінен деректерді алу үшін DOM немесе SAX пайдаланудың орнына, қолданылатын бағдарламалау тіліндегі деректер құрылымын көрсететін объектілерден тікелей қол жеткізуге мүмкіндік береді, бұл типтік қауіпсіздікті қамтамасыз етеді. Бұл құжаттың XML схемасы XSD элементтері мен жадыда көрсетілетін сынып мүшелері арасында автоматты түрде бейімдеу жасау арқылы жүзеге асырылады. Басқа сыншылар XML өзін-өзі сипаттайтын тіл деген пікірді жоққа шығаруға тырысады (бірақ XML спецификациясының өзі мұндай пікір білдірмейді). JSON, YAML және S Expressions жиі қарапайым балама ретінде ұсынылады (деректерді тізбелеу форматтарын салыстыру қараңыз), олар құжаттар емес, жоғары құрылымды деректерді көрсетуге баса назар аударады, себебі құжаттар жоғары құрылымды және салыстырмалы түрде құрылымсыз мазмұнның екеуін де қамтуы мүмкін. Алайда, W3C стандарттаған XML схемасының спецификациялары қарапайым тізбелеу форматтарымен салыстырғанда, құрылымды XSD дерек түрлерінің кең ауқымын ұсынады және модульділік пен XML атау кеңістіктері арқылы қайта пайдалану мүмкіндігін береді.