XML pro pokročilé v kostce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

XML pro pokročilé v kostceXML pro pokročilé v kostce

 

XML pro pokročilé v kostce

Google       Google       27. 10. 2007       31 591×

  • Jmenné prostory
  • CDATA sekce
  • Objekt XMLHttpRequest()
  • XML DHTML Behaviors
  • Technologie založené na XML

Pokud jste se pečlivě věnovali látce ze seriálu „XML pro začátečníky“, měli byste být vybaveni základními dovednostmi jazyka XML. Znalost těchto základních dovedností ovšem nestačí na některé technologie založené na XML. K rozšíření Vašich znalostí vám pomůže tento článek. Rovněž se zde setkáte s některými méně používanými technikami jazyka.

Na webové stránce w3schools.com je látka, kterou zde prezentuji, probírána, dle mého názoru, do zbytečné hloubky, proto jsem ji zestručnil do jediného článku „XML pro pokročilé v kostce“.

Jmenné prostory

Jak dobře víte, jména elementů nejsou v XML předdefinovaná, nýbrž si je vytváří tvůrce XML dokumentu. Představme si dva XML dokumenty: tabulku výnosů a tabulku nákladů. Oba obsahují stejný rodičovský element (<tabulka>). Pokud se tyto dva XML dokumenty dají dohromady, nastane konflikt názvů.

Řešení konfliktu názvů použitím prefixu

<?xml version="1.0"?>

<hv>

	<v:tabulka xmlns:v="vynosy">  
		<v:trzby> 1582000</v:trzby>  
		<v:uroky> 1500</v:uroky>  
		<v:ostatni> 120000</v:ostatni> 
	</v:tabulka>

	<n:tabulka xmlns:n="naklady">  
		<n:spotrebovane_nakupy> 950000			
		</n:spotrebovane_nakupy>  
		<n:uroky> 89000</n:uroky>  
		<n:sluzby> 280000</n:sluzby>  
		<n:ostatni> 350000 </n:ostatni> 
	</n:tabulka>

</hv>

V rodičovském elementu elementů, které budou obsahovat prefix, je nutné tento prefix definovat. Pokud je zde prefix definován, všichni potomci se stejným prefixem spadají pod tento jmenný prostor. Jinak skončí načítání XML dokumentu s chybou. 

Atribut xmlns je umístěn v úvodním tagu rodičovského elementu a definuje jmenný prostor.

Syntaxe: xmlns:prefix_jmenného_prostoru="URI_jmenného_prostoru"

Poznámka: URI (Uniform Resource Identifier) je řetězec znaků, který určuje internetový zdroj. Nejobvyklejší je URL (Uniform Resource Locator), tedy internetová doména. Použití URI pro název jmenného prostoru není povinné. Důležité je, aby byl název unikátní.

Obecné jmenné prostory

Definicí obecného jmenného prostoru pro element nám odpadá povinnost používání prefixu ve všech potomcích.

<?xml version="1.0"?>

<hv>

	<tabulka xmlns="vynosy">  
		<trzby> 1582000</trzby>  
		<uroky> 1500</uroky>  
		<ostatni> 120000</ostatni> 
	</tabulka>

	<tabulka xmlns="naklady">  
		<spotrebovane_nakupy> 950000			
		</spotrebovane_nakupy>  
		<uroky> 89000</uroky>  
		<sluzby> 280000</sluzby>  
		<ostatni> 350000 </ostatni> 
	</tabulka>

</hv>

Jmenné prostory v praxi

S jmennými prostory jsme se setkali již v XML pro začátečníky – 3. část v kapitole o XSL.

XML CDATA

Všechen text v XML dokumentu je parsovaný parserem. To může být občas na škodu, a proto existuje sekce CDATA. Text umístěný v ní je parserem ignorován.

Parsování dat

Parsování XML dat neunikne ani text mezi dvěma elementy. Pokud se například parser setká s elementem

<majitel><jmeno>Bill</jmeno><prijmeni>Gates</prijmeni></majitel>

zalomí podelementy:

<majitel>
	<jmeno>Bill</jmeno>
	<prijmeni>Gates</prijmeni>
</majitel>

Při vytváření XML dokumentů je nutné používat místo několika znaků jejich kódy. Jedním z těchto znaků je „<“. Parser tento znak bere jako začátek nového elementu, takže bude generovat chybu. Kódy nepovolených znaků a znaků, které se doporučují psát kódem, jsou zde:

Kód Znak Význam
&lt; < menší než
&amp; & ampersand
&gt; > větší než
&apos; ' apostrof
&quot; " uvozovky

CDATA

Seznam nepovolených znaků sice není nijak dlouhý, ale v případě, že budete chtít jako obsah elementu mít zdrojový kód webové stránky, tak by všudypřítomné &lt;, &apos;, atd. působilo velice chaoticky. Tím by zanikla jedna z hlavních předností XML dokumentů: přehlednost. Právě pro tyto případy existuje sekce CDATA.

