XML ampir sok disalahgunakeun

XML ampir sok disalahgunakeun
Basa XML diciptakeun dina 1996. Teu lami-lami éta muncul, kamungkinan aplikasina parantos mimiti disalahartikeun, sareng pikeun tujuan anu aranjeunna nyobian adaptasi éta, éta sanés pilihan anu pangsaéna.

Teu kaleuleuwihi disebutkeun yen seuseueurna schemas XML Kuring geus katempo éta pamakéan pantes atawa salah XML. Leuwih ti éta, pamakéan XML ieu nunjukkeun hiji salah paham fundamental naon XML éta sadayana ngeunaan.

XML mangrupikeun basa markup. Ieu sanés format data. Paling skéma XML geus eksplisit overlooked bédana ieu, ngabingungkeun XML jeung format data, nu pamustunganana ngakibatkeun kasalahan dina milih XML sabab format data nu sabenerna diperlukeun.

Tanpa seueur teuing detil, XML paling cocog pikeun annotating blok téks sareng struktur sareng metadata. Upami tujuan utami anjeun sanés damel sareng blok téks, milih XML sigana henteu leres.

Ti sudut pandang ieu, aya cara basajan pikeun pariksa kumaha ogé schema XML dijieun. Hayu urang nyandak sabagé conto dokumen dina skéma dimaksudkeun sarta miceun kabeh tag jeung atribut ti dinya. Lamun naon anu ditinggalkeun teu make akal pikiran (atawa lamun aya hiji garis kosong ditinggalkeun), lajeng boh skéma anjeun teu diwangun neuleu atawa anjeun ngan saukur teu kudu ngagunakeun XML.

Di handap ieu kuring bakal masihan sababaraha conto anu paling umum tina sirkuit anu teu leres.

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

Di dieu urang tingali conto hiji unfounded tur aneh (sanajan pisan umum) usaha pikeun nganyatakeun hiji kamus konci-nilai basajan dina XML. Upami anjeun ngahapus sadaya tag sareng atribut, anjeun bakal ditinggalkeun ku baris kosong. Intina, dokumén ieu, henteu paduli kumaha absurdna, éta mangrupikeun anotasi semantik tina garis kosong.

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

Pikeun ngajantenkeun masalah, urang henteu ngan ukur gaduh anotasi semantik tina senar kosong di dieu salaku cara anu luar biasa pikeun nganyatakeun kamus - waktos ieu "kamus" langsung disandikeun salaku atribut unsur akar. Hal ieu ngajadikeun set dibikeun tina ngaran atribut dina unsur undefined tur dinamis. Leuwih ti éta, éta nunjukeun yen sakabeh pangarang bener hayang nganyatakeun éta sintaksis konci-nilai basajan, tapi gantina anjeunna nyieun kaputusan pancen aneh pikeun nerapkeun XML, forcing pamakéan unsur kosong tunggal saukur salaku awalan ngagunakeun atribut sintaksis. Sarta kuring datang di sakuliah schemes sapertos pisan sering.

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

Ieu mangrupikeun hal anu langkung saé, tapi ayeuna kusabab sababaraha alesan konci éta metadata sareng nilaina henteu. A katingal pisan aneh dina kamus. Upami anjeun ngahapus sadaya tag sareng atribut, satengah inpormasi bakal leungit.

Ekspresi kamus anu leres dina XML bakal katingali sapertos kieu:

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

Tapi lamun jalma geus nyieun kaputusan aneh ngagunakeun XML salaku format data lajeng ngagunakeun eta pikeun ngatur kosakata, mangka maranéhanana kudu ngarti yén naon maranéhna ngalakukeun teu pantes jeung teu merenah. Éta ogé umum pikeun désainer anu salah milih XML pikeun nyiptakeun aplikasina. Tapi malah leuwih sering, aranjeunna nyieun masalah parah ku euweuh hartina ngagunakeun XML dina salah sahiji bentuk ditétélakeun di luhur, ignoring kanyataan yén XML téh saukur teu cocog pikeun ieu.

Skéma XML awon? Ku jalan kitu, hadiah pikeun skéma XML awon anu kuring kantos ningali, Meunang format file konfigurasi provisioning otomatis pikeun telepon Polycom IP teleponi. Berkas sapertos kitu peryogi unduh file pamundut XML ngalangkungan TFTP, anu ... Sacara umum, ieu mangrupikeun kutipan tina hiji file sapertos kieu:

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

Ieu lain lulucon goréng batur. Sareng ieu sanés penemuan kuring:

  • elemen ngan saukur dipaké salaku awalan pikeun ngagantelkeun atribut, nu sorangan boga ngaran hirarkis.
  • Upami anjeun hoyong napelkeun nilai kana sababaraha instansi tina jinis rékaman anu tangtu, anjeun kedah nganggo nami atribut pikeun ngalakukeun ieu. nu gaduh indéks.
  • Sajaba ti éta, atribut dimimitian ku softkey., kudu disimpen dina elemen <softkey/>, atribut dimimitian ku feature., kudu disimpen dina elemen <feature/> jeung sajabana, sanajan kanyataan yén éta kasampak lengkep teu perlu jeung di glance kahiji euweuh hartina.
  • Sarta pamustunganana, lamun anjeun hoping yén komponén mimiti hiji ngaran atribut bakal salawasna jadi sarua jeung ngaran unsur - euweuh kawas éta! Contona, atribut up. kudu napel na <userpreferences/>. Urutan ngalampirkeun ngaran atribut kana elemen nyaeta wenang, ampir sagemblengna.

