Řekl bych, že tento článek reaguje na něco úplně jiného, než byly ty námitky ;-)
Začal bych něčím OT. Varianta
<a>
<href>http ://www.root.cz/</href>
<name>root.cz</name>
</a>
se mi líbí podstatně víc -- za předpokladu, že nedatlím www stránky v notepadu, ale že jsou to strukturovaná data, která se mají uchovat těch deset let, jak píšete.
Málokdo tvrdí, že XML je úplně k ničemu, a že za chvíli bublina splaskne a nebude ho používat vůbec nikdo. Nicméně XML je momentálně buzzword, XML musí být všude a ve všem, a kdo řekne, že se XML k něčemu nehodí, je v nekterých kruzích zlynčován ;-) Tohle *je* nafouknutá bublina, která splaskne, až čas ukáže kde je XML skutečně výhodné.
Dál není pravda, že nemusím používat všechny ty X* technologie. No, nemusím pravda používat *úplně* všechny. Nicméně musím používat, nebo aspoň vzít v úvahu ty, které používají lidé, organizace a software, s nimiž potřebuji nebo chci spolupracovat. A jak správně popisujete, každý používá něco jiného, takže nakonec si moc nevyberu.
>Dál není pravda, že nemusím používat všechny ty X*
>technologie. No, nemusím pravda používat *úplně*
>všechny. Nicméně musím používat, nebo aspoň vzít v
>úvahu ty, které používají lidé, organizace a
>software, s nimiž potřebuji nebo chci
>spolupracovat. A jak správně popisujete, každý
>používá něco jiného, takže nakonec si moc >nevyberu.
Záleží přece na tom jak chcete spolupracovat. Jestli se jedná o vývoj softwareové komponenty pro jinou firmu tak asi ano, ale pokud si chcete s nejakou firmou pouze vyměnovat informace (ve standartizované formě), tak vám je jedno jestli používají X* nebo mají pronajatých 40 důchodců co to louskají ručně.
Co třeba validace? Já, jakožto zpozdilec, si normálně vystačím s DTD. Nicméně máme XML Schema, Relax NG, XDR, SOX, Schematron, DSD a kdovíco ještě. Když někomu pošlu DTD, tak musí použít k validaci DTD nebo si to do něčeho převést. (DTD je ještě ta nejmírnější možnost, protože je nejstarší, takže funguje všude.)
"Řekl bych, že tento článek reaguje na něco úplně jiného, než byly ty námitky ;-) "
Samozrejme. Toto je reakce na nektere hlasy tvrdici, ze je XML je vubec cele spatne. K namitkam, ze XML API jsou prilis obtizna, se (tento) clanek temer nevyjadruje a nic "neuvadi na spravnou miru."
Souhlasím, až na optimistický názor, že XML časem splaskne. XML jen tak nesplaskne, řeší totiž dost závažný problém všech programátorů v C, C++, Javě a podobně dementních jazycích, že *nedokáží jednoduše načíst a zapsat data zapsaná v podobě vlastního zdrojového kódu*. To je reálná potíž a XML ji jaksi řeší.
Nic proti tomu že se pokusili definovat nějaké řešení, kdyby to aspoň udělali dobře, tak by mohlo být dobře použito jako "společná řeč". Jenomže použít pro reprezentaci dat formát určený pro zápis formátovaných textových dokumentů?!?! Ještě že si nevybrali nějakou verzi .doc nebo RTF...
Přidám další nedostatek: Kolik práce dá napsat kompletní a validující XML parser? Ad přítomnost atributů: Proč to dělat jednoduše, když to jde složitě, že, tak zavedeme atributy...
..
nedokáží jednoduše načíst a zapsat data zapsaná v podobě vlastního zdrojového kódu
Souhlas. Nebylo by proto lepsi "na to jit od lesa" a zaradit jednoduchy kompilator ANSI C (plus jednoduchy restricted execution/interpreter) do standardni knihovny? Melo by to oproti XML same vyhody a orezany self-compiling prekladac C ma nejake 3kB. http://fabrice.bellard.free.fr/otcc/
Proc by nesla? Kdyz nekdo tu knihovnu naportuje do Javy a C# tak to pujde precist i tam.. XML taky neprectete bez XML parseru. A co se tyce tech vyhod, tak jsou zrejme:
1. Neni nutne vytvaret novou syntaxi a novy datovy format.
2. Stejny instrument popisuje data i algoritmus.
3. Odpada potreba DTDcek.
4. Validace je vypocetne uplna.
Je to tedy univerzalnejsi, jednodussi a silnejsi nastroj.
No to je mi bomba. Místo jakz takz rozumneho XML budeme data uladat v nejakem demetnim tricet let starem cecku? Me by se treba libilo ukladat data jako zdrojak v Ade95 (a bylo by to mnohem hezci, nez C). To by me zajimalo, jak by to ostatni nacetli. XML je fajn, protoze jde mimo programovaci jazyky.
Nechápu, co jste chtěl říci tím C, C++, Java, ... Jsou to kompilované programovací jazyky. Produktem kompilace je spustitelný program na dané platformě. Zpracování svého vlastního zdrojového kódu je obtížné. OK.
Pak máme interpretované jazyky -- shell, Python, Perl, ... Tam se zpracováním a modifikací svého kódu problém není. Cenou je to, že musí být interpretovány (mno, teda jak kdy, ale to je technický detail).
A XML? XML je značkovací jazyk. Výsledkem kompilace XML je třeba PDF, PostScript, HTML, .... Jakým způsobem bude to PDF zpracovávat svůj zdrojový text, tj. to XML? Nebo jak jste to přirovnání k C myslel?
Nerozumím co myslíte pojmem "kompilované" a "interpretované" jazyky a jaký přesně rozdíl je v tomto smyslu třeba mezi Javou a Pythonem. Co jsem měl na mysli já je kupříkladu přítomnost `exec' v Pythonu a jeho nepřítomnost v Javě. Dělám-li konfigurák pro program v Pythonu, nejjednodušší (byť ne nutně vždy nejlepší) je zapsat ho v Pythonu. Je-li program v Javě, žádnou podobně jednoduchou možnost nemám.
Tohle chápu, ale nechápu tu návaznost na XML.
Napíšu to jednodušeji: XML je jen forma uchování dat, takže skutečnost, že je v XML možné [mimo jiné] zaznamenat aplikaci zpracovávající XML, o ničem nevypovídá. V ASCII také mohu [mimo jiné] zaznamenat aplikaci zpracovávající ASCII.
Trochu jiná věc je zmiňovaný lisp, kde právě není to ,,mimo jiné``.
Přiznám se, že teď asi taky nechápu, na co se ptáte :-), tak zkusím doplnit, co jsem říkal předtím: Když pracuji v Pythonu a potřebuji snadno zapsat nějaká data, zapíšu je jako pythonový program. Když pracuji v Javě a potřebuji snadno zapsat nějaká data, v Javě to dost dobře nejde. Proto hledám něco jiného a vymyslím si třeba XML.
V Pythonu se o něco jako XML začnu zajímat teprve v okamžiku, kdy si potřebuji vyměňovat data s jiným prostředím. V Javě něco podobného potřebuji již mnohem dříve. No a když je pro Javu, C a C++ už hotové XML a knihovny k němu jako *opravdu potřebný* nástroj (byť pro daný účel pitomě navržený), nelze moc očekávat, že XML bublina v nejbližších deseti až dvaceti letech splaskne.
mno ale na druhou stranu ,zase nedochazi k takovym extremum ,kdy jsem delal nejake upravy v ldapu a po pomerne dlouhe dobe jsem zjistil ,ze je treba zacit psat hned od zacatku radky :(((( - ja bych docela uvital vsechny konfiguraky v unixech v XML - vzdyt napsat dneska graficke gui k textovemu konfigu je docela opruz
muzu se zeptat co TIMHLE NESMYSLEM chtel basnik rici ?
Ja kdyz jsem psal jako 7 letej parchant v basicu, a potreboval jsem zapsat nejaka data, tak jsem je proste zapsal, at uz to bylo cislo, text, obrazek a cokoli jinyho, do souboru jak to lezelo a bezelo. Kdyz jsem to same potreboval udelat v pascalu, c, c++, a kdyz to potrebuju ted v C#, udelam to same (pokud to nervu z/do DB). Proste zapisu do souboru slepenec "bezvyznamnych" bajtu , ktere dohromady daji informaci, kterou potrebuju.kdyz to pak mam nacist, pravdepodobne vim, jak je to ulozeny, takze to zas bez problemu nactu. XML je o tom, ze nekdy je treba data dostat nekam, kde nemaji chut psat si neco, co by tomu blitku bajtu rozumelo, nebo kdyz je vyzadovana citelnost. za svuj zivot jsem poznal jen 3, slovy tri lidi, kteri (pokud to bylo treba, ne snad z masochismu) byli schopni rucne editovat DBF (datovy format pouzivany foxpro/dbase), naproti tomu rucne opravit XML zas takovy problem neni.
navic si nedovedu dost dobre predstavit, jak by se tvaril uzivatel plain-textoveho editoru, ktery by misto jeho textu ulozil zdrojovy kod programu ktery umi ten text zobrazit atd...
pokud jste to snad myslel jinak, zkuste to vysvetlit tak, aby lidem, kteri zrejme nebudou na takove urovni jako vy nepripadalo, ze mluvite z cesty, nebo ze jste snad dokonce uzil vetsi nez male mnozstvi nejakeho halucinogenu ;-))
Až budete mít více zkušeností s programováním (které se nezískávají jen množstvím napsaného kódu), možná pochopíte.
Jinak ještě poslední příklad. Z mého hlediska je běžně používaný zápis v ~/.profile mnohem jednodušší než alternativy, které uvádíte. Srovnejte:
Shell:
export LANG=czech
XML:
<set-variable name="LANG" export=export>czech</set-variable>
Memory dump:
... dosaďte si sám ...
Víc už nemám co dodat. Howgh.
Myslim ze 15 let u pocitace cloveku (pokud tam jen ehraje miny a nevyplnuje formulare) uz neco da. Jedine co me napadlo ze byste tim mohl myslet je u skriptovacich jazyku jako perl,python & dalsi je ukladat data do zdrojaky ve forme
x1=...
x2=...
a to mi prislo natolik zvrhle, ze jsem se to ani peopovazoval vyslovit.
Pravdepodobe jste vsak myslel neco jineho, ne prasackeho a jeste pravdepodobneji genialniho, takze byste me, jako zkusenejsi (ne jen mnozstvim napsaneho kodu) "kolega" mohl osvitit.
dale nevim co jste se tim export & spol snazil rici ...
a jiste ze by to slo napsat usporneji, jako napr
<export name="$tmp">xxx</export>
<export>tmp=xxx</export>
nebo tez v shelu:
$tmp=xxx
export tmp
co jste chtel dokazat zbytecne nafouknutym zapisem ?
ze to umite napsat i delsi ??
Teda, z tohohle sem, mirne receno, na vetvi.
Kdyz pisu v jakemkoliv jazyce, ktery se spousti ze zdrojaku (Perl, Python apod.), delam taky oblibenou cunarnu, ze pisu konfiguraci a zakladni data na zacatek programu (nebo oddeleneho modulu, ale to je v podstate totez).
Ale ukladat vsechna data ve forme zdrojaku, to snad ne? Nebo jak jste to myslel?
Nebo se tu mluvi o serializaci, ktera interne vyuziva moznosti jazyka? To je ale k dispozici pro vetsinu jazyku, minimalne napr. pro Javu, v C jsou take serializacni knihovny.
Tady jde o PRUHLEDNY a citelny format vymeny dat a nechapu souvislost.
Musím se přiznat že mi taky nejprve chvíli trvalo co měl Milan na mysli, zkusím to podat trochu jinak. Omezím se na datový formát pro konfigurační soubory.
Nejjednodušší konfigurák obsahuje jen flat seznam prirazeni PROMENNA=LITERAL. Už u trošinku složitější aplikace potřebuju ty atributy strukturovat- napadají mne třeba virtualhosty u Apache. Takže směřujeme k hierarchické struktuře atributů. Přidáme balast a nazveme to XML a ono to funguje a když to použijeme na dokumenty bude to pěkně interoperabilní.
Problém je že ani tohle nestačí. Co je to konfigurák? Konfigurák je vlastně nový program který vznikl jako speciální verze původní aplikace. Podle OO metrik se dá konfigurační soubor chápat jako instanciace aplikace.
Mám dejmetomu atribut TIMEOUT který je ve vteřinách. Proč musím 5 minut psát jako 300 a nemůžu prostě napsat 5*60?
Konfiguráky se snaží popisovat vše nejlépe literály, v lepším případě jednoduchou gramatikou ale brání se uvádění výrazů nebo nedejbože bloku kódu jako hodnoty atributů.
Přitom některé věci které musejí být v konfiguračním souboru si o to přímo říkají- například zápis access pravidel. Access pravidla jsou v podstatě funkce které mají mnoho argumentu a vracejí boolean (povolit/zakázat). Argumentů je fůra: KDO (role uživatele), CO (typ operace), KDE (nad jakým objektem), KDY. Jak chcete tohle parametrizovat POUZE DATY? (klasifikace argumentu KDE je další problém- třeba v DB aplikacích často chci aby řízení přístupu záviselo nejen na jménu tabulky ale i obsahu konkrétního záznamu)
Závěr je že každá netriviální aplikace potřebuje konfigurák, který musí mít stejnou vyjadřovací sílu jako aplikace sama. Toto je možno řešit dvěma způsoby:
1) konfigurák má stejný formát jako aplikace
2) použít XML nejen pro data ale i pro kód (big maglajz).
Legračním důsledkem je že pokud se důsledně použije XML alternativa, bude nám stačit napsat META-XML-PROCESOR jako jedinou binárku. Všechny ostatní aplikace lze přepsat do formy přehledných :) XML dokumentů. Vznikne tak akorát jedna vrstva abstrakce navíc- zcela zbytečně.
Myslím že proti použití XML jako "citelny format vymeny dat" nikdo zásadní výtky nemá (krom neefektivity, zbytečné ukecanosti, množství balastu a složitých api, ale co je bez chyby). XML mohla být dobrá alternativa CSV fajlů- umí věci jako pojmenování sloupců a strukturovaný obsah. Jenže oni se snaží z toho dělat něco víc, takže to končí znovuvynalézáním kola a zbytečnou reimplementací už existujících nástrojů.
Jen bych upozornil, že XML != "...formát určený pro zápis formátovaných textových dokumentů?!?! Ještě že si nevybrali nějakou verzi .doc nebo RTF... "
XML je naopak formát určený pro popis struktury dat, nikoli formátování textových dokumentů. Možná by bylo spávnější říci dokonce metaformát/metajazyk, který umožňuje vytvoření vlastního jazyka pro potřeby konkrétního uživatele. Někteří uživatelé si mohou na základě XML vytvořit vysoce strukturované formáty, jiný zase jazyk, který umí zachytit třeba formátování dokumentu -- např. WordML v novém Wordu 2003.
Ale rozhodně nelze XML považovat za jazyk pro zápis formátovaných textových dokumentů.
OT. Tím udělat dobře jste myslel něco na bázi Lispu/Scheme? Ty by jistě také fungovalo, v něčem možná i lépe. Ale k jazykům tohoto druhu má mnoho lidí předsudky, stejně tak, jako mnoho lidí mělo předsudky k SGML, takže se nerozšířily tak masově, jak by si asi zasloužily. U delších dokumentů může být navíc velmi přehledné, když u koncového tagu vidíte, co vlastně ukončujete. Tuhle situaci vám ")" moc neulehčí. Podobnou vlastnost nabízelo SGML v podobě různých minimalizací, které umožňovaly koncový tag úplně vypustit, nebo jej zapsat např. jako </>. Sice je to pořád více než ), ale idea je podobná. Ale úplně životaschopná asi nebyla, když XML až na pár minoritních oblastí SGML zcela vytlačilo.
Možná jsem mimo, ale podle mě XML vychází ze SGML, což je jazyk pro reprezentaci dokumentů. XML chápu jako konkrétní, zjednodušenou, instanci SGML. Tipuji, že kdyby SGML nebylo tak trochu mamut, pro nějž je velmi obtížné napsat parser, XML by vytvořeno nebylo. A obtížnost napsání parseru je podle mě pravý důvod, proč SGML bylo XML vytlačeno, ne to jak konkrétně lze nebo nelze zapsat uzavírací značku.
Pod "udělat dobře" jsem nemyslel nic konkrétního. Stačí cokoliv, co (tolik) netrpí uváděnými nedostatky. *Možná* třeba něco jako YAML -- nestudoval jsem to, tak nevím, ale přinejmenším tam uváděné cíle vypadají rozumně (přičemž XML jich většinu nesplňuje).
SGML je stejně jako XML metajazyk. Můžete si v něm vytvořit vlastní značkovací jazyk pro zápis jakéhokoliv druhu dat -- textových dokumentů, datových struktur, záznamů z relační databáze, vektorových obrázků, chemických vzorců, ...
XML je podmnožina SGML. Z SGML byly odstraněny minimalizace a hlavně byla zafixována SGML deklarace. SGML deklarace sloužila k definici toho, jakými znaky se vlastně tagy uvozují apod. Takže SGML dokument nemusel používat "<" a ">", ale jakékoliv jiné znaky. Tyto vlastnosti byly pravým důvodem (vaším mamutem), proč bylo obtížné napsat parser SGML. V XML proto byly tyto vlastnosti odstraněny, použití DTD je nepovinné a znaková sada je Unicode.