XML hè quasi sempre misused

XML hè quasi sempre misused
A lingua XML hè stata inventata in u 1996. Appena apparsu, e pussibulità di a so applicazione avianu digià cuminciatu à esse malintendente, è per i scopi à quale anu pruvatu à adattà, ùn era micca a megliu scelta.

Ùn hè micca esageratu per dì chì a maiò parte di i schemi XML chì aghju vistu eranu usi inappropriati o sbagliati di XML. Inoltre, questu usu di XML hà dimustratu un malintesi fundamentale di ciò chì XML era tuttu.

XML hè una lingua di marcatura. Questu ùn hè micca un furmatu di dati. A maiò parte di i schemi XML anu trascuratu esplicitamente sta distinzione, cunfundendu XML cù un formatu di dati, chì ultimamente risultatu in un sbagliu in a scelta di XML perchè hè u formatu di dati chì hè veramente necessariu.

Senza entre in troppu dettu, XML hè megliu adattatu per annotà blocchi di testu cù struttura è metadata. Se u vostru scopu principale ùn hè micca di travaglià cù un bloccu di testu, a scelta di XML hè improbabile di esse ghjustificata.

Da questu puntu di vista, ci hè un modu simplice per verificà quantu hè fattu u schema XML. Pigliemu per esempiu un documentu in u schema previstu è sguassate tutte e tag è attributi da ellu. Se ciò chì resta ùn hà micca sensu (o s'ellu ci hè una linea in biancu), allora o u vostru schema ùn hè micca custruitu bè o ùn avete micca bisognu di utilizà XML.

Sottu daraghju alcuni di l'esempii più cumuni di circuiti incorrectly custruiti.

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

Quì vedemu un esempiu di un tentativu infundatu è stranu (ancu assai cumuni) di spressione un dizziunariu chjave-valore simplice in XML. Se sguassate tutte e tag è l'attributi, vi sarà lasciatu cù una fila viota. Essenzialmente, stu documentu hè, per quantu assurdu pò sona, una annotazione semantica di una linea viota.

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

Per aggravà e cose, ùn avemu micca solu una annotazione semantica di una stringa viota quì cum'è una manera stravagante di spressione un dizziunariu - sta volta u "dizziunariu" hè direttamente codificatu cum'è attributi di l'elementu radicali. Questu rende u settore datu di nomi di attributi nantu à un elementu indefinitu è ​​dinamicu. Inoltre, mostra chì tuttu ciò chì l'autore vulia veramente sprimà era una sintassi chjave-valore simplice, ma invece hà pigliatu a decisione assolutamente strana di applicà XML, furzendu l'usu di un unicu elementu viotu solu cum'è un prefissu per utilizà a sintassi di l'attributu. È aghju trovu tali schemi assai spessu.

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

Questu hè qualcosa di megliu, ma avà per qualchì mutivu i chjavi sò metadata è i valori ùn sò micca. Un sguardu assai stranu à i dizziunari. Se sguassate tutte e tag è attributi, a mità di l'infurmazioni seranu persu.

Una espressione di dizziunariu curretta in XML parerebbe cusì cusì:

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

Ma s'è a ghjente hà fattu a strana decisione di utilizà XML cum'è un formatu di dati è poi l'utilizanu per urganizà un vocabulariu, allora anu da capisce chì ciò chì facenu hè inappropriatu è micca cunvene. Hè ancu cumuni per i diseggiani di sceglie per errore XML per creà e so applicazioni. Ma ancu più spessu, aggravanu l'affari usendu senza significatu XML in una di e forme descritte sopra, ignorendu u fattu chì XML ùn hè simplicemente micca adattatu per questu.

U peghju schema XML? Per via, u premiu per u peghju schema XML chì aghju mai vistu, Ottene u furmatu di u schedariu di cunfigurazione di l'approvvigionamentu automaticu per i telefoni di telefonia IP Polycom. Tali schedari necessitanu di scaricà i schedarii di dumanda XML via TFTP, chì ... In generale, quì hè un estrattu da un tali file:

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

Questu ùn hè micca u male scherzu di qualcunu. È questu ùn hè micca a mo invenzione:

  • elementi sò simpricimenti usatu comu un prefissu per attaccà attributi, chì elli stessi hannu nomi gerarchicu.
  • Se vulete assignà valori à parechje istanze di un tipu particulari di registru, duvete aduprà nomi di attributi per fà questu. chì anu indici.
  • In più, attributi chì cumincianu cù softkey., deve esse postu nantu à elementi <softkey/>, attributi chì cumincianu cù feature., deve esse postu nantu à elementi <feature/> etc., malgradu u fattu chì pare completamente inutile è à prima vista senza significatu.
  • È, finarmenti, s'è vo sperava chì u primu cumpunente di un nome d'attributu seria sempre u listessu cum'è u nome di l'elementu - nunda cusì! Per esempiu, attributi up. deve esse attaccatu à <userpreferences/>. L'ordine di attaccà nomi di attributi à elementi hè arbitrariu, quasi cumpletamente.

Documenti o dati. Ogni tantu, qualcunu face qualcosa di strana prova di paragunà XML è JSON, è cusì dimustrà chì ùn capiscenu mancu. XML è un linguaggio di marcatura di documenti. JSON hè un formatu di dati strutturatu, cusì paragunà l'un à l'altru hè cum'è pruvà à paragunà u caldu cù u dolce.

U cuncettu di a diffarenza trà documenti è dati. Cum'è un analogu di XML, pudemu piglià cundizionalmente un documentu leggibile da a macchina. Ancu s'ellu hè destinatu à esse leggibile in a macchina, si riferisce metaforicamente à i ducumenti, è da questu puntu di vista hè in realtà paragunabile à i documenti PDF, chì a maiò spessu ùn sò micca leghjite in a macchina.

Per esempiu, in XML l'ordine di elementi importa. Ma in JSON, l'ordine di coppie chjave-valore in l'uggetti hè senza significatu è micca definitu. Se vulete ottene un dizziunariu senza ordine di coppie chjave-valore, l'ordine propiu in quale l'elementi appariscenu in quellu schedariu ùn importa micca. Ma pudete furmà parechji tipi di dati da queste dati. di documenti, perchè ci hè un certu ordine in u documentu. Metaforicamente, hè analogu à un documentu nantu à carta, ancu s'ellu ùn hà micca dimensioni fisiche, à u cuntrariu di un schedariu stampatu o PDF.

U mo esempiu di una rapprisintazioni di u dizziunariu XML propiu mostra l'ordine di l'elementi in u dizziunariu, in uppusizione à a rapprisentazione JSON. Ùn possu micca ignurà questu ordine: sta linearità hè inherente à u mudellu di documentu è u furmatu XML. Qualchidunu pò sceglie di ignurà l'ordine quandu interpretanu stu documentu XML, ma ùn ci hè nunda di discutiri nantu à questu postu chì u prublema hè fora di u scopu di una discussione di u furmatu stessu. Inoltre, se fate u documentu visibile in u navigatore attaccà un fogliu di stile in cascata, vi vede chì l'elementi di u dizziunariu appariscenu in un certu ordine è in nisun altru.

In altre parolle, un dizziunariu (un pezzu di dati strutturati) pò esse cunvertitu in n diversi ducumenti pussibuli (in XML, PDF, carta, etc.), induve n - u nùmeru di cumminazzioni pussibuli di elementi in u dizziunariu, è ùn avemu ancu pigliatu in contu altre variabili pussibuli.

Tuttavia, si seguita dinù chì s'è vo vulete trasfiriri solu dati, tandu utilizendu un documentu machine-leggibile per questu ùn serà micca efficace. Aduprà un mudellu, chì in questu casu hè superfluu; solu si mette in u modu. In più, in ordine per caccià i dati fonte, vi tuccherà à scrive un prugrammu. Ùn ci hè quasi nunda di usà XML per qualcosa chì ùn serà micca furmatu cum'è documentu in un certu puntu (per esempiu, usendu CSS o XSLT, o i dui), postu chì questu hè u mutivu principale (se micca l'unicu) per fà cusì. à u mudellu di documentu.

Inoltre, postu chì XML ùn hà micca cuncettu di numeri (o espressioni booleani, o altri tipi di dati), tutti i numeri rapprisintati in stu formatu sò cunsiderati solu testu supplementu. Per estrattà e dati, u schema è a so relazione cù i dati currispondenti chì sò spressi deve esse cunnisciutu. Avete ancu bisognu di sapè quandu, basatu annantu à u cuntestu, un elementu di testu particulari rapprisenta un numeru è deve esse cunvertitu in un numeru, etc.

Cusì, u prucessu di estrazione di dati da i ducumenti XML ùn hè micca cusì sfarente da u prucessu di ricunnosce i documenti scansati chì cuntenenu, per esempiu, tavule chì formanu parechje pagine di dati numerichi. Iè, hè pussibule di fà questu in principiu, ma questu ùn hè micca u modu più ottimali, salvu cum'è l'ultimu risorsu, quandu ùn ci hè assolutamente micca altre opzioni. Una suluzione raghjunata hè di truvà solu una copia digitale di e dati originali chì ùn hè micca incrustatu in un mudellu di documentu chì combina i dati cù a so rapprisintazioni testuale specifica.

Dittu chistu, ùn mi sorprende micca chì XML hè populari in l'affari. U mutivu di questu hè precisamente chì u formatu di documentu (nantu à carta) hè cumprendibile è familiar à l'affari, è volenu cuntinuà à utilizà un mudellu familiar è comprensibile. Per a listessa ragione, l'imprese troppu spessu usanu documenti PDF invece di formati più leggibili da a macchina - perchè sò sempre ligati à u cuncettu di una pagina stampata cù una dimensione fisica specifica. Questu hè ancu applicà à i ducumenti chì sò improbabile di esse mai stampati (per esempiu, un PDF di 8000 pagine di documentazione di registru). Da questu puntu di vista, l'usu di XML in l'affari hè essenzialmente una manifestazione di skeuomorfismu. E persone capiscenu l'idea metaforica di una pagina stampata di dimensione limitata, è capiscenu cumu creà prucessi di cummerciale basatu nantu à documenti stampati. S'ellu hè a vostra guida, i ducumenti senza limitazioni di dimensioni fisiche chì sò leghjite da a macchina - documenti XML - rapprisentanu l'innuvazione mentre sò una contraparte di documentu familiare è cunfortu. Questu ùn impedisce micca di esse un modu incorrectu è troppu skeuomorphic di prisentà dati.

A data, l'unicu schemi XML chì cunnoscu chì possu veramente chjamà un usu validu di u formatu sò XHTML è DocBook.

Source: www.habr.com

Add a comment