எக்ஸ்எம்எல் எப்போதும் தவறாகப் பயன்படுத்தப்படுகிறது

எக்ஸ்எம்எல் எப்போதும் தவறாகப் பயன்படுத்தப்படுகிறது
XML மொழி 1996 இல் கண்டுபிடிக்கப்பட்டது. அது தோன்றிய உடனேயே, அதன் பயன்பாட்டின் சாத்தியக்கூறுகள் ஏற்கனவே தவறாகப் புரிந்துகொள்ளத் தொடங்கிவிட்டன, மேலும் அவர்கள் அதை மாற்றியமைக்க முயற்சிக்கும் நோக்கங்களுக்காக, இது சிறந்த தேர்வாக இல்லை.

நான் பார்த்த 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 திட்டம், பாலிகாம் ஐபி டெலிபோனி ஃபோன்களுக்கான தானியங்கு வழங்கல் உள்ளமைவு கோப்பு வடிவத்தைப் பெறுகிறது. அத்தகைய கோப்புகளுக்கு 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-ஐ ஒப்பிட்டுப் பார்ப்பதன் மூலம் யாரோ முற்றிலும் வித்தியாசமான ஒன்றைச் செய்கிறார்கள் - இதனால் அவர்களுக்கும் புரியவில்லை என்பதைக் காட்டுகிறது. எக்ஸ்எம்எல் ஒரு ஆவண மார்க்அப் மொழி. JSON என்பது ஒரு கட்டமைக்கப்பட்ட தரவு வடிவமாகும், எனவே அவற்றை ஒன்றோடொன்று ஒப்பிடுவது சூடானதை மென்மையாக ஒப்பிட முயற்சிப்பது போன்றது.

இடையே உள்ள வேறுபாடு கருத்து ஆவணங்கள் மற்றும் தரவு. எக்ஸ்எம்எல்லின் அனலாக் ஆக, இயந்திரம் படிக்கக்கூடிய ஆவணத்தை நிபந்தனையுடன் எடுக்கலாம். இது இயந்திரம் படிக்கக்கூடியதாக இருந்தாலும், இது ஆவணங்களை உருவகமாக குறிக்கிறது, மேலும் இந்த பார்வையில் உண்மையில் PDF ஆவணங்களுடன் ஒப்பிடலாம், அவை பெரும்பாலும் இயந்திரம் படிக்க முடியாது.

எடுத்துக்காட்டாக, எக்ஸ்எம்எல்லில் உறுப்புகளின் வரிசை முக்கியமானது. ஆனால் JSON இல், பொருள்களுக்குள் உள்ள முக்கிய-மதிப்பு ஜோடிகளின் வரிசை அர்த்தமற்றது மற்றும் வரையறுக்கப்படவில்லை. விசை மதிப்பு ஜோடிகளின் வரிசைப்படுத்தப்படாத அகராதியைப் பெற விரும்பினால், அந்தக் கோப்பில் உள்ள உறுப்புகள் தோன்றும் உண்மையான வரிசை முக்கியமில்லை. ஆனால் இந்தத் தரவிலிருந்து நீங்கள் பல்வேறு வகையான தரவுகளை உருவாக்கலாம். ஆவணங்களின், ஏனெனில் ஆவணத்தில் ஒரு குறிப்பிட்ட ஒழுங்கு உள்ளது. உருவகமாக, இது காகிதத்தில் உள்ள ஒரு ஆவணத்திற்கு ஒப்பானது, இருப்பினும் இது ஒரு அச்சு அல்லது PDF கோப்பைப் போலல்லாமல், இயற்பியல் பரிமாணங்களைக் கொண்டிருக்கவில்லை.

சரியான எக்ஸ்எம்எல் அகராதி பிரதிநிதித்துவத்திற்கான எனது எடுத்துக்காட்டு, JSON பிரதிநிதித்துவத்திற்கு மாறாக அகராதியில் உள்ள உறுப்புகளின் வரிசையைக் காட்டுகிறது. இந்த ஆர்டரை என்னால் புறக்கணிக்க முடியாது: ஆவண மாதிரி மற்றும் எக்ஸ்எம்எல் வடிவமைப்பில் இந்த நேரியல் தன்மை உள்ளது. இந்த XML ஆவணத்தை விளக்கும்போது சிலர் ஆர்டரைப் புறக்கணிக்கத் தேர்வு செய்யலாம், ஆனால் இந்தச் சிக்கல் வடிவமைப்பைப் பற்றிய விவாதத்தின் எல்லைக்கு அப்பாற்பட்டது என்பதால் இதைப் பற்றி வாதிடுவதில் அர்த்தமில்லை. மேலும், ஒரு அடுக்கு நடை தாளை இணைத்து உலாவியில் ஆவணத்தை பார்க்கக்கூடியதாக மாற்றினால், அகராதி கூறுகள் ஒரு குறிப்பிட்ட வரிசையில் தோன்றுவதை நீங்கள் காண்பீர்கள்.

வேறு வார்த்தைகளில் கூறுவதானால், ஒரு அகராதியை (கட்டமைக்கப்பட்ட தரவுகளின் ஒரு பகுதி) மாற்றலாம் n பல்வேறு சாத்தியமான ஆவணங்கள் (எக்ஸ்எம்எல், PDF, காகிதம், முதலியன), எங்கே n - அகராதியில் உள்ள உறுப்புகளின் சாத்தியமான சேர்க்கைகளின் எண்ணிக்கை, மற்றும் பிற சாத்தியமான மாறிகளை நாங்கள் இன்னும் கணக்கில் எடுத்துக்கொள்ளவில்லை.

இருப்பினும், நீங்கள் தரவை மட்டுமே மாற்ற விரும்பினால், இயந்திரத்தில் படிக்கக்கூடிய ஆவணத்தைப் பயன்படுத்துவது பயனுள்ளதாக இருக்காது. இது ஒரு மாதிரியைப் பயன்படுத்துகிறது, இந்த விஷயத்தில் அது மிதமிஞ்சியதாக இருக்கும். கூடுதலாக, மூலத் தரவைப் பிரித்தெடுக்க, நீங்கள் ஒரு நிரலை எழுத வேண்டும். XML ஐப் பயன்படுத்துவதில் எந்தப் பிரயோஜனமும் இல்லை, அது சில சமயங்களில் ஆவணமாக வடிவமைக்கப்படாது (சொல்லுங்கள், CSS அல்லது XSLT அல்லது இரண்டையும் பயன்படுத்துதல்), அதுவே கடைப்பிடிக்கப்படுவதற்கான முக்கிய (மட்டும் அல்ல) காரணம் ஆவண மாதிரிக்கு.

மேலும், XML இல் எண்கள் (அல்லது பூலியன் வெளிப்பாடுகள் அல்லது பிற தரவு வகைகள்) பற்றிய கருத்து இல்லை என்பதால், இந்த வடிவத்தில் குறிப்பிடப்படும் அனைத்து எண்களும் கூடுதல் உரையாக மட்டுமே கருதப்படுகின்றன. தரவைப் பிரித்தெடுக்க, ஸ்கீமா மற்றும் வெளிப்படுத்தப்படும் தொடர்புடைய தரவுகளுடன் அதன் தொடர்பு தெரிந்திருக்க வேண்டும். சூழலின் அடிப்படையில், ஒரு குறிப்பிட்ட உரை உறுப்பு எப்போது எண்ணைக் குறிக்கிறது மற்றும் எண்ணாக மாற்றப்பட வேண்டும் என்பதையும் நீங்கள் அறிந்து கொள்ள வேண்டும்.

எனவே, எக்ஸ்எம்எல் ஆவணங்களிலிருந்து தரவைப் பிரித்தெடுக்கும் செயல்முறை ஸ்கேன் செய்யப்பட்ட ஆவணங்களை அங்கீகரிக்கும் செயல்முறையிலிருந்து வேறுபட்டதல்ல, எடுத்துக்காட்டாக, எண் தரவுகளின் பல பக்கங்களை உருவாக்கும் அட்டவணைகள். ஆம், கொள்கையளவில் இதைச் செய்வது சாத்தியம், ஆனால் இது மிகவும் உகந்த வழி அல்ல, கடைசி முயற்சியாக தவிர, வேறு எந்த விருப்பமும் இல்லை. ஒரு ஆவண மாதிரியில் உட்பொதிக்கப்படாத அசல் தரவின் டிஜிட்டல் நகலைக் கண்டுபிடிப்பது ஒரு நியாயமான தீர்வாகும், இது தரவை அதன் குறிப்பிட்ட உரை பிரதிநிதித்துவத்துடன் இணைக்கிறது.

எக்ஸ்எம்எல் வணிகத்தில் பிரபலமானது என்பது எனக்கு ஆச்சரியமளிக்கவில்லை. இதற்கான காரணம் துல்லியமாக ஆவண வடிவம் (காகிதத்தில்) புரிந்து கொள்ளக்கூடியது மற்றும் வணிகத்திற்கு நன்கு தெரிந்திருக்கிறது, மேலும் அவர்கள் பழக்கமான மற்றும் புரிந்துகொள்ளக்கூடிய மாதிரியைத் தொடர்ந்து பயன்படுத்த விரும்புகிறார்கள். அதே காரணத்திற்காக, வணிகங்களும் பெரும்பாலும் இயந்திரத்தில் படிக்கக்கூடிய வடிவங்களுக்குப் பதிலாக PDF ஆவணங்களைப் பயன்படுத்துகின்றன - ஏனெனில் அவை இன்னும் குறிப்பிட்ட உடல் அளவுடன் அச்சிடப்பட்ட பக்கத்தின் கருத்துடன் இணைக்கப்பட்டுள்ளன. இது அச்சிடப்பட வாய்ப்பில்லாத ஆவணங்களுக்கும் பொருந்தும் (உதாரணமாக, பதிவேட்டில் 8000 பக்க PDF). இந்தக் கண்ணோட்டத்தில், வணிகத்தில் எக்ஸ்எம்எல் பயன்பாடு அடிப்படையில் ஸ்கியோமார்பிஸத்தின் வெளிப்பாடாகும். வரையறுக்கப்பட்ட அளவிலான அச்சிடப்பட்ட பக்கத்தின் உருவக யோசனையை மக்கள் புரிந்துகொள்கிறார்கள், மேலும் அச்சிடப்பட்ட ஆவணங்களின் அடிப்படையில் வணிக செயல்முறைகளை எவ்வாறு உருவாக்குவது என்பதை அவர்கள் புரிந்துகொள்கிறார்கள். இது உங்கள் வழிகாட்டியாக இருந்தால், இயந்திரம் படிக்கக்கூடிய உடல் அளவு வரம்புகள் இல்லாத ஆவணங்கள் - XML ​​ஆவணங்கள் - பரிச்சயமான மற்றும் வசதியான ஆவணப் பிரதியாக இருக்கும்போது புதுமையைக் குறிக்கும். இது தவறான மற்றும் மிகையான ஸ்க்யூமோர்பிக் தரவை வழங்குவதைத் தடுக்காது.

இன்றுவரை, XHTML மற்றும் DocBook ஆகிய வடிவமைப்பின் சரியான பயன்பாடு என்று எனக்குத் தெரிந்த XML திட்டங்கள் மட்டுமே.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்