Sekce CDATA začíná <![CDATA[ a končí ]]>. Vše uvnitř je ignorováno parserem, takže můžete bez obav psát nepovolené znaky. Je ovšem zakázána kombinace znaků „]]>“!

Kódování XML

Shrnuto a podtrženo:

  • Při používání cizích znaků, jako jsou æ, ø, å, ê, é, ř, byste měli uložit XML dokument s kódováním Unicode (většina editorů vás dokonce upozorní).
  • V XML dokumentu musí být použito stejné kódování, v kterém je XML dokument uložen.
  • K definici kódování v XML dokumentu existuje atribut encoding.
<?xml version="1.0" encoding="windows-1252"?>

XML na serveru

Při nahrávání a ukládání na server se s XML dokumenty nakládá úplně stejně jako s HTML. S použitím ASP či PHP není nijak komplikované vygenerovat XML kód přímo na webu. Postup v ASP naleznete zde..

Situace se nepatrně komplikuje, budete-li chtít vytvořit soubor a poté jej uložit na server. Ovšem i v tomto případě je situace poměrně snadno řešitelná. Zdrojový kód je zde.

Objekt XMLHttpRequest

Použitím objektu XMLHttpRequest mohou weboví vývojáři po načtení stránky měnit její obsah bez nutnosti znovunačítání (pozn. korektora: technika též známa jako Ajax). XMLHttpRequest se používá k vytváření velmi dynamických webových rozhraní. Jedno z takových můžete vidět na stránce Google Suggest. Pokud začnete psát do vyhledávacího pole, JavaScript posílá písmena na server a ten vrací seznam návrhů. Objekt XMLHttpRequest není zatím specifikován v žádném z W3C doporučení.

Vytváříme objekt XMLHttpRequest

Pro prohlížeče Mozilla, Firefox, Safari, Opera a Netscape přísluší kód

var xmlhttp=new XMLHttpRequest()

a pro Internet Explorer

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

Příklad použití XMLHttpRequest pro načtení obsahu XML dokumentu je zde:

request.html

<html>
<head>
<script type="text/javascript">
var xmlhttp

function loadXMLDoc(url)
{
xmlhttp=null
// kód pro Mozillu, Firefox, ... 
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest()
  }
// kód pro IE
else if (window.ActiveXObject)
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change
  xmlhttp.open("GET",url,true)
  xmlhttp.send(null)
  }
else
  {
  alert("Váš prohlížeč nepodporuje XMLHTTP.")
  }
}

function state_Change()
{
// Pokus xmlhttp hlásí "načteno"
if (xmlhttp.readyState==4)
  {
  // if "OK"
  if (xmlhttp.status==200)
  {
  alert("XML data OK")
  document.getElementById('A1').innerHTML=xmlhttp.status
  document.getElementById('A2').innerHTML=xmlhttp.statusText
  document.getElementById('A3').innerHTML=xmlhttp.responseText
  }
  else
  {
  alert("Problém v získání XML dat:" + xmlhttp.statusText)
  }
  }
}

</script>
</head>

<body onload="loadXMLDoc('note.xml')">
<h2>Using the HttpRequest Object</h2>

<p><b>stav:</b>
<span id="A1"></span>
</p>

<p><b>Text stavu:</b>
<span id="A2"></span>
</p>

<p><b>odpověď:</b>
<br><span id="A3"></span>
</p>

</body>
</html>

note.xml

<?xml version="1.0" encoding="ISO-8859-1" ?> 

<note>
  <to>Tove</to> 
  <from>Jani</from> 
  <heading>Reminder</heading> 
  <body>Don't forget me this weekend!</body> 
</note>

Upozornění: Spustíte-li tento příklad na svém PC, může se stát, že program nedokáže načíst data kvůli neznámé chybě. Po spuštění na webovém serveru již fungoval příklad bez problémů.

Poznámka: Důležitou vlastností je onreadystatechange. Tato vlastnost je rukojetí událostí, které se spouští po každé změně stavu. Čísla stavů jsou 0 (neinicializovaný) až 4 (kompletní). Pomocí funkce xmlhttpChange kontrolujeme změnu stavu. Můžeme tedy určit, kdy je proces kompletní, a pokračovat, pouze byl-li úspěšný.

Reference

Metody

Metoda Popis
abort() Ukončí současný požadavek.
getAllResponseHeader Vrátí kompletní nastavení http hlavičky jako řetězec.
getResponseHeader("část_hlavičky") Vrátí hodnotu konkrétní části http hlavičky.
open("metoda","URL",async,"uziv_jmeno","heslo") Specifikuje metodu, URL a další volitelné atributy požadavku.

Parametr metoda může mít hodnotu „GET“, „POST“ nebo „PUT“ (GET používáme, když požadujeme data, a POST, když odesíláme data [hlavně pokud je objem dat více než 512 B]).

