O několika HTML5 parserech jsem se již zmiňoval (viz příspěvky se štítkem
parser). Henri Sivonen vytvořil
experimentální build Mozilly používající právě HTML5 parser. Jedná se o zajímavou ukázku. V době, kdy žádný prohlížeče neobsahuje HTML5 kompatibilní parser (na to je ještě brzy) tu máme alespoň experimentální verzi.
Sam Ruby tento zajímavý počin komentuje:
Henri’s approach is interesting. He starts from a single source, in Java. The Java code can be compiled to Java byte codes, JavaScript source, or C++ presumably making use of Mozilla libraries for things such as memory management. If he can do that, it seems to me to be a rather small leap from there to producing C++ using, say, either Ruby or Python libraries for memory management, as well as a thin binding to the language. C# would also be a reasonable target.
If this could be done, and made available under a liberal license, it could go a long way towards making available consistent and performant implementations of the HTML5 parser algorithm everywhere.
Ano, to je totiž jeden z vůbec nejzásadnějších (a podle mě úplně zbytečných) problémů HTML 5 - že to potřebuje úplně nové parsery do všech možnejch programovacích jazyků. Protože jakkoliv naznačovanej přístup (vzít jeden javovskej zdroják a ten nějak využít i pro parsery pro C++/C# - jestli to teda bude fungovat) zní sice zajímavě, na druhou stranu ale z hlediska výkonu ani kompaktnosti nebude řešení, kdy si pouhej parser s sebou potáhne půlku Gecka nebo případně bude záviset na Ruby nebo Pythonu, zrovna optimální a stejně bude muset vzniknout samostatnej projekt na čistě C verzi parseru (obdoba libxml, možná i jako její součást). Nehledě na to, že programovacích jazyků, kde to bude potřeba, je podstatně víc než jenom Java, Javascript, C++ a C#.
OdpovědětVymazatOndro, HTML5 parser není podmínkou pro to, aby prohlížeč porozuměl HTML5.
OdpovědětVymazatKdyž pro své prezentace vytvářím HTML5 stránky, tak je zobrazuji v obyčejných prohlížečích, které mají obyčejný HTML parser a fungují v pořádku. Což je proto, že je zpětně kompatibilní.
HTML5 parser má oproti HTML parseru jednu přidanou hodnotu - řeší navíc, jak se vypořádat s oním "HTML z ulice". Vlastně ještě druhou hodnotu (souvisí s tou první). Jedná se o historicky první specifikaci HTML parseru (tuším, že všechny ty předchozí byly řešeny přes SGML, XML nebo prostě nijak). HTML5 parser znamená sjednocení parserů, nikoliv podmínku pro implementaci HTML5, ta na něm v zásadě v ničem nezávisí.
To celé bylo myšleno jinak. Já nehovořil o parserech pro prohlížeče. Prohlížeče ať si to dělaj, jak chtěj, jestli si vytvořej vlastní parsery (to udělaj nejspíš ty nonfree jako IE nebo Opera), nebo jestli použijou nějaký společný volně šiřitelný, je fuk, prostě něco budou muset vymyslet. Mně jde teď o to, jak zpracovávat HTML 5 dokumenty z programů, který si člověk píše sám. Prostě stáhnout z webu dokument, naparsovat ho, vytáhnout z něj potřebné informace, naložit s nimi, jak uznám za vhodné.
OdpovědětVymazatAno, všechny předchozí verze byly buďto SGML, nebo XML, a to bylo DOBŘE. Vymyslet zbrusu nový formát, který není kompatibilní ani s jedním, pro který tedy nelze použít ani existující SGML parsery, ani existující XML parsery, je prostě dle mého názoru hroznou chybou a krokem stranou.
Ale i tyhle parsery, o kterych mluvis, budou porad fungovat. Nebo snad vis o nejakem problemu, kdy nektera z tech knihoven novinky HTML5 nerozchodi?
OdpovědětVymazatJistěže vím (nebo si to aspoň myslím z toho, co jsem četl). Je zřejmé, že dokument odpovídající HTML 5 nepůjde naparsovat XML parserem (XHTML 5 půjde, o tom se teď nebavím). Leč tím, že HTML 5 není aplikací jazyka SGML a má například velice zvláštní DOCTYPE, kterej je, pokud vím, se specifikací SGML v rozporu, je logické, že každej slušnej SGML parser zahlásí chybu už na prvním řádku, až si ten DOCTYPE přečte. A mám pocit, že jsem kdesi zahlédl, že těch odklonů od specifikace SGML, je víc.
OdpovědětVymazatA kolik těch dnešních HTML parserů je postaveno na SGML? Já bych řekl, že jich opravdu moc nebude, ale nerad bych se pletl.
OdpovědětVymazatNo, stáhnout z webu dokument a použít na něj SGML nebo XML parser dá skoro vždycky dost divné výsledky.
OdpovědětVymazatZkuste to s touhle stránkou: 1. Díky obsahu skriptu XML parser selže. 2. SGML parser bude všechny "/>" interpretovat jinak, než jsme zvyklí.
Čili:
OdpovědětVymazatSGML parsery jsou pro reálné použití k parsování webu celkem k ničemu. Má to historické důvody: prohlížeče používají jiný algoritmus a autoři webů ladí pro prohlížeče, ne pro SGML parser.
XML parser je taky použitelný v málo případech, protože i tzv. XHTML je v pojetí většiny autorů webů málokdy validní XML. Opět: autoři (zne|vy)užívají toho, že když to pošlete jako text/html, prohlížeč vám skousne skoro všechno.