XML

Из Википедије, слободне енциклопедије
Веб стандарди
Стандарди
Организације

XML је стандардни скуп правила за дефинисање формата података у електронској форми. Прописан је од стране W3C. Следећи правила XML стандарда, корисници дефинишу сопствене (XML) формате података, које могу користити за њихово складиштење, обраду и размену.

XML је скраћеница за Extensible Markup Language, односно прошириви (мета) језик за означавање (енгл. markup) текстуалних докумената. Идеја је била да се створи језик који ће и људи и рачунарски програми моћи једноставно да читају. XML дефинише општу синтаксу за означавање података помоћу одговарајућих етикета (енгл. tags) које имају познато или лако разумљиво значење. Формат који обезбеђује XML за рачунарске елементе може се прилагодити најразличитијим областима, као што су електронска размена података, чување података, одвајање података од презентације, векторска графика, системи гласовне поште, израда нових специјализованих језика за означавање.

Пошто се сви XML формати података креирају следећи исти скуп правила, могуће је направити универзалне алате за њихову обраду. Тако постоји велики број бесплатних библиотека на различитим језицима на којима се може писати и читати XML, а могу се употребити и готови софтвери (као што су програми за обраду текста или читачи веба). Неке алатке могу да раде са свим XML документима, док су друге прилагођене за подршку XML апликацијама у различитим областима, али се увек користи иста синтакса. Многи формално дефинисани језици за означавање, као што су RSS, MathML, GraphML, XHTML, Scalable Vector Graphics, MusicXML и сл. базирани су на XML-у.

XMLомогућава стварање дуготрајних формата података који су независни од платформе. Често се документи писани на једној платформи не могу читати на другим платформама, нити у различитим програмима на истој платформи, чак ни у ранијој верзији једног програма на истој платформи. У XML документима текстуални су не само подаци већ и етикете које су смештене у самој XML датотеци. То значи да их може читати свака алатка која је у стању да чита текстуалне датотеке. Тако се подаци могу преносити са једног система на други. Тако XML даје преносиве податке.

XML-ова основна сврха је да олакша дељење података кроз различите информационе системе, посебно кроз оне системе који су повезани са Интернетом.

Историја[уреди]

Шездесетих година 20. века, због проблема са великом количином различите техничке документације, у IBM-у се јавља идеја за стварањем првог шире коришћеног језика за означавање података. Тако настаје GML (Generalized Markup Language), који су изумели Чарлс Голдфарб, Ед Мошер и Реј Лори (Charles Goldfarb, Ed Mosher, Ray Lorie).

Пошто се GML показао као успешан, настављен је развој у том смеру, за шта је заслужно више стотина људи широм света. Језик који је настајао требало је да буде довољно формализован да може да гарантује верност докумената, довољно структуриран да може да оперише и комплексним документима, и довољно отворен да може подржати руковање великим количинама података. Овај језик назван је SGML (Standard Generalize Markup Language), који је 1986. ISO прихватио као стандард 8879.

Тим Бернерс Ли (Tim Berneres Lee) изабрао је мали скуп етикета из SGML-а и применио их на форматирање докумената. Тако настаје HTML (HyperText Markup Language), који је примењени SGML. HTML је имао коначан скуп етикета које су описивале основне делове докумената. Али, пошто је намењен за израду веб страница, није подесан за употребу изван ове области. Због тога је SGML употребљаван за друге апликације које користи интернет, а нису просте веб странице.

Главни недостатак SGML-а била је изузетна компликованост; био је опширан, сложен за коришћење и скуп у употреби. Зато није био много раширен, и корисници SGML-а биле су углавном велике компаније, научне институције и државне службе. Због тога су 1996. године Џон Бозак, Тим Бреј, Сперберг-Меквин, Џејмс Кларк (Jon Bosak, Tim Bray, C. M. Sperberg-McQueen, James Clark) и други почели рад на упрошћеној верзији SGML-а, која је изоставила његове сувишне, збуњујуће и некорисне елементе, али задржала велики део његове функционалности. На почетку свог рада, одредили су десет циљева којих су се придржавали у току развоја XML-а:

  • XML мора бити директно применљив преко интернета;
  • XML мора подржавати широк спектар примена;
  • XML мора бити компатибилан са SGML-ом;
  • XML мора лако писати програме који процесирају XML документе;
  • број опционих могућности (енгл. feature) у XML-у мора бити апсолутно минималан, а у идеалном случају једнак нули;
  • XML документи морају бити читљиви људима и у разумној мери једноставни;
  • стандард мора бити спецификован што пре;
  • дизајн XML-а мора бити формалан и прецизан;
  • креирање XML документа мора бити једноставно;
  • сажетост код означавања документа XML-ом је од минималног значаја.

