XML қариб ҳамеша нодуруст истифода мешавад

XML қариб ҳамеша нодуруст истифода мешавад
Забони XML соли 1996 ихтироъ шудааст. Ҳамин ки он пайдо шуд, имкониятҳои татбиқи он аллакай нодуруст фаҳмида мешуд ва барои мақсадҳое, ки онҳо кӯшиш мекарданд, ки онро мутобиқ кунанд, ин беҳтарин интихоб набуд.

Муболиға нест, агар бигӯям, ки аксарияти кулли схемаҳои XML, ки ман дидаам, истифодаи номуносиб ё нодурусти XML буданд. Гузашта аз ин, ин истифодаи XML нофаҳмии бунёдии XML-ро нишон дод.

XML забони аломатгузорӣ аст. Ин формати маълумот нест. Аксари схемаҳои XML ин фарқиятро ба таври возеҳ сарфи назар карда, XML-ро бо формати додаҳо омехта мекунанд, ки дар ниҳоят ба хатогӣ дар интихоби XML оварда мерасонад, зеро он формати додаест, ки воқеан лозим аст.

Бе тафсилоти аз ҳад зиёд, XML барои шарҳ додани блокҳои матн бо сохтор ва метамаълумот беҳтарин мувофиқ аст. Агар ҳадафи асосии шумо кор бо блоки матн набошад, интихоби XML гумон аст, ки асоснок бошад.

Аз ин нуқтаи назар, роҳи оддии санҷидани он, ки схемаи XML то чӣ андоза хуб сохта шудааст. Биёед ҳамчун намуна ҳуҷҷатеро дар схемаи пешбинишуда гирем ва ҳама тегҳо ва атрибутҳоро аз он хориҷ кунем. Агар чизи боқимонда маъно надошта бошад (ё агар хати холӣ боқӣ монда бошад), пас ё схемаи шумо дуруст сохта нашудааст ё шумо бояд танҳо XML-ро истифода набурдед.

Дар зер ман баъзе мисолҳои маъмултарини схемаҳои нодуруст сохташударо медиҳам.

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

Дар ин ҷо мо мисоли кӯшиши беасос ва аҷиб (ҳарчанд хеле маъмул) барои ифодаи луғати оддии калид-арзишро дар XML мебинем. Агар шумо ҳамаи тегҳо ва атрибутҳоро нест кунед, шумо бо як сатри холӣ мемонед. Аслан, ин ҳуҷҷат, новобаста аз он ки он чӣ қадар бемаънӣ садо диҳад, шарҳи семантикии сатри холӣ аст.

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

Бадтараш, мо дар ин ҷо на танҳо тавзеҳи семантикии сатри холӣ дорем, ки ҳамчун як роҳи экстравагантии ифодаи луғат - ин дафъа "лугат" мустақиман ҳамчун атрибутҳои унсури реша рамзгузорӣ шудааст. Ин маҷмӯи номҳои атрибутҳоро дар элемент номуайян ва динамикӣ мекунад. Гузашта аз ин, он нишон медиҳад, ки ҳама муаллиф дар ҳақиқат мехост ифода кардани синтаксиси оддии калид-арзиш буд, аммо ба ҷои он вай тасмими комилан аҷиберо барои татбиқи XML қабул кард ва истифодаи як унсури холиро ҳамчун префикс барои истифодаи синтаксиси атрибут маҷбур кард. Ва ман бо чунин схемахо зуд-зуд дучор меоям.

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

Ин чизи беҳтар аст, аммо ҳоло бо баъзе сабабҳо калидҳо метадата мебошанд ва арзишҳо не. Нигоҳи хеле аҷиб ба луғатҳо. Агар шумо ҳамаи тегҳо ва атрибутҳоро нест кунед, нисфи маълумот гум мешавад.

Ифодаи дурусти луғат дар XML чунин хоҳад буд:

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

Аммо агар одамон қарори аҷибе қабул карда бошанд, ки XML-ро ҳамчун формати додаҳо истифода баранд ва сипас онро барои ташкили луғат истифода баранд, пас онҳо бояд фаҳманд, ки коре, ки онҳо мекунанд, номувофиқ ва қулай нест. Инчунин маъмул аст, ки тарроҳон барои эҷоди замимаҳои худ хато XML-ро интихоб мекунанд. Аммо ҳатто аксар вақт, онҳо бо истифодаи бемаънӣ XML дар яке аз шаклҳои дар боло тавсифшуда вазъро бадтар мекунанд, нодида гирифтани он, ки XML барои ин кор мувофиқ нест.

Бадтарин схемаи XML? Дар омади гап, мукофот барои бадтарин схемаи XML, ки ман ягон бор дидаам, Формати файли конфигуратсияи автоматии таъминкуниро барои телефонҳои Polycom IP телефонӣ мегирад. Чунин файлҳо зеркашии файлҳои дархости XML тавассути TFTP-ро талаб мекунанд, ки... Умуман, иқтибос аз як чунин файл:

<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="..." />

Ин шӯхии бади касе нест. Ва ин ихтирои ман нест:

  • унсурҳо танҳо ҳамчун префикс барои замима кардани атрибутҳо истифода мешаванд, ки худашон номҳои иерархӣ доранд.
  • Агар шумо хоҳед, ки арзишҳоро ба якчанд намунаҳои як навъи сабт таъин кунед, шумо бояд барои ин кор номҳои атрибутҳоро истифода баред. ки индексхо доранд.
  • Илова бар ин, атрибутҳо аз softkey., бояд дар элементҳо ҷойгир карда шаванд <softkey/>, атрибутҳо аз feature., бояд дар элементҳо ҷойгир карда шаванд <feature/> ва гайра сарфи назар аз он ки тамоман нодаркор ва дар назари аввал бемаънй менамояд.
  • Ва ниҳоят, агар шумо умедвор будед, ки ҷузъи аввали номи атрибут ҳамеша бо номи элемент якхела хоҳад буд - ҳеҷ чиз монанди ин! Масалан, атрибутҳо up. бояд пайваст карда шавад <userpreferences/>. Тартиби замима кардани номҳои атрибутҳо ба элементҳо худсарона, қариб пурра аст.

Ҳуҷҷатҳо ё маълумот. Ҳар дафъае, касе бо кӯшиши муқоисаи XML ва JSON кори аҷибе мекунад ва ҳамин тавр нишон медиҳад, ки онҳо ҳам намефаҳманд. XML забони аломатгузории ҳуҷҷат аст. JSON формати сохтории додаҳост, аз ин рӯ муқоиса кардани онҳо бо ҳамдигар мисли кӯшиши муқоиса кардани гарм бо нарм аст.

Консепсияи фарқияти байни ҳуҷҷатҳо ва маълумот. Ҳамчун аналоги XML, мо метавонем шартан ҳуҷҷати бо мошин хондашавандаро гирем. Гарчанде ки он барои хондани мошин пешбинӣ шудааст, он ба таври маҷозӣ ба ҳуҷҷатҳо ишора мекунад ва аз ин нуқтаи назар воқеан бо ҳуҷҷатҳои PDF муқоисашаванда аст, ки аксар вақт дар мошин хонда намешаванд.

Масалан, дар XML тартиби элементҳо муҳим аст. Аммо дар JSON, тартиби ҷуфтҳои калид-арзиш дар дохили объектҳо бемаънӣ ва номуайян аст. Агар шумо хоҳед, ки луғати бетартиби ҷуфтҳои калид-арзишро ба даст оред, тартиби воқеии дар он файл пайдо шудани элементҳо аҳамият надорад. Аммо шумо метавонед аз ин маълумот намудҳои гуногуни маълумотро ташкил кунед. ҳуҷҷатҳои, зеро дар хуччат тартиботи муайян мавчуд аст. Ба таври маҷозӣ, он ба ҳуҷҷати рӯи коғаз шабеҳ аст, гарчанде ки он бар хилофи чоп ё файли PDF андозаҳои физикӣ надорад.

Намунаи ман аз намояндагии дурусти луғати XML тартиби элементҳоро дар луғат нишон медиҳад, бар хилофи муаррифии JSON. Ман ин тартибро сарфи назар карда наметавонам: ин хаттӣ ба модели ҳуҷҷат ва формати XML хос аст. Баъзеҳо метавонанд ҳангоми тафсири ин ҳуҷҷати XML фармоишро нодида гиранд, аммо дар ин бора баҳс кардан ҷоиз нест, зеро масъала аз доираи муҳокимаи худи формат берун аст. Гузашта аз ин, агар шумо ҳуҷҷатро тавассути замима кардани варақаи услубҳои каскадӣ дар браузер дастрас кунед, шумо хоҳед дид, ки унсурҳои луғат бо тартиби муайян пайдо мешаванд, на бо тартиби дигаре.

Ба ибораи дигар, луғат (як пораи маълумоти сохторӣ) метавонад ба табдил дода шавад n Ҳуҷҷатҳои гуногуни имконпазир (дар XML, PDF, коғаз ва ғайра), ки дар куҷо n - шумораи таркиби имконпазири элементҳо дар луғат ва мо то ҳол дигар тағирёбандаҳои имконпазирро ба назар нагирифтаем.

Аммо, аз ин ҳам бармеояд, ки агар шумо хоҳед, ки танҳо маълумотро интиқол диҳед, пас истифодаи ҳуҷҷати бо мошин хондашаванда барои ин самаранок нахоҳад буд. Он моделеро истифода мебарад, ки дар ин ҳолат зиёдатӣ аст, он танҳо халал мерасонад. Илова бар ин, барои истихроҷи маълумоти манбаъ, шумо бояд барнома нависед. Истифодаи XML барои чизе, ки дар ягон лаҳза ҳамчун ҳуҷҷат формат карда намешавад (масалан, бо истифода аз CSS ё XSLT ё ҳарду) ҳеҷ маъно надорад, зеро ин сабаби асосии (агар ягона набошад) барои ин аст. ба модели ҳуҷҷат.

Гузашта аз ин, азбаски XML мафҳуми рақамҳо (ё ифодаҳои булӣ ё дигар намудҳои маълумот) надорад, ҳамаи рақамҳои дар ин формат муаррифӣшуда танҳо матни иловагӣ ҳисобида мешаванд. Барои истихроҷи маълумот, схема ва муносибати он бо маълумоти мувофиқи ифодашуда бояд маълум бошад. Шумо инчунин бояд бидонед, ки дар асоси контекст, як унсури матни мушаххас рақамро ифода мекунад ва бояд ба рақам табдил дода шавад ва ғайра.

Ҳамин тариқ, раванди истихроҷи маълумот аз ҳуҷҷатҳои XML аз раванди шинохтани ҳуҷҷатҳои сканшуда, ки масалан, ҷадвалҳоеро ташкил медиҳанд, ки саҳифаҳои зиёди маълумоти ададӣ доранд, чандон фарқ надорад. Бале, ин корро аслан кардан мумкин аст, аммо ин роҳи беҳтарин нест, ба истиснои чораи охирин, вақте ки ягон варианти дигар вуҷуд надорад. Ҳалли оқилона ин танҳо пайдо кардани нусхаи рақамии маълумоти аслӣ мебошад, ки дар модели ҳуҷҷат ворид карда нашудааст, ки маълумотро бо муаррифии матнии мушаххаси он муттаҳид мекунад.

Гуфта мешавад, ин маро ба ҳайрат намеорад, ки XML дар тиҷорат маъмул аст. Сабаби ин маҳз дар он аст, ки формати ҳуҷҷат (дар рӯи коғаз) барои тиҷорат фаҳмо ва шинос аст ва онҳо мехоҳанд минбаъд низ аз модели шинос ва фаҳмо истифода баранд. Бо ҳамин сабаб, корхонаҳо аксар вақт ҳуҷҷатҳои PDF-ро ба ҷои форматҳои бештар хондашавандаи мошин истифода мебаранд - зеро онҳо то ҳол ба консепсияи саҳифаи чопшуда бо андозаи мушаххаси физикӣ алоқаманданд. Ин ҳатто ба ҳуҷҷатҳое дахл дорад, ки ҳеҷ гоҳ чоп карда намешаванд (масалан, PDF-и 8000 саҳифаи ҳуҷҷатҳои реестр). Аз ин нуқтаи назар, истифодаи XML дар тиҷорат аслан як зуҳури скеуоморфизм мебошад. Одамон идеяи маҷозӣ дар бораи саҳифаи чопии андозаи маҳдудро дарк мекунанд ва онҳо мефаҳманд, ки чӣ гуна равандҳои бизнесро дар асоси ҳуҷҷатҳои чопӣ эҷод кардан мумкин аст. Агар ин дастури шумо бошад, ҳуҷҷатҳои бидуни маҳдудияти андозаи физикӣ, ки барои мошин хондан мумкин аст - ҳуҷҷатҳои XML - навоварӣ ва ҳамтои шинос ва бароҳати ҳуҷҷат буданро нишон медиҳанд. Ин ба онҳо монеъ намешавад, ки роҳи нодуруст ва аз ҳад зиёд скеуоморфики пешниҳоди маълумот боқӣ монанд.

То имрӯз, ягона схемаҳои XML, ки ман медонам, ки ман воқеан истифодаи дурусти форматро меномам, XHTML ва DocBook мебошанд.

Манбаъ: will.com

Илова Эзоҳ