XML prèske toujou mal itilize

XML prèske toujou mal itilize
Lang XML te envante an 1996. Pi bonè li te parèt ke posiblite yo nan aplikasyon li yo te deja kòmanse mal konprann, ak pou rezon yo ke yo te eseye adapte li, li pa t 'pi bon chwa a.

Li pa egzajerasyon pou di ke vas majorite de schémas XML mwen te wè yo se itilizasyon ki pa apwopriye oswa kòrèk nan XML. Anplis, itilizasyon XML sa a te demontre yon enkonpreyansyon fondamantal sou sa ki XML te genyen.

XML se yon langaj maketing. Sa a se pa yon fòma done. Pifò schémas XML te neglije klèman distenksyon sa a, konfonn XML ak yon fòma done, ki finalman rezilta nan yon erè nan chwazi XML paske li se fòma done a ki aktyèlman bezwen.

San yo pa antre nan twòp detay, XML pi byen adapte pou anote blòk tèks ak estrikti ak metadata. Si objektif prensipal ou a se pa travay ak yon blòk nan tèks, chwazi XML pa gen anpil chans yo dwe jistifye.

Soti nan pwen de vi sa a, gen yon fason ki senp yo tcheke ki jan yo byen ke chema XML fèt. Ann pran kòm yon egzanp yon dokiman nan chema entansyon an epi retire tout tags ak atribi nan li. Si sa ki rete a pa fè sans (oswa si gen yon liy vid ki rete), Lè sa a, swa chema ou a pa bati kòrèkteman oswa ou tou senpleman pa ta dwe itilize XML.

Anba a mwen pral bay kèk nan egzanp ki pi komen nan sikui mal konstwi.

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

Isit la nou wè yon egzanp yon tantativ san fondman ak etranj (menm si trè komen) pou eksprime yon senp diksyonè kle-valè nan XML. Si ou retire tout tags ak atribi, ou pral rete ak yon ranje vid. Esansyèlman, dokiman sa a se, kèlkeswa jan absid li ka son, yon anotasyon semantik nan yon liy vid.

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

Pou fè bagay pi mal, nou pa jis gen yon anotasyon semantik nan yon fisèl vid isit la kòm yon fason ekstravagan pou eksprime yon diksyonè - fwa sa a "diksyonè" se dirèkteman kode kòm atribi nan eleman rasin lan. Sa fè seri non atribi yo bay sou yon eleman endefini ak dinamik. Anplis, li montre ke tout otè a te reyèlman vle eksprime se te yon senp sentaks kle-valè, men olye li te pran desizyon an absoliman ra pou aplike XML, fòse itilize nan yon sèl eleman vid tou senpleman kòm yon prefiks yo sèvi ak sentaks atribi. Apre sa, mwen rankontre konplo sa yo trè souvan.

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

Sa a se yon bagay pi bon, men kounye a pou kèk rezon kle yo metadata ak valè yo pa. Yon gade trè etranj nan diksyonè. Si ou retire tout etikèt ak atribi, mwatye enfòmasyon yo pral pèdi.

Yon ekspresyon diksyonè kòrèk nan XML ta sanble yon bagay tankou sa a:

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

Men, si moun yo te pran desizyon an etranj yo sèvi ak XML kòm yon fòma done ak Lè sa a, sèvi ak li yo òganize yon vokabilè, Lè sa a, yo ta dwe konprann ke sa yo ap fè a pa apwopriye epi yo pa pratik. Li komen tou pou konsèpteur yo erè chwazi XML pou kreye aplikasyon yo. Men, menm pi souvan, yo fè pwoblèm yo vin pi mal lè yo sèvi ak XML san sans nan youn nan fòm ki dekri pi wo a, inyore lefèt ke XML se tou senpleman pa apwopriye pou sa.

Pi move XML Schema? By wout la, pri a pou pi move XML chema mwen te janm wè, Jwenn fòma fichye konfigirasyon pwovizyon otomatik pou telefòn Polycom IP telefòn. Fichye sa yo mande pou telechaje fichye demann XML atravè TFTP, ki... An jeneral, isit la se yon ekstrè nan youn dosye sa yo:

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

Sa a se pa move blag yon moun. Epi sa a se pa envansyon mwen an:

  • eleman yo tou senpleman itilize kòm yon prefiks tache atribi, ki tèt yo gen non yerarchize.
  • Si ou vle bay valè nan plizyè ka nan yon kalite patikilye nan dosye, ou dwe itilize non atribi pou fè sa. ki gen endis.
  • Anplis de sa, atribi kòmanse ak softkey., yo dwe mete sou eleman <softkey/>, atribi kòmanse ak feature., yo dwe mete sou eleman <feature/> elatriye, malgre lefèt ke li sanble konplètman nesesè ak nan premye gade san sans.
  • Epi finalman, si ou te espere ke premye eleman nan yon non atribi ta toujou menm jan ak non an eleman - pa gen anyen tankou sa! Pou egzanp, atribi up. dwe tache ak <userpreferences/>. Lòd pou atache non atribi ak eleman yo abitrè, prèske nèt.

Dokiman oswa done. Chak fwa nan yon ti tan, yon moun fè yon bagay konplètman etranj nan eseye konpare XML ak JSON-e konsa montre ke yo pa konprann tou. XML se yon langaj maketing dokiman. JSON se yon fòma done estriktire, kidonk konpare yo youn ak lòt se tankou eseye konpare cho ak mou.

Konsèp diferans ki genyen ant dokiman ak done. Kòm yon analogue nan XML, nou ka kondisyonèl pran yon dokiman machin-lizib. Malgre ke li gen entansyon pou machin lizib, li refere metaphoriquement pou dokiman, ak nan pwen de vi sa a aktyèlman comparable ak dokiman PDF, ki pi souvan pa machin lizib.

Pou egzanp, nan XML lòd eleman yo enpòtan. Men, nan JSON, lòd pè kle-valè nan objè yo san sans epi yo pa defini. Si ou vle jwenn yon diksyonè pa òdone pè kle-valè, lòd aktyèl la nan ki eleman yo parèt nan dosye sa a pa gen pwoblèm. Men, ou ka fòme anpil diferan kalite done nan done sa yo. nan dokiman yo, paske gen yon sèten lòd nan dokiman an. Metafò, li se analogue ak yon dokiman sou papye, byenke li pa gen dimansyon fizik, kontrèman ak yon enprime oswa yon dosye PDF.

Egzanp mwen an nan yon bon reprezantasyon diksyonè XML montre lòd eleman yo nan diksyonè a, kòm opoze ak reprezantasyon JSON. Mwen pa ka inyore lòd sa a: lineyè sa a nannan nan modèl dokiman an ak fòma XML. Gen moun ki ka chwazi inyore lòd la lè yo entèprete dokiman XML sa a, men pa gen okenn pwen nan diskite sou sa a paske pwoblèm nan depase sijè ki abòde lan yon diskisyon sou fòma nan tèt li. Anplis, si ou fè dokiman an ka wè nan navigatè a lè w tache yon fèy style kaskad sou li, ou pral wè ke eleman diksyonè yo parèt nan yon sèten lòd ak nan okenn lòt.

Nan lòt mo, yon diksyonè (yon moso done estriktire) ka konvèti an n divès kalite dokiman posib (nan XML, PDF, papye, elatriye), kote n - kantite konbinezon posib eleman nan diksyonè a, epi nou poko pran an kont lòt varyab posib.

Sepandan, li tou swiv ke si ou vle transfere done sèlman, Lè sa a, lè l sèvi avèk yon dokiman machin-lizib pou sa a pa pral efikas. Li sèvi ak yon modèl, ki nan ka sa a se initil, li pral sèlman jwenn nan chemen an. Anplis de sa, yo nan lòd yo ekstrè done yo sous, ou pral bezwen ekri yon pwogram. Pa gen okenn pwen nan itilize XML pou yon bagay ki pa pral fòma kòm yon dokiman nan kèk pwen (di, lè l sèvi avèk CSS oswa XSLT, oswa toude), paske se rezon prensipal (si se pa sèlman) pou fè sa. nan modèl dokiman an.

Anplis, kòm XML pa gen okenn konsèp nan nimewo (oswa ekspresyon Boolean, oswa lòt kalite done), tout nimewo ki reprezante nan fòma sa a yo konsidere kòm jis tèks adisyonèl. Pou ekstrè done, yo dwe konnen chema a ak relasyon li ak done korespondan yo eksprime yo. Ou bezwen konnen tou ki lè, ki baze sou kontèks la, yon eleman tèks patikilye reprezante yon nimewo epi yo ta dwe konvèti nan yon nimewo, elatriye.

Kidonk, pwosesis pou ekstrè done ki soti nan dokiman XML pa tèlman diferan de pwosesis pou rekonèt dokiman eskanè ki genyen, pa egzanp, tab ki fòme anpil paj done nimerik. Wi, li posib fè sa nan prensip, men sa a se pa fason ki pi optimal, eksepte kòm yon dènye rekou, lè pa gen absoliman okenn lòt opsyon. Yon solisyon rezonab se tou senpleman jwenn yon kopi dijital done orijinal yo ki pa entegre nan yon modèl dokiman ki konbine done yo ak reprezantasyon tèks espesifik li yo.

Sa te di, li pa etone m 'ditou ke XML se popilè nan biznis. Rezon ki fè sa a se jisteman ke fòma dokiman an (sou papye) se konprann ak abitye nan biznis, epi yo vle kontinye sèvi ak yon modèl abitye ak konprann. Pou menm rezon an, biznis yo twò souvan itilize dokiman PDF olye pou yo plis fòma machin lizib - paske yo toujou mare nan konsèp nan yon paj enprime ak yon gwosè fizik espesifik. Sa a menm aplike nan dokiman ki pa gen anpil chans pou yo janm enprime (pa egzanp, yon PDF 8000-paj nan dokiman rejis). Soti nan pwen de vi sa a, itilizasyon XML nan biznis se esansyèlman yon manifestasyon skeuomorphism. Moun konprann lide metafò a nan yon paj enprime nan gwosè limite, epi yo konprann ki jan yo kreye pwosesis biznis ki baze sou dokiman enprime. Si se gid ou a, dokiman ki pa gen limit gwosè fizik ki lizib nan machin nan—dokiman XML—reprezante inovasyon pandan ke yo se yon kontrepati dokiman abitye ak konfòtab. Sa a pa anpeche yo rete yon fason kòrèk ak tro skeuomorphic pou prezante done yo.

Jouk jounen jodi a, sèl chema XML mwen konnen ke mwen ka vrèman rele yon itilizasyon valab nan fòma a se XHTML ak DocBook.

Sous: www.habr.com

Add nouvo kòmantè