Тако је настао XML 1.0, који је World Wide Web Consortium објавио 10. фебруара 1998. године.

Поред назива XML разматрана су и друга имена: MAGMA (Minimal Architecture for Generalized Markup Applications), SLIM (Structured Language for Internet Markup) и MGML ( Minimal Generalized Markup Language).

XML 1.0 заснован је на стандарду Unicode 2.0. Међутим, пошто је Unicode наставио да се развија и обухвата нова писма (монголско, камбоџанско, бурманско, амхарско...), XML је почео да заостаје. Зато је 4. фебруара 2004. године објављен XML 1.1, који дозвољава и употребу знакова из ових писама.

Предности[уреди]

XML је једноставно читљив и човеку и рачунару.

Пошто је XML документ обично текстуална датотека, читљива је на свакој платформи која може читати текстуалне податке. Тако постаје неосетљив на технолошке промене – без обзира на напредак технологије, текстуалне податке ће још дуго сваки рачунар моћи да прочита. етикете XML подржава Уникод и омогућава приказ текста на свим познатим језицима.

Такође, овај формат је самодокументујући: етикете описују садржај који се налази унутар њих.

Исправност насталог XML документа врло је једноставно контролисати, јер XML има строга синтаксичка правила. Рачунарски програми за обраду докумената могу једноставно да обрађују XML садржај.

XML је међународно прихваћен стандард. Прихватили су га многи произвођачи програма и користе га у својим производима. Компатибилан је са SGML-ом, који се користи од 1986. године, а SGML може обрађивати велики број рачунарских програма. XML може да представља најуопштенију структуру компјутерске науке: снимке, листе и стабла, а његова хијерархијска структура је прикладна за већину (али не и за све) типове докумената. Може се рећи да је за XML најважније то што представља језик за метаозначавање, што подразумева да он нема фиксан скуп ознака и елемената. У имену XML-а слово X потиче од речи Extensible (проширив). То значи да се језик може прилагођавати и проширивати како би задовољио различите потребе корисника.

Недостаци[уреди]

Један од основних недостатака XML-а је редундантна и опширна синтакса. Она може збуњивати човека, а рачунарски програм који обрађује документ може делимично успорити. Ови рачунарски програми су веома сложени јер морају да обрађују велике количине угнежђених података на више нивоа.

Треба имати у виду да је XMLсамо језик за означавање, а не програмски језик. XML документ само постоји, не радећи ништа.

Као ни HTML, ни XML не шаље податке преко мреже. Послани подаци могу бити кодирани у XML-у, али изван XML документа мора постојати неки протокол (HTTP, FTP, NFS и слично) који ће послати документ. То значи да XML није протокол за мрежни пренос.

Иако XML веома добро служи као преносни формат, који је независан од платформе, он није база података. Сама база података, иако може садржати XML податке, није XML документ. Да би корисник преузео XML документ из базе података, мора употребити неки посреднички програм (енг. middleware product), као што је Enhydra.

Синтакса[уреди]

У XML документима подаци су смештени у облику знаковних низова (енг. strings), који се налазе између текстуалних етикета које их описују. У XML-у се основне јединице етикета и података називају елементи.

Корисник се при писању етикета мора придржавати прецизно дефинисане синтаксе. Структуру XML документа описују његове етикете, помоћу којих се може видети који су елементи придружени другим елементима. Ако је XML документ добро пројектован, етикете описују и његову семантику (нпр. етикете указују да ли је елемент наслов, име особе, датум и сл.). Али, етикете у добро пројектованим XML апликацијама не говоре ништа о начину приказивања документа (нпр. да ли је елемент исписан полуцрно или курзивом и сл.) јер XML језик не означава начин приказивања, већ структуру и семантику.

