- 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 |
< | < | menší než |
& | & | ampersand |
> | > | větší než |
' | ' | apostrof |
" | " | 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é <, ', 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
- Nahrání textového souboru do elementu DIV
- Vytvoření požadavku na hlavičku
- Vytvoření specifického požadavku na hlavičku
- Seznam dat z XML souboru
- Ukázkový příklad ve VBScriptu
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.