načítání...
nákupní košík
Košík

je prázdný
a
b

E-kniha: PHP a XML - Jiří Kosek

-6%
sleva

Elektronická kniha: PHP a XML
Autor:

Kniha čtenáře podrobně seznámí s jazykem XML a s možnostmi jeho zpracování v jazyce PHP. Výklad se kromě popisu jednotlivých rozhraní jako je SAX, XMLReader, DOM a SimpleXML soustřeďuje ...
Titul je skladem - ke stažení ihned
Médium: e-kniha
Vaše cena s DPH:  271 Kč 254
+
-
8,5
bo za nákup

ukázka z knihy ukázka

Titul je dostupný ve formě:
elektronická forma tištěná forma

hodnoceni - 58.4%hodnoceni - 58.4%hodnoceni - 58.4%hodnoceni - 58.4%hodnoceni - 58.4% 60%   celkové hodnocení
2 hodnocení + 0 recenzí

Specifikace
Nakladatelství: » Grada
Dostupné formáty
ke stažení:
PDF
Zabezpečení proti tisku: ano
Médium: e-book
Počet stran: 367
Rozměr: 24 cm
Úprava: ilustrace
Vydání: 1. vyd.
Jazyk: česky
ADOBE DRM: bez
ISBN: 978-80-247-1116-4
Ukázka: » zobrazit ukázku
Popis

Kniha čtenáře podrobně seznámí s jazykem XML a s možnostmi jeho zpracování v jazyce PHP. Výklad se kromě popisu jednotlivých rozhraní jako je SAX, XMLReader, DOM a SimpleXML soustřeďuje i na vysvětlení samotných základů jazyka XML a navazujících technologií jako jsou XML schémata, XPath a XSLT. Kniha je doplněna velkým množstvím praktických příkladů, které je možné stáhnout z doprovodného webu knihy. Stranou nezůstanou ani technologie, které jsou založeny na využití základních technologií XML, jako jsou webové služby a AJAX. Kniha srozumitelně vysvětluje i pro mnoho začínajících vývojářů méně známé koncepty, jako jsou jmenné prostory, znaková sada Unicode a její kódování, či pokročilé validační technologie RELAX NG a Schematron.

Předmětná hesla
Zařazeno v kategoriích
Jiří Kosek - další tituly autora:
Recenze a komentáře k titulu
Zatím žádné recenze.


