XML

Material iz Vikipedii -- svobodnoi entsiklopedii
Pereiti k navigatsii Pereiti k poisku
XML (angl. eXtensible Markup Language) rasshiriaemyi iazyk razmetki
Rasshirenie .xml
MIME-tip application/xml[1], text/xml[2] (deprecated in an expired draft)[3]
Razrabotchik Konsortsium Vsemirnoi pautiny
Opublikovan 1998
Tip formata iazyk razmetki
Rasshiren iz SGML
Razvit v XHTML, RSS, Atom, KML, SVG i mnozhestvo drugikh formatov
Standart(y) 1.0 (Fifth Edition), 26 noiabria 2008 goda[4]
1.1 (Second Edition), 16 avgusta 2006 goda[5]
Otkrytyi format? da
Sait w3.org/XML (angl.)
Mediafaily na Vikisklade

XML (MFA: [,eks.em'el], abbr. ot angl. eXtensible Markup Language) -- <iazyk razmetki>>. Rekomendovan Konsortsiumom Vsemirnoi pautiny (W3C). Spetsifikatsiia XML opisyvaet XML-dokumenty i chastichno opisyvaet povedenie XML-protsessorov (programm, chitaiushchikh XML-dokumenty i obespechivaiushchikh dostup k ikh soderzhimomu). XML razrabatyvalsia kak iazyk s prostym formal'nym sintaksisom, udobnyi dlia sozdaniia i obrabotki dokumentov kak programmami, tak i chelovekom, s aktsentom na ispol'zovanie v Internete.

Iazyk nazyvaetsia rasshiriaemym, poskol'ku on ne fiksiruet razmetku, ispol'zuemuiu v dokumentakh: razrabotchik volen sozdat' razmetku v sootvetstvii s potrebnostiami k konkretnoi oblasti, buduchi ogranichennym lish' sintaksicheskimi pravilami iazyka. Rasshirenie XML -- eto konkretnaia grammatika, sozdannaia na baze XML i predstavlennaia slovariom tegov i ikh atributov, a takzhe naborom pravil, opredeliaiushchikh, kakie atributy i elementy mogut vkhodit' v sostav drugikh elementov. Sochetanie prostogo formal'nogo sintaksisa, udobstva dlia cheloveka, rasshiriaemosti, a takzhe bazirovanie na kodirovkakh Iunikod dlia predstavleniia soderzhaniia dokumentov privelo k shirokomu ispol'zovaniiu kak, sobstvenno, XML, tak i mnozhestva proizvodnykh spetsializirovannykh iazykov na baze XML v samykh raznoobraznykh programmnykh sredstvakh.

XML iavliaetsia podmnozhestvom SGML.[istochnik ne ukazan 169 dnei]

Na osnove XML sozdaiutsia spetsializirovannye formaty dlia khraneniia diagramm, kontseptual'nykh kart i drugikh modelei dannykh.

Iazyk XML

[pravit' | pravit' kod]

Spetsifikatsiia XML opisyvaet iazyk i riad voprosov, kasaiushchikhsia kodirovki i obrabotki dokumentov. Material sektsii predstavliaet soboi sokrashchionnoe izlozhenie opisaniia iazyka v Spetsifikatsii XML, adaptirovannoe dlia nastoiashchei stat'i.

Normativnym schitaetsia angliiskii variant dokumenta, poetomu osnovnye terminy privodiatsia s ikh angliiskimi originalami.

Perevod osnovnykh terminov v osnovnom sleduet dostupnomu v internete perevodu Spetsifikatsii na russkii iazyk, iskliuchenie sostavliaiut terminy tag i declaration. Dlia termina tag zdes' ispol'zuetsia perevod teg. Dlia termina declaration otdano predpochtenie rasprostranionnomu perevodu ob'iavlenie (protiv takzhe rasprostranionnoi kal'ki deklaratsiia).

V literature i internete mogut vstrechat'sia i inye perevody osnovnykh terminov.

Fizicheskaia i logicheskaia struktury dokumenta

[pravit' | pravit' kod]

S fizicheskoi tochki zreniia dokument sostoit iz sushchnostei (angl. entities), iz kotorykh kazhdaia mozhet ssylat'sia na druguiu sushchnost'. Edinstvennyi kornevoi element -- dokumentnaia sushchnost'. Soderzhanie sushchnostei -- simvoly.

S logicheskoi tochki zreniia dokument sostoit iz kommentariev (angl. comments), ob'iavlenii (angl. declarations), elementov (angl. elements), ssylok na sushchnosti (angl. character references) i instruktsii obrabotki (angl. processing instructions). Vsio eto v dokumente strukturizuetsia razmetkoi (angl. markup).

Fizicheskaia struktura

[pravit' | pravit' kod]

Sushchnost' -- mel'chaishaia chast' v dokumente. Vse sushchnosti chto-nibud' soderzhat, i u vsekh nikh est' imia (sushchestvuiut iskliucheniia, napr. dokumentnaia sushchnost'). Proshche govoria, termin <> opisyvaet <>, <<chto-to>>[6].

Dokument sostoit iz sushchnostei, soderzhanie kotorykh -- simvoly. Vse simvoly razdeleny na dva tipa: simvoly dannykh (angl. character data) i simvoly razmetki. K razmetke otnosiatsia:

  1. tegi (angl. tags) - oboznachaiut granitsy elementov;
  2. ob'iavleniia i instruktsii obrabotki, vkliuchaia ikh atributy (angl. attributes);
  3. ssylki na sushchnosti;
  4. kommentarii;
  5. posledovatel'nosti simvolov, obramliaiushchie sektsii <<CDATA>>.

Chast' dokumenta, ne prinadlezhashchaia razmetke, sostavliaet simvol'nye dannye dokumenta.

Logicheskaia struktura

[pravit' | pravit' kod]

Vse sostavliaiushchie chasti dokumenta obobshchaiutsia v prolog i kornevoi element. Kornevoi element -- obiazatel'naia chast' dokumenta, sostavliaiushchaia vsiu ego sut' (prolog, voobshche govoria, mozhet otsutstvovat'). Kornevoi element mozhet vkliuchat' (a mozhet ne vkliuchat') vlozhennye v nego elementy, simvol'nye dannye i kommentarii. Vlozhennye v kornevoi element elementy, v svoiu ochered', mogut vkliuchat' vlozhennye v nikh elementy, simvol'nye dannye i kommentarii, i tak dalee. Prolog mozhet vkliuchat' ob'iavleniia, instruktsii obrabotki, kommentarii. Ego sleduet nachinat' s ob'iavleniia XML, khotia v opredelionnoi situatsii dopuskaetsia otsutstvie etogo ob'iavleniia.

Elementy dokumenta dolzhny byt' pravil'no vlozheny: liuboi element, nachinaiushchiisia vnutri drugogo elementa (to est' liuboi element dokumenta, krome kornevogo), dolzhen zakanchivat'sia vnutri elementa, v kotorom on nachalsia. Simvol'nye dannye mogut vstrechat'sia vnutri elementov kak neposredstvenno tak i v spetsial'nykh sektsiiakh <>. Ob'iavleniia, instruktsii obrabotki i elementy mogut imet' sviazannye s nimi atributy. Atributy ispol'zuiutsia dlia sviazyvaniia s logicheskoi edinitsei teksta par <<imia-znachenie>>.

Simvoly razmetki

[pravit' | pravit' kod]

Razmetka vsegda nachinaetsia simvolom < i zakanchivaetsia simvolom >.

Nariadu s simvolami < i >, spetsial'nuiu rol' dlia razmetki igraet takzhe simvol &. Uglovye skobki oboznachaiut granitsy elementov, instruktsii obrabotki i nekotorykh drugikh posledovatel'nostei. Ampersand pozvoliaet vypolnit' zamenu teksta pri pomoshchi sushchnostei (angl. entities)[6].

Reshenie problemy neodnoznachnosti razmetki

[pravit' | pravit' kod]

Upotreblenie razmetochnykh simvolov v simvol'nykh dannykh zatrudniaet raspoznavanie konstruktsii razmetki i mozhet sozdat' problemu neodnoznachnosti struktury. V XML eta problema reshaetsia sleduiushchim obrazom: <, > i & ne mogut prisutstvovat' v simvol'nykh dannykh i v znacheniiakh atributov v ikh neposredstvennom vide, dlia ikh predstavleniia v etikh sluchaiakh zarezervirovany spetsial'nye sushchnosti:

Simvol Zamena
< <
> >
& &

Krome togo, dlia upotrebleniia apostrofov i kavychek vnutri znachenii atributov ispol'zuiutsia sleduiushchie sushchnosti:

' '
" "

Pravilo zameny razmetochnykh simvolov na ikh oboznachaiushchie sushchnosti ne rasprostraniaetsia na simvol'nye dannye v sektsiiakh <>, zato vypolniaetsia vo vsekh ostal'nykh mestakh dokumenta.

Chislovye ssylki na simvoly

[pravit' | pravit' kod]

Chislovye ssylki na simvoly ukazyvaiut kodovuiu pozitsiiu simvola v nabore simvolov dokumenta. Chislovye ssylki na simvoly mogut prinimat' dve formy[7]:

  1. sintaksis <<&#D;>>, gde D -- desiatichnoe chislo;
  2. sintaksis <<&#xH;>> ili <<&#XH;>>, gde H -- shestnadtsaterichnoe chislo (shestnadtsaterichnye chisla v chislovykh simvol'nykh ssylkakh ne chuvstvitel'ny k registru).

Primery chislovykh ssylok na simvoly:

V iazyke XML vse imena dolzhny nachinat'sia s bukvy, simvola podchiorkivaniia (_) i prodolzhat'sia tol'ko dopustimymi dlia imion simvolami, a imenno: oni mogut soderzhat' tol'ko bukvy, vkhodiashchie v sektsiiu bukv kodirovki Unicode, arabskie tsifry, defisy, znaki podchiorkivaniia, tochki. Tak kak bukvy ne ogranicheny iskliuchitel'no simvolami ASCII, to v imenakh mozhno ispol'zovat' bukvy iz liubogo iazyka.

Ob'iavlenie XML

[pravit' | pravit' kod]

Ob'iavlenie XML ukazyvaet versiiu iazyka, na kotoroi napisan dokument. Poskol'ku interpretatsiia soderzhimogo dokumenta zavisit ot versii iazyka, spetsifikatsiia predpisyvaet nachinat' dokument s ob'iavleniia XML. V pervoi (1.0) versii iazyka ispol'zovanie ob'iavleniia ne bylo obiazatel'nym, v posleduiushchikh versiiakh ono obiazatel'no. Esli ob'iavlenie otsutstvuet, versiia iazyka schitaetsia ravnoi 1.0.

Krome versii XML, ob'iavlenie mozhet soderzhat' informatsiiu o kodirovke dokumenta i atribut standalone.

Primery:



Atribut standalone ukazyvaet, trebuetsia li dlia korrektnoi obrabotki dokumenta ispol'zovanie vneshnikh deklaratsii.

  • standalone="yes" -- dokument dolzhen interpretirovat'sia korrektno bez obrashcheniia k vneshnei DTD.
  • standalone="no" -- dokument mozhet ispol'zovat' vneshnie deklaratsii.

Esli atribut otsutstvuet, ego znachenie po umolchaniiu schitaetsia ravnym no[8].

Primery s ispol'zovaniem atributa:



Ob'iavlenie tipa dokumenta

[pravit' | pravit' kod]

Dlia ob'iavleniia tipa dokumenta sushchestvuet spetsial'naia instruktsiia !DOCTYPE. Ona pozvoliaet zadat' pri pomoshchi iazyka DTD, kakie v dokument vkhodiat elementy, kakovy ikh atributy, kakie sushchnosti mogut ispol'zovat'sia i koe-chto eshchio.

Naprimer, vot korrektnyi dokument:


Hello, world!

V niom est' kornevoi element Hello, world!, i s logicheskoi tochki zreniia dokument sushchestvuet. Odnako on nedeistvitelen (angl. not valid)[9].

Pri pomoshchi Ob'iavleniia tipa dokumenta (DTD) vozmozhno opisyvat' ego soderzhanie i logicheskuiu strukturu, a takzhe sviazyvat' s opredelionnym elementom paru <>. Vot kak vygliadit prolog v zapisi Bekusa -- Naura[10]:

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
XMLDecl ::= ''
VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"')
Eq ::= S? '=' S?
VersionNum ::= '1.' [0-9]+
Misc ::= Comment | PI | S
doctypedecl ::= ''
DeclSep ::= PEReference | S
intSubset ::= (markupdecl | DeclSep)*
markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment
extSubset ::= TextDecl? extSubsetDecl
extSubsetDecl ::= ( markupdecl | conditionalSect | DeclSep)*

Posle XML-ob'iavleniia mogut sledovat' kommentarii, instruktsii obrabotki ili zhe pustye prostranstva[11], no zatem idiot Ob'iavleniia tipa dokumenta, gde <> -- imia kornevogo tega, <> -- vneshnii identifikator, a <> -- ob'iavlenie razmetki ili zhe ssylka na sushchnost'. Kak glasit spetsifikatsiia, esli vneshnii identifikator ob'iavliaetsia vmeste s vnutrennim ob'iavleniem, to poslednee idiot pered pervym[12].

Naprimer:



Hello, world!

Zdes' <<SYSTEM "hello.dtd">> -- vneshnii identifikator: adres <> pozvoliaet zadeistvovat' dannye v dokumente <> kak ob'iavleniia razmetki.




]>
Hello, world!

