Nástroje určite existujú, ale poväčšine nie sú veľmi zadarmo. Myslím, že oXygen (Java) to vie, Altova XMLSpy (Win32) tiež, existuje aj online služba: http://www.hitsw.com/xml_utilites/. Problémom je, že výstup treba skontrolovať, lebo spoľahlivosť je niekedy problematická.
Keď už bude fungovať sXBL, hádam sa časom dočkáme aj xXBL (XML's XML Binding Language) a potom v sláve pána nastúpi TeX so vstupnými súbormi v XML (tzv. XeX ;-).
Aj keď to zovšeobecnenie by nemuselo byť od veci, problémom, ktorý vidím, je ,,preprocesor", ktorý tie - nazvem to makrá - expanduje, prípadne vyrieši XPath a podobné, ešte len plánované, záležitosti.
XML mi připadá dost nedomyšlené, např i oproti letitému jazyku C. Nevíte někdo náhodou, jestli se nepřipravuje náprava v následujících vlastnostech?
Nemá escape sekvence ( & gt; apod. je hnus).
Ve stringovém atributu není možné používat konce řádků, i se spoustou dalších znaků (uvozovky) jsou problémy (minimálně kvůli absenci escape sekvencí.)
Zbytečně používá ASCII art (komentáře uvozené <!-- jsou fakt šílenost)
Není možné použít komentář všude, kde může být whitespace, tj. uvnitř tagu (před znakem ">").
Není možné vnořovat komentáře.
Nedořešené vnořování (např. kdbybych chtěl dát jiný XML dokument do stringového atributu, musím se složitě starat o XML hlavičky. A to nemluvím o XSD.)
Omlouvám se, špatně jsem to vyjádřil. To co v XML je, mi přijde tak těžkopádné, že název escape sekvence mi přijde příliš honosný.
IMHO by ideální byl céčkovský backslash. Jeho výhodou je, že pokud string potžebujete zaescapovat, tak prostě jen zdvojíte lomítka. A můžete to dělat několikrát za sebou. Odescapování je stejně triviální.
Oproti tomu v XML je místo backslashe několik různých "předdefinovaných entit" pro několik různých znaků (< > " &), a co je nejhorší, sám & je složitě předdefinován, takže několikeré zaescapování vyprodukuje perly jako:
&amp;gt;
Složitě se to parsuje i čte. Zvlášť když si uvědomím, že by je to chyba designu XML, že to stačilo vymyslet lépe a pak by stačilo pár backslashů.
Escape sekvence přes číselné kódy jsou sice jakž takž použitelné, ale pro člověka nečitelné a opět je problém s multiplikujícím se &.
Děkuji za názor.
"Escape sekvence dusledne vychazeji z Unicodu a navazuji na zvyklosti z SGML."
Pochopil jsem to tak, že kvůli zpětné kompatibilitě a jakýmsi zvyklostem se v XML petrifikují prastaré nedomyšlenosti. Nic proti tomu, souhlasím že měnit HTML by bylo dost od věci. Ale vždycky mě nadzvedne, když se XML propaguje jako pokrokový formát, když má problémy, na které existuje už minimálně 20 let řešení.
"neco jako "\<" by asi ztizilo vizualni orientaci v dokumentu."
Pokud mám číst několikrát zaescapovaný text, který původně obsahoval různé "<", ">" apod, dovoluji si velmi velmi nesouhlasit. Vhodný by byl PRÁVĚ JEDEN ZNAK pro escape sekvenci (navrhuji backslash :). Cokoli jiného je pro lidské čtení nepřehledné. Viz i moje reakce na předchozí příspěvek.
"- "Ve stringovém atributu není možné používat konce řádků..."
Takovy text nepatri do atributu ale do samostatneho textoveho uzlu. Atribut by nemel nest primarni data, ale pouze jejich, pokud mozno strucne, atributy. "
To zní sice logicky, ale vlastně mě to nutí dávat do stingových atributů jen hodnoty z číselníku. Jakmile bych k tomu pustil uživatele, tak mi jednou do stringu ten konec řádku protlačí. Mimochodem, je string, který nemůže obsahovat konec řádku, ještě hoden názvu string??
"Komentar k elementu vzdy muze byt nad nim nebo pod nim."
A když chci okomentovat každý atribut zvlášť, a v elementu je jich 50? A přitom XSD mi někdo vnutil, takže strukturu dokumentu změnit nemůžu.
Mimochodem, když už se bavíme o escapování, dovolil bych si dotaz do publika: jak se ve vašem oblíbeném XML parseru jmenují funkce na zaescapování/odescapování (včetně konců řádků)? Já programuju v .NETu a zatím jsem jí v namespace System.Xml nenašel.
Děkuji
Nějak jsem nepochopil, proč pořád chcete XML dokumenty escapovat a odescapovat. Myslím, že XML používám opravdu hodně, ale ještě jsem to nepotřeboval. A pokud potřebuji vložit nějaký XML kód jako text (třeba do nějaké knížky), ve většině případů si vystačím s <![CDATA[...]]> sekcí.
Escapovat a odescapovávat vlastně nepotřebuju. Co potřebuju, a co si myslím že by XML mělo umožňovat, je používat při programování XML dokumenty jako objekty, VČETNĚ UKAZATELÚ NA OBJEKTY a SERIALIZACE/DESERIALIZACE. Viz již zmíněné vnořování. Escapování je k tomu jen nástroj a proto by měl být jednoduchý, spolehlivý a transparentní.
Když například můj klient i server používají pro interní zpracování dat XML, a pro komunikaci SOAP/webové služby, tak do SOAP volání se musejí vkládat "zaescapované" XML zprávy. A když po čase musím interní formát dat rozšířit (např. do stringového atributu dát místo "plain stringu" další XML), vzniká třetí úroveň escape sekvencí. A v tom okamžiku začínám mít obavy, protože z návrhu XML mám pocit, že se s tímhle příliš nepočítalo. (Mám zkušenost, že konec řáku nebo ampersand na "nesprávném" způsobí, že XML se úplně rozpadne).
A z toho, jak je to v XML řešené, mi vyplývá, že vymysleli prvně 1. úroveň, pak 2., a pak to nějak ohnuli aby to víceméně fungovalo i pro n-tou úroveň. Nikdo se hned na začátku nezamyslel, jak to udělat, aby to fungovalo jednoduše a stále stejně pro n-tou i n+1 úroveň. Holt každý není Kernighan a Ritchie :)
Použití CDATA je také možné, ale při jeho použití v programu si musím uvědomit, že vkládaná data nesmí obsahovat sekvenci "]]>". Tj. naprogramovat si kontrolu, a pokud tuto sekvenci najdu, vyhlásit chybu, nebo ji zase nějak zaescapovat - jenže pro to bych si asi musel vymyslet svou vlastní escape sekvenci.
Při vší úctě, pokud používáte SOAP a přenášíte v něm XML data zaescapovaná, děláte nejspíše něco špatně. Proč prostě nevložíte do nějakého z elementů SOAP zprávy váš XML dokument. Toto vložení samozřejmě nejde provést jako prosté vložení řetězce obsahující kompletní XML dokument (např. kvůli XML deklaraci), ale vložení se musí provést na úrovni infosetu -- to ve většině připadů nevadí, naopak je to přirozenější, protože vkládaný dokument XML stejně máte v aplikaci nějak abstraktně reprezentovaný -- např. pomocí DOM stromu.
S XML dokumenty samozřejmě můžete pracovat jako s objekty, ale to není věc XML, ale nástrojů daného programovacího jazyka, který používáte. Zmínil jste, že používáte .NET. V něm existuje nástroj xsd, který vám ze schématu XML dokumentu vygeneruje třídy -- pro každý element jednu třídu, podelementy a atributy jsou reprezentovány jako členské proměnné, jejichž typ je zase další třída. .NET samozřejmě obsahuje i nástroje pro serializaci/deserializaci mezi XML reprezentací a touto objektovou reprezentací. Ukázku použití najdete např. http://www.xml.com/pub/a/2002/07/24/databinding.html?page=3
Podobné nástroje existují i pro další jazyky -- např. pro Castor a JAXB pro Javu.