Базична синтакса за један документ у XML-у је:

<osoba>Miloš Crnjanski</osoba>

Декларација[уреди]

Сваки XML документ би требало да отпочиње декларацијом XML-а, али то није обавеза. Декларација садржи псеудоатрибуте version, standalone и encoding. На пример:

<?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>

Ако XML документ поседује декларацију XML-а, она мора бити но почетку документа, а пре ње не сме бити коментара, белина и сл. То је зато што XML анализатор на основу првих пет знакова (<?xml) препознаје начин кодирања знакова у документу; испред декларације XML-а може се наћи једино невидљива Unicode ознака редоследа бајтова.

Атрибут version углавном има вредност 1.0, јер задавање верзије 1.1 ограничава документ на мали број најновијих верзија анализатора, док сви анализатори за XML1.1 подржавају и XML 1.0. Пошто неки системи не пружају податке о скупу знакова, XML допушта документима да сами назначе свој скуп знакова користећи декларацију кодирања (енг. encoding declaration). Она се налази унутар декларације XML-а.

Атрибут encoding је опцион. Ако је изостављен, анализатор претпоставља да је употребљен Unicode скуп знакова. Атрибут standalone (самосталан) је такође необавезан. Може имати вредности yes и no. Уколико је изостављен, претпоставка је да има вредност no. У том случају апликација може учитати спољни DTD (који је смештен у спољну датотеку), како би утврдила праве вредности неких делова докумената. Документ који нема DTD као вредност атрибута standalone може имати вредност yes; ову вредност може имати и документ који има DTD, ако тај DTD не мења садржај документа или је потпуно интерни.

Елементи, ознаке и знаковни подаци[уреди]

XML елементи описују одређени део XML документа. Један елемент је разграничен почетном ознаком (енг. start-tag) и завршном ознаком (енг. end-tag). Почетна ознака састоји се од имена елемента окруженог угластим заградама (<osoba>). Завршна ознака састоји се од истог имена окруженог угластим заградама, али и од цртица које претходи имену елемента (</osoba>). Све што се појављује између почетне и завршне ознаке представља садржај (енг. content) елемента. Садржај документа у првом примеру представља текст: Miloš Crnjanski. Иако су размаци део садржаја, многе апликације их занемарују. Етикете <osoba> и </osoba> чине маркирање (енг. markup) документа, док знаковни низ ,,Милош Црњански“, заједно са размацима који га окружују, представља знаковне податке (енг. character data).

Празни елементи[уреди]

XML обезбеђује посебну синтаксу за представљање елемената празног садржаја. Он може бити представљен једном ознаком празног елемента (енг. empty-element tag). Ова ознака почиње знаком < , а завршава се знаковима /> .Следећа три примера за означавање, нпр. , прекида реда ( енг. line break) у XHTML-у ( који је XML-изована варијанта HTML-а) еквивалентна су:

<br></br>
<br />
<br/>
Коренски елемент[уреди]

Сваки XML документ мора имати тачно један коренски елемент (енг. root element) који уоквирује комплетан садржај документа. У документу, он је први елемент и у себи садржи све друге елементе. Понекад се коренски елемент назива и елемент (целог) документа (енг. document element).

Стабла[уреди]

Следећи пример илуструје нешто сложенији XML документ:

<osoba>
  <ime_i_prezime>
    <ime>Miloš</ime>
    <prezime>Crnjanski</prezime>
  </ime_i_prezime>
  <zanimanje>književnik</zanimanje>
  <zanimanje>diplomata</zanimanje>
</osoba>

Овај документ још увек садржи само један елемент – особа. Али, овај елемент има три елемента-потомка (енг. child elements): један елемент <ime_i_prezime> и два елемента <zanimanje>. Елемент <ime_i_prezime> има два елемента-потомка – елемент <ime> и елемент <prezime>. Елемент <osoba> је родитељски елемент елемената <ime_i_prezime> и елемената <zanimanje>, док је елемент <ime_i_prezime> родитељ елементима <ime> и <prezime>. Може се рећи да су елементи <ime_i_prezime> и елементи <zanimanje> братски елементи, браћа (енг. siblings), а међусобно братски су и елементи <ime> и <prezime>. Каже се да су елементи <ime_i_prezime> и елементи <zanimanje> угнежђени унутар елемента <osoba>.

XML захтева да елементи буду прописно груписани: сваки елемент се налази унутар другог елемента, а и почетна и завршна ознака елемента морају бити унутар једног истог елемента. XML забрањује ознаке које се преклапају, односно елементи морају бити правилно угнежђени. Овај пример документа је неправилан:

<osoba>
  <ime_i_prezime>
    <ime>Miloš<prezime>Crnjanski</ime></prezime>
</osoba>

Атрибути[уреди]

XML атрибути дају податке који додатно описују елементе XML документа. Атрибути имају свој назив и вредност. Име атрибута је раздвојено од вредности знаком једнакости и размаком, који је необавезан. Вредност атрибута мора бити затворена у наводнике или полунаводнике. На пример:

<osoba rodjena=“1893” umrla=”1977”>
	Miloš Crnjanski
</osoba>

Постоје две опречне струје мишљења у вези са коришћењем атрибута у оквиру XML документа. По једној, атрибути се не би смели користити за обогаћивање смисла садржаја; дозвољени су само они атрибути који не додају ништа у основну информацију (као на пример атрибути који описују врсту и величину фонта). Према другом схватању, атрибути се могу слободно користити јер се тиме смањује број елемената.

Референце[уреди]

Унутар елемента XML документа не сме се наћи знак < који нема одговарајућу излазну (енг. escape) секвенцу </, јер се знак < увек тумачи као почетак етикете. Овај знак се, уколико кориснику затреба у тексту, може претворити у излазну секвенцу помоћу референце ентитета (енг. entity reference) &lt ;, нумеричке референце знака (енг. numeric character reference) &#60 ;, или хексадецималне референце знака (енг. hexadecimal numeric character reference) &#x3c ;. Референце ентитета и нумеричке референце знака спадају у маркирања; при анализирању XML документа, маркирања се замењују оним знаком на који упућује референца.

XML поседује пет унапред дефинисаних ентитета. То су:

У садржају елемената се само &amp; и &lt; морају употребљавати уместо & и <, док су остале референце опционе.

Нумеричке референце знака личе на референце ентитета, али уместо имена садрже карактер # и одговарајући број. На пример, пошто је знак ,,мање од“ у Unicode систему дефинисан као код 60, нумеричка референца знака била би &#60 ;, док би у хексадецималној нумеричкој референци знака била &#x3c ; (где је ,,х“ префикс који указује на хексадецимални систем).

Ове референце могу се користити само у садржају елемената и вредностима атрибута, док су у именима елемената, именима атрибута, као и у другим врстама маркирања недопустиве.

Правилност XML документа[уреди]

За сваки XML документ који је креиран у складу са синтаксичким правилима може се рећи да је добро обликован (енг. well-formed). Све документе који нису у складу са овим правилима, програми за обраду XML-а (енг. XML processors) одбијају.

Добро обликован документ мора да задовољава одређена правила. На пример:

  • за сваки XML документ мора постојати тачно један коренски елемент;
  • сваки елемент који није празан мора имати почетну етикету и одговарајућу завршну етикету;
  • празан елемент може бити означен ознаком празног елемента (као што је <br/>, што је еквивалентно <br> </br>);
  • све вредности атрибута морају бити затворене у наводнике или полунаводнике;
  • елементи могу бити угнежђени, али се не смеју преклапати, а сваки елемент, осим коренског, мора се у потпуности садржати у другом елементу;
  • један елемент не сме имати два истоимена атрибута;
  • унутар ознака не смеју се користити коментари ни инструкције за обраду;
  • знакови < или & који нису претворени у излазну секвенцу не смеју се наћи у знаковним подацима елемената и атрибута;
  • називи елемената могу садржати слова, бројеве и посебне знакове, морају почињати словом, али не смеју почињати текстом xml ни XML, а не смеју садржати ни празнине;
  • такође, имена елемената су осетљива на разлику између малих и великих слова (енг. case-sensitive). Тако елементи OSOBA, osoba и Osoba за XML нису исти.