Parametr async určuje, zda má být požadavek prováděn asynchronně či nikoli. true znamená, že skript po odeslání dat bude pokračovat v běhu bez čekání na odpověď. false znamená, že skript bude čekat na odpověď. V tomto případě hrozí, že odpověď nepřijde, například kvůli problémům serveru, a uživatel bude počastován zprávou „Neodpovídá“.

send (hodnota) Odesílá požadavek.
setRequestHeader ("jmeno","hodnota") Přidá dvojici jméno/hodnota do http hlavičky, která má být odeslána.

Vlastnosti

Vlastnost Popis
onreadystatechange Rukojeť události, která se spouští při každé změně stavu.
readyState Vrátí stav objektu.

0 = neinicializováno
1 = načítá
2 = načteno
3 = interaktivní
4 = kompletní
responseText Vrátí odpověď jako řetězec.
responseXML Vrátí odpověď jako XML. Tato vlastnost vrací XML dokument, který může být poté zkoumaný a parsovaný pomocí metod a vlastností konstrukčních uzlů W3C DOM.
status Vrátí stav jako číslo (např. 404 pro „Nenalezeno“ nebo 200 pro „OK“.
statusText Vrátí stav jako řetězec (např. „Nenalezeno“ nebo „OK“).

Další příklady

XML DHTML Behaviors

Behaviors, které spatřili světlo světa s vydáním prohlížeče IE 5, nám umožňují přidat DHTML funkcionalitu do HTML elementu s jednoduchostí CSS. DHTML behaviors nepoužívají tag <script>, ale CSS atribut „behavior“, který obsahuje URL souboru s příponout HTC, jenž obsahuje vlastní chování elementu. Soubor HTC je psaný v XML.

Syntaxe: behavior: url(nazev_souboru.htc);

Poznámka: Atribut behavior je podporovaný pouze prohlížeči IE 5 a vyššími. Ostatní prohlížeče (Mozilla, Firefox, Netscape atd.) jej ignorují.

Příklad

Následující HTML soubor obsahuje element <style>, který definuje behavior pro element <h1>. XML dokument behave.htc je pod HTML souborem.

<html>
<head>
<style type="text/css">
h1 { behavior: url(behave.htc) }
</style>
</head>

<body>
<h1>Přejeď myší!!!</h1>
</body>
</html>
<attach for="element" event="onmouseover" handler="hig_lite" />
<attach for="element" event="onmouseout" handler="low_lite" />

<script type="text/javascript">
function hig_lite()
{
element.style.color='red'
}
function low_lite()
{
element.style.color='blue'
}
</script>

Technologie založené na XML

XHTML (Extensible HTML)
Přísnější a čistší verze HTML.
XML DOM (XML Document Object Model)
Popisuje standardní způsob pro přístup a manipulaci s XML dokumenty.
XSL (Extensible Style Sheet Language)
Skládá se ze tří částí: XSLT, XPath a XSL-FO, které jsou popsány níže.
XSLT (XSL Transformations)
Používá se k převodu XML dokumentu do jiných XML formátů (např. XHTML).
XPath
Jazyk pro navigaci a vyhledávání informací v XML dokumentech.
XSL-FO (Extensible Style Sheet Language Formatting Objects)
Odnož o formátování dat na výstup.
XLink (XML Linking Language)
Jazyk pro vytváření hyperodkazů v XML dokumentu.
XPointer (XML Pointer Language)
Umožňuje XLink hyperodkazům, aby odkazovaly na více částí XML dokumentu.
DTD (Document Type Definition)
Používá se k popisu správných elementů v XML dokumentu.
XSD (XML Schema)
Na XML založená alternativa k DTD.
XForms (XML Forms)
Používá XML k popisu formulářových dat.
XQuery (XML Query Language)
Sestaven pro uchovávání XML dat.
SOAP (Simple Object Access Protocol)
Na XML založený protokol, který umožňuje aplikacím vyměňovat data přes HTTP.
WSDL (Web Services Description Language)
Na XML založený jazyk pro popis webových služeb a přístup k nim.
RDF (Resource Description Framework)
Na XML založený jazyk pro popis webových zdrojů.
RSS (Really Simple Syndication)
Formát pro sdílení obsahu mezi různými webovými stránkami.
WAP (Wireless Application Protocol)
Sestrojen pro zobrazování internetového obsahu pro bezdrátové klienty (např. mobilní telefony).
SMIL (Synchronized Multimedia Integration Language)
Jazyk pro popis audiovizuálních prezentací.
SVG (Scalable Vector Graphics)
Popisuje grafiku v XML.

Nyní jste vybaveni dostatkem vědomostí z jazyka XML. Doporučuji začít se věnovat některé z na-XML-založené technologii.

Zdroj: www.w3schools.com

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

4 názory  —  4 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
Autor se zabývá webovými programovacími jazyky a Assemblerem. Rád pracuje v Příkazovém řádku a experimentuje s operačními systémy.
Web    

Nové články

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý