Atributy v XML

Kit

Re:Atributy v XML
« Odpověď #15 kdy: 10. 07. 2018, 16:11:07 »
Nejprve se mi XML moc nelíbil kvůli ukecanosti.
Tohle je zvláštní zcestná představa, kterou má ovšem spousta vývojářů – totiž že by jazyk (ať už programovací, formátovací nebo pro zápis strukturovaných dat) měl být maximálně stručný. Přitom si můžeme vzít za vzor přirozené jazyky, které přílišnou stručností rozhodně neoplývají. A to se lidský jazyk vyvinul z nějakých skřeků, takže se určitě rozvíjel od stručnosti směrem k rozvinutosti a redundanci. Už jenom tohle by mělo stačit k tomu, abychom si uvědomili, že určitá redundance v jazyce je pro člověka prospěšná (například proto, že nás při čtení utvrzuje v tom, že čteme správně).

Na tohle hodně doplatil XSLT. Na první pohled vypadá ukecaně, i když atributy používá. Když v něm však vytvořím nějakou šablonu, bývá stručnější než v jiných šablonovacích jazycích a také mnohem rychlejší. Jenže vývojářům se nelíbí.


pako

Re:Atributy v XML
« Odpověď #16 kdy: 10. 07. 2018, 16:35:10 »
Už s XML delší dobou nedělám (byl to jeden čas můj denní chléb) ale myslím že někteří předřečníci to vystihli správně. Koneckonců i ty názvy “atribut” a “element” napovídají…
“atribut” typicky jednoduchá nestrukturovaná hodnota (číslo, krátký string /label, tag/, výčtová hodnota), doslova “vlastnost elementu”.
“element” - plnotučná “zanořená” strukturovaná nebo “dlouhá (text)” věc.
Je to (dualita atribut × element, resp. atribut navíc k obecnému elementu) syntaktický cukr ale použit s rozumem data serializovaná do xml výrazně zpřehledňuje.

U mne ten vývoj byl opačný....

Jenže ze všeho nejlepší zůstává stále XML, u kterého jsou vyřešeny problémy, kterými předchozí formáty trpí. Při správném návrhu je také dobře čitelný, je validovatelný a dá se zpracovávat standardními nástroji. Jen je poslední dobou vývojáři poněkud opomíjený.

S tímhle souhlasím... s XML jsem přestal dělat ne proto že se mi nelíbil, ale proto že jsem se začal zabývat jiným typem programování... pracovat s JSONem což občas musím protože je dneska takový de-facto industry standard je pro mě po té zkušenosti s XML/XSLT/XProc utrpením.

SB

Re:Atributy v XML
« Odpověď #17 kdy: 10. 07. 2018, 16:56:01 »
Vytrženo z kontextu formátů JSON a YAML, které jsou možná pohodlné, ale nejsou samopopisující. Kvůli nim vzniká ten technologický dluh.

YAML neznám. V JSONu má každá položka název (je to adresář), co by to mělo mít navíc?

SB

Re:Atributy v XML
« Odpověď #18 kdy: 10. 07. 2018, 16:57:32 »
Samozřejmě, ze je to technologický dluh. Rychle zmaštěná aplikace sice ušetří nějaký čas na začátku, ale následně se ti to vrátí. Někteří vývojáři si bohužel neuvedomuji, že navrhnout formát není totéž jako vybrat knihovnu pro serializaci. Nebo, že mavrhnout API není totéž jako zpřístupnit pro vzdálené volání par metod pomoci nějaké technologie.

To nerozporuju. Mě zajímá, jak vznikne tech. dluh, když místo XML použiju JSON.

SB

Re:Atributy v XML
« Odpověď #19 kdy: 10. 07. 2018, 17:08:32 »
No jo, jenže než na tohle většina lidí přijde, že to, co řeší s JSONem nebo YAML, má XML už dávno vyřešené, a že ty takzvané výhody JSONu nebo YAMLu jsou ve skutečnosti nevýhody…

Které to jsou? Neznám to, nechám se poučit (třeba to pak nebudu muset zjišťovat sám).

Tohle je zvláštní zcestná představa, kterou má ovšem spousta vývojářů – totiž že by jazyk (ať už programovací, formátovací nebo pro zápis strukturovaných dat) měl být maximálně stručný. Přitom si můžeme vzít za vzor přirozené jazyky, které přílišnou stručností rozhodně neoplývají. A to se lidský jazyk vyvinul z nějakých skřeků, takže se určitě rozvíjel od stručnosti směrem k rozvinutosti a redundanci. Už jenom tohle by mělo stačit k tomu, abychom si uvědomili, že určitá redundance v jazyce je pro člověka prospěšná (například proto, že nás při čtení utvrzuje v tom, že čteme správně).

Tak do této úvahy se vůbec nepouštějte, to je velmi složité téma, prosté srovnání zde z důvodu rozdílných podstat a účelů jazyků nemůže fungovat.


Kit

Re:Atributy v XML
« Odpověď #20 kdy: 10. 07. 2018, 17:19:04 »
Vytrženo z kontextu formátů JSON a YAML, které jsou možná pohodlné, ale nejsou samopopisující. Kvůli nim vzniká ten technologický dluh.

YAML neznám. V JSONu má každá položka název (je to adresář), co by to mělo mít navíc?

Validace, komentáře, příkazy pro zpracování, různé znakové sady, čitelný český text, sada obecných nástrojů,...

Kit

Re:Atributy v XML
« Odpověď #21 kdy: 10. 07. 2018, 17:30:00 »
No jo, jenže než na tohle většina lidí přijde, že to, co řeší s JSONem nebo YAML, má XML už dávno vyřešené, a že ty takzvané výhody JSONu nebo YAMLu jsou ve skutečnosti nevýhody…

Které to jsou? Neznám to, nechám se poučit (třeba to pak nebudu muset zjišťovat sám).

Už jsem některé jmenoval výše. Už hodně vývojářů si pobrečelo, že JSON nemá možnost komentářů. Jiné datové typy než int nebo string se musí předem serializovat. Příkazy pro zpracování jsou věcí neznámou. Možnost definování entit nulová. Čeština se v tom nedá číst. Absence schéma. Je toho snad málo?

Re:Atributy v XML
« Odpověď #22 kdy: 10. 07. 2018, 17:45:42 »
Tak do této úvahy se vůbec nepouštějte, to je velmi složité téma, prosté srovnání zde z důvodu rozdílných podstat a účelů jazyků nemůže fungovat.
Proč by to srovnání nemohlo fungovat? Proč někteří vzývají stručnost u programovacích a podobných jazyků? Aby toho programátor mohl číst a psát co nejméně, aby se nemusel zabývat balastem. Psaná můžeme zanedbat, protože je za prvé méně časté, za druhé zrovna pro tyhle technické jazyky máme perfektní IDE, která ten „balast“ umí generovat sama. Takže zbývá čtení. A v čem se liší čtení programu od čtení novinového článku nebo diplomky, že by ta redundance u přirozených jazyků byla přínosná, ale u technických jazyků byla naopak škodlivá?

Kit

Re:Atributy v XML
« Odpověď #23 kdy: 10. 07. 2018, 18:21:53 »
A v čem se liší čtení programu od čtení novinového článku nebo diplomky, že by ta redundance u přirozených jazyků byla přínosná, ale u technických jazyků byla naopak škodlivá?

Je to vidět na dříve vytvořených jazycích COBOL, SQL nebo třeba Pascal. Zejména ten první byl řádně ukecaný. Výsledek? Dnes už se v něm programuje okrajově. Když jsem se učil Pascal, tak mi vadila zejména slova begin a end. Proč? Musela se psát pořád dokola, dokonce i tam, kde to nebylo povinné. Výsledkem byla a je horší čitelnost a snižující se obliba Pascalu. Jazyk C přišel s elegantními {} a všichni jásali, že se to dobře píše i čte. PHP také používalo if (...): ... else: ... endif. Postupně se přešlo na C-like syntaxi.

Minimalisté přišli s jazykem Python a formátem YAML. Výsledkem je naopak odpor vývojářů zvyklých na {}. Podobně i Lisp, který těch závorek nemá víc než ostatní jazyky, si nezískal mnoho příznivců. Přitom by mohl sloužit pro různé konfiguráky i pro výměnu dat mnohem lépe než třeba JSON.

Ideál je tedy někde uprostřed. XML bez atributů má na pohled více zbytečného textu než XML s atributy. Tam, kde bychom stejně dali u zavírací závorky komenář, má koncovou značku. Zbývá jen udělat vhodný návrh, který maximalizuje čitelnost pro lidi i stroje.

Re:Atributy v XML
« Odpověď #24 kdy: 10. 07. 2018, 18:47:25 »
Je to vidět na dříve vytvořených jazycích COBOL, SQL nebo třeba Pascal. Zejména ten první byl řádně ukecaný. Výsledek? Dnes už se v něm programuje okrajově.  Když jsem se učil Pascal, tak mi vadila zejména slova begin a end. Proč? Musela se psát pořád dokola, dokonce i tam, kde to nebylo povinné. Výsledkem byla a je horší čitelnost a snižující se obliba Pascalu.
Nevidím tu souvislost, proč by zrovna ukecanost měla být důvodem, proč se ty jazyky nepoužívají. Třeba Java je podle mne o něco ukecanější, než ObjectPascal/Delphi, ale okrajová není.

Minimalisté přišli s jazykem Python a formátem YAML.
Idea, že když už odsazujeme kvůli čitelnosti, může se to použít i pro strukturování kódu, je hezká, ale podle mne troskotá právě na tom, že lidé chtějí odsazení jako tu balastní informaci navíc, pro lepší čtení a pro kontrolu, ale nechtějí to jako primární a jediný zdroj informací o struktuře. Určitá míra ukecanosti je prostě přínosná.

Ideál je tedy někde uprostřed.
Navíc má každý ten ideál trochu někde jinde. Každopádně snažit se o co největší stručnost je špatná cesta. Ostatně to platí i u algoritmů – pokud není nutné kód nějak optimalizovat, je lepší delší ale srozumitelnější kód, než nějaký oneliner.

Zbývá jen udělat vhodný návrh, který maximalizuje čitelnost pro lidi i stroje.
Vhodný návrh čeho? XML už navrženo bylo :-)

Kit

Re:Atributy v XML
« Odpověď #25 kdy: 10. 07. 2018, 19:02:25 »
Zbývá jen udělat vhodný návrh, který maximalizuje čitelnost pro lidi i stroje.
Vhodný návrh čeho? XML už navrženo bylo :-)

XML je formát, který nemá žádnou značku, ale má metodiku, jak si vlastní značky definovat. To je cílem toho návrhu struktury souboru XML, nejlépe pomocí XSD nebo Relax NG.

Franta <xkucf03/>

Re:Atributy v XML
« Odpověď #26 kdy: 10. 07. 2018, 20:43:48 »
Samozřejmě, ze je to technologický dluh. Rychle zmaštěná aplikace sice ušetří nějaký čas na začátku, ale následně se ti to vrátí. Někteří vývojáři si bohužel neuvedomuji, že navrhnout formát není totéž jako vybrat knihovnu pro serializaci. Nebo, že mavrhnout API není totéž jako zpřístupnit pro vzdálené volání par metod pomoci nějaké technologie.

To nerozporuju. Mě zajímá, jak vznikne tech. dluh, když místo XML použiju JSON.

Už třeba takový detail, že JSON neumí komentáře. Často vídám testery nebo lidi, kteří si potřebují provolat nějakou REST/JSON službu – trpí tím, že si nemůžou část požadavku zakomentovat. Musí to vyjmou do schránky, napsat něco jiného, ve schránce se jim to ztrácí, tak to musí vykopírovat do jiného programu. To je práce jak za krále Klacka. Možná by mohli nastoupit někam do nevolnictví. JSON prostě brzdí vývoj a testování.

Kdyby to bylo v XML, tak snadno část zakomentují a můžou zkoušet posílat alternativní požadavky nebo si tam dopsat poznámku, vysvětlivku. Pro konfiguráky to platí dvojnásob.

Pak tam taky chybí jmenné prostory, takže ten formát není rozšiřitelný. Jsou jakési pokusy, jak to tam dohackovat, ale je to takové drbání se levou rukou na pravém uchu.

Hodně velký problém byl (a často stále je) chybějící infrastruktura – editory, validátory, schéma, dotazovací jazyk, transformační jazyk… něco z toho se jim už podařilo dovyvinout, znovu-vynalézt kolo, ale celé roky znamenalo použití JSONu vracet se někam do středověku… a zbytečně.

Někdy je taky problém s tím, že nezáleží na pořadí klíčů, takže musíš načíst vše a pak se teprve můžeš rozhodovat, jak jednotlivé hodnoty interpretovat. Na to narazíš, když chceš udělat nějaký pružnější/variabilnější datový model, kde můžeš mít různé typy (např. dědičnost). Pak se to musí všelijak obcházet přes pole (která zachovají pořadí, ale je to hnusné), nebo natáhnout vše do paměti a pak teprve zpracovat, což zase brání proudovému zpracování dlouhých dat. Nakonec by si člověk musel napsat vlastní parser a generátor.

Našlo by se toho víc, ale jako příklad to snad stačí.

.

Re:Atributy v XML
« Odpověď #27 kdy: 11. 07. 2018, 11:03:54 »
No jo, jenže než na tohle většina lidí přijde, že to, co řeší s JSONem nebo YAML, má XML už dávno vyřešené, a že ty takzvané výhody JSONu nebo YAMLu jsou ve skutečnosti nevýhody…

Které to jsou? Neznám to, nechám se poučit (třeba to pak nebudu muset zjišťovat sám).

Už jsem některé jmenoval výše. Už hodně vývojářů si pobrečelo, že JSON nemá možnost komentářů. Jiné datové typy než int nebo string se musí předem serializovat. Příkazy pro zpracování jsou věcí neznámou. Možnost definování entit nulová. Čeština se v tom nedá číst. Absence schéma. Je toho snad málo?
Možná by bylo dobré se nevyjadřovat k věcem, o kterých nic nevíte nebo jim nerozumíte.

viz třeba:
"čeština se v tom nedá čít" ... string - any unicode character except " and \
absence schema: http://json-schema.org/


.

Re:Atributy v XML
« Odpověď #28 kdy: 11. 07. 2018, 11:07:47 »
A v čem se liší čtení programu od čtení novinového článku nebo diplomky, že by ta redundance u přirozených jazyků byla přínosná, ale u technických jazyků byla naopak škodlivá?

Je to vidět na dříve vytvořených jazycích COBOL, SQL nebo třeba Pascal. Zejména ten první byl řádně ukecaný. Výsledek? Dnes už se v něm programuje okrajově. Když jsem se učil Pascal, tak mi vadila zejména slova begin a end. Proč? Musela se psát pořád dokola, dokonce i tam, kde to nebylo povinné. Výsledkem byla a je horší čitelnost a snižující se obliba Pascalu. Jazyk C přišel s elegantními {} a všichni jásali, že se to dobře píše i čte. PHP také používalo if (...): ... else: ... endif. Postupně se přešlo na C-like syntaxi.

Minimalisté přišli s jazykem Python a formátem YAML. Výsledkem je naopak odpor vývojářů zvyklých na {}. Podobně i Lisp, který těch závorek nemá víc než ostatní jazyky, si nezískal mnoho příznivců. Přitom by mohl sloužit pro různé konfiguráky i pro výměnu dat mnohem lépe než třeba JSON.

Ideál je tedy někde uprostřed. XML bez atributů má na pohled více zbytečného textu než XML s atributy. Tam, kde bychom stejně dali u zavírací závorky komenář, má koncovou značku. Zbývá jen udělat vhodný návrh, který maximalizuje čitelnost pro lidi i stroje.
Stačilo jen napsat "miluji XML". Zbytek je jen směs žvástů, polopravd a nesmyslů.

.

Re:Atributy v XML
« Odpověď #29 kdy: 11. 07. 2018, 11:13:32 »
Samozřejmě, ze je to technologický dluh. Rychle zmaštěná aplikace sice ušetří nějaký čas na začátku, ale následně se ti to vrátí. Někteří vývojáři si bohužel neuvedomuji, že navrhnout formát není totéž jako vybrat knihovnu pro serializaci. Nebo, že mavrhnout API není totéž jako zpřístupnit pro vzdálené volání par metod pomoci nějaké technologie.

To nerozporuju. Mě zajímá, jak vznikne tech. dluh, když místo XML použiju JSON.

Už třeba takový detail, že JSON neumí komentáře. Často vídám testery nebo lidi, kteří si potřebují provolat nějakou REST/JSON službu – trpí tím, že si nemůžou část požadavku zakomentovat. Musí to vyjmou do schránky, napsat něco jiného, ve schránce se jim to ztrácí, tak to musí vykopírovat do jiného programu. To je práce jak za krále Klacka. Možná by mohli nastoupit někam do nevolnictví. JSON prostě brzdí vývoj a testování.

Kdyby to bylo v XML, tak snadno část zakomentují a můžou zkoušet posílat alternativní požadavky nebo si tam dopsat poznámku, vysvětlivku. Pro konfiguráky to platí dvojnásob.

Pak tam taky chybí jmenné prostory, takže ten formát není rozšiřitelný. Jsou jakési pokusy, jak to tam dohackovat, ale je to takové drbání se levou rukou na pravém uchu.

Hodně velký problém byl (a často stále je) chybějící infrastruktura – editory, validátory, schéma, dotazovací jazyk, transformační jazyk… něco z toho se jim už podařilo dovyvinout, znovu-vynalézt kolo, ale celé roky znamenalo použití JSONu vracet se někam do středověku… a zbytečně.

Někdy je taky problém s tím, že nezáleží na pořadí klíčů, takže musíš načíst vše a pak se teprve můžeš rozhodovat, jak jednotlivé hodnoty interpretovat. Na to narazíš, když chceš udělat nějaký pružnější/variabilnější datový model, kde můžeš mít různé typy (např. dědičnost). Pak se to musí všelijak obcházet přes pole (která zachovají pořadí, ale je to hnusné), nebo natáhnout vše do paměti a pak teprve zpracovat, což zase brání proudovému zpracování dlouhých dat. Nakonec by si člověk musel napsat vlastní parser a generátor.

Našlo by se toho víc, ale jako příklad to snad stačí.
Takže veškerý dluh je absence komentářů. To vám brzo došly argumenty. Pokud požadujete komentáře, použijte JSON5.