XML документ који је формално исправан, тј. добро обликован, а притом и задовољава одређену шему, може се рећи да је валидан (енг. valid). Документи који шему не задовољавају су невалидни (енг. invalid). То значи да валидност документа зависи од шеме са којом се пореди.

DTD[уреди]

Ознаке које су допуштене у некој од примена XML-a могу бити документоване у шеми (енг. schema). Дефиниција типа документа (енгл. 'document type definition', DTD) је најраширенији језик за XML шеме. Он је уједно и једини дефинисан у самој спецификацији XML-а. DTD одређује где се и како у документу могу појавити све етикете које су дозвољене. За XML DTD-ови су опциони, а не обавезни, али нису увек довољни. Осим DTD-а постоје и други језици за описивање шема, као што су XML Schema Language, RELAX NG, Schematron, Hook, Examplotron итд.

Приказивање на вебу[уреди]

XML документи не садрже информације о томе како одређене податке треба приказивати, јер је XML језик за опис података. Без коришћења CSS (Cascading Stylesheet-s) или XSLT (Extensible Stylesheet Language Transformations) атрибута XML документ је на интернету приказан као обичан XML текст. Неки интернет претраживачи приказују XML документ као стабло, при чему делови структуре могу бити приказани или сакривени кликом миша.

XML подаци могу се приказати помоћу HTML-а. XML и HTML користе знакове „< >“ за креирање елемената и атрибута структуре.

У XML документу се назив CSS (Cascading Stylesheets) датотеке која га форматира наводи на одређени начин. Повезивање се врши унутар XML документа. На пример:

<?xml version=”1.0” encoding=”UTF-8”?>
  <?xml-stylesheet type=”text/css” href=”osoba.css”?>
<osoba></osoba>

И назив XSLT (Extensible Stylesheet Language Transformations) датотеке која форматира XML документ наводи се на одређени начин.

<?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”osoba.xslt”?>
<osoba></osoba>

Да би се одредила клијентска страна XSL трансформације, XML-у је потребна следећа инструкција за обраду:

<?xml-stylesheet type=”text/xsl” href=”myTransform.xslt”?>

XSLT подржава већина интернет претраживача, али га не подржава претраживач Опера, пре верзије 9.0. Алтернатива томе је да се XSL употреби за конвертовање XML-а у формат који је могуће приказати „на серверу“, уместо да зависи од могућности претраживача крајњег корисника. Крајњи корисник нема представу о томе шта се дешавало „иза сцене“ и види се само добро форматиран документ.

Проширења[уреди]

  • Xpath је језик који омогућава једноставније претраживање садржаја у XML документу.
  • Xquery је упитни језик за претраживање XML документа. Он је за XML оно што је SQL и PL/SQL за односне базе података: начин да се приступи, манипулише и врати XML-у.
  • XML Namespaces омогућава да неки документи који садрже XML елементе и атрибуте буду узети из различитих речника без именовања, чиме се елиминише конфузија приликом комбиновања више шема у једном XML документу.
  • XML Signature дефинише синтаксу и правила за креирање дигиталног потписа на XML садржају.
  • XML Encryption дефинише синтаксу и правила за шифровање XML садржаја.
  • XML Pointer је језик који описује начин на који хиперлинкови упућују на одређено место у XML документу.

Обрада докумената[уреди]

SAX (Simple API for XML) и DOM (Document Object Model) су објектно оријентисани за програмирање APIја (Application Program Interface), широко употребљеног за процесирање XML података. Први XML рашчлањивач излаже садржај XML документа у апликацијама као што су SAX догађаји или DOM објекти.

SAX чини систем, заснован на догађајима, за анализу XML података. Процес се састоји од читања документа од почетка и издвајања података у корисне делове, на сваком кораку процеса SAX дефинише догађаје који могу наступити.

DOM је API за Document Object Model . Док SAX нуди приступ подацима унутар XMLдокумента, DOM је осмишљен да пружи значење руковању тим подацима. DOM приказује стабло XML документа. Пошто је стабло познат структурни приказ података, лако је извести пролазак и обраду кроз структуру стабла у разним програмским језицима, па и у Јава програмском језику.

Форма XML приступа која је доживела велику популарност у скорије време је „push-parsing“која третира документ као серију предмета очитаваних у секвенцама. На пример у Јава програмском језику, StAX може бити употребљен за прављење онога што је основно, што секвенцијално посећује атрибуте и податке у XML документу. Код који користи овај „итератор“ може обрађивати постојећу ствар, нпр. да каже шта је почетак или крај елемента или текста, или да провери његове атрибуте, име, локално име, размак између имена, вредности XML атрибута, текста итд., као и да захтева да се „итератор“ помери на следећу ствар. Код може на тај начин да извуче информације из документа и да их прелази. Значајна предност push-parsing методе је боља ефикасност од SAX и DOM стила рашчлањивања XML-а и рекурзивно-опадајући приступ са тенденцијом да на једноставан начин сачува податке.

Стандард XSL (Extensible Stylesheet Language) је XML апликација за примену стилова за штампање или приказивање XML докумената на вебу. Он је подељен на XSLT и XSL-FO.

  • XSL-FO (Extensible Stylesheet Language-Formatting Objects) је језик за описивање структуре страница које су излазни резултат XML документа, одштампане или приказане на вебу.
  • XSLT (Extensible Stylesheet Language Transformations)омогућава претварање једног XML документа у други.
  • XQuery је W3C језик за испитивање, конструисање и трансформисање XML докумената.
  • XSL-FO, XSLT и XQuery се користе у XPath-у.

Основни формат докумената у OpenOffice.org и AbiWord је XML. Неки делови Microsoft Office 1.1 су, такође, способни да уређују XML документе.

Верзије[уреди]

Тренутно постоје две верзије XML-а. Прва, XML1.0, иницијално је дефинисана 1998. године. Од тада је претрпела мање преправке, али без новог броја верзија. Тренутно је у свом четвртом издању, које је објављено 16. августа 2006. Широко је прихваћена и још увек се препоручује за општу употребу. Друга верзија, XML 1.1, објављена је 4. фебруара 2004. Трећа верзија, која је у свом другом издању, објављена 16. августа 2006, а садржи карактеристике којима је намеравано да се XML направи једноставнијим за употребу. XML1.1 није у широкој употреби и препоручује се за употребу онима којима су потребна његова посебна својства.

XML 1.0 и XML 1.1 се разликују по карактерима који су употребљени за имена и њихове елементе и атрибуте. XML 1.0 једино дозвољава карактере који су дефинисани у Уникод 2.0 , што укључује већину светских језика, а искључује оне који су додати у касније Уникод верзије. Међу искљученима су писма Монголије, Камбоџе, Бурме и друга.

Скоро било који Уникод карактер може бити употребљен у вредности карактера и атрибута XML 1.1 докумената, чак и ако карактер није дефинисан, без обзира да ли има кодну тачку у важећој вредности Уникода. Приступ XML-а 1.1 је такав да су само одређени карактери забрањени, а да је све друго дозвољено, а у XML 1.0 само одређени карактери су експлицитно дозвољени, тако да се XML 1.0 не може прилагодити додавању карактера у будућим верзијама Уникода.

У знаковним подацима и вредностима атрибута XML 1.1 дозвољава употребу више контролних знакова од других верзија. Због робусности већине контролних карактера који се налазе у XML-у 1.1 они морају бити изражени као нумеричке знаковне референце. Међу подржаним контролним карактерима у XML-у 1.1 су и две испрекидане линије које представљају празан простор између карактера. То су једини контролни карактери који могу бити уписани директно.

Има говора о XML-у 2.0, али остаје да се види да ли ће доћи до његовог настанка. XML-SW је прописан од стране научника који су развијали XML и садржи предлоге како би XML 2.0 могао да изгледа: као елиминација DTD-а из синтаксе, интеграција Namespaces, XML базе и XML информационог сета у основни стандард.

Литература[уреди]

Спољашње везе[уреди]