Programování

XML pro úplného začátečníka

HTML a World Wide Web jsou všude. Jako příklad jejich všudypřítomnosti se letos chystám na Velikonoce do Střední Ameriky, a pokud budu chtít, budu moci surfovat po webu, číst své e-maily a dokonce i online bankovnictví z internetových kaváren v Antigua Guatemala a Belize City. (Nemám v úmyslu to udělat, protože by mi to trvalo čas od rande, které mám s palmou a rumem naplněným kokosem.)

A přesto je navzdory všudypřítomnosti a popularitě HTML značně omezen v tom, co dokáže. Pro šíření neformálních dokumentů je to v pořádku, ale HTML se nyní používá k provádění věcí, pro které nikdy nebyl určen. Pokus o návrh vysoce výkonných, flexibilních a interoperabilních datových systémů z HTML je jako pokus postavit letadlovou loď s pilami na kov a páječkami: nástroje (HTML a HTTP) prostě nestačí.

Dobrou zprávou je, že mnoho omezení HTML bylo překonáno v XML, Extensible Markup Language. XML je snadno srozumitelný každému, kdo rozumí HTML, ale je mnohem výkonnější. Více než jen značkovací jazyk, XML je metajazyk - jazyk používaný k definování nových značkovacích jazyků. Pomocí XML můžete vytvořit jazyk vytvořený speciálně pro vaši aplikaci nebo doménu.

XML doplní, nikoli nahradí, HTML. Zatímco HTML se používá pro formátování a zobrazení dat, XML představuje kontextový význam dat.

Tento článek představí historii značkovacích jazyků a způsob, jakým XML vzniklo. Podíváme se na ukázková data v HTML a postupně přejdeme do XML, abychom ukázali, proč poskytuje vynikající způsob reprezentace dat. Prozkoumáme důvody, které možná budete potřebovat k vytvoření vlastního značkovacího jazyka, a naučím vás, jak na to. Pokryjeme základy notace XML a jak zobrazit XML ve dvou různých druzích jazyků stylů. Poté se ponoříme do Modelu objektu dokumentu, mocného nástroje pro manipulaci s dokumenty jako s objekty (nebo s manipulací struktur objektů jako dokumentů, v závislosti na tom, jak se na to díváte). Projdeme si, jak psát programy Java, které extrahují informace z dokumentů XML, s ukazatelem na bezplatný program užitečný pro experimentování s těmito novými koncepty. Na závěr se podíváme na internetovou společnost, která svou základní technologickou strategii zakládá na XML a Javě.

Je XML pro vás?

Ačkoli je tento článek určen pro všechny, kteří se zajímají o XML, má k němu zvláštní vztah JavaWorld série na XML JavaBeans. (Odkazy na související články najdete v Zdrojích.) Pokud jste tuto sérii četli a dosud ji „nezískáváte“, měl by tento článek objasnit, jak používat XML s fazolemi. jestli ty jsou tento článek slouží jako dokonalý doprovod k řadě XML JavaBeans, protože pokrývá témata, která tam nejsou nedotčena. A pokud jste jedním z mála šťastlivců, kteří mají stále články XML JavaBeans, na které se těšíme, doporučuji vám nejprve si přečíst tento článek jako úvodní materiál.

Poznámka o Javě

V počítačovém světě existuje tolik nedávných aktivit XML, že dokonce i článek této délky může povrch jen prozkoumat. Celým bodem tohoto článku je poskytnout kontext, který potřebujete k použití XML ve svých návrzích programu Java. Tento článek pojednává také o tom, jak XML pracuje s existující webovou technologií, protože mnoho programátorů Java pracuje v takovém prostředí.

XML otevírá programování na internetu a v Javě přenosným funkcím bez prohlížeče. XML uvolňuje internetový obsah z prohlížeče stejným způsobem, jakým Java uvolňuje chování programu z platformy. Díky XML je internetový obsah k dispozici skutečným aplikacím.

Java je vynikající platforma pro používání XML a XML je vynikající reprezentace dat pro aplikace Java. Jak budeme postupovat, poukážu na některé silné stránky Javy s XML.

Začněme s lekcí historie.

Počátky značkovacích jazyků

