XML demək olar ki, həmişə yanlış istifadəyə verilir

XML demək olar ki, həmişə yanlış istifadəyə verilir
XML dili 1996-cı ildə ixtira edilmişdir. O, özünü göstərməyə başladığı andan etibarən, onun istifadə imkanları yanlış başa düşülməyə başlanmışdır və onun tətbiq edilməyə çalışıldığı məqsədlər üçün ən yaxşı seçim olmamışdır.

Demək olar ki, gördüyüm XML sxemlərinin əksəriyyəti, XML-nin məqsədli və düzgün istifadəsi deyildi. Hətta, belə bir XML istifadəsi, XML-nin nə olduğunu fundamental şəkildə anlamadıqlarını göstərirdi.

XML - bu işarələmə dilidir. Bu, məlumat formatı deyil.. Çox sayda XML sxemində bu fərq açıq şəkildə nəzərə alınmamışdır, XML ilə məlumat formatını qarışdırmışlar ki, bu da özlüyündə XML seçiminin səhv olduğunu bildirir, çünki əslində lazım olan məlumat formatı idi.

Daha dəqiq desək, XML, strukturlaşdırılmış mətn bloklarının və metadatanın annotasiyası üçün ən uyğun bir dildir. Əgər əsas məqsədiniz mətn blokları ilə işləmək deyilsə, XML-in seçimi məntiqli olmayacaq.

Bu baxımdan, XML sxeminin nə qədər yaxşı qurulduğunu yoxlamaq üçün sadə bir üsul var. Gəlin, bir sənəd alaq və onun içindəki bütün etiketləri və atributları silək. Əgər qalan maddədə heç bir məna yoxdursa (və ya boş bir sətir qalıbsa), ya sxeminiz düzgün qurulmayıb, ya da XML istifadə etmək sizin üçün yersiz idi.

Daha sonra ən çox rast gəlinən səhv qurulmuş sxemlərin bəzi nümunələrini təqdim edəcəyəm.

Burada, XML dili ilə sadə "açar-dəyər" lüğətini ifadə etmək üçün əsassız və qəribə (amma olduqca yayılmış) bir cəhd görürük. Bütün etiketləri və atributları silsək, geridə boş bir sətir qalacaq. Əslində bu sənəd, nə qədər absurd görünsə də, boş bir sətirin semantik annotasiyasıdır.

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

Daha pis, burada boş bir sətirin semantik annotasiyası ilə yanaşı, bu dəfə "lüğət" birbaşa kök elementinin atributları ilə kodlanmışdır. Bu səbəbdən, elementdəki atribut adlarının dəsti qeyri-müəyyən və dinamik olur. Həmçinin, burada aydındır ki, müəllifin ifadə etmək istədiyi yalnız sadə "açar-dəyər" sintaksisidir, amma o, tamamilə qəribə bir qərar verərək XML istifadə etməyə çalışmış, sadəcə olaraq atribut sintaksisini istifadə edərək tək boş bir elementi prefiks olaraq istifadə etməyə məcbur etmişdir. Belə sxemlərlə tez-tez rastlaşıram.

John
  London

Bu artıq daha yaxşıdır, amma indi açarlar bir səbəbdən metadatalardır, dəyərlər isə deyil. Mühüm, amma qəribə bir baxış buxarıdır. Əgər bütün etiketləri və atributları silsək, informasiyanın yarısını itirəcəyik.

XML-də doğru lüğət ifadəsi təxminən belə görünəcək:

Name
    John
  
  
    City
    London

Amma insanlar qəribə bir qərar qəbul edərək XML-i məlumat formatı kimi istifadə etməyi və ardından onunla lüğəti düzənləməyi seçdilərsə, başa düşməlidirlər ki, etdikləri yersizdir və rahat deyil. Həmçinin, layihəçilər tez-tez tətbiqlərini yaratmaq üçün XML-i yanlış seçirlər. Lakin daha tez-tez, bir yuxarıda təsvir edilən formalarda XML-i mənasız şəkildə istifadə edərək vəziyyəti daha da pisləşdirirlər, XML-in bunun üçün sadəcə uyğun olmadığını görmədən.

