Portál AbcLinuxu, 30. dubna 2025 10:19
Tiskni
Sdílej:
...skvělý jazyk XSL."Skvělý jazyk" je jazyk nadrbaný samičky na mejch koulích, né XSL
K tomu jsem opět použil skvělý jazyk XSL. I když je trochu ukecanější, práce jde pěkně od ruky a dá se v tom dobře vyznat.Tomu se za našich mladých let říkalo vyšší dívčí sebeklamu.
<!DOCTYPE html>
Ale on psal o tom, že by podle DOCTYPE určoval, co tam přesně smí a nesmí být.Já tam tedy DOCTYPE nikde nevidím. Pochopil jsem ho tak, že by ten editor měl jako parametr cestu k DTD a podle něj nabízel uživateli značky (nebo aspoň zakazoval napsat ty nepovolené).
Tak mě zajímá, kolik toho určí podle tohoto DOCTYPPodle toho, který jsi napsal ty, asi nijak, což mi přijde jako nevýhoda (té deklarace, ne toho editoru).
Vždyť tam není ani odkaz na DTDCož je podle mého krok zpátky.
a navíc nebude ustálené v čase!Zrovna svačím a ty mi píšeš takové věci, ze kterých se mi dělá špatně. Fuj!
Mně to přijde jako výhoda té deklarace, že se podle ní lidi nebudou snažit odvodit víc než jen že je to nějaké html.Že jde o HTML/XHTML zjistím podle MIME typu nebo třeba podle přípony – tedy ještě vně dokumentu. Uvnitř toho dokumentu bych pak ale čekal, že se někde dozvím, která verze formátu to je (jakýmkoli rozumným způsobem, nemusí to být DOCTYPE deklarace).
nehledě na to, že celý smysl XML je v rozšiřitelnosti a skládání různých typů značek, a DTD tuto rozšiřitelnost moc nezvládají.Můžeš vkládat SVG, MathML, RDF… přímo do XHTML dokumentu a oddělené je to jmennými prostory. Řekl bych, že to tedy celkem zvládá (a DTDčka jsou modulární). Ale stejně bych místo DTD používal spíš XSD případně jiný novější jazyk pro popis dokumentů.
a doprovodné jazyky jako XSL apod taky nejsou kdejaké zázrakyNo vidíš a mně ty šablony
<xsl:template match="…"/>
přijdou docela šikovné. Např. u toho převodníku, co jsem teď psal, si to moc nedovedu představit v něčem jiném tak, aby to bylo přehlednější a lépe se to psalo. A i ty další „doprovodné jazyky“ jako XPath nebo XQuery jsou dost dobré – skoro tak dobré jako SQL, možná v něčem i lepší Takže když identifikátor verze, tak třeba namespace, protože některé typy dokumentů můžou obsahovat kontejnery s libovolnými jinými vloženými dokumenty.To můžou, ale přijde mi lepší dát tu verzi např. do atributu kořenového elementu, než pro každou verzi formátu zavádět nový jmenný prostor. Takže můžu mít třeba XHTML dokument a v něm dva SVG obrázky, každý v jiné verzi SVG, ale ve stejném jmenném prostoru – nevidím v tom problém.
Ono vůbec celé XML bojuje s tím, že se do něj dávají jak strukturovaná data, tak strukturované dokumenty (tzn. včetně whitespace a mixed content), což jsou dva diametrálně odlišné účely, které vyžadují diametrálně odlišné postupy (zvlášť ohledně ubírání/přidávání whitespace), že fakt nevím, co komu muselo spadnout na hlavu.Ten „mixed content“ není až taková věda. Máme třeba dokument:
<kořen> nějaký text <značka>…</značka> zase nějaký text </kořen>Kde
kořen
má tři uzly a z toho první a třetí jsou textové uzly. Nesmíš to prostě vnímat jako text, do kterého je vložená nějaká značka, ale jako tři uzly různých typů. A v XSL si pak můžeš udělat šablonu pro značka
a šablonu pro text()
– že je jedno obalené v ostrých závorkách a druhé je tam jen tak, je celkem jedno – na téhle úrovni se s tím pracuje stejně.
BTW: co ti konkrétně nešlo s tím „whitespace“?
radši si napíšu konvertor z wiki-like jazykaProsím, jen to ne!
než abych to musel psát přímo.Pro hodně jednoduché věci budiž. Uznávám, že je jednodušší tam naflákat:
- první - druhá - třetínež se psát s
<ul/>
a <li/>
. To je daň za univerzálnost – zase ale nemusím řešit, jestli se odkaz píše jako "Nějaký odkaz":[http://example.com/]
nebo [http://example.com/ Nějaký odkaz]
či [Nějaký odkaz](http://example.com/ "Taky tu může být titulek")
a místo toho zadám nejrozšířenější <a href="http://example.com/" title="Titulek">Nějaký odkaz</a>
a nemusím vědět, že se URL píše do takových a takových závorek, text do jiných a titulek se dává do uvozovek do druhé závorky – a teď ještě nepoplést, jestli první byly hranaté a druhé kulaté nebo obráceně. Prostě stačí vědět, že to jsou atributy a jak se jmenují – ale zapisují se vždy stejně.
Někdy se ty odlehčené syntaxe hodí, ale vidím tam dva problémy: 1) spousta různých syntaxí, naučíš se jeden jazyk, přijdeš k jinému systému a musíš se učit trochu jinou syntaxi. Nebyla by od věci nějaká standardizace, aby se sjednotily třeba ty zápisy odkazů, nadpisů a dalších základních věcí – ale nevím, jestli by na to ti autoři jazyků/konvertorů přistoupili – vzdát se části svého díla a přizpůsobit se ostatním. Často se různí i syntaxe v rámci jednoho „wiki“ jazyka – např. některé značky můžeš „parametrizovat“ a jednou to děláš v takové závorce, jindy v jiné, nebo v uvozovkách, apostrofech… v XHTML/XML jsou maximálně dvě možnosti: atribut nebo vnořený element, většinou to jsou atributy a zápis je vždy stejný: klíč="hodnota"
2) Dříve či později narazíš na nějakou nejednoznačnost, něco ti nepůjde vložit nebo to formátovač pochopí jinak, než jsi to myslel. V XML máš jasně dané řídící znaky a jednotný způsob jejich escapování – a všechny ostatní můžeš v dokumentu volně používat, nemusíš váhat, jestli nějakou posloupnost znaků náhodou nepochopí program jako značku nebo příkaz.
Ten „mixed content“ není až taková věda. Máme třeba dokument:… které začínají a končí znakem konce řádku. Fujtajbl. Takový uzel<kořen> nějaký text <značka>…</značka> zase nějaký text </kořen>Kdekořen
má tři uzly a z toho první a třetí jsou textové uzly
<uzel> </uzel>má taky jednoho textového potomka. A co teprv když do toho narvu komentář!
Nesmíš to prostě vnímat jako text, do kterého je vložená nějaká značka, ale jako tři uzly různých typů.Jasněěě, uzlyyy. Hele, tímhle ale končí veškeré zbytky použitelnosti XML pro lidský zápis. Tohle je prostě pakárna.
má taky jednoho textového potomka. A co teprv když do toho narvu komentář!Co, komentář. Entitu!
které začínají a končí znakem konce řádkuKdyž je tam uděláš, tak tam jsou. Jak jinak by se to mělo chovat? Jestli je tam nechceš (přestože ve zdrojovém dokumentu jsou), tak si dej
normalize-space()
nebo ořízni počáteční a koncové \s*
Ale někdo naopak tu informaci (že je na začátku \n\n
) potřebuje – např. já, když jsem dělal to dělení na odstavce (oddělené prázdnou řádkou).
má taky jednoho textového potomkaNo však – třeba je to značka, kterou se zadává nějaký oddělovač – někdo odděluje mezerou, někdo středníkem a někdo koncem řádku. Pokud chceš bílá místa (
\s*
) považovat za prázdnou hodnotu, stačí ti jedno zavolání matches()
– naopak ten, kdo to považuje za platnou hodnotu to může pomocí XML zapisovat a číst.
A teď zalomení na určitém sloupci. A hezky v XSLT 1.1. Ne že by to nešlo, ale zrovna tady je vidět, že zpracovávat něco jiného než XML strom je v XSLT/XPath opravdu ohavné.
Až to budeš mít, tak to nabídni redakci do redakčního systému. Ten současný vůbec neumí preformátovaný text.
A hezky v XSLT 1.1.O to jsem se zpočátku snažil, protože jsem chtěl co největší přenositelnost, asi dva dny jsem s tím bojoval a pak to vzdal a přešel na 2.0. Trochu pomáhá EXSLT, ale např. funkce tokenize (split) tam jako oddělovač má jen znaky, ne regulární výraz (který je možné použít v XSLT 2.0).
A teď zalomení na určitém sloupci.O tom uvažuji, ale zatím to pro moje potřeby není nutné – např. v e-mailu se o to potřebné zalomení převodník do quoted-printable, takže např. u citací nemusím řešit přidávání > na každý řádek po zalomení.
Ten současný vůbec neumí preformátovaný text.Jak ho neumí? Občas sem kusy kódu v <pre/> vkládám a přijde mi, že to funguje.
lynx -dump
nebo links -dump
?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.