HTML, které všichni známe a milujeme (dobře, stejně víme), původně navrhl Tim Berners-Lee v CERNu (le Conseil Européen pour la Recherche Nucléaire, nebo Evropská laboratoř pro částicovou fyziku) v Ženevě, aby umožnili fyzickým blbečkům (a dokonce i nerdům) vzájemně komunikovat. HTML byl vydán v prosinci 1990 v CERNu a pro nás ostatní se stal veřejně dostupným v létě 1991. CERN a Berners-Lee rozdali specifikace pro HTML, HTTP a URL, ve skvělé staré tradici internetového sdílení a užívání.

Berners-Lee definoval HTML v SGML, Standard Generalized Markup Language. SGML, stejně jako XML, je metajazyk - jazyk používaný k definování dalších jazyků. Každý takto definovaný jazyk se nazývá aplikace SGML. HTML je aplikace SGML.

SGML vzešel z výzkumu prováděného primárně v IBM na reprezentaci textových dokumentů na konci 60. let. IBM vytvořila GML („General Markup Language“), předchůdce jazyka SGML, a v roce 1978 vytvořil American National Standards Institute (ANSI) svou první verzi SGML. První standard byl vydán v roce 1983, návrh standardu byl vydán v roce 1985 a první standard byl publikován v roce 1986. Je zajímavé, že první standard SGML byl publikován pomocí systému SGML vyvinutého Andersem Berglundem v CERNu, organizaci, která jako viděli jsme, dali nám HTML a web.

SGML je široce používán ve velkých průmyslových odvětvích a vládách, jako jsou velké letecké, automobilové a telekomunikační společnosti. SGML se používá jako dokumentový standard na Ministerstvu obrany USA a Internal Revenue Service. (Pro čtenáře mimo USA jsou daňoví poplatníci IRS.)

Albert Einstein řekl, že všechno by mělo být co nejjednodušší, a už vůbec ne jednodušší. Důvod, proč se SGML nenachází na více místech, je ten, že je extrémně propracovaný a složitý. A HTML, které najdete všude, je velmi jednoduché; pro mnoho aplikací je to příliš jednoduché.

HTML: Veškerá forma a žádná podstata

HTML je jazyk určený k „mluvení“ o dokumentech: nadpisech, názvech, titulcích, písmech atd. Je silně zaměřen na strukturu dokumentu a prezentaci.

