2007-03-06 14:35 napsal Lukáš Havrlant
Protože XHTML je aplikací XML, můžeme díky jmenným prostorům připojit do našeho XHTML dokumentu další jazyky založené na XML. Ovšem není to tak jednoduché, jak by se mohlo zdát.
Takže problém první: abyste mohli XHTML rozšířit o nějaký ten
jazyk, bude nutné stránku poslat jako skutečné XHTML, tedy nejlépe jako
application/xhtml+xml, ale jsou pochopitelně možné i další varianty.
Pokud pošlete stránku jako obyčejné HTML, tedy text/html,
parser to nezpracuje jako X(HT)ML, ale prostě jako HTML a tam pochopitelně
jmenné prostory nepozná a bude je ignorovat, respektive vykreslí obsah
jednotlivých elementů nezávisle na tom, co v tom jmenném prostoru
znamenají.
Ok, pojďme si tedy ukázat nějaký příklad. Vzhledem k tomu, že
vedu web o matice, uvažoval jsem dlouho o nasazení MathML. Web
v XHTML mám, takže teoreticky žádný problém. MathML do kódu
zapojíme jednoduše tak, že na požadované místo vložíme element
<math> se jmenným prostorem
http://www.w3.org/1998/Math/MathML. Do obsahu tohoto elementu pak
už jen prostě vložíte požadovaný MathML kód a prohlížeč ho
interpretuje jako matematický zápis. Celý zápis může vypadat takto:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pracujeme s MathML</title>
</head>
<body>
<h1>Jak to MathML krásně funguje!</h1>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac>
<mn>2<mo>-</mo><mi>x</mi></mn> <mn>3</mn>
</mfrac>
<mo>+</mo>
<msubsup>
<mn>X</mn>
<mrow>
<mn>i</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
</math>
<p>Dobrý, ne?</p>
</body>
</html>
(živá ukázka, prohlížejte nejlépe ve Firefoxu, Opera MathML nezná)
Funguje to sice hezky, ale má to drobný háček, která nám už předvedla Opera. Pokud totiž prohlížeč zná XHTML, ale nezná MathML, vykreslí prostě obsah elementů za sebou, bez dalšího fyzického formátování (jako by byly například ve spanu). Což – přiznejme si – není to, co bychom od toho zrovna očekávali, do přístupného webu to má daleko. Pokud prohlížeč nezná požadovaný jazyk, neexistuje spolehlivá možnost, jak mu říct, aby nic nevykreslil, případně aby vykreslil alternativní obsah jako v případě obrázku. Takže jak z toho ven?
Můžeme docela snadno využít klasický element
<object>, matematický vzorec uložit do externího XML
souboru a ten potom skrze tento element nalinkovat. Tedy kód by mohl vypadat
nějak takto:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pracujeme s MathML</title>
</head>
<body>
<h1>Jak to MathML krásně funguje!</h1>
<object data="mathml1.xml" type="application/xml" style="height:2em;">
Váš prohlížeč nepodporuje MathML.
</object>
<p>Dobrý, ne?</p>
</body>
</html>
Výsledek bude prakticky identický. Bohužel až příliš identický. MathML totiž nemá přiřazený konkrétní MIME typ a vkládání přes object není tedy moc dobře podporované. Opera zkrátka nepozná, že se pokoušíte vložit něco, co nedokáže vykreslit a namísto zobrazení alternativy, opět zobrazí původní MathML.
Ideální by bylo, kdyby existoval přímo v XML nějaký mechanismus,
nejlépe asi nějaký element, jehož obsah by se prostě interpretoval
v případě, že by prohlížeč neznal požadovaný jmenný prostor.
Vzhledem k tomu, že nic takového neexistuje a řešení přes
<object> je nefunkční (jestli jsem něco přehlédl,
napište prosím), o nějakém MathML si můžete nechat jen zdát a
všechny zlomky se zase budou psát přes tabulky.
A ještě bych se zmínil o výhodách a nevýhodách řešení
přes jmenné prostory a přes <object>. Nevýhody už ale sepsal Chamurappi, tak
já se pokusím sepsat výhody (Chamurappi si vybral SVG, já si vyberu mé
oblíbené MathML):
<object> doprostřed odstavce není zrovna ideální.<object>, bude správa takového webu docela šílená, kdo
má ty externí XML soubory pořád hledat. Když to mám přímo v kódu,
vidím to hned a případně mohu kód i upravit.To jsou výhody, na které jsem natrefil, když jsem se MathML pokoušel zavést. Bohužel, díky okolnostem je to prakticky nemožné. Takže bych si přál, aby mi Ježíšek tenhle rok přinesl nějakou lepší podporu zjišťování, zda ten a ten prohlížeč zvládá MathML či nezvládá (respektive obecně zda ten a ten prohlížeč zvládá tu a tu technologii). Možná pak to snažení W3C vážně k něčemu bude.
Možná to k ničemu nebude.
Matematiku jsem studoval, ale nepochopil. Češtinu jsem také studoval a také nepochopil. Oženil jsem se, ale manželku jsem také nepochopil. Vypadá to, že hoši z W3C jsou na tom podobně.
Navíc – co by asi tak měli říkat chemici, na které se vlastně na webu úplně zapomnělo. Zkuste do HTML (nebo XHTML, to je fuk), propašovat chemický vzorec :)
1. Plaváček: H2SO4 :o)). Ale nějaký organický nesmysl bych asi zapisoval těžko.
Myslím že zatím nemá tohle cenu řešit vzhledem k tomu že to z majoritních prohlížečů podporuje jen Firefox. Navíc v IE se nezobrazí ani XML…
1. Plaváček:
Dobrá hláška :o)
3. Jonge: Ale jo, má, mně by stačil i FF. Pro FF bych si napsal MathML a ostatním prohlížečům bych poslal alternativu – obrázek nebo tabulku (v případě zlomků to ještě jde). Ale ono to prostě není tak jednoduché.
2. Lukáš Havrlant: Pokud by jsi chtěl zobrazit kovalentní vazby tak asi opravdu jen těžko. Podpora MathML by měla být zjistitelná druhou verzí Document.createElementNS(namespaceURI, qualifiedName), pokud namespace neexistuje vyhodí error NAMESPACE_ERR viz. http://www.w3.org/…re/core.html#…
1. Plaváček: Pro chemiky je tu CML. Ale na webu je to nepoužitelné ze stejného důvodu jako MathML.
3. Jonge: IE zobrazí XML, akorát nezobrazí application/xhtml+xml a taky nezná jmenný prostor MathML.
Ono by to mělo smysl řešit, kdyby existovaly možnosti odlišení nepodporujících prohlížečů. Dříve u nových webstandardů naprosto běžná věc – noframes, noscript, applet, embed… Ale ty čistě W3C standardy nějak postrádávají onu domyšlenost (mimochodem, WHATWG na tom není o moc lépe – podporu WebForms taky nelze detekovat).
8. llook: Já myslím, že není moc třeba ho detekovat, přidáš pár atributů a buď to prohlížeč pochopí nebo nepochopí, ale nic se zároveň nestane. Což se v případě MathML říct nedá, prohlížeč prostě vyplivne suchý text, který vadí.
5. Dero: Jaj, školácká chyba. Díky :-).
llook: Také jsem na to chtěl upozornit, je to ale myslím škoda že ani CML, ani MathML nejsou použitelné, to bysme zase byli někde jinde. Jinak docela mě trkla nepoužitelnost v Opeře, protože jsem ji doteď pokládal za božský prohlížeč.
Řešit to obrázky myslím není také nejšťastnější, ale jiné řešení opravdu nevidím. Nebo udělat prasárnu a psát to slovy :-)).
W3C tohle nějak nedořešilo…
Mě se líbí, jak to má zpracované Wikipedia. Každý uživatel si může nastavit, jakým způsobem chce matematické vzorce zobrazovat. Ale chápu, že to není takové řešení, jaké bychom všichni chtěli.
10. Zdeněk Košťál:
Řešit to obrázky myslím není také nejšťastnější, ale jiné řešení opravdu nevidím. Nebo udělat prasárnu a psát to slovy :-)).
Zlomky se ještě dají nasimulovat buď přes závorky a lomítka (x+3)/2 nebo pomocí tabulky. Osobně to dělám tak, že jednodušší zlomky zapisuju přes lomítko, složitější přes tabulku. Horší to je, když chceš třeba vrazit zlomek pod odmocninu, to už se nedá prakticky řešit jinak než obrázkem.
Proč všichni nepoužívají Amayu? :-)
8. llook: Ale naštěstí tu mám pluginy, které nám pomohou k zobrazení svělých flashů, PDF, SVG a dokonce i MathML i v IE. takže bych nezoufal a na stráku hodil tejnoiu hlášku jako háže flash nebo vystavovatelé PDF: Stáhněte si plugin ;)
laicka otazka, psal jste, ze se takova stranka musi posilat se spravnym content typem, jaktoze tedy vas priklad zobrazuje mathml dobre kdyz tam mate text/html?
diky
16. ger: Kde mám text/html? U obou příkladů je application/xhtml+xml.
17. Lukáš Havrlant: Asi mysli tohle:
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
19. Tom: jo aha, toho jsem si nevšiml, ten meta tag jsem odnekud zkopíroval.
Takže ještě jednou pro gera – stránka se skutečně posílá (nehledě na meta tag) jako application. Lze to vidět například z přípony .xhtml nebo si v Opeře najeď na tab se stránkou a bude tam poslední položka „MIME typ: application/xhtml+xml“. Ve Firefoxu je na to taky nějaké rozšíření. Nebo si to „zobraz“ v MSIE, nepůjde to.
Mám pocit že syntaxe MathML je dost hloupá. XML puritánství je cesta do pekla --- představte si třeba náhradu JavaScriptů nějakým XML kódem. Na programování a zápis matematiky prostě XML není stavěné. Řešení bych viděl v konstrukcích typu , přičemžv komentáři by byla LaTeXová sekvence. Ale pryč od mých zbožžných přání. Rozumný způsob jak sázet matematiku je pomocí nějakého cgi/php skriptu na převod LaTeXu do gifu.
Pokud nemáte vlastní stroj, zkuste
21. Kondr: S obrázky nerad pracuji. Pokud to jen jde, snažím se vystačit s pouhým HTML+CSS. Zlomky se dají zapsat do tabulky a dost matematických značek se vyskytuje ve formě entit. Na většinu zápisů to stačí.
XML zápis mi problém nedělá, já ho stejně nepíšu – nechám to vygenerovat nějakým programem a pak už to buď vložím do stránky podobně jako obrázek nebo zkopíruju kód (teoreticky, v praxi to – viz článek – nefunguje).
22. Lukáš Havrlant: Netrdím že obrázky jsou ideální řešení na věky věků. Ale do doby, než bude existovat rozumný standard na webovou matematiku (ideálně založený na TeXu obdobně jako to má wiki, ale parsovaný u klienta) mi příjdou obrázky jako schůdnější, sémanticky vhodnější a typograficky hezčí řešení než např. zlomky pomocí tabulek.
Můj názor není relevantní, proto použiji důkaz autoritou: velké weby, které o matematice píší (např. mathworld, aops/mathlinks, wikipedia) používají na vyznačování matematiky obrázky (wiki dělá výjimku u triviálních vzorců).
Co se týče XML kódu: občas to člověk prohlíží v režimu, který matematiku nějak esteticky parsovat nemůže (třeba v textových náhledch vyhledávačů nebo LYNXu) a tam se TeXové alty obrázků vyjímají daleko líp než MathML s vynechanými tagy případně čistý MathML kód.
23. Kondr:
Můj názor není relevantní, proto použiji důkaz autoritou: velké weby, které o matematice píší (např. mathworld, aops/mathlinks, wikipedia) používají na vyznačování matematiky obrázky (wiki dělá výjimku u triviálních vzorců).
Velké české weby jako třeba Matematika polopatě používají na zlomky tabulky a obrázkům se vyhýbají jako čert kříži ;-). Ale budu asi jediný web, to je pravda, e-matematika používá obrázky, stejně jako Cifrikova matematika.
Obrázek má nicméně dost nevýhod – déle trvá příprava a výroba a následné zasazení do designu, pokud chci něco upravit, musím vygenerovat znova celý obrázek. Navíc obrázek se nezvětšuje v závislosti na velikosti písma prohlížeče. Zkrátka psaní a udržování matematických vzorců přímo v HTML+CSS je (minimálně pro mě) jednodušší a pro uživatele možná také. Párkrát se mi stalo, že jsem třeba chtěl vyselektovat čitatel zlomku, ale u obrázku to jde těžko. U HTML+CSS to není problém.
Komentáře jsou uzavřeny