Dokumén atawa data. Sakali-kali, aya anu ngalakukeun anu aneh ku nyobian ngabandingkeun XML sareng JSON — sahingga nunjukkeun yén aranjeunna ogé henteu ngartos. XML mangrupikeun basa markup dokumen. JSON mangrupikeun format data terstruktur, janten ngabandingkeunana ka unggal anu sanés sapertos nyobian ngabandingkeun haneut sareng lemes.

Konsep bédana antara dokumén jeung data. Salaku analog tina XML, urang tiasa nyandak dokumen anu tiasa dibaca ku mesin. Sanajan eta dimaksudkeun pikeun mesin bisa dibaca, eta nujul metaphorically kana dokumén, sarta ti sudut pandang ieu sabenerna comparable kana dokumén PDF, nu paling sering teu mesin bisa dibaca.

Contona, dina XML urutan elemen penting. Tapi dina JSON, urutan pasangan konci-nilai dina obyék henteu aya artina sareng teu jelas. Lamun hayang meunang kamus unordered pasangan konci-nilai, urutan sabenerna nu elemen muncul dina file éta henteu masalah. Tapi anjeun tiasa ngabentuk seueur jinis data tina data ieu. документов, sabab aya urutan tangtu dina dokumén. Sacara métaforis, éta analog sareng dokumén dina kertas, sanaos henteu gaduh dimensi fisik, teu sapertos file cetak atanapi PDF.

Conto abdi ngagambarkeun kamus XML ditangtoskeun nembongkeun urutan unsur dina kamus, sabalikna tina ngagambarkeun JSON. Abdi teu tiasa malire urutan ieu: linearity ieu alamiah dina model dokumen jeung format XML. Sababaraha bisa milih malire urutan nalika nafsirkeun dokumen XML ieu, tapi euweuh titik dina arguing ngeunaan ieu saprak masalah éta saluareun ruang lingkup hiji sawala ngeunaan format sorangan. Sumawona, upami anjeun ngajantenkeun dokumén tiasa ditingali dina browser ku ngalampirkeun lambaran gaya cascading kana éta, anjeun bakal ningali yén unsur-unsur kamus muncul dina urutan anu tangtu sareng henteu aya anu sanés.

Dina basa sejen, kamus (sapotong data terstruktur) bisa dirobah jadi n rupa-rupa dokumén mungkin (dina XML, PDF, kertas, jsb), dimana n - Jumlah kamungkinan kombinasi elemen dina kamus, sarta kami geus henteu acan tumut kana akun variabel séjén mungkin.

Nanging, éta ogé nuturkeun yén upami anjeun ngan ukur hoyong nransfer data, teras nganggo dokumén anu tiasa dibaca mesin pikeun ieu moal efektif. Éta ngagunakeun modél, anu dina hal ieu superfluous, éta ngan ukur ngahalangan. Salaku tambahan, pikeun nimba data sumber, anjeun kedah nyerat program. Aya boro titik dina ngagunakeun XML pikeun hal anu moal formatna salaku dokumen di sawatara titik (sebutkeun, ngagunakeun CSS atawa XSLT, atawa duanana), saprak éta alesan utama (lamun teu hijina) pikeun ngalakukeunana. kana modél dokumén.

Leuwih ti éta, saprak XML teu boga konsep angka (atawa éksprési Boolean, atawa tipe data sejenna), sadaya angka digambarkeun dina format ieu dianggap ngan téks tambahan. Pikeun nimba data, skéma jeung hubunganana jeung data pakait keur dikedalkeun kudu dipikawanoh. Anjeun ogé kedah terang nalika, dumasar kana kontéksna, unsur téks tinangtu ngagambarkeun nomer sareng kedah dirobih kana angka, jsb.

Ku kituna, prosés extracting data tina dokumén XML teu jadi béda ti prosés recognizing dokumén discan ngandung, contona, tabel ngabentuk loba kaca data numeris. Sumuhun, kasebut nyaéta dimungkinkeun pikeun ngalakukeun ieu prinsipna, tapi ieu teu cara paling optimal, iwal salaku Resort panungtungan, lamun aya pancen euweuh pilihan séjén. Solusi anu wajar nyaéta ngan saukur milarian salinan digital tina data asli anu henteu dipasang dina modél dokumén anu ngagabungkeun data sareng perwakilan téks anu khusus.

Kitu cenah, éta henteu heran kuring pisan yén XML populér dina bisnis. Alesan pikeun ieu nyaéta yén format dokumén (dina kertas) kaharti sareng akrab pikeun bisnis, sareng aranjeunna hoyong teraskeun ngagunakeun modél anu akrab sareng kaharti. Pikeun alesan anu sami, usaha sering teuing nganggo dokumén PDF tibatan format anu tiasa dibaca ku mesin - sabab masih aya hubunganana sareng konsép halaman anu dicitak kalayan ukuran fisik anu khusus. Ieu malah lumaku pikeun dokumén anu teu mungkin kantos dicitak (contona, 8000-kaca PDF dokuméntasi pendaptaran). Ti sudut pandang ieu, pamakéan XML dina bisnis dasarna mangrupa manifestasi skeuomorphism. Jalma ngartos ide métaforis halaman anu dicitak ukuran kawates, sareng aranjeunna ngartos kumaha cara nyiptakeun prosés bisnis dumasar kana dokumén anu dicitak. Upami éta pituduh anjeun, dokumén tanpa watesan ukuran fisik anu tiasa dibaca ku mesin - dokumen XML - ngagambarkeun inovasi bari janten mitra dokumen anu akrab sareng nyaman. Ieu henteu nyegah aranjeunna tetep cara anu salah sareng skeuomorphic pikeun nampilkeun data.

Nepi ka ayeuna, hiji-hijina skéma XML anu kuring terang yén kuring tiasa leres-leres nyauran panggunaan format anu sah nyaéta XHTML sareng DocBook.

sumber: www.habr.com

Tambahkeun komentar