XML er nánast alltaf misnotað

XML er nánast alltaf misnotað
XML tungumálið var fundið upp árið 1996. Ekki fyrr hafði það birst en möguleikarnir á beitingu þess voru þegar farnir að misskiljast og í þeim tilgangi sem reynt var að laga það að var það ekki besti kosturinn.

Það er ekki ofsögum sagt að langflest XML skema sem ég hef séð hafi verið óviðeigandi eða röng notkun á XML. Þar að auki sýndi þessi notkun XML grundvallarmisskilning á því hvað XML snýst um.

XML er álagningarmál. Þetta er ekki gagnasnið. Flest XML skema hefur beinlínis horft framhjá þessari greinarmun, ruglað saman XML og gagnasniði, sem að lokum leiðir til mistök við val á XML vegna þess að það er gagnasniðið sem raunverulega er þörf á.

Án þess að fara út í of mikil smáatriði, hentar XML best til að gera athugasemdir við textablokkir með uppbyggingu og lýsigögnum. Ef aðalmarkmið þitt er ekki að vinna með textablokk er ólíklegt að það sé réttlætanlegt að velja XML.

Frá þessu sjónarhorni er einföld leið til að athuga hversu vel XML stefið er gert. Tökum sem dæmi skjal í fyrirhuguðu skema og fjarlægjum öll merki og eiginleika úr því. Ef það sem er eftir er ekki skynsamlegt (eða ef það er auð lína eftir), þá er annað hvort stefið þitt ekki rétt byggt eða þú hefðir einfaldlega ekki átt að nota XML.

Hér að neðan mun ég gefa nokkur af algengustu dæmunum um rangt smíðaðar hringrásir.

<roоt>
  <item name="name" value="John" />
  <item name="city" value="London" />
</roоt>

Hér sjáum við dæmi um tilefnislausa og undarlega (þó mjög algenga) tilraun til að tjá einfalda lykilgildisorðabók í XML. Ef þú fjarlægir öll merki og eiginleika, verður þú eftir með tóma línu. Í meginatriðum er þetta skjal, sama hversu fáránlegt það kann að hljóma, merkingarleg skýring á tómri línu.

<root name="John" city="London" />

Til að gera illt verra höfum við ekki bara merkingarskýringu á tómum streng hér sem eyðslusama leið til að tjá orðabók - að þessu sinni er "orðabókin" beint kóðað sem eiginleikar rótarþáttarins. Þetta gerir tiltekið safn eigindaheita á frumefni óskilgreint og kraftmikið. Þar að auki sýnir það að allt sem höfundurinn vildi í raun tjá var einföld lykilgilda setningafræði, en í staðinn tók hann þá algjörlega furðulegu ákvörðun að beita XML, og neyddi notkun á einum tómum þætti einfaldlega sem forskeytið til að nota eiginleika setningafræði. Og ég rekst mjög oft á slík kerfi.

<roоt>
  <item key="name">John</item>
  <item key="city">London</item>
</roоt>

Þetta er eitthvað betra, en núna af einhverjum ástæðum eru lyklarnir lýsigögn og gildin ekki. Mjög undarlegt yfirlit á orðabækur. Ef þú fjarlægir öll merki og eiginleika mun helmingur upplýsinganna glatast.

Rétt orðatiltæki í XML myndi líta svona út:

<roоt>
  <item>
    <key>Name</key>
    <value>John</value>
  </item>
  <item>
    <key>City</key>
    <value>London</value>
  </item>
</roоt>

En ef fólk hefur tekið þá undarlegu ákvörðun að nota XML sem gagnasnið og nota það síðan til að skipuleggja orðaforða, þá ætti það að skilja að það sem það er að gera er óviðeigandi og ekki þægilegt. Það er líka algengt að hönnuðir velji fyrir mistök XML til að búa til forritin sín. En jafnvel oftar gera þeir illt verra með því að nota XML á tilgangslausan hátt í einhverju af formunum sem lýst er hér að ofan, og hunsa þá staðreynd að XML hentar einfaldlega ekki í þetta.

Versta XML skema? Við the vegur, verðlaun fyrir versta XML skema sem ég hef séð, Fær sjálfvirkt úthlutunarstillingarsnið fyrir Polycom IP-síma síma. Slíkar skrár þurfa að hlaða niður XML beiðni skrám í gegnum TFTP, sem... Almennt séð er hér brot úr einni slíkri skrá:

<softkey
        softkey.feature.directories="0"
        softkey.feature.buddies="0"
        softkey.feature.forward="0"
        softkey.feature.meetnow="0"
        softkey.feature.redial="1"
        softkey.feature.search="1"

        softkey.1.enable="1"
        softkey.1.use.idle="1"
        softkey.1.label="Foo"
        softkey.1.insert="1"
        softkey.1.action="..."

        softkey.2.enable="1"
        softkey.2.use.idle="1"
        softkey.2.label="Bar"
        softkey.2.insert="2"
        softkey.2.action="..." />

Þetta er ekki slæmur brandari einhvers. Og þetta er ekki mín uppfinning:

  • þættir eru einfaldlega notaðir sem forskeyti til að tengja við eiginleika, sem sjálfir hafa stigveldisnöfn.
  • Ef þú vilt úthluta gildum til margra tilvika af tiltekinni tegund færslu, verður þú að nota eigindaheiti til að gera þetta. sem eru með vísitölur.
  • Að auki, eiginleikar sem byrja á softkey., verður að setja á þætti <softkey/>, eiginleikar sem byrja á feature., verður að setja á þætti <feature/> frv., þrátt fyrir að það líti út fyrir að vera algjörlega óþarft og við fyrstu sýn tilgangslaust.
  • Og að lokum, ef þú varst að vona að fyrsti hluti eigindarnafns væri alltaf sá sami og frumheiti - ekkert svoleiðis! Til dæmis, eiginleikar up. verður að fylgja <userpreferences/>. Röð þess að tengja eiginleikanöfn við þætti er handahófskennd, næstum algjörlega.

Skjöl eða gögn. Öðru hvoru gerir einhver eitthvað alveg skrítið með því að reyna að bera saman XML og JSON — og sýna þannig að þeir skilji ekki heldur. XML er skjalamerkismál. JSON er skipulagt gagnasnið, svo að bera þau saman við hvert annað er eins og að reyna að bera saman heitt og mjúkt.

Hugmyndin um muninn á milli skjöl og gögn. Sem hliðstæða XML getum við með skilyrðum tekið véllesanlegt skjal. Þó að það sé ætlað að vera véllesanlegt vísar það myndrænt til skjala og er frá þessu sjónarhorni í raun sambærilegt við PDF skjöl, sem eru oftast ekki véllesanleg.

Til dæmis, í XML skiptir röð þátta máli. En í JSON er röð lykilgilda para innan hluta tilgangslaus og óskilgreind. Ef þú vilt fá óraðaða orðabók með lykilgildapörum skiptir raunverulega röðin sem frumefnin birtast í þeirri skrá ekki máli. En þú getur myndað margar mismunandi tegundir gagna úr þessum gögnum. skjala, vegna þess að það er ákveðin röð í skjalinu. Myndrænt er það hliðstætt skjal á pappír, þó að það hafi ekki líkamlegar stærðir, ólíkt útprentun eða PDF skjal.

Dæmi mitt um almennilega XML orðabók sýnir röð þátta í orðabókinni, öfugt við JSON framsetningu. Ég get ekki hunsað þessa röð: þessi línuleiki er innbyggður í skjalalíkanið og XML-sniðið. Sumir gætu valið að hunsa röðina þegar þeir túlka þetta XML skjal, en það þýðir ekkert að rífast um þetta þar sem málið er utan ramma umræðu um sniðið sjálft. Þar að auki, ef þú gerir skjalið sýnilegt í vafranum með því að hengja flæðandi stílblað við það, muntu sjá að orðabókarþættirnir birtast í ákveðinni röð og í engri annarri.

Með öðrum orðum er hægt að breyta orðabók (hluti af skipulögðum gögnum) í n ýmis möguleg skjöl (í XML, PDF, pappír o.s.frv.), þar sem n - fjöldi mögulegra samsetninga þátta í orðabókinni, og við höfum ekki enn tekið tillit til annarra mögulegra breyta.

Hins vegar fylgir það líka að ef þú vilt flytja aðeins gögn, þá mun það ekki skila árangri að nota véllesanlegt skjal fyrir þetta. Það notar líkan, sem í þessu tilfelli er óþarfi; það mun aðeins koma í veg fyrir. Að auki, til þess að draga úr upprunagögnunum, þarftu að skrifa forrit. Það þýðir varla að nota XML fyrir eitthvað sem verður ekki sniðið sem skjal á einhverjum tímapunkti (td nota CSS eða XSLT, eða bæði), þar sem það er aðal (ef ekki eina) ástæðan fyrir því að gera það. við skjallíkanið.

Þar að auki, þar sem XML hefur ekkert hugtak um tölur (eða Boolean tjáning, eða aðrar gagnategundir), eru allar tölur sem eru táknaðar á þessu sniði álitnar aðeins viðbótartexti. Til að draga út gögn verður að vera þekkt skemað og tengsl þess við samsvarandi gögn sem verið er að gefa upp. Þú þarft líka að vita hvenær, byggt á samhenginu, tiltekinn textaþáttur táknar tölu og ætti að breyta í tölu o.s.frv.

Þannig er ferlið við að vinna gögn úr XML skjölum ekki svo frábrugðið því ferli að bera kennsl á skönnuð skjöl sem innihalda til dæmis töflur sem mynda margar síður af tölulegum gögnum. Já, það er hægt að gera þetta í grundvallaratriðum, en þetta er ekki ákjósanlegasta leiðin, nema sem síðasta úrræði, þegar það eru nákvæmlega engir aðrir valkostir. Sanngjarn lausn er einfaldlega að finna stafrænt afrit af upprunalegu gögnunum sem er ekki fellt inn í skjalalíkan sem sameinar gögnin með sérstökum textaframsetningu þeirra.

Sem sagt, það kemur mér alls ekki á óvart að XML sé vinsælt í viðskiptum. Ástæðan fyrir þessu er einmitt sú að skjalasniðið (á pappír) er skiljanlegt og kunnugt fyrir fyrirtæki og þeir vilja halda áfram að nota kunnuglegt og skiljanlegt líkan. Af sömu ástæðu nota fyrirtæki of oft PDF skjöl í stað véllesanlegra sniða - vegna þess að þau eru enn bundin við hugmyndina um prentaða síðu með ákveðinni stærð. Þetta á jafnvel við um skjöl sem ólíklegt er að verði nokkurn tíma prentuð (til dæmis 8000 blaðsíðna PDF af skráningarskjölum). Frá þessu sjónarhorni er notkun XML í viðskiptum í meginatriðum birtingarmynd skeuomorphism. Fólk skilur myndlíkingahugmyndina um prentaða síðu af takmarkaðri stærð og það skilur hvernig á að búa til viðskiptaferli byggða á prentuðum skjölum. Ef það er leiðarvísir þinn, tákna skjöl án takmarkana á líkamlegri stærð sem eru véllesanleg - XML ​​skjöl - nýsköpun á sama tíma og þau eru kunnugleg og þægileg hliðstæða skjala. Þetta kemur ekki í veg fyrir að þau séu áfram röng og of skeuomorph framsetning gagna.

Hingað til eru einu XML stefurnar sem ég veit um sem ég get sannarlega kallað gilda notkun á sniðinu XHTML og DocBook.

Heimild: www.habr.com

Bæta við athugasemd