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 දුරකථන දුරකථන සඳහා ස්වයංක්‍රීය ප්‍රතිපාදන වින්‍යාස ගොනු ආකෘතිය ලබා ගනී. එවැනි ගොනු සඳහා TFTP හරහා XML ඉල්ලීම් ගොනු බාගත කිරීම අවශ්‍ය වේ, එය... සාමාන්‍යයෙන්, මෙන්න එවැනි ගොනුවකින් උපුටා ගැනීමකි:

<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 - ශබ්දකෝෂයේ ඇති මූලද්‍රව්‍ය සංයෝජන සංඛ්‍යාව, සහ අපි වෙනත් විය හැකි විචල්‍යයන් තවමත් සැලකිල්ලට ගෙන නොමැත.

කෙසේ වෙතත්, ඔබට දත්ත පමණක් මාරු කිරීමට අවශ්‍ය නම්, මේ සඳහා යන්ත්‍රයෙන් කියවිය හැකි ලේඛනයක් භාවිතා කිරීම ඵලදායක නොවන බව ද එය අනුගමනය කරයි. එය ආකෘතියක් භාවිතා කරයි, මෙම අවස්ථාවේ දී එය අතිරික්තය; එය බාධාවක් වනු ඇත. මීට අමතරව, මූලාශ්ර දත්ත උපුටා ගැනීම සඳහා, ඔබට වැඩසටහනක් ලිවීමට අවශ්ය වනු ඇත. යම් අවස්ථාවක දී ලේඛනයක් ලෙස ෆෝමැට් නොකරන (CSS හෝ XSLT හෝ දෙකම භාවිතා කරමින්) යමක් සඳහා XML භාවිතා කිරීමේ කිසිඳු තේරුමක් නැති තරම්ය. ලේඛන ආකෘතියට.

එපමනක් නොව, XML හි සංඛ්‍යා (හෝ බූලියන් ප්‍රකාශන, හෝ වෙනත් දත්ත වර්ග) පිළිබඳ සංකල්පයක් නොමැති බැවින්, මෙම ආකෘතියෙන් නියෝජනය වන සියලුම සංඛ්‍යා අතිරේක පෙළ පමණක් ලෙස සලකනු ලැබේ. දත්ත උකහා ගැනීම සඳහා, ප්‍රකාශනය වන අනුරූප දත්ත සමඟ ක්‍රමලේඛනය සහ එහි සම්බන්ධතාවය දැනගත යුතුය. සන්දර්භය මත පදනම්ව, කිසියම් පෙළ මූලද්‍රව්‍යයක් සංඛ්‍යාවක් නියෝජනය කරන විට සහ අංකයකට පරිවර්තනය කළ යුත්තේ කවදාද යන්නද ඔබ දැනගත යුතුය.

මේ අනුව, XML ලේඛන වලින් දත්ත උපුටා ගැනීමේ ක්‍රියාවලිය ස්කෑන් කරන ලද ලේඛන හඳුනාගැනීමේ ක්‍රියාවලියට වඩා වෙනස් නොවේ, උදාහරණයක් ලෙස, සංඛ්‍යාත්මක දත්ත බොහෝ පිටු සාදන වගු. ඔව්, මෙය ප්‍රතිපත්තිමය වශයෙන් කළ හැකිය, නමුත් වෙනත් විකල්ප නොමැති විට අවසාන විසඳුම ලෙස හැර මෙය වඩාත් ප්‍රශස්ත ක්‍රමය නොවේ. සාධාරණ විසඳුමක් වන්නේ දත්ත එහි නිශ්චිත පාඨමය නිරූපණය සමඟ ඒකාබද්ධ කරන ලේඛන ආකෘතියක කාවැදී නොමැති මුල් දත්තවල ඩිජිටල් පිටපතක් සොයා ගැනීමයි.

එනම්, XML ව්‍යාපාරයේ ජනප්‍රිය වීම මට කිසිසේත්ම පුදුමයක් නොවේ. මෙයට හේතුව හරියටම ලේඛන ආකෘතිය (කඩදාසි මත) ව්‍යාපාරයට තේරුම් ගත හැකි සහ හුරුපුරුදු වන අතර, ඔවුන්ට හුරුපුරුදු සහ තේරුම්ගත හැකි ආකෘතියක් දිගටම භාවිතා කිරීමට අවශ්‍ය වේ. එම හේතුව නිසාම, ව්‍යාපාර බොහෝ විට යන්ත්‍රයෙන් කියවිය හැකි ආකෘති වෙනුවට PDF ලේඛන භාවිතා කරයි - ඒවා තවමත් නිශ්චිත භෞතික ප්‍රමාණයකින් මුද්‍රිත පිටුවක සංකල්පයට බැඳී ඇති බැවිනි. මෙය කිසිදා මුද්‍රණය කළ නොහැකි ලේඛනවලට පවා අදාළ වේ (උදාහරණයක් ලෙස, රෙජිස්ට්‍රි ලේඛනවල පිටු 8000ක PDF). මෙම දෘෂ්ටි කෝණයෙන්, ව්‍යාපාරයේ XML භාවිතය අත්‍යවශ්‍යයෙන්ම ස්කීයුමෝෆිස්වාදයේ ප්‍රකාශනයකි. සීමිත ප්‍රමාණයේ මුද්‍රිත පිටුවක රූපක අදහස මිනිසුන් තේරුම් ගන්නා අතර මුද්‍රිත ලේඛන මත පදනම්ව ව්‍යාපාර ක්‍රියාවලීන් නිර්මාණය කරන්නේ කෙසේදැයි ඔවුන් තේරුම් ගනී. එය ඔබේ මාර්ගෝපදේශය නම්, යන්ත්‍රයෙන් කියවිය හැකි භෞතික ප්‍රමාණයේ සීමාවන් නොමැති ලේඛන—XML ලේඛන— හුරුපුරුදු සහ සුවපහසු ලේඛන සගයකු වන අතරම නවෝත්පාදනය නියෝජනය කරයි. මෙය ඔවුන් දත්ත ඉදිරිපත් කිරීමේ වැරදි සහ ඕනෑවට වඩා skeuomorphic ආකාරයක් ඉතිරි වීම වළක්වන්නේ නැත.

අද වන විට, මට ආකෘතියේ වලංගු භාවිතයක් ලෙස හැඳින්විය හැකි එකම XML යෝජනා ක්‍රම වන්නේ XHTML සහ DocBook වේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න