Je pravda, že umělci a hackeři dokázali zázraky pomocí relativně nudného nástroje zvaného HTML. HTML však má vážné nevýhody, díky nimž se špatně hodí pro navrhování flexibilních, výkonných a evolučních informačních systémů. Zde je několik hlavních stížností:

  • HTML není rozšiřitelný

    Rozšiřitelný značkovací jazyk by vývojářům aplikací umožnil definovat vlastní značky pro situace specifické pro aplikaci. Pokud nejste gorila o hmotnosti 600 liber (a možná ani tehdy), nemůžete požadovat, aby všichni výrobci prohlížečů implementovali všechny značky značek potřebné pro vaši aplikaci. Takže jste uvízli v tom, co vám umožní tvůrci velkých prohlížečů nebo W3C (World Wide Web Consortium). Potřebujeme jazyk, který nám umožňuje vytvářet vlastní značky značek, aniž bychom museli volat výrobce prohlížeče.

  • HTML je velmi zaměřené na zobrazování

    HTML je skvělý jazyk pro účely zobrazení, pokud nevyžadujete hodně přesného ovládání formátování nebo transformace (v tom případě to smrdí). HTML představuje směs logické struktury dokumentu (nadpisy, odstavce atd.) S prezentačními značkami (tučně, zarovnání obrázků atd.). Protože téměř všechny značky HTML mají co do činění s tím, jak zobrazit informace v prohlížeči, je HTML pro ostatní běžné síťové aplikace - jako je replikace dat nebo aplikační služby - zbytečné. Potřebujeme způsob, jak sjednotit tyto běžné funkce s displejem, takže stejný server, který se používá k procházení dat, může také například provádět podnikové obchodní funkce a spolupracovat se staršími systémy.

  • HTML není obvykle přímo opakovaně použitelné

    Vytváření dokumentů v textových procesorech a jejich následné exportování ve formátu HTML je do jisté míry automatické, ale k dosažení přijatelných výsledků vyžaduje přinejmenším určité vylepšení výstupu. Pokud se změní data, ze kterých byl dokument vytvořen, je třeba přepracovat celý překlad HTML. Weby, které zobrazují aktuální počasí po celém světě po celý den, obvykle zvládají toto automatické přeformátování velmi dobře. Obsah a styl prezentace dokumentu jsou odděleny, protože návrháři systému chápou, že se jejich obsah (teploty, předpovědi atd.) Mění neustále. Potřebujeme způsob, jak specifikovat prezentaci dat z hlediska struktury, aby bylo možné při aktualizaci dat konzistentně a snadno „znovu použít“ formátování.

  • HTML poskytuje pouze jeden „pohled“ na data

    Je obtížné psát HTML, které zobrazuje stejná data různými způsoby na základě požadavků uživatelů. Dynamické HTML je začátek, vyžaduje však enormní množství skriptování a není obecným řešením tohoto problému. (Dynamické HTML je podrobněji popsáno níže.) Potřebujeme způsob, jak získat všechny informace, které můžeme chtít procházet najednou, a podívat se na ně různými způsoby na klientovi.

  • HTML má malou nebo žádnou sémantickou strukturu

    Většině webových aplikací by prospěla schopnost reprezentovat data spíše významem než rozložením. Například může být velmi obtížné najít na internetu to, co hledáte, protože nic nenasvědčuje významu dat v souborech HTML (kromě značek META, které jsou obvykle zavádějící). Typ

    Červené

    do vyhledávače a získáte odkazy na Red Skeltona, červeného sledě, červeného chňapala, červené zděšení, Red Letter Day a pravděpodobně stránku nebo dvě „Knihy, které jsem Red“. HTML nemá žádný způsob, jak určit, co konkrétní položka stránky znamená. Užitečnější značkovací jazyk by představoval informace z hlediska jejich významu. Potřebujeme jazyk, který nám říká, že ne

    Zobrazit

    informace, ale spíše to, co daný blok informací

    je

    takže víme, co s tím dělat.

SGML nemá žádnou z těchto slabostí, ale aby byl obecný, je to vlasy trhající komplex (alespoň v jeho úplné podobě). Jazyk používaný k formátování SGML (jeho „stylový jazyk“), nazývaný DSSSL (Document Style Semantics and Specification Language), je extrémně výkonný, ale obtížně použitelný. Jak získáme jazyk, který se zhruba stejně snadno používá jako HTML, ale má většinu síly SGML?

Počátky XML

Vzhledem k tomu, že web explodoval na popularitě a lidé na celém světě se začali učit o HTML, docela rychle začali narážet na výše uvedená omezení. Heavy-metal SGML winks, kteří s SGML pracovali roky v relativním temnotě, najednou zjistili, že světští lidé chápali koncept označení (tj. HTML). Odborníci na SGML začali zvažovat možnost použití SGML na webu přímo, místo toho, aby používali pouze jeho jednu aplikaci (opět HTML). Zároveň věděli, že SGML, i když je silný, je pro většinu lidí jednoduše příliš složitý na to, aby jej bylo možné použít.

V létě roku 1996 Jon Bosak (v současnosti online architekt informačních technologií společnosti Sun Microsystems) přesvědčil W3C, aby mu umožnil vytvořit výbor pro používání SGML na webu. Vytvořil vysoce výkonný tým muckety-mucks ze světa SGML. V listopadu téhož roku tito lidé vytvořili začátky zjednodušené formy SGML, která zahrnovala vyzkoušené a pravdivé funkce SGML, ale se sníženou složitostí. To byl a je XML.

V březnu 1997 vydal Bosak svůj významný dokument „XML, Java a budoucnost webu“ (viz Zdroje). Nyní, o dva roky později (velmi dlouhá doba života webu), je Bosakův krátký článek stále dobrým, i když datovaným, úvodem k tomu, proč je používání XML tak vynikající nápad.

SGML byl vytvořen pro obecné strukturování dokumentů a HTML byl vytvořen jako aplikace SGML pro webové dokumenty. XML je zjednodušení SGML pro obecné použití na webu.

Konceptuální příklad XML

