XML
| 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 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 <
Dokument sostoit iz sushchnostei, soderzhanie kotorykh -- simvoly. Vse simvoly razdeleny na dva tipa: simvoly dannykh (angl. character data) i simvoly razmetki. K razmetke otnosiatsia:
- tegi (angl. tags) - oboznachaiut granitsy elementov;
- ob'iavleniia i instruktsii obrabotki, vkliuchaia ikh atributy (angl. attributes);
- ssylki na sushchnosti;
- kommentarii;
- 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 <
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 <
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]:
- sintaksis <<D;>>, gde D -- desiatichnoe chislo;
- sintaksis <<H;>> ili <<H;>>, gde H -- shestnadtsaterichnoe chislo (shestnadtsaterichnye chisla v chislovykh simvol'nykh ssylkakh ne chuvstvitel'ny k registru).
Primery chislovykh ssylok na simvoly:
- å -- (v desiatichnoi forme) predstavliaet bukvu <> s malen'kim kruzhkom nad nei (ispol'zuetsia, naprimer, v norvezhskom iazyke);
- å -- (v shestnadtsaterichnom) predstavliaet soboi tot zhe simvol;
- å -- (v shestnadtsaterichnom) takzhe predstavliaet tot zhe simvol;
- И -- (v desiatichnoi forme) predstavliaet zaglavnuiu bukvu kirillitsy <>;
- 水 -- (v shestnadtsaterichnom) predstavliaet kitaiskii ieroglif <
>;
Imena
[pravit' | pravit' kod]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.
Prolog
[pravit' | pravit' kod]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:
V niom est' kornevoi element , 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 <
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 <
Naprimer:
Zdes' <<SYSTEM "hello.dtd">> -- vneshnii identifikator: adres <
]>
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:
Prostoi khleb
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:
btn*
msg_generic
all
@@Sisteme Giris@@
forward,mainmenu
LOGIN_DLG
start
step2
btnforward
login*
all
check
login_succeeded
login_unknownuser
all
@@Hata@@
generic_neg.htm,@@Yanlis kullanici ismi@@,@@Lutfen kullanici ismini dogru giriniz.@@
back
btnback
start
login_incorrectpwd
all
@@Hata@@
generic_neg.htm,@@Hatali parola@@,@@Lutfen parolanizi dogru giriniz.@@
back
btnback
start
back
btnback
forward
btnforward
mainmenu
quitapplication
quitapp.xml
start
error*
errdsc_null.htm,@@Hata@@
all
forward
btnforward
msg_generic
generic_msg.htm
msg_generic
error_hardcodeside
*
btnmainmenu
btnquitapp
all
mainmenu
errdsc_null.htm,Hata, @@Islem sirasinda bir hata meydana geldi.@@
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]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.
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.
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, <
- - 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
#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
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.
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.
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.
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]- | XML Media Types, RFC 3023 9-11. IETF (ianvar' 2001). Data obrashcheniia: 4 ianvaria 2010. Arkhivirovano 22 avgusta 2011 goda.
- | XML Media Types, RFC 3023 7-9. IETF (ianvar' 2001). Data obrashcheniia: 4 ianvaria 2010. Arkhivirovano 22 avgusta 2011 goda.
- | 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.
- | Extensible Markup Language (XML) 1.0 (Fifth Edition) . Data obrashcheniia: 6 iiulia 2011. Arkhivirovano 1 aprelia 2009 goda.
- | Extensible Markup Language (XML) 1.1 (Second Edition) . Data obrashcheniia: 6 iiulia 2011. Arkhivirovano 3 iiulia 2011 goda.
- | 1 2 Ob'iasnenie slova <
> vo spetsifikatsii iazyka XML. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda. - | HTML Document Representation . www.w3.org. Data obrashcheniia: 27 noiabria 2019. Arkhivirovano 23 dekabria 2019 goda.
- | Extensible Markup Language (XML) 1.0 (Fifth Edition), SS2.9 Standalone Document Declaration . W3C (26 noiabria 2008). Data obrashcheniia: 18 avgusta 2025.
- | Ob'iasnenie slova <
> v spetsifikatsii. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda. - | Ispol'zovanie formy Bekusa -- Naura vo spetsifikatsii. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda.
- | Zapis' pustogo prostranstva v forme Bekusa -- Naura. Data obrashcheniia: 12 aprelia 2014. Arkhivirovano 10 ianvaria 2020 goda.
- | If both the external and internal subsets are used, the internal subset MUST be considered to occur before the external subset.
- | Extensible Markup Language (XML) 1.0 (Fifth Edition), SS2.7 CDATA Sections . W3C (26 noiabria 2008). Data obrashcheniia: 18 avgusta 2025.
- | 1 2 3 4 5 6 7 8 Xml parsing . Data obrashcheniia: 30 avgusta 2019. Arkhivirovano 16 marta 2022 goda.
- | Streaming versus DOM (The Java EE 5 Tutorial) . Data obrashcheniia: 9 aprelia 2022. Arkhivirovano 9 aprelia 2022 goda.
- | 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.
- | 1 2 Pull Parsing versus Push Parsing (The Java EE 5 Tutorial) . Data obrashcheniia: 9 aprelia 2022. Arkhivirovano 9 aprelia 2022 goda.
- | 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.
- | XML Parsers . Data obrashcheniia: 11 marta 2009. Arkhivirovano iz originala 3 marta 2009 goda.
- | Intel XML Accelerator (nedostupnaia ssylka)
- | 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]- Devid Khanter, Dzheff Rafter, Dzho Fausett, Erik van der Vlist, i dr. XML. Rabota s XML, 4-e izdanie = Beginning XML, 4th Edition. -- M.: <<Dialektika>>, 2009. -- 1344 s. -- ISBN 978-5-8459-1533-7.
- Devid Khanter, Dzheff Rafter i dr. XML. Bazovyi kurs = Beginning XML. -- M.: Vil'iams, 2009. -- 1344 s. -- ISBN 978-5-8459-1533-7.
- Robert Teibor. Realizatsiia XML Web-sluzhb na platforme Microsoft .NET = Microsoft .NET XML Web Services. -- M.: Vil'iams, 2002. -- 464 s. -- ISBN 0-672-32088-6.
Ssylki
[pravit' | pravit' kod]- XML na saite Konsortsiuma Vsemirnoi pautiny (W3C)
- Ofitsial'naia spetsifikatsiia standarta XML 1.0 (angl.)
- Ofitsial'naia spetsifikatsiia standarta XML 1.1 (angl.)
- Doug Tidwell. Vvedenie v XML (nedostupnaia ssylka)
- Dokumentatsiia po XML na saite IBM stat'i, forumy
- Prosmotr XML Prosmotr i redaktirovanie dannykh XML (angl.)
- Formatirovanie XML Mashina dlia onlain-formatirovaniia XML (angl.)