Ən pis XML sxeması? Bu arada, mükafat gördüyüm ən pis XML sxemasına Polycom IP telefonları üçün avtomatik resurs ayrılması konfiqurasiya fayl formatını alır. Belə fayllar TFTP ilə XML fayllarını tələb edir, hansılar ki… Həqiqətən, bu, belə bir fayldan bir parça:

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

Bu kiminsə uğursuz zarafatı deyil. Və bu, mənim təqdimatım deyil:

  • elementlər sadəcə atributların əlaqələndirilməsi üçün prefiks olaraq istifadə olunur, həmin atributların özləri iyerarxik adlara malikdir.
  • Müəyyən bir növ qeydlərin bir neçə instansiyasına dəyərlər əlavə etmək lazım gələrsə, bunun üçün atribut adlarından istifadə edilməlidir, orada indekslər var.
  • Bundan başqa, softkey., atributları elementlərdə yerləşdirmək lazımdır <softkey/>, atributlar isə feature., atributları elementlərdə yerləşdirmək lazımdır və s., baxmayaraq ki, bu tamamilə həddindən artıq görünür və bir ilk baxışda mənasızdır. və s., baxmayaraq ki, bu tamamilə ehtiyac olmadan və ilk baxışda mənasız görünür.
  • Nəhayət, əgər atributun ilk komponentinin həmişə elementin adı ilə eyni olmasına ümid edirdinizsə – heç bir şey belə deyil! Məsələn, atributlar up. elementə bağlı olmalıdır Sənədlər və ya məlumatlar.. Atribut adlarının elementlərə əlavə olunma sırası – təsadüfidir, demək olar ki, tamamilə.

Sənədlər və ya məlumatlar. Zaman-zaman kimdir ki, XML-i JSON ilə müqayisə edərkən tamamilə qəribə şeylər edir – və beləliklə, nə özünü, nə də digərini anlamadığını göstərir. XML – sənəd işarələmə dilidir. JSON isə strukturlaşdırılmış məlumat formatıdır, buna görə də onları biri ilə müqayisə etmək - isti ilə yumşaq müqayisə etməyə bənzəyir.

Bunun anlaşıldığına kömək etmək üçün fərq anlayışıdır sənədlər və məlumatlar. XML-in analoqu kimi şərti olaraq maşın oxuna bilən sənədi götürmək olar. O, maşın tərəfindən oxumağa məqsədli olsa da, metaforik olaraq sənədlərlə bağlıdır və bu nöqteyi-nəzərdən fəal olaraq PDF formatının sənədləri ilə müqayisə oluna bilər ki, bunlar da çox vaxt maşın oxuna bilən deyil.

Məsələn, XML-də elementlərin sırası vacibdir. JSON-da isə obyektlər içərisində "açar-dəyər" cütlərinin sırası əhəmiyyət daşımır və müəyyən edilmir. Əgər siz "açar-dəyər" cütlərindən ibarət sifarişsiz lüğət əldə etmək istəyirsinizsə, bu sənəddə elementlərin izlənmə sırasının əhəmiyyəti yoxdur. Amma siz bu məlumatlardan müxtəlif sənədlər, çünki sənəddə müəyyən bir sıra var. Metaforik olaraq, bu, kağız sənədinə bənzəyir, baxmayaraq ki, onun fiziki ölçüləri yoxdur, çapdan və ya PDF faylından fərqli olaraq.

Mənim XML dilində lüğətin düzgün təqdimatı üçün verilmiş nümunə, lüğətdə elementlərin sırasını göstərir, JSON dilində təqdimatla fərqli olaraq. Mən bu sıralamayı yaddan çıxara bilmirəm: belə xəttlilik sənəd modellərinə və XML formatına xasdır. Kiminsə bu XML sənədini şərh edərkən sıralamayı nəzərə almadığını qərarlaşdıra bilər, lakin bunun mübahisə edilməsi mənasızdır, çünki bu məsələ formatın öz müzakirəsindəndir. Üstəlik, əgər sənədi brauzerdə görünən etmək üçün ona kaskad stil cədvəli qoşulsa, lüğət elementlərinin müəyyən bir sıraya uyğun olduğuna baxmaq mümkündür, və heç bir başqa formada.