Celá tato řeč o „vymýšlení vlastních značek“ je docela mlhavá: Jaký druh značek by chtěl vývojář vymyslet a jak by byl použit výsledný XML? V této části projdeme příklad, který porovnává a kontrastuje reprezentaci informací v HTML a XML. V další části („XSL: Líbí se mi tvůj styl“) přejdeme k zobrazení XML.

Nejprve si vezmeme příklad receptu a zobrazíme ho jako jeden možný dokument HTML. Potom zopakujeme příklad v XML a probereme, co nás to kupuje.

Příklad HTML

Podívejte se na malou část kódu HTML v seznamu 1:

   Vápno Jello Marshmallow Cottage Cheese Surprise 

Vápno Jello Marshmallow Cottage Cheese Surprise

Oblíbená moje babička (ať odpočívá v klidu).

Složení

MnožstvíJednotkyPoložka
1krabicevápenná želatina
500Grůznobarevné malé marshmallows
500mltvaroh
pomlčkaOmáčka tabasco (volitelně)

Instrukce

  1. Připravte si vápennou želatinu podle pokynů na obalu ...

Výpis 1. Nějaký HTML

(Verze tohoto seznamu pro tisk je k dispozici na adrese example.html.)

Při pohledu na HTML kód v seznamu 1 je asi každému jasné, že se jedná o recept na něco (něco hrozného, ​​ale přesto recept). V prohlížeči naše HTML vytváří něco takového:

Vápno Jello Marshmallow Cottage Cheese Surprise

Oblíbená moje babička (ať odpočívá v klidu).

Složení

MnožstvíJednotkyPoložka
1krabicevápenná želatina
500Grůznobarevné malé marshmallows
500mlTvaroh
 pomlčkaOmáčka tabasco (volitelně)

Instrukce

  1. Připravte si vápennou želatinu podle pokynů na obalu ...

Výpis 2. Jak vypadá HTML v seznamu 1 v prohlížeči

Reprezentace tohoto receptu v HTML má řadu výhod:

  • Je to docela čitelné. Značka může být trochu záhadná, ale pokud je správně rozložena, je docela snadné ji sledovat.

  • HTML lze zobrazit téměř v jakémkoli prohlížeči HTML, dokonce i v jednom bez grafických schopností. To je důležitý bod: Displej nezávisí na prohlížeči. Pokud by tam byla fotka výsledků přípravy tohoto receptu (a člověk určitě doufá, že tam není), zobrazila by se v grafickém prohlížeči, ale ne v textovém prohlížeči.

  • Pro obecnou kontrolu nad formátováním můžete použít kaskádový styl (CSS - o těch si povíme níže).

S HTML jako datovým formátem však existuje jeden zásadní problém. The význam dojde ke ztrátě různých dat v dokumentu. Je opravdu těžké vzít obecný HTML a zjistit, co znamenají data v HTML. Skutečnost, že existuje tohoto receptu s a (množství) 500 ml () z tvaroh by se z tohoto dokumentu těžko těžil způsobem, který je obecně smysluplný.

Myšlenka na data v dokumentu HTML něco znamená může být trochu těžké pochopit. Webové stránky jsou pro lidského čtenáře v pořádku, ale pokud se program chystá zpracovat dokument, vyžaduje jednoznačné definice toho, co značky znamenají. Například značka v dokumentu HTML uzavírá název dokumentu. To značka znamená a neznamená to nic jiného. Podobně HTML tag znamená „řádek tabulky“, ale to je málo užitečné, pokud se váš program pokouší číst recepty, aby mohl například vytvořit nákupní seznam. Jak může program najít seznam ingrediencí z webové stránky formátované v HTML?

Jistě, můžete napsat program, který popadne záhlaví z dokumentu, přečte záhlaví sloupců tabulky, zjistí množství a jednotky každé složky atd. Problém je v tom, že každý formátuje recepty jinak. Co když se snažíte získat tyto informace například z webu Julie Childsové a ona se pořád trápí s formátováním? Pokud Julia změní pořadí sloupců nebo přestane používat tabulky, rozbije váš program! (I když je třeba říci: Pokud Julia začne vydávat takové recepty, možná bude chtít přemýšlet o změně kariéry.)

Nyní si představte, že tato stránka s recepty pocházela z dat v databázi a vy byste chtěli mít možnost tato data odesílat. Možná byste jej chtěli přidat do své obrovské databáze receptů doma, kde jej můžete vyhledávat a používat, jak chcete. Váš vstup je bohužel HTML, takže budete potřebovat program, který dokáže tento HTML přečíst, zjistit, jaké jsou všechny „Ingredience“, „Pokyny“, „Jednotky“ atd., A poté je importovat do databáze. To je hodně práce. Zejména proto, že všechny tyto sémantické informace - opět význam dat - existovaly v této původní databázi, ale byly zakryty v procesu transformace do HTML.

Nyní si představte, že byste mohli vymyslet svůj vlastní jazyk pro popis receptů. Místo popisu, jak měl být recept zobrazen, byste popsali informační struktura v receptu: jak by každá informace souvisela s ostatními částmi.

Příklad XML

Pojďme si vytvořit značkovací jazyk pro popis receptů a přepsat náš recept v tomto jazyce, jako v Seznamu 3.

  Lime Jello Marshmallow Cottage Cheese Surprise Moje babička má nejraději (ať odpočívá v klidu). 1 limetková želatina 500 různobarevných drobných marshmallows 500 tvarohová omáčka Tabasco omáčka Připravte limetkovou želatinu podle pokynů k balení 

Výpis 3. Vlastní značkovací jazyk pro recepty

Bude to pro vás malé překvapení, protože jste tak chytrý čtenář, že tento recept v novém formátu je ve skutečnosti dokument XML. Možná skutečnost, že soubor začínal lichou hlavičkou

dal to pryč; ve skutečnosti by měl každý soubor XML začínat touto hlavičkou. Jednoduše jsme vynalezli značkovací značky, které mají zvláštní význam; například „An je (množství ve specifikovaných jednotkách) jednotlivce , což je možná volitelný"Náš dokument XML popisuje informace v receptu z hlediska recepty, místo toho, jak na to Zobrazit recept (jako v HTML). Sémantika nebo význam informací se udržuje v XML, protože k tomu byla navržena sada značek.

Poznámky k notaci

Je důležité určit si nějakou nomenklaturu rovně. Na obrázku 1 vidíte a počáteční značka, který začíná uzavřenou oblastí textu, známou jako Položka, podle název štítku. Stejně jako v HTML mohou tagy XML obsahovat seznam atributy (skládající se z název atributu a hodnota atributu.) The Položka definované značkou končí na koncová značka.

Ne každá značka obsahuje text. V HTML je

značka znamená „zalomení řádku“ a neobsahuje žádný text. V XML nejsou takové prvky povoleny. Místo toho XML má prázdné značky, označeno lomítkem před závěrečnou pravoúhlou závorkou ve značce. Obrázek 2 ukazuje prázdnou značku z našeho receptu XML. Prázdné značky mohou mít atributy. Tento příklad prázdné značky je standardní zkratka XML pro .

Kromě těchto notových rozdílů od HTML jsou strukturální pravidla XML přísnější. Každý dokument XML musí být dobře tvarovaný. Co to znamená? Číst dál!

Ooh-la-la! Dobře vytvořený XML

Koncept dobře formované práce pochází z matematiky: Je možné psát matematické výrazy, které nic neznamenají.Například výraz