Zdes' zhe razmetka byla ob'iavlena lokal'no v instruktsii !DOCTYPE.

Instruktsiia obrabotki

[pravit' | pravit' kod]

Instruktsii obrabotki (angl. processing instruction, PI), pozvoliaiut razmeshchat' v dokumente instruktsii dlia prilozhenii. V sleduiushchem primere pokazana instruktsiia obrabotki xml-stylesheet, peredaiushchaia xml-stylesheet-prilozheniiu (naprimer, brauzeru) instruktsii v faile my-style.css posredstvom atributa href:


Kommentarii

[pravit' | pravit' kod]

Kommentarii (angl. comment) ne otnosiatsia k simvol'nym dannym dokumenta. Kommentarii nachinaetsia posledovatel'nost'iu <<> i zakanchivaetsia posledovatel'nost'iu <<-->>>, vnutri ne mozhet vstrechat'sia kombinatsiia simvolov <<-->>. Simvol & ne ispol'zuetsia vnutri kommentariia v kachestve razmetki.

Primer:


Kornevoi element

[pravit' | pravit' kod]

Element i ego razmetka

[pravit' | pravit' kod]

Element (angl. element) iavliaetsia poniatiem logicheskoi struktury dokumenta. Kazhdyi dokument soderzhit odin ili neskol'ko elementov. Granitsy elementov predstavleny nachal'nym i konechnym tegami. Imia elementa v nachal'nom i konechnom tegakh elementa dolzhno sovpadat'. Element mozhet byt' takzhe predstavlen tegom pustogo elementa, to est' ne vkliuchaiushchego v sebia drugie elementy i simvol'nye dannye.

Teg (angl. tag) -- konstruktsiia razmetki, kotoraia soderzhit imia elementa.

Nachal'nyi teg:

Konechnyi teg:

Teg pustogo elementa:

V elemente atributy mogut ispol'zovat'sia tol'ko v nachal'nom tege i tege pustogo elementa.

Primer kulinarnogo retsepta, razmechennogo s pomoshch'iu XML:



name="khleb" preptime="5min" cooktime="180min">
</span><br><span> </span>Prostoi<span> </span>khleb<br><span> </span><span>

amount="3" unit="stakan">Muka
amount="0.25" unit="gramm">Drozhzhi
amount="1.5" unit="stakan">Tioplaia voda



Smeshat' vse ingredienty i tshchatel'no zamesit'.


Zakryt' tkan'iu i ostavit' na odin chas v tioplom pomeshchenii.



Zamesit' eshchio raz, polozhit' na protiven' i postavit' v dukhovku.



Sektsiia CDATA

[pravit' | pravit' kod]

Sektsiia CDATA ispol'zuetsia dlia vkliucheniia fragmentov teksta, v kotorykh simvoly <, > i & dolzhny interpretirovat'sia kak obychnye simvoly, a ne kak razmetka. Sektsiia mozhet vstrechat'sia v liubom meste dokumenta, gde dopuskaiutsia simvol'nye dannye. Ona nachinaetsia posledovatel'nost'iu i zavershaetsia posledovatel'nost'iu ]]>. Mezhdu etimi ogranichiteliami mozhet nakhodit'sia liuboi tekst, kotoryi budet obrabotan kak simvol'nye dannye, bez interpretatsii vstroennykh razmetochnykh simvolov[13].

Korrektnyi dokument

[pravit' | pravit' kod]

Korrektnyi (angl. well-formed) dokument sootvetstvuet vsem obshchim pravilam sintaksisa XML, primenimym k liubomu XML-dokumentu: pravil'naia struktura dokumenta, sovpadenie imen v nachal'nom i konechnom tege elementa i t. p. Dokument, kotoryi nepravil'no postroen, ne mozhet schitat'sia dokumentom XML.

Prostranstva imion

[pravit' | pravit' kod]

Primer dokumenta:




name="start">
cmd="triggeron">
btn*

cmd="triggeron">
msg_generic

cmd="disablenbb">
all

cmd="setscrtext">
@@Sisteme Giris@@

cmd="enablenbb">
forward,mainmenu

cmd="switchmsgtarget">
LOGIN_DLG

cmd="sendmsg">
start

cmd="jump">
step2


name="step2">
cmd="waittrigger">
btnforward

cmd="triggeron">
login*

cmd="disablenbb">
all

cmd="sendmsg">
check


name="login_succeded">
type="appmsg">
login_succeeded


cmd="endscript" />


name="login_unknownuser">
type="appmsg">
login_unknownuser

name="login_unknownuser">
cmd="disablenbb">
all

cmd="setscrtext">
@@Hata@@

cmd="showhtml">
generic_neg.htm,@@Yanlis kullanici ismi@@,@@Lutfen kullanici ismini dogru giriniz.@@

cmd="enablenbb">
back

cmd="waittrigger">
btnback

cmd="jump">
start



name="login_incorrectpwd">
type="appmsg">
login_incorrectpwd

name="login_incorrectpwd">
cmd="disablenbb">
all

cmd="setscrtext">
@@Hata@@

cmd="showhtml">
generic_neg.htm,@@Hatali parola@@,@@Lutfen parolanizi dogru giriniz.@@

cmd="enablenbb">
back

cmd="waittrigger">
btnback

cmd="jump">
start




name="btnback">
type="buttonclick">
back

name="btnback">
cmd="triggeron">
btnback



name="btnforward">
type="buttonclick">
forward

name="btnforward">
cmd="triggeron">
btnforward



name="btnmainmenu">
type="buttonclick">
mainmenu


cmd="jumpscript">
label="mainmenuscript" scope="local" />



name="btnquitapp">
type="buttonclick">
quitapplication

name="btnquitapp">
cmd="callscript">
quitapp.xml

cmd="jump">
start



name="error_generic">
type="appmsg">
error*


cmd="showhtml">
errdsc_null.htm,@@Hata@@

cmd="disablenbb">
all

cmd="enablenbb">
forward

cmd="waittrigger">
btnforward

cmd="endscript" />


name="msg_generic">
type="appmsg">
msg_generic


cmd="showhtml">
generic_msg.htm

cmd="triggeron">
msg_generic




name="error_hardcodeside">
type="appmsg">
error_hardcodeside


cmd="triggeroff">
*

cmd="triggeron">
btnmainmenu

cmd="triggeron">
btnquitapp

cmd="disablenbb">
all

cmd="enablenbb">
mainmenu

cmd="showhtml">
errdsc_null.htm,Hata, @@Islem sirasinda bir hata meydana geldi.@@

cmd="waittrigger">
btnmainmenu




Reglamentatsiia raboty s dokumentami: pravila, iazyki, programmnye interfeisy

[pravit' | pravit' kod]

Etot razdel soderzhit izlozhenie nekotorykh polozhenii rekomendatsii W3C, kasaiushchikhsia raboty s dokumentami. Sootvetstvuiushchie rekomendatsii mogut otnosit'sia kak k dokumentam XML, tak i k bolee shirokomu klassu dokumentov. Ssylki, kak pravilo, daiutsia na sredstva raboty s dokumentami, rekomendovannye W3C.

Kodirovka dokumentov

[pravit' | pravit' kod]

Spetsifikatsiia trebuet, chtoby obrabatyvaiushchie programmy podderzhivali po krainei mere dve kodirovki Iunikod: UTF-8 i UTF-16.

XML-protsessor i prilozhenie

[pravit' | pravit' kod]

Spetsifikatsiia XML opredeliaet poniatiia XML-protsessor i prilozhenie. XML-protsessor (parser) -- programma, analiziruiushchaia razmetku i peredaiushchaia informatsiiu o strukture dokumenta drugoi programme -- prilozheniiu.

Spetsifikatsiia XML nalagaet opredelionnye trebovaniia na protsessor, ne kasaias' trebovanii k prilozheniiu.

Deistvitel'nyi dokument. Proveriaiushchie i neproveriaiushchie protsessory

[pravit' | pravit' kod]

Dokument iavliaetsia deistvitel'nym, esli s nim sviazano opredelenie tipa dokumenta i esli etot dokument otvechaet predstavlennym v opredelenii tipa dokumenta ogranicheniiam.

XML-protsessory deliatsia na dva klassa: proveriaiushchie i neproveriaiushchie.

Proveriaiushchie protsessory proveriaiut deistvitel'nost' dokumenta i dolzhny soobshchat' (po vyboru pol'zovatelia) o narushenii ogranichenii, sformulirovannykh v opredelenii tipa dokumenta.

Neproveriaiushchie protsessory ne proveriaiut deistvitel'nost' dokumenta, no obiazannosti po predvaritel'noi obrabotke dokumenta, upomianutye vyshe, ostaiutsia za nimi.

Opisanie tipov dokumentov: iazyki skhem

[pravit' | pravit' kod]

Dlia opisaniia tipov dokumentov ispol'zuiutsia iazyki skhem (angl. schema language). Poskol'ku XML iavliaetsia podmnozhestvom iazyka SGML[istochnik ne ukazan 169 dnei], to on unasledoval razrabotannyi dlia SGML iazyk Document Type Definition (DTD). Pozdnee byli razrabotany i drugie iazyki skhem, naibolee izvestny iz kotorykh XML Schema, RELAX NG.

Preobrazovanie dokumenta XML

[pravit' | pravit' kod]

Dlia resheniia zadachi preobrazovaniia dokumenta XML v druguiu skhemu ili drugoi format prednaznachen iazyk XSLT.

Format dlia vizualizatsii dokumenta

[pravit' | pravit' kod]

Dlia formatirovannogo dokumenta (dokumenta, podgotovlennogo k vizualizatsii) prednaznachen format XSL-FO.

Iazyki zaprosov

[pravit' | pravit' kod]

XPath -- sintaksis dlia adresatsii soderzhimogo dokumenta, predstavlennogo v forme dereva. Vyrazheniia XPath ispol'zuiutsia v iazyke XQuery. Vyrazheniia XPath, voobshche govoria, mogut ispol'zovat'sia v liubom kontekste, gde umestno ispol'zovat' formal'nye ssylki na elementy dereva, v chastnosti, v kachestve parametrov metodov interfeisov dostupa k dokumentu.

XQuery -- iazyk programmirovaniia, orientirovannyi na rabotu s dokumentami.

Chtenie XML: tri varianta API

[pravit' | pravit' kod]
V razdele ne khvataet ssylok na istochniki (sm. rekomendatsii po poisku).
Informatsiia dolzhna byt' proveriaema, inache ona mozhet byt' udalena. Vy mozhete otredaktirovat' stat'iu, dobaviv ssylki na avtoritetnye istochniki v vide snosok. (6 sentiabria 2017)

Dlia chteniia XML est' tri varianta API[14].

Sobytiinyi API (event-driven API, push-style API) -- XML-protsessor chitaet XML; pri opredelionnom sobytii (poiavlenii otkryvaiushchego ili zakryvaiushchego tega, tekstovoi stroki, atributa) vyzyvaetsia callback-funktsiia.

  • + Raskhoduet malo pamiati[14].
  • + Pri obrabotke ogromnogo XML est' standartnaia tochka, pozvoliaiushchaia mgnovenno ostanovit' obrabotchik[14].
  • - Kraine slozhen dlia prikladnogo programmista: prikhoditsia derzhat' v pamiati informatsiiu, v kakom meste dokumenta my nakhodimsia.
  • + Biblioteka prosta v programmirovanii.
  • - Tol'ko posledovatel'nyi dostup k XML[15], eto zatrudniaet razbor perekriostnykh ssylok i <> XML s pereputannym poriadkom elementov.
  • - API tol'ko dlia chteniia, dlia zapisi potrebuetsia drugoi API[16].
  • +- Estestvennyi vybor, kogda iz ogromnogo XML nado izvlech' nemnogo dannykh[14].
  • +- Estestvennyi vybor, kogda XML nado preobrazovat' v strukturu predmetnoi otrasli[14].
  • Primery bibliotek: SAX, Expat.
Vse piat' primerov rabotaiut s takim XML


name="A">Alpha
name="B">Bravo

Primer koda (C++, vydumannyi API)
enum class Place { ROOT, DOCUMENT, THING, N }

Place parentPlace[static_cast<int>(Place::N)] = { ROOT, ROOT, DOCUMENT };

class MyEvent : public Xml::Event
{
private:
Place place = Place::ROOT;
Thing* currThing = nullptr;
public:
/// @return true -- teg nuzhen; false -- propustit' ego i vsio, chto vnutri
bool onTagOpen(const std::string& aName) override;
void onTagClose() override;
void onAttr(const std::string& aName, const std::string& aValue) override;
void onText(const std::string& aText) override;
}

bool MyEvent::onTagOpen(const std::string& aName)
{
switch (place) {
case Place::ROOT:
if (aName == "document") {
place = Place::DOCUMENT;
return true;
}
break;
case Place::DOCUMENT:
if (aName == "thing") {
place = Place::THING;
currThing = &things.emplace_back();
return true;
}
break;
}
return false;
}

void MyEvent::onTagClose()
{
place = parentPlace[place];
}

void MyEvent::onAttr(const std::string& aName, const std::string& aValue)
{
if (place == Place::THING && aName == "name")
currThing->name = aValue;
}

void MyEvent::onText(const std::string& aText)
{
if (place == Place::THING)
currThing->value = aText;
}

xml::eventDrivenRead("in.xml", MyEvent());

Potokovyi API (takzhe pull-style API) -- ustroen na maner potokov vvoda-vyvoda. Prikladnoi kod zaprashivaet u protsessora chasti XML, tot umeet tol'ko dvigat'sia po XML vperiod, zabyvaia uzhe proidennye chasti.

  • + Raskhoduet malo pamiati.
  • + Informatsiia, v kakom meste dokumenta my nakhodimsia, neiavno zadaiotsia mestom v potoke vypolneniia. Eto ser'iozno uproshchaet rabotu prikladnogo programmista[16][17]. Na produmannykh API ob'iom koda priblizhaetsia k takovomu dlia DOM.
  • - Biblioteka slozhna v programmirovanii.
  • + Pozvoliaet odnovremennyi dostup k dvum XML-dokumentam[17].
  • - Tol'ko posledovatel'nyi dostup k XML[16], eto zatrudniaet razbor perekriostnykh ssylok i <> XML s pereputannym poriadkom elementov.
  • - API tol'ko dlia chteniia, dlia zapisi potrebuetsia drugoi API. (StAX, khot' otnositsia i k potokovym, soderzhit otdel'nyi API priamoi zapisi[18].)
  • Primery bibliotek: StAX.
Primer koda (C++, vydumannyi API)
xml::StreamReader reader("in.xml");
reader.enterTag("document");
while (reader.getTag("thing") {
Thing thing;
thing.name = reader.requireStringAttr("name");
reader.enterTag();
thing.value = reader.getText();
reader.leaveTag();

things.emplace_back(std::move(thing));
}

Ob'ektnyi API (Document Object Model, DOM, <>) -- schityvaet XML i vossozdaiot ego v pamiati v vide ob'ektnoi struktury.

  • - Raskhoduet mnogo pamiati -- namnogo bol'she, chem sam XML zanimaet na diske. Na pugixml raskhod pamiati vtroe i bolee prevyshaet dlinu XML.
  • + Prost dlia prikladnogo programmista.
  • + Biblioteka prosta v programmirovanii.
  • + Rekordnye realizatsii vrode pugixml napisany v etom stile.
  • + Pozvoliaet proizvol'nyi dostup k XML[14]. Eto, naprimer, uproshchaet rabotu s perekriostnymi ssylkami. Zachastuiu udaiotsia raspoznat' <> XML s pereputannym poriadkom tegov. Vozmozhen dostup odnovremenno k dvum XML-dokumentam.
  • + Obshchii API dlia chteniia i zapisi[16].
  • +- Estestvennyi vybor, kogda ob'ektom predmetnoi oblasti iavliaetsia sam XML: v veb-brauzere[14], XML-redaktore, v importiore k programme-lokalizatoru, kotoryi izvlekaet stroki iz XML proizvol'noi struktury.
  • +- Estestvennyi vybor, kogda nuzhno zagruzit' XML, slegka pererabotat' i sokhranit'[14][16]. Te chasti, kotorye trogat' ne nuzhno, ne trebuiut nikakogo koda.
  • Primery bibliotek: JDOM, TinyXML, pugixml
Primer koda (C++, pugixml)
#include
#include
#include "pugixml.hpp"

struct Thing {
std::string name, value;
};

// Esli kakaia-to sushchnost' pugixml konvertiruetsia v bool kak false -- vykinut' oshibku!
template <class T>
inline T need(T&& val, const char* errmsg)
{
if (!val) throw std::logic_error(errmsg);
return std::forward<T>(val);
}

int main()
{
std::vector<Thing> things;

pugi::xml_document doc;
need(doc.load_file("in.xml"), "Cannot load XML!");

auto elDocument = need(doc.root().child("document"), "Need ");
for (pugi::xml_node elThing : elDocument.children("thing")) {
auto attrName = need(elThing.attribute("name"), "Need .name!");
things.emplace_back( Thing { attrName.as_string(), elThing.text().as_string() } );
}

for (auto &v : things) {
std::cout << v.name << "=" << v.value << std::endl;
}

return 0;
}

Byvaiut i gibridnye API: vneshnie i malovazhnye chasti chitaiutsia potokovym metodom, a vnutrennie i vazhnye -- ob'ektnym.

Primer koda (C++, vydumannyi API)
xml::StreamReader reader("in.xml");
std::string name, value;
reader.enterTag("document");
while (reader.getTag("thing") {
xml::Element* elThing = reader.readEntireSubtree();
things.emplace_back();
Thing& thing = things.back();
thing.name = elThing.requireStringAttr("name");
thing.value = elThing.text();
}

Zapis' XML: dva varianta API

[pravit' | pravit' kod]

API priamoi zapisi zapisyvaet XML teg za tegom, atribut za atributom.

  • + Bystr, net promezhutochnykh ob'ektov.
  • - Primitivnaia biblioteka mozhet delat' neoptimal'nyi XML (naprimer, vmesto ). Rabotaiushchaia optimal'no slozhnee v programmirovanii.
  • - Neprigoden dlia otdel'nykh spetsificheskikh zadach.
  • - Esli struktury predmetnoi oblasti rabotaiut nenadiozhno, bez spetsial'nykh mer (zapisat' v pamiat' ili v drugoi fail, potom pereimenovat') mozhno ostat'sia s <> programmoi i poteriannym failom.
  • - Pri oshibke programmista mozhet poluchit'sia sintaksicheski nekorrektnyi XML.
  • - API tol'ko dlia zapisi, dlia chteniia potrebuetsia drugoi API.
  • Primery bibliotek: StAX.
Primer koda (C++, vydumannyi API)
xml::Writer wri("out.xml");
wri.openTag("document");
for (auto &v : things) {
wri.openTag("thing");
wri.writeAttr("name", v.name);
wri.writeText(v.value);
wri.closeTag("thing");
}
wri.closeTag("document");

Ob'ektnyi API, on zhe Document Object Model.

  • - Sozdaiot ob'ektnuiu strukturu dlia XML, chto mozhet otniat' pamiati bol'she, chem struktura predmetnoi otrasli.
  • +- Universalen (vprochem, v bol'shinstve zadach preimushchestva nad khorosho prorabotannym API priamoi zapisi net -- v otlichie ot chteniia).
  • + Dazhe esli struktury predmetnoi oblasti rabotaiut nenadiozhno, a programmist ne predusmotrel nikakoi <>, edinstvennyi stsenarii, kogda fail perezapisyvaetsia na nepolnyi -- oshibka vvoda-vyvoda (v chastnosti, nekhvatka mesta na diske).
  • + Pri pravil'no napisannom API nevozmozhno sozdat' sintaksicheski nekorrektnyi XML.
  • + Obshchii API dlia zapisi i chteniia.
  • Primery bibliotek: te zhe, chto i dlia chteniia XML metodom DOM.
Primer koda (C++, pugixml)
#include "pugixml.hpp"

struct Thing { std::string name, value; };

Thing things[] { { "A", "Alpha", }, { "B", "Bravo", }, { "C", "Charlie" } };

int main()
{
pugi::xml_document doc;
auto root = doc.append_child("document");
for (auto& thing : things) {
auto node = root.append_child("thing");
node.append_attribute("name") = thing.name.c_str();
node.append_child(pugi::node_pcdata).set_value(thing.value.c_str());
}
doc.save_file("test.xml");
return 0;
}

Instrumenty raboty s dokumentami: parsery, sredstva sozdaniia i vizualizatsii, sistemy baz dannykh

[pravit' | pravit' kod]

Realizatsii parserov

[pravit' | pravit' kod]

XML imeet realizatsii parserov dlia vsekh sovremennykh iazykov programmirovaniia[19].

Veb-brauzery kak instrument vizualizatsii dokumenta

[pravit' | pravit' kod]

Vizualizatsiia bez ispol'zovaniia stilei CSS

[pravit' | pravit' kod]

Bez ispol'zovaniia CSS ili XSL XML-dokument otobrazhaetsia kak prostoi tekst v bol'shinstve veb-brauzerov. Nekotorye brauzery, takie kak Internet Explorer, Mozilla Firefox i Opera (vstroennyi instrument Opera Dragonfly) otobrazhaiut strukturu dokumenta v vide dereva, pozvoliaia svorachivat' i razvorachivat' uzly s pomoshch'iu nazhatii klavishi myshi.

Primenenie stilei CSS

[pravit' | pravit' kod]

Protsess analogichen primeneniiu CSS k HTML-dokumentu dlia otobrazheniia. Dlia primeneniia CSS pri otobrazhenii v brauzere, XML-dokument dolzhen soderzhat' spetsial'nuiu ssylku na tablitsu stilei. Naprimer:


Eto otlichaetsia ot podkhoda HTML, gde ispol'zuetsia element .

Primenenie preobrazovanii k formatu XSL-FO

[pravit' | pravit' kod]

Sovremennye brauzery prinadlezhat k chislu programmnykh sredstv, sposobnykh vypolniat' preobrazovaniia XSLT. V brauzere takoe preobrazovanie vypolniaetsia, kak pravilo, dlia formatirovaniia dokumenta (preobrazovaniia dokumenta v format XSL-FO)[istochnik ne ukazan 169 dnei]. Sleduiushchaia instruktsiia v prologe dokumenta XML predpisyvaet brauzeru vypolnit' XSLT-preobrazovanie, opisannoe v faile transform.xsl:


Redaktory XML

[pravit' | pravit' kod]

S dokumentom XML mozhno rabotat' v obychnom tekstovom redaktore, odnako obychnye redaktory ne podderzhivaiut strukturu dokumenta. Sushchestvuiut spetsial'nye redaktory XML, kotorye delaiut rabotu s dokumentom bolee udobnoi i effektivnoi.

Sistemy upravleniia bazami dannykh, rabotaiushchie s dannymi v formate XML

[pravit' | pravit' kod]

Sistema upravleniia bazami dannykh DB2 pozvoliaet khranit' dannye v formate XML i predostavliaet dostup k takim dannym s pomoshch'iu iazyka XQuery.

Podderzhka na apparatnom urovne

[pravit' | pravit' kod]

XML podderzhivaetsia na nizkom apparatnom, mikroprogrammnom i programmnom urovniakh v sovremennykh apparatnykh resheniiakh[20].

Konvertatsiia XML

[pravit' | pravit' kod]

XML mozhno konvertirovat' v drugie formaty, vkliuchaia JSON, HTML, CSV i YAML. Dlia konvertatsii mozhno ispol'zovat' programmy EasyDataTransform, PDFElement i Advanced XML Converter.[21]

Oblast' primeneniia, ogranicheniia, perspektivy razvitiia

[pravit' | pravit' kod]

Effektivnost' ispol'zovaniia XML

[pravit' | pravit' kod]

XML -- iazyk razmetki, drugimi slovami, sredstvo opisaniia dokumenta. Imenno v nishe dokumentov, tekstov, gde dolia raznotipnykh simvol'nykh dannykh velika, a dolia razmetki mala -- XML uspeshen. S drugoi storony, obmen dannymi v otkrytykh sistemakh ne svoditsia k obmenu dokumentami. Izbytochnost' razmetki XML (a v tseliakh razrabotki iazyka priamo ukazano, chto lakonichnost' ne iavliaetsia prioritetom proekta) skazyvaetsia v situatsiiakh, kogda dannye ne vpisyvaiutsia v traditsionnuiu model' dokumenta. Lenta novostei, naprimer, oformliaemaia s ispol'zovaniem sintaksisa XML (formaty RSS, Atom), predstavliaet soboi ne dokument v traditsionnom ponimanii, a potok odnotipnykh mini-dokumentov -- mnogoslovnaia i izbytochnaia razmetka v etom sluchae sostavliaet sushchestvennuiu chast' peredavaemykh dannykh.

W3C ozabochen effektivnost'iu primeneniia XML, i sootvetstvuiushchie rabochie gruppy zanimaiutsia etoi problemoi (k nachalu 2013 goda normativnye dokumenty ne razrabotany).

Drugaia situatsiia, kogda formaty XML mogut okazat'sia ne luchshim resheniem -- rabota s dannymi s prostoi strukturoi i nebol'shim ob'iomom simvol'nykh dannykh (polia dannykh). V etom sluchae dolia razmetki v obshchem ob'iome velika, a programmnaia obrabotka XML mozhet okazat'sia neopravdanno zatratnoi po sravneniiu s rabotoi s dannymi bolee prostoi struktury. V etoi oblasti razrabotchiki rassmatrivaiut sredstva, iznachal'no orientirovannye na dannye, takie kak INI, YAML, JSON.

Sm. takzhe

[pravit' | pravit' kod]
  • XML-RPC
  • XML Schema
  • SOAP (angl. Simple Object Access Protocol) -- protokol peredachi dannykh, v kotorom dlia soobshchenii ispol'zuetsia format XML.
  • REST
  • XHTML -- versiia HTML, otvechaiushchaia sintaksicheskim trebovaniiam XML.
  • XSD -- iazyk opisaniia struktury XML-dokumentov.
  • FB2 -- format opisaniia knig, osnovannyi na XML
  • W3C DOM
  • DITA
  • WDDX
  • APML

Primechaniia

[pravit' | pravit' kod]
  1. | XML Media Types, RFC 3023 9-11. IETF (ianvar' 2001). Data obrashcheniia: 4 ianvaria 2010. Arkhivirovano 22 avgusta 2011 goda.
  2. | XML Media Types, RFC 3023 7-9. IETF (ianvar' 2001). Data obrashcheniia: 4 ianvaria 2010. Arkhivirovano 22 avgusta 2011 goda.
  3. | M. Murata, D. Kohn, and C. Lilley. Internet Drafts: XML Media Types . IETF (24 sentiabria 2009). Data obrashcheniia: 10 iiunia 2010. Arkhivirovano 22 avgusta 2011 goda.
  4. | Extensible Markup Language (XML) 1.0 (Fifth Edition) . Data obrashcheniia: 6 iiulia 2011. Arkhivirovano 1 aprelia 2009 goda.
  5. | Extensible Markup Language (XML) 1.1 (Second Edition) . Data obrashcheniia: 6 iiulia 2011. Arkhivirovano 3 iiulia 2011 goda.
  6. | 1 2 Ob'iasnenie slova <> vo spetsifikatsii iazyka XML. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda.
  7. | HTML Document Representation . www.w3.org. Data obrashcheniia: 27 noiabria 2019. Arkhivirovano 23 dekabria 2019 goda.
  8. | Extensible Markup Language (XML) 1.0 (Fifth Edition), SS2.9 Standalone Document Declaration . W3C (26 noiabria 2008). Data obrashcheniia: 18 avgusta 2025.
  9. | Ob'iasnenie slova <> v spetsifikatsii. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda.
  10. | Ispol'zovanie formy Bekusa -- Naura vo spetsifikatsii. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda.
  11. | Zapis' pustogo prostranstva v forme Bekusa -- Naura. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda.
  12. | If both the external and internal subsets are used, the internal subset MUST be considered to occur before the external subset.
  13. | Extensible Markup Language (XML) 1.0 (Fifth Edition), SS2.7 CDATA Sections . W3C (26 noiabria 2008). Data obrashcheniia: 18 avgusta 2025.
  14. | 1 2 3 4 5 6 7 8 Xml parsing . Data obrashcheniia: 30 avgusta 2019. Arkhivirovano 16 marta 2022 goda.
  15. | Streaming versus DOM (The Java EE 5 Tutorial) . Data obrashcheniia: 9 aprelia 2022. Arkhivirovano 9 aprelia 2022 goda.
  16. | 1 2 3 4 5 Comparing StAX to Other JAXP APIs (The Java EE 5 Tutorial) . Data obrashcheniia: 9 aprelia 2022. Arkhivirovano 9 aprelia 2022 goda.
  17. | 1 2 Pull Parsing versus Push Parsing (The Java EE 5 Tutorial) . Data obrashcheniia: 9 aprelia 2022. Arkhivirovano 9 aprelia 2022 goda.
  18. | StAX API (The Java(tm) Tutorials > Java API for XML Processing (JAXP) > Streaming API for XML) . Data obrashcheniia: 9 aprelia 2022. Arkhivirovano 9 aprelia 2022 goda.
  19. | XML Parsers . Data obrashcheniia: 11 marta 2009. Arkhivirovano iz originala 3 marta 2009 goda.
  20. | Intel XML Accelerator (nedostupnaia ssylka)
  21. | XML -- chem otkryt' fail v formate XML (XML File)? (rus.) www.azfiles.ru. Data obrashcheniia: 4 dekabria 2024. Arkhivirovano 7 dekabria 2024 goda.

Literatura

[pravit' | pravit' kod]
U etoi stat'i est' 2 problemy, pomogite ikh ispravit':
V stat'e est' spisok istochnikov, no ne khvataet snosok.
Bez snosok slozhno opredelit', iz kakogo istochnika vziato kazhdoe otdel'noe utverzhdenie. Vy mozhete uluchshit' stat'iu, prostaviv snoski na istochniki, podtverzhdaiushchie informatsiiu. Svedeniia bez snosok mogut byt' udaleny. (22 sentiabria 2014)
Stil' etoi stat'i neentsiklopedichen ili narushaet normy literaturnogo russkogo iazyka.
Stat'iu sleduet ispravit' soglasno stilisticheskim pravilam Vikipedii. (22 sentiabria 2014)
Pozhaluista, posle ispravleniia problemy udalite sootvetstvuiushchii shablon. Uznat', kak eto sdelat', mozhno na spravochnoi stranitse.
Produkty
i standarty
Rekomendatsii
OOSO
Rabochie proekty
Rukovodstva
Initsiativy
Vyvedennye
iz ispol'zovaniia
Ustarevshie
Organizatsii
Rabochie gruppy
Gruppy soobshchestva i biznesa
Zakryvshiesia gruppy
PO
Brauzery
Konferentsii
Osnovy
Podrazdely
Prilozheniia
Sviazannye temy
Standarty