<!doctype fontconfig system "fonts.dtd"> <!-- /etc/fonts/fonts.conf file to configure system font access --> <fontconfig> <match target="pattern"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="family" mode="assign"> <string>monospace</string> </edit> </match> </fontconfig>
Však ona je pravda, že XML není _primárně_ určeno pro úpravu lidmi. Ale nepozdává se mi ten "příklad" nezformátovaného XML a navíc ještě bohatšího na informace.
Neřekl jsem, že má XML u fontconfig smysl (nebo že nemá).
Ale co si budeme povídat, konfigurační soubory "vlastnost=hodnota" taky nejsou ideální pro úpravy lidmi. Aspoň co se týče mě.
Osobně vidím tyto výhody v XML: 1) standardní formát; 2) téměř každý jazyk má knihovny pro jeho zpracování; 3) větší možnost skladování informací než v "klasických" konfigurácích; 4) když na to přijde, tak je i přehlednější, např:
XML:
- modul 1 - podmodul 1 - vlastnost 1: nějaká hodnota - vlastnost 2: nějaká hodnota - ... - modul 2 ...
Klasický styl:
modul1_podmodul1_vlastnost1 = nějaká hodnota modul1_podmodul1_vlastnost2 = nějaká hodnota modul2_podmodul1_vlastnost1 = nějaká hodnota ...
1) standardní formátTo mi připomnělo ten slavný citát Grace Hopperové na téma "standardy"... :o)))
2) téměř každý jazyk má knihovny pro jeho zpracováníAno, a některé z nich jsou dokonce použitelné i bez úplné ztráty sebeúcty. :-) Stejně jako téměř každý jazyk má knihovny pro zpracování textu. Jsou dokonce jazyky, u kterých je napsání parseru pro text snad ještě snadnější, než zpracování XML vstupu, viz třeba haskellovský Parsec (vřele doporučuju podívat se na něj, až hodíš na FELu Javu do žita, možná se Ti budou líbit i některé jeho operátory :o)). Chvílemi mám pocit, že XML opravdu snad vymysleli kvůli C++ a Javě. :]
3) větší možnost skladování informací než v "klasických" konfigurácíchOpravdu nevím, co tohle znamená. :-)
4) když na to přijde, tak je i přehlednější, např:A třeba takové
modul1 { podmodul1 { vlastnost1="něco" vlastnost2="něco jiného" } podmodul2 { tohleje="úplnákravina" } }...by nestačilo? To první, co píšeš, není XML, nemá to komplementární zobáčky. :-) To už bych za XML mohl prohlásit Lisp nebo Algol - taky mají hierarchickou blokovou strukturu (jeden se závorkami kulatými, druhý se složenými).
Ano, ale to znamená napsat si to sám. :-) (Nebo si opatřit existující dostupné knihovny a doufat, že nemají svá "specifika".)Toho není ušetřeno ani XML. A pokud nepoužiješ třeba XPath, což něco stojí (minimálně dokument v paměti a kus výkonu), tak si ten kód na SAXí eventy stejně musíš napsat sám. Where is the difference? Když jsem něco takového kdysi psal, fakt mi nepřišlo, že bych si tím něco zjednodušil.
Ano, ale v těchto jazycích je obvykle složité napsat jiný program než parser (aspoň z toho, co jsem viděl).Zato v Javě jsem si připadal, že se v ní píše všechno stejně špatně. :-) Ne všichni musejí tento Tvůj názor sdílet.
To znamená, že se tam lépe umístí i něco složitějšího než je řádka textu. A můžeš s tím lépe pracovat, např. pomocí atributů atp. Budu se mýlit, když řeknu, že do jedné vlastnosti "klasického" konfiguráku lze zapsat jen atomickou hodnotu?
Máš fakt malou fantazii. :-) Začínám chápat, proč máš rád XML. Jsi zvyklý uvažovat v mezích jeho konceptů, a proto nevidíš, co se dá řešit jinak.
Kupříkladu mi není jasné, jak by "můžeš s tím lépe pracovat, např. pomocí atributů atp." mělo být relevantní. Atributy můžu mít kdekoli, ani tomu nemusím říkat atributy. Chvílemi mi dokonce přijde, že dělení na atributy a elementy je jen pro zlost. Chvílemi opravdu není jasné, jestli co v datovém formátu nacpat do atributu a co do elementu jako PCDATA.
Tohle dokonce vidím jako jeden z viditelných symptomů toho, že se XML často používá k něčemu, pro co nebylo navržené: V dokumentech platí, že PCDATA je textový obsah dokumentu, kdežto atributy určují způsob jeho zobrazování (nebo to z něj, co nedokáže vyjádřit hierarchická struktura a názvy elementů, případně jiné neobsahové věci, třeba jedinečná ID), takže není co řešit. Ale kde je hranice ve výměnném datovém formátu? Pokud je ta distinkce v (údajně) "obecném" metaformátu natolik neintuitivní a nesamozřejmá, že tisíce lidí cítí potřebu rozebírat to kolem dokola, neznamená to, že je něco špatně? Tímto Ti děkuji za nahrávku na smeč. :-)
Žádný "klasický" konfigurák navíc neexistuje, protože nic takového není definované. A nikdo Ti nebrání udělat si pro neatomické hodnoty třeba syntaxi hodnoty = ["Jedna", "Dvě", "Tři"]
, a věřím, že slušný parser alternativu mezi atomickou hodnotou a seznamem hodnot zvládne na pár řádků. :-)
Ale to už se pomalu dostáváme zase ke XML. Jen tam místo zobáčků jsou složené závorky.
Nedostáváme. Zatím jsme pouze na úrovni jednoduchého jazyka s blokovou strukturou. Jestli nechceš flat file, níž se jít už moc nedá, a pokud jdeš výš, můžeš si vybírat, jaké struktury zavedeš. Tvrdím, že pokud se jedná 1) o jazyk určený k ručním úpravám, 2) bez ambic, které má XML (rozšiřitelnost, výměnný formát, ve kterém je víc stryuktury, než textového obsahu) a obzvlášť 3) s malou až střední gramatikou (na které se toho nedá moc zkazit - nebavíme se tu o C++! :)), je blbost sahat ihned ke XML.
Standardizujme to, vytvořme pro většinu jazyků knihovny a... a pojmenujme to XML 2. :-)
Směle do toho, nadšený javisto! :-D
Pokud se ale lidé dělající na určitém projektu shodnou, jak postupovat (aby nebyl každý pes jiná ves), není problém. Je to podle mě stejná prkotina jako shodnout se, jestli složené závorky za podmínkou patří na stejný řádek jako podmínka...To tedy určitě není, protože preference v umístění složené závorky nezmění gramatiku jazyka, kdežto umístění kusu dat do atributu místo do elementu má pro schéma docela vážné následky, kupříkladu kvůli atomicitě atributů vyvstává nutnost hacků typu
Card:email.type="internet;pref;work"
, na kterou nás upozornil pan Kvasnička o kus níže, a trošku problematické je vkládání podelementů do atributu :-) - problém je to hlavně ve chvíli, kdy zjistím, že něco, co jsem chtěl jako atribut, chci ve skutečnosti jako element, protože to je zásah poměrně brutální (jiný handling v SAXu, jiný handling v XPathu...). Kdežto závorku v Cčku přeformátuju hned. :-) Takže nevím, jak jsi k tomuhle srovnání dospěl.
... a nakonec zjistíš, že jsi vytvořil uzly XML. Jen jsi je zapsal jinak. Nemám malou představivost, naopak: umím si představit, jak je tohle neefektivní. :-) A co se týče rychlosti, nevím, nevím. Nejspíš by se to řešilo pomocí nějakých regulárních výrazů. Pokud by byly složitější (nebo jich bylo hodně), už by se to na výkonu asi projevilo. Zejména, pokud bys to implementoval v interpretovaných jazycích (můj odhad).Proč by to mělo být neefektivní? Pomocí regulárních výrazů stejně napíšeš jen lexer (to už jste brali, ne? ;-)), a i tenhle stavový automat bude jednodušší a rychlejší pro jakýkoli rozumný "tradiční" jazyk než pro XML. Samozřejmě, že vyšší vrstva to svou mírně vyšší složitostí trošku vykompenzuje, ale pokud se neřeší C++, tak nechápu, kde bereš ten názor, že XML je rychlík. Jednou jsem zkoušel parsovat 2MB XML soubor přes Expat, který by snad měl být nejrychlejší, a ve skutečnosti byl osmkrát pomalejší, než když jsem data převedl do izomorfních S-výrazů. Ne, kvůli rychlosti se XML opravdu nepoužívá, to už spíš má smysl jít do pohodlnost a zaměstnat na tahání dat XPath a XQuery, když už to nebude rychlé, aspoň to bude rychle. :-)
A nejhorší je náchylnost k chybám. Záladní věci si ošetříš, ale téměř vždycky se najde koumák, co do toho napíše něco, co nemá. A co program nezvládne.
To je nevýhoda složitých gramatik. XML má "gramatiku" (ehm) celkem jednoduchou (i když taky ne triviální, přinejmenším vezme-li se v úvahu požadavek na korektnost, aspoň to tvrdí Uche Ogbuji), zato přesouvá zodpovědnost za strukturu "výš do aplikace". Skoro jsem v pokušení říct "pro jednoho '(XML) parser', pro jiného jenom lexer". :-) Existence XML nijak zázračně neodbourá potřebu detekce struktury, nutnost zotavení z chyb a podobně.
Validace XML je (jako každý automat) schopna podat odpověď na otázku zjišťovací, ovšem v případě negativní odpovědi inteligence výstupu povětšinou kulhá. Umí vůbec nějaký schémovací jazyk definovat "chytré" a opravdu užitečné chybové zprávy pro konkrétní selhání? Zatím jsem z XML nástrojů viděl lézt jen šílenosti typu "element XYZ má mít tvar (pět řádků něčeho, co vypadá jako DTD), ale v souboru má na řádku abc tvar (pět řádků něčeho, co vypadá na prvních sedm pohledů úplně stejně)". Proto mi přijde, že i co do inteligentních hlášek platí "co si neudělám, to nemám".
Mimochodem, mám dojem, že jsme spolu v poslední době někde (živě) mluvili. Je to možné?Vyloučeno. :-) Nikdy jsme se nepotkali, zatím jsem si všechny myši pamatoval. :-) Navíc mám ropuchu a nechodím mezi lidi. :-)))
XML není ani čitelné, nečitelné. tedy pokud se bavíme o tom, jestli jsou čitelné specifikace od W3C, tak tom by skutečně dalo diskutovat. :-) Nicméně xml je metajazyk. co hodnotit dá, relativní čitelnost konkrétní aplikace XML vůči alternativám v konkrétním nasazení. A tam to je opravdu různorodé.
Podle mého (neskromného :-)) mínění má XML největší smysl tam, kde se dřív používalo SGML - jako (rozšiřitelný) značkovací jazyk pro dokumenty (leckdy s opravdu bohatým schématem), kupříkladu jako DocBook nebo XHTML. Od toho se odvíjí spousta jeho vlastností, včetně možnosti rozšířit existující schéma tak, aby to aplikace mohla ignorovat a nenarušilo jí to zbytek, nebo vložit dokument v jednom schématu "inline" do dokumentu v jiném schématu.
Nicméně spousta lidí začala cpát do XML věci, které v něm asi být nemusejí. Opět je nutné věci posuzovat porovnáním XML s alternativami. Třeba u takových věcí, jako je XML-RPC, má XML pořád ještě nějaký smysl: Elegantně se tak kupříkladu obejdou indiání v heterogenním prostředí, komunikující strany se nemusejí hádat o formát dat (na "nejnižší urovni"), a jak píše ESR, textový formát hezky leckdy člověka nutí vytvořit čistší rozhraní. Přesto jednak stále ještě existují binární komunikační formáty (výkon), jednak zrovna messaging asi nemá moc společného zrovna s čitelností - lidé to čtou poměrně málo, v podstatě by mohl vyhovět i jiný textový formát (přeci jen občas to někdo čte, třeba při ladění aplikace), ale proč znovuvynalézat kolo pro takový účel, jako je komunikace X desítek různých aplikací na Internetu? (I když některé jiné normy od W3C bych přijímal až po velmi zralém uvážení... ;-)
Když ale vidím takové věci, jako konfigurační soubory, otázka "proč?" se myslím přímo nabízí. Tady je povětšinou producentem a konzumentem člověk (při editaci) a konzumentem software (po spuštění). Přitom na rozdíl třeba od DocBooku nejsou požadavky na brutálně flexibilní schéma, protože konfigurák nebude procházet X aplikacemi, dá se navrhnout "schéma" (spíš gramatika, že?) sice nerozšiřitelné bez zásahu do kódu aplikace, ale kompaktnější (proč je RelaxNG tak populární v RNC podobě, když všichni můžou používat i zobáčky?), navíc hladký text v konfiguračních souborech nezabírá (na rozdíl od dokumentů, kde text je "defaultní") takové procento textu, takže případná "těžkotonážnost" syntaxe hodně vystoupí na povrch. (Zrovna fontconfig je pěkný příklad.)
A u takových věcí, jako je samotný základ systému, ani nevidím moc důvod zbytečně nabobtnávat kód XML knihovnou, leda, že bych chtěl uživatele od ruční editace úplně odradit. :-) Existuje-li aplikace, jejíž konfigurační soubory opravdu volají po XML, pak musím přiznat, že jsem na takovou zatím ještě opravdu nenarazil.
Pokud jsem si všiml, tak je první problém v tom, že na unixech jste zvyklí používat editaci konfiguráku místo administrativního interface. GUI se na unixech píše špatně, je to spousta práce (zvláště když to má být dobré GUI), spousta serverů ani nemá grafický interface, a vůbec nějaké barvičky a ikonky... Potom je pochopitelně XML trochu problémem.XML má v tomhle směru problémy samo o sobě, zcela nezávisle na jakémkoli OS. Proto nechápu, jak to souvisí s Unixem. A YaST mi pořád ještě přijde bližší než Server Manager. Asi to bude otázka zvyku. :-) Ale ani u něj nechápu, co má společného s XML, protože ho pro většinu konfiguračních zásahů nepoužívá.
Například pomalé vyhledávání hodnotViz níže :-)
Velmi pomalé změny hodnot (je třeba přepsat celý soubor)Myslíte, že Unix má problém s rychlostí zápisu desetikilového souboru?
nastávají problémy při vícenásobném přístupu ke stejnému konfiguráku...Nenastávají, protože k němu nedochází. Copak konfigurace počítače je OLTP databáze?
Neuvažovali jste si na unixech zařídit něco jako Windows Registry?A k čemu by to bylo? Statická data (typu "na jakém portu spustit na tomhle stroji webový server") klidně mohou být v textových souborech a dynamická data (přihlašovací údaje, konfigurace distribuovaných aplikací, centrální konfigurace cílů pro automatizovaný deployment Linuxu) jsou v LDAPu. Nevšiml jsem si, že by to Windows nějak extra jednotněji. Mám tu stroj s Windows Server 2008 a v něm vidím textovou konfiguraci, registr, LDAP databázi, databázi SAM... Neuvažovali jste na Windows, že si v tom taky uděláte pořádek? Jak dobře se v tom vyhledává? :-) Ten alarmismus je pěkný, a možná zmate nezkušeného uživatele, ale v tomhle směru není zcela opodstatněný.