ot Andrei Hristov(31-03-2002)

reiting (28)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

XML e ezik za opisanie, koito e podmnozhestvo na SGML. XML mnogo prilicha po
vunshnost  na HTML i tova e sledstvie ot tova, che i HTML proizliza ot
SGML. V nachaloto HTML e bil ezik nai-obshto za vizulizirane na informatsiia,
kato se ima v predvid, che dokumentut e imal struktura ot, koiato mozhe da se
izvleche informatsiia. Pod natisk ot strana na razlichni golemi firmi se dobaviat
novi i novi tagove i HTML se “izrazhda” v ezik za vizualizatsiia. Ot edin suvremenen
HTML dokument na praktika ne mozhe da bude izvlechena nikakva polezna informatsiia,
zashtoto informatsiiata ne e predstavena kato takava, a se tseli neinoto prezentirane.
Tui kato ne e vuzmozhno HTML otnovo da se vkara v niakakvi normalni ramki W3C(WWW
Consorcium) sustavia spetsifikatsiiata na nov ezik za opisanie na danni. Ezikut
e triabvalo da bude takuv, che prilozheniia na vsiakakvi platformi e triabvalo
da mogat burzo i lesno da izpolzvat tozi format.

XML kato tehnologiia ima nai-razlichni prilozheniia, kato komunikatsiia v heterogenni
sistemi, suhranenie na danni i dr. Kogato se govori za XML vsushtnost toi e
obediniavashtoto nazvanie na grupa ot tehnologii, koito izpolzvat XML formata,
v razlichni nasoki. Primeri sa XSLT (eXtensible Stylesheet Language Transofrmations),
XPath, XLink, XQuery i dr.

Primeren XML kod :

<?xml version="1.0"?>
   <review>
       <genre>Action</genre>
       <title>X-Men</title>
       <cast>
           <person>Hugh
Jackman</person>
           <person>Patrick
Stewart</person>
           <person>Ian
McKellen</person>
           <person>Famke
Janssen</person>
       </cast>
       <director>Bryan Singer</director>
       <duration>104</duration>
       <year>2000</year>
       <body>Every once in a while,
Hollywood takes a comic-book hero, shoots him on celluloid, slaps in a few
whiz-bang special effects and stands back to see the reaction. Sometimes
the results are memorable (<title>Superman</title>, <title>Spiderman</title>,
<title>Flash Gordon</title>) and sometimes disastrous (<title>Spawn</title>,
<title>The Avengers</title>). Luckily, <title>X-Men</title>
falls into the former category - it's a clever, well-directed film that should
please both comic-book aficionados and their less well-read cousins.</body>

       <rating>4</rating>
</review>



Edin XML dokument mozhe da e : dobre formatiran i pravilen. Dobre formatiran
dokument e tozi, koito otgovaria na XML spetsifikatsiiata, za tova kak se opisva.
Dopulnitelno za dokumenta mogat da se zadadat pravila, izpolzvaiki koito
da se proveri dali toi e pravilen. Pravilata opisvat podobie na kontekstno
svobodna gramatika za strukturata i dannite v tialoto na dokumenta. Tezi pravila
se obediniavat pod nazvanieto document type definition (DTD) ili XML Schema.
DTD e mnogo moshtno sredstvo kogato stava vupros za goliam obem ot dokumenti
za dadena sistema. V tozi sluchai se izpolzva chesto. Po-riadko se izpolzva,
kogato imame malko kolichestvo dokumenti ili proverkata e iznesena v application
sloi otgore.
Vseki edin XML dokument triabva da zapochva sus slednata deklaratsiia :
<?xml version="1.0"?>
Tazi deklaratsiia, mozhe da sudurzha informatsiia za document encoding (primerno
UTF-8 ili UTF-16). Sled tazi deklaratsiia e vuzmozhno da ima i drugi deklaratsii.
TSeliiat tozi blok napodobiava <head> taga ot HTML. DTD deklaratsiia izglezhda
taka :

<!DOCTYPE rootElement DTDLocation
[
entityDeclarations
]
>

