
Jazyk XML byl vynalezen v roce 1996. Jakmile se objevil, lidé začali chybně chápat jeho možnosti využití a pro účely, k nimž se snažili přizpůsobit, nebyla to nejlepší volba.
Není přehnané říct, že drtivá většina XML schémat, která jsem viděl, byla neefektivním nebo nesprávným použitím XML. Navíc takové použití XML svědčilo o zásadním nepochopení toho, čím XML v první řadě je.
XML je značkovací jazyk. To není datový formát.V drtivé většině XML schémat toto rozlišení jasně nezohlednili, pletli XML s datovým formátem, což nakonec znamenalo chybu v samotném výběru XML, protože ve skutečnosti byl potřeba právě datový formát.
Pokud se nebudeme zabývat detaily, XML je nejlepší pro anotaci bloků textu se strukturou a metadaty. Pokud vaším hlavním cílem není práce s textovým blokem, volba XML pravděpodobně nebude oprávněná.
Z tohoto úhlu pohledu existuje jednoduchý způsob, jak ověřit, jak dobře je XML schéma provedeno. Vezměme například dokument v předpokládaném schématu a odstraníme z něj všechny tagy a atributy. Pokud v tom, co zůstane, není žádný smysl (nebo pokud zůstane prázdný řetězec), pak je buď vaše schéma postaveno špatně, nebo jste prostě neměli používat XML.
Dále uvedu několik nejčastěji se vyskytujících příkladů nesprávně postavených schémat.
Zde vidíme příklad neopodstatněné a podivné (i když velmi rozšířené) snahy vyjádřit pomocí jazyka XML jednoduchý slovník „klíč-hodnota“. Pokud odstraníme všechny tagy a atributy, zůstane prázdný řetězec. V podstatě tento dokument představuje, ať to zní jakkoli absurdně, sémantickou anotaci prázdného řetězce.
<root name="John" city="London" />Co je ještě horší, tady nemáme pouze sémantickou anotaci prázdného řádku jako extravagantní způsob vyjádření slovníku — tentokrát je 'slovník' přímo zakódován ve formě atributů kořenového prvku. V důsledku toho se zvolená sada názvů atributů na prvku stává neurčitou a dynamickou. Navíc je zřejmé, že vše, co autor ve skutečnosti chtěl vyjádřit, je jednoduchá syntaxe 'klíč-hodnota', ale místo toho přijal zcela podivné rozhodnutí použít XML, vynucujíc použití jednoho prázdného prvku pouze jako prefix pro používání syntaxe atributů. A takové schémata se mi velmi často naskýtají.
John
LondonTo je už něco lepšího, ale nyní jsou klíče z nějakého důvodu metadata, zatímco hodnoty ne. Nanejvýš podivný pohled na slovníky. Pokud odstraníte všechny tagy a atributy, polovina informací bude ztracena.
Správné vyjádření slovníku v XML by vypadalo přibližně takto:
Name
John
City
LondonAle pokud se lidé rozhodli podivným způsobem aplikovat XML jako datový formát a poté jej používat k uspořádání slovníku, měli by pochopit, že to, co dělají, je nevhodné a nepohodlné. Ještě častěji designéři chybně vybírají XML pro vytváření svých aplikací. Ale ještě častěji zhoršují situaci bezmyšlenkovitým použitím XML v některé z výše popsaných forem, ignorujíc fakt, že XML pro to zkrátka není vhodné.
Nejhorší schéma XML? Mimochodem, cena za nejhorší schéma XML, jaké jsem kdy viděl, náleží formátu souboru konfigurace automatického přidělování zdrojů pro telefony IP telefonie Polycom. Tyto soubory vyžadují stahování XML souborů požadavku přes TFTP, které… V každém případě, tady je úryvek z jednoho takového souboru:
<softkey
softkey.feature.directories="0"
softkey.feature.buddies="0"
softkey.feature.forward="0"
softkey.feature.meetnow="0"
softkey.feature.redial="1"
softkey.feature.search="1"
softkey.1.enable="1"
softkey.1.use.idle="1"
softkey.1.label="Foo"
softkey.1.insert="1"
softkey.1.action="..."
softkey.2.enable="1"
softkey.2.use.idle="1"
softkey.2.label="Bar"
softkey.2.insert="2"
softkey.2.action="..." />To není něčí neúspěšný vtip. A to není má výmysl:
- Prvky se jednoduše používají jako prefix pro přiřazení atributů, které samy o sobě mají hierarchická jména.
- Pokud je potřeba přiřadit hodnoty několika instancím záznamu určitého typu, je nutné použít jména atributů, ve kterých jsou indexy..
- Kromě toho, atributy začínající na
softkey.je třeba umístit na prvky<softkey/>, atributy, které začínají nafeature.je třeba umístit na prvky<feature/>atd., i když to vypadá naprosto zbytečně a na první pohled nonsens. - A nakonec, pokud jste doufali, že první komponenta názvu atributu se vždy shoduje s názvem prvku — nic takového! Například atributy
up.musí být přiřazeny k<userpreferences/>. Pořadí přiřazení jmen atributů k prvkům je libovolné a prakticky plně.
Dokumenty nebo data.Občas někdo dělá naprosto podivné věci, když se snaží porovnávat XML a JSON, čímž ukazuje, že nepochopil ani jedno, ani druhé. XML je jazyk značkování dokumentů. JSON na druhé straně představuje formát strukturovaných dat, takže porovnávat je navzájem je jako snažit se porovnat teplé s měkkým.
Pochopení toho pomůže pochopit rozdíl mezi dokumenty a daty.Jako analogii lze XML zhruba vzít jako strojově čitelný dokument. Ačkoliv je určen k čtení strojů, metaforicky se vztahuje k dokumentům a z tohoto pohledu je ve skutečnosti srovnatelný s dokumenty PDF, které bývají většinou strojově nečitelnými.
Například v XML má pořadí prvků význam. A v JSON je pořadí dvojic "klíč-hodnota" uvnitř objektů bezvýznamné a není definováno. Pokud chcete získat neuspořádaný slovník z dvojic "klíč-hodnota", skutečné pořadí, v jakém prvky v tomto souboru následují, není důležité. Ale můžete z těchto dat vytvořit mnoho různých dokumentů,protože v dokumentu existuje určité pořadí. Metaforicky to je analogie dokumentu na papíře, i když nemá fyzické rozměry na rozdíl od tiskoviny nebo souboru PDF.
Ve svém příkladu správného zobrazení slovníku ve formátu XML je ukázán pořádek prvků ve slovníku, na rozdíl od zobrazení ve formátu JSON. Tento pořádek nemohu ignorovat: taková lineárnost je původně vlastní modelu dokumentů a formátu XML. Někdo může při interpretaci tohoto XML dokumentu rozhodnout o ignorování pořadí, ale hádat se o tom je zbytečné, protože tato otázka přesahuje diskusi o samotném formátu. Navíc, pokud se dokument zobrazí v prohlížeči s připojeným kaskádovým stylem, bude možné vidět, že prvky slovníku následují v určitém pořadí, a nikoliv jinak.
Jinými slovy, slovník (fragment strukturovaných dat) může být převeden na n různé možné dokumenty (ve formátu XML, PDF, na papíře atd.), kde n — počet možných kombinací prvků ve slovníku, a to jsme ještě nezohlednili další možné proměnné.
Zároveň z toho také vyplývá, že pokud chcete předat pouze data, použití strojově čitelného dokumentu bude neefektivní. Používá se model, který je v tomto případě nadbytečný, pouze bude překážet. Navíc, abyste mohli extrahovat původní data, bude třeba napsat program. Je nepravděpodobné, že by mělo smysl používat XML pro něco, co v určitém stádiu nebude formátováno jako dokument (například pomocí CSS nebo XSLT, nebo obojí), protože to je hlavní (pokud ne jediný) důvod pro dodržování modelu dokumentu.
Kromě toho, protože XML nemá pojem čísel (nebo logických výrazů či jiných typů dat), všechna čísla prezentovaná v tomto formátu jsou považována pouze za dodatečný text. Pro extrakci dat musí být známa schéma a její spojení s příslušnými vyjadřovanými daty. Také je třeba vědět, kdy daný prvek textu představuje číslo na základě kontextu, a mělo by se s ním pracovat jako s číslem, atd.
Proces extrakce dat z XML dokumentů se od procesu rozpoznávání skenovaných dokumentů, které obsahují například tabulky s mnoha stránkami číselných dat, příliš neliší. Ano, v zásadě je to možné, ale není to nejoptimálnější cesta – snad kromě krajního případu, kdy nejsou k dispozici žádné alternativy. Rozumným řešením je jednoduše najít digitální kopii původních dat, která nejsou zakotvena v dokumentovém modelu, kde jsou data spojena s jejich konkrétním textovým vyjádřením.
Nepřekvapuje mě, že je XML populární v byznysu. Důvodem je, že formát dokumentů (na papíře) je pro podnikání srozumitelný a známý, a chtějí i nadále používat příjemný a pochopitelný model. Ze stejného důvodu se v byznysu příliš často používají dokumenty ve formátu PDF místo strojově zpracovatelnějších formátů – protože jsou stále vázány na koncept tištěné stránky s konkrétní fyzickou velikostí. To se týká i těch dokumentů, které pravděpodobně nikdy nebudou vytištěny (například PDF soubor s 8000 stránkami registru dokumentace). Z tohoto pohledu je používání XML v byznysu v podstatě projevem skevomorfismu. Lidé rozumí metaforické představě tištěné stránky omezené velikosti a vědí, jak vytvářet obchodní procesy na základě tištěných dokumentů. Pokud je to vaším měřítkem, dokumenty bez omezené fyzické velikosti, které jsou strojově čitelné – dokumenty XML – představují inovaci a zároveň představují známý a pohodlný ekvivalent dokumentu. To však nebrání tomu, aby zůstaly nesprávným a příliš skevomorfním způsobem prezentace dat.
Jedinné XML schémata, která mohu opravdu považovat za správné použití tohoto formátu, jsou XHTML a DocBook.
Zdroj: habr.com