2 ( + + 5 (=) 9 > 7

vypadá (trochu) jako matematika, ale není to matematika, protože nedodržuje notační a strukturální pravidla matematického výrazu (alespoň na této planetě). Jinými slovy výše uvedený výraz není dobře tvarovaný. Matematické výrazy musí být dobře tvarované, než s nimi budete moci dělat cokoli užitečného, ​​protože výrazy, které nejsou dobře tvarované, nemají smysl.

Dobře vytvořený dokument XML je jednoduše dokument, který dodržuje všechna notační a strukturální pravidla pro XML. Programy, které mají v úmyslu zpracovat XML, by měly odmítnout jakékoli vstupní XML, které nedodržuje pravidla pro správnou formu. Nejdůležitější z těchto pravidel jsou následující:

  • Žádné neuzavřené značky

    V HTML se vám podaří projít všemi druhy nezvyklých věcí. Například ve většině prohlížečů HTML můžete „otevřít“ položku seznamu pomocí

  • a nikdy to „nezavírejte“ pomocí . Prohlížeč pouze zjistí, kde by byl a automaticky jej za vás vloží. XML neumožňuje tento druh nedbalosti. Každá počáteční značka musí mít odpovídající koncovou značku. Důvodem je, že část informací v souboru XML má co do činění s tím, jak se vzájemně vztahují různé prvky informací, a pokud je struktura nejednoznačná, tak i informace. XML tedy jednoduše neumožňuje dvojznačnou strukturu. Tato nejednoznačná struktura také umožňuje zpracovávat dokumenty XML jako datové struktury (stromy), jak to krátce vysvětlím v diskusi o Object Object Model.

  • Žádné překrývající se značky

    Značka, která se otevírá uvnitř jiné značky, se musí zavřít před zavřením značky obsahující. Například sekvence

    Pojďme to celé odvolat

    není dobře tvarovaná, protože otevírá se uvnitř ale nezavírá se uvnitř . Správná sekvence musí být

    Pojďme to celé odvolat

    Jinými slovy, struktura dokumentu musí být přísně hierarchická.

  • Hodnoty atributů musí být uvedeny v uvozovkách

    Na rozdíl od HTML neumožňuje XML hodnoty atributů „nahý“ (tj. Značky HTML jako

    , kde kolem hodnoty atributu nejsou uvozovky). Každá hodnota atributu musí mít uvozovky (
    ).

  • Textové znaky () a (") musí být vždy reprezentovány 'znakovými entitami'

    Chcete-li tyto tři znaky (závorka levého úhlu, závorka pravého úhlu a dvojité uvozovky) reprezentovat v textové části XML (nikoli v označení), musíte použít speciální znakové entity (

    <

    ), (

    >

    ), a (

    "

    ), v uvedeném pořadí. Tyto znaky jsou speciální znaky pro XML. Soubor XML používající řekněme znak dvojité uvozovky v textu uzavřeném ve značkách v souboru XML není dobře vytvořený a správně navržené analyzátory XML způsobí chybu pro takový vstup.

„Dobře tvarovaný“ znamená „srovnatelný“

Obecný XML analyzátor je program nebo třída, která umí číst jakýkoli dobře vytvořený XML na jeho vstupu. Mnoho prodejců nyní nabízí analyzátory XML v Javě zdarma; (Odkazy na tyto balíčky najdete v části Zdroje ve spodní části tohoto článku). Analyzátory XML rozpoznávají dobře vytvořené dokumenty a vytvářejí chybové zprávy (podobně jako kompilátor), když dostanou vstup, který není dobře vytvořený. Jak uvidíme, tato funkce je pro programátora velmi užitečná: Jednoduše zavoláte analyzátoru, který jste vybrali, a postará se o detekci chyb atd. Zatímco všechny analyzátory XML kontrolují řádnou formu dokumentů (což znamená, jak jsme viděli, že všechny značky dávají smysl, jsou správně vnořeny atd.), ověřování Analyzátory XML jdou o krok dále. Validující analyzátory také potvrzují, zda dokument je platný; to znamená, že struktura a počet značek mají smysl.

Například většina prohlížečů zobrazí dokument, který má (nesmyslně) dva prvky, ale jak to může být? Pouze jeden nebo žádný název nemá smysl.

Pro další příklad si představte, že v seznamu 3 složka „tvaroh“ vypadala takto:

  500 9 Tvaroh 

Tento dokument XML je jistě dobře vytvořený, ale nedává to smysl. Není strukturálně platný. Je to nesmysl pro obsahovat <Množství>. Co je z toho ?

Problém je v tom, že máme dobře formovaný dokument, ale není to příliš užitečné, protože XML nedává smysl. Potřebujeme způsob, jak určit, co dělá dokument XML platným. Například, jak můžeme určit, že a značka může obsahovat pouze text (a ne jiné prvky) a hlásit jako chyby jakýkoli jiný případ?

Odpověď na tuto otázku spočívá v něčem, co se nazývá definice typu dokumentu, na které se podíváme dále.

$config[zx-auto] not found$config[zx-overlay] not found