Primer :
<BLOCKQUOTE>1. <!DOCTYPE review SYSTEM "http://www.somedomain.com/review.dtd">
2. <!DOCTYPE review SYSTEM “http://www.somedomain.com/review.dtd”
[
<!ENTITY html "Hypertext Markup Language">
<!ENTITY xml "Extensible Markup Language">
]
></BLOCKQUOTE>
V purviiat primer ukazvame, che DTD na taga review (root) se namira na adres
: http://www.somedomain.com/review.dtd (chrez SYSTEM atributa). !ENTITY e
analog na #define html “Hypertext Markup Language” v ezika C.
 
Sled poslednata deklaratsiia v prologa na dokumenta se namira otvariasht tag.
Tozi tag e root tag-a(nivo 0). Na nivo 0 mozhe da ima samo edin element. Strukturata
napodobiava *nix failovata sistema.
 
Element ima slednata struktura :
 
<element_name [attr1=”1”,,,]>data</element_name>
data e niz, koito mozhe da susdurzha drugi elementi i/ili tekst, i posledvashto
te(elementite) da sudurzhat drugi i t.n. Ako [data] e prazen niz togava ima
sukraten sintaksis
<element_name [attr1=”1”,,,]/ >
Atributite sa ravnoznachni na tagove, primer :
<person>
   <fname>John</fname>
   <lname>Smith</lname>
</person>
 
e ravnoznachno na
 
<person fname=”John” lname=”Smith”/ >
 
Za programniiat interfeis te sa ednoznachni. Stoinostite na atributite triabva
da sa zagradeni v kavichki(edinichni ili dvoini). Imenata sa case-sensitive
: fname e razlichno ot Fname. Dvata stila mogat da se smesvat i ot programista
zavisi, kakva shte e strukturat i kude e udachno da se izpolzvat atributi i
kude vlozheni tagove.
 
Eto edin po-goliam primer :
<?xml version="1.0"?>
<recipe>
   <name>Chicken Tikka</name>
   <author>Anonymous</author>
   <date>1 June 1999</date>
   <ingredients>
       <item>
           <desc>Boneless
chicken breasts</desc>
           <quantity>2</quantity>
       </item>
       <item>
           <desc>Chopped
onions</desc>
           <quantity>2</quantity>
       </item>
       <item>
           <desc>Ginger</desc>
           <quantity>1
tsp</quantity>
       </item>
       <item>
           <desc>Garlic</desc>
           <quantity>1
tsp</quantity>
       </item>
       <item>
           <desc>Red
chili powder</desc>
           <quantity>1
tsp</quantity>
       </item>
       <item>
           <desc>Coriander
seeds</desc>
           <quantity>1
tsp</quantity>
       </item>
       <item>
           <desc>Lime
juice</desc>
           <quantity>2
tbsp</quantity>
       </item>
       <item>
           <desc>Butter</desc>
           <quantity>1
tbsp</quantity>
       </item>
   </ingredients>
   <servings>3</servings>
   <process>
       <step>Cut chicken into cubes,
wash and apply lime juice and salt</step>
       <step>Add ginger, garlic, chili,
coriander and lime juice in a separate bowl</step>
       <step>Mix well, and add chicken
to marinate for 3-4 hours</step>
       <step>Place chicken pieces on
skewers and barbeque</step>
       <step>Remove, apply butter, and
barbeque again until meat is tender</step>
       <step>Garnish with lemon and
chopped onions</step>
   </process>
</recipe>
 
Poradi fakta,che vseki tag ima ime, koeto opisva dannite, koito sudurzha v
sebe si, tova dava vuzmozhnost edin neorganiziran dokument da bude bude prevurnat
v strukturiran ot atomarni chasti. V primera po-gore  <author>
ukazva, che dannite koito se sudurzhat v nego opisvat avtora na retseptata,
dokato <desc> i <quantity> se izpolzvat za sustavkite i respektivno
za tehnite kolichestva.
Teksta, koito se namira mezhdu otvariashtiia i zatvariashtiia tag se naricha “character
data”. Vupreki, che CDATA mozhe da sudurzha bukvi i tsifri, na niakoi simvoli
ot azbukata na XML triabva budat predstaveni po drug nachin. Primerno znakut
ampersand (&) se zapisva s &, koeto kakto mozhe da se zabelezhi
e !ENTITY. Ima nachin da se izbegne tova povedenie i da se nakara XML parsera
da ne obrabotva teksta. Izpolzvat se t.nar. CDATA blokove.
Za CDATA blokovete eksplitsitno se ukazvat, kato nesudurzhashti markup. Tezi
sektsii, mogat da sudurzhat vsichko : nizove, chisla, simvoli, dori ieroglifi,
vsichki te shte budat prenebregnati pri obrabotkata. CDATA bloka zapochva taka
:
<![CDATA[
i zavurshva taka :
]]>
Dannite, na sektsiiata se namirat mezhdu tezi dve posledovatelnosti ot simvoli.
Primer :
<?xml version="1.0"?>
<manual>
   <function>split(str, pattern)</function>
   <description>Split a string <param>str</param>
into component parts on the basis of <param>pattern</param>
   </description>
   <example>
   <![CDATA[
       <? split("apple, vanilla, orange",
","); ?>
   ]]>
   </example>
</manual>
 
<? i ?> sa zapazeni za XML, no izpolzvaiki CDATA sektsiia, mozhem da vgradim
dori pokazniiat po-gore PHP kod. Razbira se tozi maluk fail mozhe da bude predaden
za izpulnenie na PHP intepretatora, tui kato <?xml e nepoznat otvariasht
tag za nego. Ako se nalaga da v CDATA bloka da se poiaviava nizut ]]>, toi
triabva da se zamesti s ]]&gt.
V dopulnenie na cdata, XML sushto pozvoliava avtorite na dokumentite da vklyuchvat
spetsifichni instruktsii ili komandi, za obrabotvashtite prilozheniia, v dokumentite.
Tezi instruktsii narichani oshte “processing instructions” ili PI, ne sa chast
ot “character data”, vmesto tova, kogato XML parsera nameri PI, go podava
na prilozhenieto grizheshto se za obrabotka na PI ot namereniia klas(ako ima takova
asotsiirano, inache go prenebregva). Vsiaka PI sudurzha “tsel” (“target”), koiato
ukazva, kum koe prilozhenie da se prenasochat dannite. Kombinatsiiata ot “tsel”
i “danni” se obgrazhda s <? i ?> tagove, kakto e pokazano na primera
:
 
 
<?xml version="1.0"?>
<directory>
   <category>Online Shopping <?rating popular?></category>
   <url>http://www.amazon.com</url>
   <desc>Amazon.com, the planet's foremost e-tailer<?link_with_ad
?></desc> <url>http://www.cdnow.com</url>
   <desc>CDNow.com, for all your music</desc>
<url>http://www.bn.com</url>
   <desc>Barnes & Noble's online bookstore</desc>
</directory>
 
 
Tezi danni shte budat izpolzvani ot XML prilozhenie – primerno, purvata PI shte
ukazva, che kategoriiata e populiarna, dokato vtorata PI shte svurzhe opisanieto
s reklama. Kakto spomenah v nachaloto <?xml version=”1.0”?> sushto e PI.
 
 
Ottuk pokazanoto se vizhda kak XML pozvoliava da se izpolzvat opisatelni tagove
za “podchertavane” na tekst v dokument. Avtorite imat pulnata svoboda da suzdavat
takiva tagove, kakvito sa im nuzhni. I dokato tova pokazva, kolko guvkav kato
kontseptsiia e XML, okazva se che tova e nozh s dve ostrieta i vnimatelno triabva
da se boravi. Interesen e vuprosut kakvo shte stanem ako v razlichni dokumenti
imame tagove s ednakvi imena, no izpolzvani v razlichen kontekst.
 
Za da bude po-iasno shte izpolzvam dva razlichni po struktura XML dokumenta:
 
<?xml version="1.0"?>
<portfolio>
   <stock>Cisco Systems</stock>
   <stock>Nortel Networks</stock>
   <stock>eToys</stock>
   <stock>IBM</stock>
</portfolio>
 
i
 
<?xml version="1.0"?>
<inventory>
   <category>Mice</category>
   <item>Mouse C106</item>
   <vendor>Logitech</vendor>
   <stock>100</stock>
   <category>Handhelds</category>
   <item>Visor Deluxe</item>
   <vendor>HandSpring</vendor>
   <stock>23</stock>
   <category>MP3 players</category>
   <item>Nomad</item>
   <vendor>Creative</vendor>
   <stock>2</stock>
</inventory>
 
Purviiat dokument opisva portfolioto(produkti na koi proizvoditeli predlata)na
edna firma. Vtoriiat dokument sudurzha informatsiia za nalichnostite v sklada
na firma za prodazhba na harduer. Ako se opitame da kombinirame dvata dokumenta
shte nastupi oburkvane, zashtoto taga <stock> ima razlichno znachenie v dvata
dokumenta. Za da se izbegne tozi problem v XML e vuvedeno poniatieto “prostranstva
na imena”. Xorata zanimvali se s C++ mozhe da se se sbluskvali s tozi problem
pri mnozhestveno naslediavane. Tam problema e reshim kato se ukazhe implitsitno,
koia danna/koi metod na roditelia, se ima v predvid chrez operator :: . V XML
se izpolzva : . Suzdavaneto na namespace e lesno. Sintaksisa e :
 
<elementName xmlns: prefix="namespaceURL">
 
V tozi sluchai, prefiksa e unikalen niz izpolzvan za da se identifitsira “prostranstvoto”,
toe e link-nato za URL-a na prostranstvoto. “Prostranstvo” obiknovenno se
deklarira, na nivoto na root elementa, no tova e preporuchitelno, no ne zadulzhitelno.
Sled kato bude deklarirano edno “prostranstvo”, to mozhe da bude izpolzvano,
kato pred vseki element ot nego se slaga prefiks – unikalniiat identifikator.
Gornite dva dokumenta preobrazuvani taka, che da izpolzvat tazi tehnika izglezhdat
taka :
 
<?xml version=”1.0”?>
<mytrades:portfolio
xmlns:mytrades="http://www.somedomain.com/namespaces/mytrades/">
   <mytrades:stock>Cisco Systems</mytrades:stock>
   <mytrades:stock>Nortel Networks</mytrades:stock>
   <mytrades:stock>eToys</mytrades:stock>
   <mytrades:stock>IBM</mytrades:stock>
</mytrades:portfolio>
 
i
<?xml version="1.0"?>
<toms_store:inventory xmlns:toms_store="http://www.toms_store.com/">
   <toms_store:category>Mice</toms_store:category>
   <toms_store:item>Mouse C106</toms_store:item>
   <toms_store:vendor>Logitech</toms_store:vendor>
   <toms_store:stock>100</toms_store:stock> <toms_store:category>Handhelds</toms_store:category>
   <toms_store:item>Visor Deluxe</toms_store:item>
   <toms_store:vendor>HandSpring</toms_store:vendor>
   <toms_store:stock>23</toms_store:stock>
   <toms_store:category>MP3 players</toms_store:category>
   <toms_store:item>Nomad</toms_store:item>
   <toms_store:vendor>Creative</toms_store:vendor>
   <toms_store:stock>2</toms_store:stock>
</toms_store:inventory>
 
URL-a na “prostranstvoto” se izpolzva za da se ukazhe unikalnost i za nishto
drugo.
V sluchai, che edin dokument sudurzha dve ili poveche “prostranstva”, dobavianeto
na novo i prefiksvaneto na vseki element s identifikator pravi dokumenta
opredeleno truden za chetene.
Maluk primer :
<?xml version="1.0"?>
<me:person xmlns:me="http://www.mywebsite.com/">
   My name is <me:name>Huey</me:name>. I'm <me:age>seven</me:age>
years old,and I live in <me:address>Ducktown</me:address> with
   <rel:relationships xmlns:rel="http://www.mywebsite.com/relationships/">my
brothers <rel:name>Dewey</rel:name> and  
   <rel:name>Louie</rel:name></rel:relationships>.
</me:person>
V situatsii, kato tazi XML pozvoliava da se ukazhe edno prostranstvo, da bude
po podrazbirane. Taka pri 2 prostranstva, samo elementite na ednoto shte budat
s prefiksi.
 
Sushto kakto HTML, XML pozvoliava vmukvaneto na komentari. Komentarite se ignorirat
ot parsera i se izpolzvat za ulesniavane, prochitaneto da dokumenta. Mogat
da se postaviat navsiakude v dokumenta, zaradi po-gore spomenatata prichina.
Markerite, ukazvashti komentar sa ekvivalentni na tezi v HTML. Te sa : <!--
i -->.
 
 <B>Izpolzvane na XML zaedno s PHP.</B>
 
 
XML dokumenti mogat da se izpolzvat v PHP skriptove, kato se izpozva niakoi
ot dvete dostupni razshireniia na PHP : SAX(Simple API for XML) i DOMXML. TSelta
e obshta, putishtata razlichni.
 
Purvo shte razgledam SAX, a sled tova i DOMXML.
 
SAX parsera raboti kato se dvizhi posledovatelno ot nachaloto kum kraiat na
XML dokumenta i izvikva spetsifichni funktsii, kogato sreshtne razlichni vidove
tagove. Primerno, da se izvika edna funktsiia, kogato se sreshtne “starta” na
tag,druga pri “kraiat” mu i treta za obrabotka na sudurzhanieto. Otgovornost
na parsera e da protsesira dokumenta i da izvika ukazanite predi nachaloto
funktsii. Sled kato edin tag bude obraboten, parsera se premestva na posledvashtiiat
go ako ima takuv ili priklyuchva rabota, ako niama drug. PHP idva s parsera
expat.
Da predpolozhim, che ni se nalaga da obrabotim sledniiat XML dokument, za da
izpolzvame zalozhenata v nego informatsiia :
 
<?xml version="1.0"?>
<library>
   <book>
       <title>Hannibal</title>
       <author>Thomas Harris</author>
       <genre>Suspense</genre>
       <pages>564</pages>
       <price>8.99</price>
       <rating>4</rating>
   </book>
   <book>
       <title>Run</title>
       <author>Douglas E. Winter</author>
       <genre>Thriller</genre>
       <pages>390</pages>
       <price>7.49</price>
       <rating>5</rating>
   </book>
   <book>
       <title>The Lord Of The Rings</title>
       <author>J. R. R. Tolkien</author>
       <genre>Fantasy</genre>
       <pages>3489</pages>
       <price>10.99</price>
       <rating>5</rating>
   </book>
</library>
 
SHTe izpolzvame sledniiat skript za obrabotkata :
 
 
<?php
// data file
$file = "library.xml"; // initialize parser
$xml_parser = xml_parser_create(); // set callback functions
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData"); // open XML
file
if (!($fp = fopen($file, "r"))){
   die("Cannot locate XML data file: $file");
} // read and parse data
while ($data = fread($fp, 4096)){
// error handler
if (!xml_parse($xml_parser, $data, feof($fp))){
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
} // clean up
xml_parser_free($xml_parser);
?>
 
 <UL>
   <LI>xml_parser_create() se izpolzva za da se initsializira parser i da
se asotsiira s nego handle(resource), koito posledvashto da se izpolzva pri
izvikvaneto da drugi funktsii (analogichno na handle-ite za connection i db
v MySQL). Sled kato e initsializiran parsera triabva da spetsifitsirame callback
funktsii za razlichnite vidove tagove.</LI>
   <LI>xml_set_element_handler() se izpolzva za da se zadade, koi shte sa
callback funtsiite, izvikvani pri nameren nachalen i kraen tag. V primera po-gore
tova sa startElement() i "endElement().</LI>
 </UL>
 
Sledvashtata stupka e da otvorim XML faila s ime ot $file, da go prochetem i
protsesirame chrez xml_parse() funtskiiata. Poslednatashte izvika nuzhnata za obrabotka
funktsiia vseki put, kogato otchete nalichieto na spetsifichen tag. Sled kato dokumenta
e bil protsesiran napulno triabva da se izvika xml_parser_free() za da se osvobodi
pametta zaemana ot parsera. Pri nalichie na greshka, mozhe da se izpolzvat :
 
 <UL>
   <LI>xml_get_error_code()</LI>
   <LI>xml_get_current_line_number()</LI>
   <LI>xml_get_current_column_number()</LI>
   <LI>xml_get_current_byte_index()</LI>
 </UL>
za da imame poveche informatsiia otnosno vida i miastopolzhenieto na greshkata
v dokumenta.
 
 
Eto i definitsiite na funktsiite startElement() i endElement().
<?php
// use this to keep track of which tag the parser is currently processing
$currentTag = "";
function startElement($parser, $name, $attrs) {
global $currentTag;
$currentTag = $name; // output opening HTML tags
switch ($name) {
case "BOOK": echo "<tr>"; break;
case "TITLE": echo "<td>"; break;
case "AUTHOR":echo "<td>"; break;
case "PRICE": echo "<td>"; break;
case "RATING": echo "<td>"; break;
default: break;
}
}
?>
 
 
<?php
function endElement($parser, $name) {
global $currentTag; // output closing HTML tags
switch ($name) {
case "BOOK": echo "</tr>"; break;
case "TITLE": echo "</td>"; break;
case "AUTHOR": echo "</td>"; break;
case "PRICE": echo "</td>"; break;
case "RATING": echo "</td>"; break;
default : break;
} // clear current tag variable
$currentTag = "";
}
?>
 
 
Vseki put, kogato parsera nameri otvariasht tag, toi izvikva startElement()
s imeto na taga i atributite(ako ima takiva), kato argumenti. Sled tova startElement()
obrabotva taga i otpechatva respektivniiat HTML.
 
<?
// process data between tags
function characterData($parser, $data) { global $currentTag;
// text ratings
$ratings = array("Words fail me!", "Terrible", "Bad", "Indifferent", "Good",
"Excellent");
// format the data
switch ($currentTag) {
case "TITLE":// italics for title
echo "<i>$data</i>"; break;
case "AUTHOR": echo $data; break;
case "PRICE": // add currency symbol for price
echo "$" . $data; break;
case "RATING": // get text rating
echo $ratings[$data]; break;
default: break;
}
}
?>
 
characterData() se izvikva, kogato parsera zabelezhi danni mezhdu dvoikata
tagove. Triabva da se ima v predvid, che funktsiiata poluchava kato argument samo
dannite, no ne i imeto na taga. Poradi tova v primera se izpolzva globalnata
promenliva $currentTag. V zavisimost ot stoinostta $currentTag.
 
 <B>PHP s DOMXML</B>
Kakto i pri rabotata sus SAX, i pri DOM se nalaga da se zaredi tseliait XML
dokument v pametta. PHP predlaga 3 funktsii za tazi tsel :
 <UL>
   <LI>xmldoc()</LI>
   <LI>xmltree()</LI>
   <LI>xmldocfile()</LI>
 </UL>
Purvite 2 priemat kato argument niz sudurzhasht XML danni i izgrazhdat durvovidnata
struktura ot tozi niz, dokato xmldocfile() priema ime na fail kato argument.
 
<?php // create an XML-compliant string
$XMLDataString = ‘<?xml version="1.0"?’ . ‘>
<me><name>Joe Cool</name><age>24</age><sex>male</sex></me>";
// create a document object
$XMLDoc = xmldoc($XMLDataString);
// create a tree object
$XMLTree = xmltree($XMLDataString);
?>
ili
 
<?php
// data file
$XMLFile = "me.xml";
// create a document object
$XMLDoc = xmldocfile($XMLFile);
?>
 
Sled kato dokumenta e bil zareden, mnozhestvo ot metodi mogat da budat polzvani
za da se obhozhda durvoto.  Ima dva nachina za izvikvane : ediniiat e chrez
obekta vurnat ot xmldoc() i xmldocfile(), t.e. chrez negovite metodi, a drugiiat
e chrez obiknovenni funktsii, na koito se podava kato argument handle.
 
Primeri:    
<?php
// data file
$file = "library.xml"; // create a document object
$dom = xmldocfile($file); // echo these values to see the object type
// get root node
$dom->root(); // get children under the root node as array
$dom->children();
?>
 
<?php
// data file
$file = "library.xml";
// create a document object
$dom = xmldocfile($file); // get XML version
echo $dom->version; // get XML encoding
echo $dom->encoding; // get whether standalone file
echo $dom->standalone; // get XML URL
echo $dom->url; // get XML character set
echo $dom->charset;
?>
 
Kakto se vidia chrez izpolzvaneto na DOM ili SAX mogat da se postignat ednakvi
rezultati. Razlikata se sustoi v tova,che DOM e po-baven kato metod, poradi
fakta, che tsialoto durvo triabva da se postroi v nachaloto, dokato SAX e po-burz,
zashtoto izvikva funktsiia vseki put, kogato nameri tag. Sushto taka pri DOM dostupa
do elementi e priak, dokato pri SAX posledovatelen. Koi ot dvata da se izpolzva
triabva da izbere programista, kato balansira mezhdu skorost i vuzmozhnosti.


<< Programirane pod Linuks. Sredi za programirane | Mozilla >>