Ukázka / obsah
Přepis ukázky
��������������������������������������������� ����������������������������������������������������������������� ���������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������� ���������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ������� ������������ ������ �� ������������ ���������� ��������� ������������� ����������� ���������� ����������� ����� ����������� ������ ������������ ����� ������������� ���������������������������������������������������������������������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ���������������������������������������������������������������������������� ������� ��� ������������ ������������ ������ ������� �������������� ������� ��������� ������������������������������������������������������������������������������������ ����������������������������������������������������� ���������������������������������� ��������������������������������������������� ����������������������������������������������������������������� ���������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ������� ������������ ������ �� ������������ ���������� ��������� ������������� ����������� ���������� ����������� ����� ����������� ������ ������������ ����� ������������� ���������������������������������������������������������������������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ���������������������������������������������������������������������������� ������� ��� ������������ ������������ ������ ������� �������������� ������� ��������� ������������������������������������������������������������������������������������ ����������������������������������������������������� ��������������������������������������������� ����������������������������������������������������������������� ���������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������� ���������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ������� ������������ ������ �� ������������ ���������� ��������� ������������� ����������� ���������� ����������� ����� ����������� ������ ������������ ����� ������������� ���������������������������������������������������������������������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ���������������������������������������������������������������������������� ������� ��� ������������ ������������ ������ ������� �������������� ������� ��������� ������������������������������������������������������������������������������������ ����������������������������������������������������� ���������������������������������� ��������������������������������������������� ����������������������������������������������������������������� ���������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������� ���������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ������� ������������ ������ �� ������������ ���������� ��������� ������������� ����������� ���������� ����������� ����� ����������� ������ ������������ ����� ������������� ���������������������������������������������������������������������������� ���������������������������������������������������������������������������������� �������������������������������������������������������������������������������� ���������������������������������������������������������������������������� ������� ��� ������������ ������������ ������ ������� �������������� ������� ��������� ������������������������������������������������������������������������������������ ����������������������������������������������������� ���������������������������������� Stručný obsah Předmluva ................................................................................ 13 Úvod ........................................................................................ 15 1. Syntaxe XML ........................................................................ 17 2. Přehled podpory XML v PHP5 ................................................ 43 3. (Ne)podpora Unicode v PHP ................................................... 67 4. SimpleXML ........................................................................... 87 5. SAX ................................................................................... 105 6. DOM .................................................................................. 123 7. XMLReader ........................................................................ 163 8. XPath ................................................................................. 171 9. Schémata ............................................................................ 195 10. Validace ........................................................................... 265 11. XSLT ................................................................................ 277 12. Webové služby ................................................................. 323 13. Zápis XML ........................................................................ 345 Závěr ..................................................................................... 353 Použitá literatura .................................................................... 355 Rejstřík .................................................................................. 357 Obsah 5 PHP a XML Obsah Předmluva ................................................................................ 13 Úvod ........................................................................................ 15 1. Syntaxe XML ........................................................................ 17 1.1 Elementy a struktura dokumentu ................................................... 17 1.2 Datový model dokumentu............................................................. 19 1.3 Atributy................................................................................... 20 1.4 Zápis vyhrazených znaků............................................................. 21 1.5 Názvy elementů a atributů........................................................... 22 1.6 Deklarace XML........................................................................... 22 1.7 Komentáře................................................................................ 23 1.8 Sekce CDATA............................................................................. 23 1.9 Instrukce pro zpracování.............................................................. 24 1.10Automatická kontrola syntaxe ....................................................... 25 1.11Jmenné prostory ........................................................................ 25 1.12Práce s bílými znaky ................................................................... 30 1.13Skládání dokumentů .................................................................... 32 1.13.1Entity .................................................................................. 33 1.13.2XInclude................................................................................ 35 1.14Katalogové soubory .................................................................... 37 1.15Speciální atributy ........................................................................ 39 1.15.1xml:lang ............................................................................... 39 1.15.2xml:space .............................................................................. 39 1.15.3xml:id .................................................................................. 40 1.15.4xml:base ............................................................................... 40 2. Přehled podpory XML v PHP5 ................................................ 43 2.1 SimpleXML – jednoduše na věc...................................................... 46 2.2 SAX – čteme pěkně popořádku...................................................... 49 2.3 DOM – načteme to do paměti........................................................ 55 2.4 XPath – rychle to najdeme........................................................... 58 Obsah 7 PHP a XML 2.5 XSLT – jazyk budoucnosti ............................................................. 60 2.6 XMLReader – když se zamotáme do SAX........................................ 62 2.7 Webové služby.......................................................................... 64 2.8 Závěr....................................................................................... 66 3. (Ne)podpora Unicode v PHP ................................................... 67 3.1 Znakové sady, kódování a Unicode................................................. 67 3.1.1 Znaková sada.......................................................................... 67 3.1.2 Kódování............................................................................... 68 3.1.3 Unicode................................................................................ 68 3.2 PHP a práce s řetězci.................................................................. 73 3.2.1 Ruční překódování...................................................................... 75 3.2.2 Knihovna mbstring...................................................................... 78 3.3 Další problémy........................................................................... 81 3.3.1 BOM a UTF-8........................................................................... 82 3.3.2 PHP a UTF-16.......................................................................... 84 3.3.3 Unicode a porovnávání řetězců.......................................................... 84 4. SimpleXML ........................................................................... 87 4.1 Načtení dokumentu..................................................................... 87 4.2 Konfigurace parseru.................................................................... 88 4.3 Čtení hodnot.............................................................................. 90 4.4 Práce se jmennými prostory.......................................................... 93 4.5 Smíšený obsah........................................................................... 95 4.6 Využití XPathu.......................................................................... 96 4.7 Modifikace dokumentu................................................................. 97 4.8 Rozšiřování třídy SimpleXMLElement.............................................. 99 4.9 Příklady využití........................................................................ 101 5. SAX ................................................................................... 105 5.1 Události.................................................................................. 106 5.1.1 Začátek elementu..................................................................... 106 5.1.2 Konec elementu....................................................................... 106 5.1.3 Znaková data......................................................................... 106 5.1.4 Instrukce pro zpracování............................................................... 107 5.1.5 Začátek mapování prefixu jmenného prostoru.......................................... 107 5.1.6 Konec mapování prefixu jmenného prostoru............................................ 107 5.1.7 Externí entita......................................................................... 108 5.1.8 Další události.......................................................................... 108 5.2 Vytvoření parseru..................................................................... 109 Obsah PHP a XML 8 5.3 Konfigurace parseru .................................................................. 109 5.4 Registrace obsluhy událostí........................................................ 110 5.5 Čtení dat................................................................................. 110 5.6 Obsluha chyb........................................................................... 111 5.7 Zapouzdření obsluhy událostí do objektu....................................... 114 5.8 Přepínání obsluhy událostí.......................................................... 117 6. DOM .................................................................................. 123 6.1 Objektová reprezentace dokumentu.............................................. 123 6.2 Načtení dokumentu................................................................... 124 6.3 Čtení dokumentu....................................................................... 126 6.3.1 Informace o uzlu...................................................................... 127 6.3.2 Pohyb po stromu...................................................................... 129 6.3.3 Výběr elementů na základě jména..................................................... 131 6.3.4 Průchod celým dokumentem........................................................... 133 6.3.5 Výběr elementu na základě ID......................................................... 139 6.3.6 Čtení atributů......................................................................... 139 6.4 Modifikace dokumentu............................................................... 141 6.4.1 Vytváření nových uzlů................................................................. 141 6.4.2 Připojování a odpojování uzlů.......................................................... 142 6.4.3 Kopírování a klonování uzlů........................................................... 147 6.4.4 Práce s atributy....................................................................... 149 6.4.5 Manipulace s textovými uzly........................................................... 150 6.4.6 Vytvoření nového DOM stromu......................................................... 151 6.4.7 Práce s fragmenty XML................................................................ 151 6.4.8 Uložení dokumentu.................................................................... 153 6.5 Konfigurace parseru.................................................................. 153 6.6 Obsluha chyb........................................................................... 154 6.6.1 Ošetření chyb při načítání XML......................................................... 155 6.6.2 Ošetření výjimek při práci s DOM stromem............................................. 156 6.7 Zpracování HTML...................................................................... 157 6.8 Rozšiřování objektů DOM........................................................... 160 6.9 Další možnosti DOM.................................................................. 161 7. XMLReader ........................................................................ 163 7.1 Vytvoření a inicializace parseru................................................... 163 7.2 Konfigurace parseru.................................................................. 164 7.3 Čtení dat................................................................................. 165 7.3.1 Čtení obsahu elementů................................................................ 166 7.3.2 Přeskočení elementu.................................................................. 167 Obsah 9 PHP a XML 7.3.3 Čtení atributů ......................................................................... 168 8. XPath ................................................................................. 171 8.1 Základní struktura výrazu.......................................................... 171 8.2 Datový model.......................................................................... 172 8.3 Testování výrazů...................................................................... 174 8.4 Identifikátory osy..................................................................... 175 8.5 Testy uzlu............................................................................... 177 8.6 Zkrácený zápis......................................................................... 178 8.7 Predikáty................................................................................ 180 8.8 Příklady dotazů........................................................................ 181 8.9 Operátory............................................................................... 182 8.9.1 Matematické operátory................................................................ 182 8.9.2 Relační operátory..................................................................... 183 8.9.3 Logické spojky........................................................................ 184 8.9.4 Sjednocení seznamů uzlů.............................................................. 184 8.10Funkce .................................................................................... 184 8.10.1Funkce pro práci s uzly ................................................................ 185 8.10.2Řetězcové funkce ...................................................................... 186 8.10.3Logické funkce ........................................................................ 189 8.10.4Funkce pro práci s čísly ................................................................ 189 8.11 Využití XPathu v DOM............................................................... 190 8.12Podpora XPath v dalších rozhraních .............................................. 194 9. Schémata ............................................................................ 195 9.1 Význam a historie schémat......................................................... 195 9.1.1 Význam schémat...................................................................... 196 9.1.2 Historický vývoj jazyků pro popis schématu dokumentu................................. 196 9.1.3 Srovnání nejpoužívanějších jazyků pro popis schématu dokumentu...................... 198 9.2 DTD ....................................................................................... 202 9.2.1 Deklarace elementů................................................................... 203 9.2.2 Deklarace atributů.................................................................... 205 9.2.3 Připojení DTD k dokumentu............................................................ 207 9.2.4 Validace dokumentů oproti DTD........................................................ 208 9.3 XML schémata......................................................................... 209 9.3.1 Datové typy........................................................................... 210 9.3.2 Jednoduché datové typy............................................................... 210 9.3.3 Komplexní datové typy................................................................ 217 9.3.4 Jmenné prostory...................................................................... 224 9.3.5 Připojení schématu k dokumentu a validace............................................ 225 Obsah PHP a XML 10 9.4 RELAX NG ............................................................................... 226 9.4.1 Základní vzory........................................................................ 228 9.4.2 Pokročilé vzory........................................................................ 233 9.4.3 Datové typy........................................................................... 241 9.4.4 Modularizace schématu................................................................ 248 9.4.5 Jmenné prostory...................................................................... 250 9.4.6 Validace oproti RELAX NG schématu.................................................... 252 9.5 Schematron............................................................................. 252 9.5.1 Validace pomocí XSLT.................................................................. 253 9.5.2 Vložení Schematronu do XML Schema.................................................. 254 9.5.3 Vložení Schematronu do RELAX NG..................................................... 255 9.5.4 Pokročilá validace..................................................................... 256 9.6 Best-practices pro návrh schémat................................................. 258 9.6.1 Elementy nebo atributy................................................................ 258 9.6.2 Jmenné prostory...................................................................... 259 9.6.3 Názvy elementů a atributů............................................................. 260 9.6.4 Defaultní a fixní hodnoty.............................................................. 261 9.6.5 Verzování schémat.................................................................... 261 9.6.6 Rozšiřitelnost schémat................................................................. 261 10. Validace ........................................................................... 265 10.1 Validace pomocí rozhraní DOM .................................................... 266 10.2 Validace pomocí rozhraní SimpleXML ............................................ 268 10.3 Validace pomocí rozhraní XMLReader ............................................ 268 10.4Schematron ............................................................................. 272 10.5Praktické využití validace ........................................................... 273 11. XSLT ................................................................................ 277 11.1Základy XSLT ........................................................................... 277 11.2Cykly – iterativní zpracování ....................................................... 282 11.3Řazení dat .............................................................................. 285 11.4Podmíněné zpracování ............................................................... 288 11.5Generování výstupu .................................................................. 291 11.5.1Generování elementů a atributů ....................................................... 292 11.5.2Generování textového výstupu ......................................................... 292 11.5.3Generování elementů a atributů s předem neznámým názvem .......................... 293 11.5.4Generování speciálních konstrukcí ...................................................... 294 11.6Zpracování dokumentů se jmennými prostory ................................. 294 11.7Předávání parametrů ................................................................. 297 11.8Podpora XSLT v PHP ................................................................. 300 Obsah 11 PHP a XML 11.9 V olání PHP funkcí z XSLT ............................................................ 305 11.10 Funkce přidané do XPathu.......................................................... 308 11.10.1document() ........................................................................... 308 11.10.2key() ................................................................................. 311 11.10.3format-number() ...................................................................... 311 11.10.4current() .............................................................................. 313 11.10.5unparsed-entity-uri() .................................................................. 313 11.10.6generate-id() .......................................................................... 314 11.10.7system-property() ..................................................................... 317 11.10.8element-available() ................................................................... 318 11.10.9function-available() ................................................................... 318 11.11 Spouštění transformací na klientovi.............................................. 318 12. Webové služby ................................................................. 323 12.1 Webové služby à la SOAP .......................................................... 324 12.1.1 Podpokličkou SOAP ................................................................... 325 12.1.2 Podpokličkou WSDL ................................................................... 326 12.1.3 PHPjako klient webové služby ......................................................... 330 12.1.4 Webová služba ........................................................................ 333 12.2 Webové služby à la REST ........................................................... 335 12.3AJAX ..................................................................................... 337 13. Zápis XML ........................................................................ 345 13.1Ruční generování XML ............................................................... 345 13.2Generování pomocí DOM ............................................................ 348 13.3 Využití třídy XMLWriter............................................................. 350 Závěr ..................................................................................... 353 Použitá literatura .................................................................... 355 Rejstřík .................................................................................. 357 Obsah PHP a XML 12 Předmluva Když jsem před více než deseti lety psal předmluvu k dnes již legendární knize PHP – tvorba interaktivních internetových aplikací[11], slíbil jsem v ní, že na doprovodný web knihy umístím informace o práci s formátem XML, které se do knihy již nevešly. Z časových důvodů k naplnění tohoto slibu nikdy nedošlo. Jako satisfakci proto přijměte tuto knihu. Její náplní je pouze XML a jeho použití v PHP. Deset let je dlouhá doba, ale myslím, že čekání se vyplatilo. Podpora XML byla v PHP až do jeho verze 5.0 poměrně partyzánská. A teprve od verze 5.2 lze PHP považovat za jazyk, ve kterém se dá s XML rozumně pracovat. O významu XML dnes již není potřeba nikoho přesvědčovat. Ať se nám to líbí nebo ne, XML je zkrátka všude a ve webových aplikacích je potřeba s tímto formátem pracovat. Ať už se jedná o importy a exporty dat, transformaci dat pro prezentační vrstvu nebo backend pro AJAXovou aplikaci. Cílem této knihy je naučit vás používat všechna existující rozhraní pro práci s technologiemi XML, která PHP nabízí. Popsán a vysvětlen je však i samotný jazyk XML, jeho syntaxe a navazující technologie jako XML schémata, dotazovací jazyk XPath a transformační jazyk XSLT. Pro pochopení výkladu tak není nutná žádná velká předchozí zkušenost s XML – vše potřebné je průběžně vysvětleno. V dnešní době začínají být papír a knihy považovány za příliš konzervativní médium. Asi jsem staromilec a mám tištěné knihy rád. Nicméně na adresehttp://www.kosek.cz/knihy/ phpxml/najdete další informace související s knihou – příklady ke stažení, opravy chyb apod. Máte-li ke knize nějaké připomínky, uvítám je na mojí emailové adrese <jirka@kosek.cz>. Na vzniku knihy má zásluhu mnoho lidí. Nevyčerpatelnou trpělivost prokázali šéfredaktoři počítačové redakce Miroslav Lochman a Daniel Vrba, kteří vydrželi pět let čekat na dokončení knihy. Pokud v knize nebude příliš chyb, je to zásluha korektorky Zuzany Vrbové a redaktorky Evy Steinbachové. Největší dík však patří mé ženě Lence a dětem, kteří trpělivě snášely mé útěky k počítači při psaní knihy. Přeji vám příjemné čtení knihy. Jirka Kosek Liberec, 10. dubna 2009 Předmluva Předmluva Úvod Vývoj moderních webových aplikací klade na vývojáře vysoké nároky, je potřeba znát široké spektrum technologií. Počínaje jazyky HTML a CSS pro definici samotné stránky a jejího vzhledu, přes Javascript pro vytváření vysoce interaktivních aplikací, po nějaký serverový jazyk jako je PHP. Každá větší aplikace navíc potřebuje někam ukládat data, typicky do databáze. K tomu je potřeba znát principy protokolu HTTP a vědět, jak obcházet jeho limity. A aby toho nebylo málo, na mnoha místech se vývojář webové aplikace setká i s formátem XML. Když XML v polovině 90. let minulého století vznikalo, původní smělé plány byly, že zcela nahradí jazyk HTML při doručování obsahu do prohlížeče. Tato myšlenka se však ukázala jako příliš revoluční a navíc problémy spojené s jazykem XHTML a jeho podporou v prohlížečích v očích mnoha webových vývojářů nevrhly na XML příliš růžové světlo. Nicméně technologie XML jsou dnes pevnou součástí mnoha webových technologií, formátů a protokolů, takže je potřeba práci s tímto formátem ovládat. Kde se na webu s XML může vývojář setkat? Syntaxi XML využívají mnohé prezentační formáty – počínaje jazykem XHTML, přes stále populárnější vektorový grafický formát SVG, až po jazyky pro definici uživatelského rozhraní v moderních RIA (Rich Internet Application) prostředích, jako je XAML v Silverlightu a MXML ve Flashi. Pokud tedy vaše skripty v PHP v minulosti generovaly převážně HTML kód, časem budou přicházet požadavky na dynamickou tvorbu modernějších, na XML založených, formátů. XML dnes zcela dominuje na poli publikování metainformací. Jedná se například o formáty pro publikování přehledů nových článků, jako jsou RSS či Atom. Protože začleňování sémantiky ve strojově čitelné podobě přímo do webových stránek je stále v plenkách, mnoho vyhledávačů nabízí vlastní formáty, ve kterých jim můžete předávat informace vylepšující vyhledávání – například Google Sitemap nebo Google Base. Další využití XML je pro komunikaci a předávání dat. XML se využívá jednak pro výměnu dat mezi backendy jednotlivých aplikací a dále pak v AJAXových aplikacích pro zasílání aktualizací dat do prohlížeče. „Enterprise“ aplikace pak pro samotnou komunikaci nevyužívají prosté XML, ale komplexnější mechanismus webových služeb. Diverzita koncových zařízení používaných pro přístup k webu se také stále zvyšuje. Webové stránky se už neprohlížejí jen z klasického počítače, ale i z chytrých telefonů nebo různých PDA. Mnohé aplikace potřebují uspokojivě řešit možnost kvalitního tisku. Už nestačí vytvořit aplikaci, která výstupy generuje jen jako HTML. Pro jednotlivá koncová zařízení je potřeba generovat odlišné formáty výstupu a webovou aplikaci je potřeba obohatit o flexibilní prezentační vrstvu. Pro vytvoření takové vrstvy lze využít i jazyk XML a stylové technologie jako XSL. Úvod Úvod Výše uvedený výčet toho, kde se na webu můžeme setkat s XML, jistě není úplný. Pouze potvrzuje to, že webový vývojář se dnes neobejde bez znalosti tohoto formátu a práce s ním. Tato kniha vás naučí vše potřebné o formátu XML a navazujících technologiích a o tom, jak lze s tímto formátem pracovat v PHP. První kapitola je určená zejména pro čtenáře, kteří ještě neznají formát XML. Seznámí se zde se syntaxí jazyka a naučí se ji kontrolovat. Druhá kapitola pak stručně shrnuje a ukazuje, jaké možnosti pro práci s XML nabízí PHP. Je to ideální místo pro porovnání jednotlivých přístupů pro práci s XML. Nemusíte tak číst celou knihu, ale v této kapitole zjistíte, jaký způsob práce s XML je pro vás nejvhodnější a ten si dále podrobněji nastudujete v odpovídající samostatné kapitole. Třetí kapitola přímo nesouvisí s XML, ale ukazuje, jak lze v PHP částečně obejít chybějící podporu znakové sady Unicode, kterou využívá i jazyk XML. Následují čtyři kapitoly, které podrobně popisují jednotlivá rozhraní pro práci s XML – SimpleXML, SAX, DOM a XMLReader. Výběr vhodného rozhraní záleží na povaze dat, která čtete, a na tom, jak je potřebujete zpracovat. Osmá kapitola seznamuje s dotazovacím jazykem XPath, který nabízí jednoduchou a zároveň mocnou metodu pro vyhledávání a výběr dat v dokumentech XML. Kromě samotného dotazovacího jazyka je zde samozřejmě popsáno, jak jej používat v kombinaci s rozhraními DOM a SimpleXML. Další dvě kapitoly se věnují kontrole (validaci) dokumentů XML. Zvláště v otevřeném prostředí internetu je potřeba počítat s nejhorším a všechny vstupy do aplikace pečlivě kontrolovat. Pro dokumenty XML takovou kontrolu nabízejí schémata, která dokáží popsat povolenou strukturu a datové typy dokument XML. Devátá kapitola tak popisuje nejpoužívanější schémové jazyky a v desáté kapitole je pak ukázáno, jak pomocí nich prakticky v PHP kontrolovat data uložená v XML. Jedenáctá kapitola vysvětluje základy jazyka XSLT a jeho použití v PHP. XSLT je nejvhodnější prostředek pro transformace dokumentů XML do dalších formátů, včetně formátu HTML. Nalezne tak uplatnění například v prezentační vrstvě webové aplikace. Následující dvanáctá kapitola se pak věnuje komunikaci mezi aplikacemi s využitím XML. Popsány jsou jak klasické webové služby, tak jednodušší mechanismy jako REST a AJAX. Poslední třináctá kapitola pak ukazuje možnosti pro generování dokumentů XML na výstupu skriptu. Kniha je zaměřena zejména na vysvětlení principů a na ukázky využití jednotlivých technologií a knihoven PHP. Ve většině případů jsou popsány všechny možnosti jednotlivých knihoven PHP. Nicméně kniha primárně neslouží jako referenční příručka, pro tyto účely je vhodné nahlížet i do dokumentace PHP na adrese http://docs.php.net/manual/en/. Všechny příklady byly testovány s PHP ve verzi 5.2 a v současné době nic nenasvědčuje tomu, že by se v blízké době mělo v jazyce PHP měnit něco, co by způsobilo nefunkčnost skriptů. Většina použitých knihoven je standardní součástí PHP. Chcete-li používat XSLT, je potřeba do PHP přidat modulphp_xsl, pro webové služby je zapotřebí modul php_soap a kapitola o Unicode využívá některé funkce z moduluphp_mbstring. Dlouhé řádky ve výpisech, které musely být rozděleny, jsou označeny pomocí znaku ‚ ►‘. Úvod PHP a XML 16 1. Syntaxe XML Chceme-li pracovat s dokumenty XML, musíme samozřejmě vědět, jak tyto dokumenty vypadají. V této kapitole se proto seznámíme se syntaxí jazyka XML a dalšími jeho rysy, které bychom měli znát. Znáte-li již XML dobře, a zajímá vás jen, jak se s ním pracuje v PHP, můžete tuto kapitolu směle přeskočit. 1.1 Elementy a struktura dokumentu Každý XML dokument se skládá z elementů. Elementy se v textu vyznačují pomocí tzv. tagů. Většině elementů odpovídají dva tagy – počáteční a koncový. <para>Toto je obsah elementu para.</para> Ukázka obsahuje jeden elementpara. Jeho obsah je vyznačen pomocí tagů <para> (počáteční tag) a</para> (ukončovací tag). Jen na okraj poznamenejme, že výše uvedená ukázka je asi nejjednodušším dokumentem XML, který vůbec můžeme vytvořit. Názvy tagů se zapisují mezi znaky ‚<‘a‚>‘. Ukončovací tag má před svým názvem ještě znak ‚/‘, aby se odlišil od počátečního. 1.1 Elementy a struktura dokumentu 1. Syntaxe XML GHNODUDFH ;0/ LQVWUXNFHSUR]SUDFRYiQt SRþiWHþQtWDJNRQFRYêWDJ REVDK HOHPHQWX FHQD REVDK HOHPHQWX SROR]ND NRPHQWiĜ DWULEXW HOHPHQW RGEHUDWHO Qi]HYDWULEXWXKRGQRWD DWULEXWX Obrázek 1.1: Základní části dokumentu XML Některé elementy nemusejí mít žádný obsah. Můžeme je samozřejmě zapisovat tak, že za počátečním tagem uvedeme hned ten koncový. <para>Toto je obsah elementu para.<br></br> A tohle také.</para> Není to však příliš pohodlné, a proto můžeme v XML použít ještě jednu variantu tagu, která říká, že element nemá žádný obsah. Počáteční tag ukončíme dvojicí znaků ‚ />‘ místo pouhého ‚>‘ a koncový tag vynecháme. <para>Toto je obsah elementu para.<br/> A tohle také.</para> Každý dokument XML musí obsahovat pro všechny počáteční tagy odpovídající koncový tag, nebo musí být počáteční tag zapsán jako element s prázdným obsahem. Následující ukázky jsou ukázkami špatných dokumentů, které nevyhovují specifikaci XML. <para>Toto je obsah elementu para.<br> A tohle také.</para> Ukázka je chybná, neboť tag<br> není ukončen. <para>Toto je obsah elementu para.<br/> A tohle také.</oara> 1. Syntaxe XML PHP a XML 18 * Počáteční tag <para> není ukončen a k ukončovacímu tagu </oara> v dokumentu neexistuje odpovídající počáteční tag. Chybou rovněž je, když se elementy v dokumentu kříží. <b>Ukázka <i>překřížení</b> elementů</i> Každý dokument XML musí být celý obsažen v jednom elementu. Následující ukázka tedy nepředstavuje správný dokument XML. <nadpis>Pokusný nadpis</nadpis> <odstavec>První odstavec</odstavec> <odstavec>Druhý odstavec</odstavec> <odstavec>Třetí odstavec</odstavec> Stačí však přidat jeden element, který vše „obalí“, a vše je v pořádku. <článek> <nadpis>Pokusný nadpis</nadpis> <odstavec>První odstavec</odstavec> <odstavec>Druhý odstavec</odstavec> <odstavec>T řetí odstavec</odstavec> </článek> 1.2 Datový model dokumentu Viděli jsme, že elementy můžeme do sebe zanořovat, takže element může obsahovat další elementy nebo text. Elementy tak vytvářejí hierarchickou stromovou strukturu. Každý dokument XML si proto můžeme představit jako strom, jehož jednotlivé uzly odpovídají jednotlivým elementům (šedé uzly v obrázku), případně textu uvnitř elementů (bílé uzly v obrázku). osoba jméno příjmení věk JanNovák 42 <osoba> <jméno>Jan</jméno> <příjmení>Novák</příjmení> <věk>42</věk> </osoba> Uzly odpovídající textovému obsahu elementů jsou ve stromu vždy na nejnižší úrovni listů a už na ně nemohou být navěšeny žádné další uzly. V případě, že má element tzv. smíšený obsah, jsou jeho dětmi ve stromové reprezentaci jak textové uzly, tak uzly odpovídající elementům. 1.2 Datový model dokumentu 1. Syntaxe XML 19 PHP a XML p Kou ření b zdraví. škodí <p>Kouření <b>škodí</b> zdraví.</p> Prázdné elementy se ve stromu dokumentu objeví jako uzly, které už také nemají žádné děti. p První ř ádka br Druhá ř ádka <p>Prvnířádka<br/> Druhářádka</p> Výše popsanému stromovému modelu dokumentu XML se říká infoset [7]. Abstraktní datový model infosetu stručně řečeno říká, že dokument XML je stromová struktura složená z jednotlivých uzlů. Uzlů je přitom několik typů (elementy, textové uzly, atributy, komentáře, instrukce pro zpracování, jmenné prostory a další). U každého uzlu pak infoset definuje několik jeho vlastností jako jméno, rodiče, seznam dětí apod. Na infosetu je tak založena většina jazyků a rozhraní, které jsou vystaveny nad XML. Je to pochopitelné, protože při práci s dokumentem XML nás většinou zajímá jeho struktura a obsah zachycený v elementech, a infoset nabízí právě tento pohled na dokument XML. Většinou nás totiž nezajímá pohled na dokument XML jako na textový soubor, ve kterém se vyskytují speciální značky oddělené pomocí znaků ‚<‘a‚>‘ od ostatního textu, protože bychom se museli sami starat o syntaktickou analýzu takového zdrojového textu. 1.3 Atributy Elementy jsou základním prostředkem pro členění informací uvnitř dokumentu XML. Kromě elementů lze pro zachycení informací využítatributy. Atributy se vždy zapisují k počátečnímu tagu elementu. <odstavec zabezpečení="důvěrné">Nějaká tajná informace.</odstavec> V naší ukázce jsme atributuzabezpečení přiřadili hodnotu důvěrné. Hodnotu atributu musíme vždy uzavřít do uvozovek nebo do apostrofů. U jednoho tagu lze použít více atributů najednou, stačí je oddělit mezerou. <odstavec zabezpečení="důvěrné" autor='Jan Novák'>Nějaká tajná informace.</► odstavec> 1. Syntaxe XML PHP a XML 20 U jednoho elementu se přitom nemohou použít dva atributy se shodným názvem. V mnoha případech je jedno, zda nějakou informaci uložíme jako element, nebo atribut. Srovnejte například následující dva fragmenty dokumentu XML: <osoba v ěk="42"> <jméno>Pepa</jméno> </osoba> <osoba> <jméno>Pepa</jméno> <věk>42</věk> </osoba> Nicméně z praxe postupně vyplynulo několik pravidel, která vám pomohou vybrat si, zda je v dané situaci lepší použít element nebo atribut. S pravidly se seznámíme v části 9.6.1. 1.4 Zápis vyhrazených znaků Vzhledem k tomu, že se znak ‚ <‘ používá pro oddělení tagů od okolního textu, není možné jej zapsat do dokumentu jen tak. Musíme ho opsat jako znakovou entitu&lt;. Vyřešte nerovnost 3x &lt; 5 Vidíme, že odkaz na znakovou entitu začíná znakem ‚ &‘, proto i tento znak musíme do dokumentu vkládat opisem&amp;. Křupavé rohlíčky vám dodá pekařství Žemlička &amp; syn Pokud potřebujeme uvnitř hodnoty atributu použít zároveň uvozovky i apostrofy, s výhodou využijeme odpovídající opisy&quot; a &apos;. XML definuje ještě pátou znakovou entitu &gt;, která zastupuje znak ‚>‘. Tento znak však ve většině případů můžeme zapisovat přímo bez nutnosti opisu. 1 Tabulka 1.1: Předdefinované znakové entity XML ZnakEntita <&lt; &&amp; >&gt; '&apos; "&quot; Jazyk XML definuje pouze těchto pět entit. Další znakové entity, které známe z HTML, jako například &nbsp;, &copy; nebo &ndash;, v XML k dispozici nejsou, nicméně si je můžeme v případě potřeby nadefinovat sami (viz 1.13.1.1). 1 Opis je nutný pouze v případě, že by se v dokumentu vyskytovala sekvence znaků ‚]]>‘. Ta se musí přepsat jako]]&gt;. 1.4 Zápis vyhrazených znaků 1. Syntaxe XML 21 PHP a XML 1.5 Názvy elementů a atributů XML je (na rozdíl například od HTML) citlivé na velikost písmen. Počáteční a koncový tag se proto musí shodovat i ve velikosti písmen. Následující element je chybný, protože si neodpovídá počáteční a koncový tag: <NÁZEV>Tento element je zapsán špatn ě.</název> Samotná jména elementů a atributů mohou přitom být vytvářena poměrně volně. První znak jména musí být písmeno nebo podtržítko, další znaky mohou navíc obsahovat i čísla, tečku a pomlčku. Písmena přitom mohou být i z jiné než anglické abecedy. Jména elementů a atributů tak můžeme psát klidně česky, nebo třeba rusky v azbuce: <имя>Булгаков</имя> 1.6 Deklarace XML Každý dokument XML by měl začínat deklarací XML, ve které určíme, jakou verzi XML používáme a v jakém kódování je soubor uložen. <?xml version="1.0" encoding="utf-8"?> <osoba> <jméno>Jan</jméno> <příjmení>Novák</příjmení> <věk>42</věk> </osoba> Každá aplikace, která podporuje XML, musí umět zpracovat soubor uložený v kódování UTF-8 nebo UTF-16. Proto bychom měli dokumenty XML přednostně ukládat a ostatním posílat v jednom z těchto kódování. V praxi se přitom častěji používá UTF-8 kvůli lepší kompatibilitě se staršími aplikacemi. Dokumenty je možné ukládat i v jiných kódováních, ale pak musíme toto kódování povinně určit v deklaraci XML a nemáme jistotu, že tento dokument zvládnou zpracovat všechny aplikace. V případě, že potřebujeme do dokumentu vložit nějaký znak, který buď není snadno dostupný na klávesnici nebo nejde reprezentovat v použitém kódování, můžeme do dokumentu vložit odkaz na číselný kód znaku v Unicode (podrobnější vysvětlení problematiky Unicode a kódování naleznete v kapitole 3). Předchozí dokument XML tak můžeme také zapsat jako: <?xml version="1.0" encoding="us-ascii"?> <osoba> <jméno>Jan</jméno> <příjmení>Nov&#xE1;k</příjmení> <věk>42</věk> </osoba> Znak „á“ byl nahrazen svým číselným kódem (U+00E1) zapsaným v šestnáctkové soustavě. Kód je možné zapsat i v desítkové soustavě, v číselném odkazu na znak pak chybí ‚ x‘. 1. Syntaxe XML PHP a XML 22 <?xml version="1.0" encoding="us-ascii"?> <osoba> <jméno>Jan</jméno> <p říjmení>Nov&#225;k</příjmení> <věk>42</věk> </osoba> 1.7 Komentáře Pokud potřebujeme v dokumentu něco vysvětlit nebo část textu dočasně skrýt, s výhodou k tomu použijeme komentář. Komentář je součástí dokumentu, ale parsery jej ignorují a není dále zpracováván. Komentář se zapisuje mezi znaky <!-- a -->. <!-- Vysvětlující text --> Komentář může obsahovat cokoliv, kromě posloupnosti znaků --. Z toho vyplývá, že komentáře do sebe bohužel nemůžeme zanořovat. V komentáři dokonce můžeme používat tagy atd. Jsou však zcela ignorovány. To se hodí pro dočasné vyřazení části dokumentu ze zpracování. <para>První odstavec.</para> <!-- <para>Šéf mi leze krkem.</para> --> <para>Třetí odstavec.</para> 1.8 Sekce CDATA Pokud potřebujeme do dokumentu vložit větší kus textu, kde se hojně používají znaky se speciálním významem jako ‚<‘, ‚>‘a‚&‘, je nepohodlné je zapisovat pomocí znakových entit. V takových případech se používá tzv. sekce CDATA. Oceníme ji zejména v případech, kdy je součástí XML dokumentu kód nějakého programu nebo HTML či XML kód. Použití sekcí CDATA si ukážeme na následujícím dokumentu. <script type="text/javascript"><![CDATA[ for (i=0; i < 10; i++) { document.writeln("<p>Ahoj</p>"); }]]> </script> Bez použití sekce CDATA by byl zápis přece jen poněkud krkolomný. <script type="text/javascript"> for (i=0; i &lt; 10; i++) { document.writeln("&lt;p&gt;Ahoj&lt;/p&gt;"); } </script> 1.7 Komentáře 1. Syntaxe XML 23 PHP a XML Obecně se tedy sekce CDATA zapisují jako <![CDATA[«text»]]>. Text přitom může obsahovat cokoliv, kromě sekvence znaků]]>. Konstrukce CDATA existuje v XML pouze pro větší pohodlí autorů, kteří zapisují XML kód ručně. Nepřidává do XML žádnou novou sémantik


       
Knihkupectví Knihy.ABZ.cz - online prodej | ABZ Knihy, a.s.