Başqa sözlə, lüğət (strukturlaşdırılmış məlumatların fraqmenti) dəyişdirilə bilər n müxtəlif mümkün sənədlərdə (XML, PDF, kağız və s. formatlarında), burada n — lüğətdəki elementlərin mümkün kombinasiyalarının sayı, hələ ki, digər mümkün dəyişkənləri nəzərə almamışıq.

Eyni zamanda, bu da göstərir ki, yalnız məlumatları ötürmək istəsəniz, maşın oxuna bilən sənəd istifadə etmək effektiv olmayacaq. Bu halda modelin istifadə edilməsi artıq olar, o, yalnız mane olacaq. Üstəlik, başlanğıc məlumatlarını çıxarmaq üçün proqram yazmaq lazımdır. XML-dən istifadə etməyin bir mənası yoxdur ki, müəyyən bir mərhələdə sənəd formasında formatlaşdırılmayacaq (məsələn, CSS və ya XSLT ilə, ya da hər ikisi ilə), çünki bu, sənəd modelini qorumaq üçün əsas (əgər tək səbəb deyilsə) səbəbdir.

Bundan əlavə, XML-də ədədlər (və ya boolean ifadələri, ya da digər məlumat növləri) anlayışı olmadığı üçün, bu formatda təqdim olunan hər bir ədəd sadəcə əlavə mətn kimi qəbul edilir. Məlumatların çıxarılması üçün sxemin tanınması və onun müvafiq şəkildə ifadə olunan məlumatlarla əlaqəsi bilinməlidir. Həmçinin, kontekstdən asılı olaraq, hansısa bir yazı elementinin ədəd kimi qəbul edildiyini bilmək və onu ədədə çevirmək lazımdır və s.

Beləliklə, XML sənədlərindən məlumat çıxarma prosesi, məsələn, ədədi məlumatlarla dolu bir neçə səhifə təşkil edən skan edilmiş sənədlərin tanınma prosesindən o qədər də fərqlənmir. Bəli, bunu etmək mümkün olsa da, bu, ən optimal yol deyil — yalnız son çarə olaraq, əgər başqa seçim yoxdursa. Məqbul bir həll, məlumatların müəyyən mətni ilə birgə təqdim edilmədiyi orijinal məlumatların rəqəmsal nüsxəsini tapmaq olacaq.

Buna görə də, XML-in biznesdə populyar olmasından təəccüblənmirəm. Bunun səbəbi isə sənəd formatının (kağızda) biznes üçün anlaşıqlı və tanış olmasıdır və orada tanış olan bu modeli istifadə etməyə davam etmək istəyirlər. Eyni səbəbdən biznesdə daha maşınla işlənən formatlar əvəzinə PDF sənədləri tez-tez istifadə olunur — çünki onlar hələ də müəyyən fiziki ölçüsü olan çap edilmiş səhifə anlayışına bağlıdırlar. Bu, demək olar ki, heç vaxt çap edilməyəcək sənədlər (məsələn, 8000 səhifəlik qeyd sənədinin PDF faylı) üçün də tətbiq olunur. Bu baxımdan, biznesdə XML-in istifadəsi əslində skevomorfizm əlamətidir. İnsanlara məhdud ölçülü çap edilmiş səhifə üçün metaforik ideya tanışdır və onlar çap sənədlərinə əsaslanan biznes proseslərini necə qurmağı başa düşürlər. Əgər bu sizin hədəfinizsə, məhdud fiziki ölçüsü olmayan, maşın oxunaqlı olan XML sənədləri — tanış və rahat bir sənəd analoqu olaraq yenilikdir. Bu, onların məlumatların təqdim edilməsinin qeyri-dəqiq və çox skevomorfik bir yolu olmasına mane olmur.

Bu günə qədər yalnız mənim bildiyim düzgün XML sxemləri XHTML və DocBook-dur.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster