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 డాక్యుమెంట్‌లు-పరిచితమైన మరియు సౌకర్యవంతమైన డాక్యుమెంట్ కౌంటర్‌పార్ట్‌గా ఉన్నప్పుడు ఆవిష్కరణను సూచిస్తాయి. ఇది డేటాను ప్రదర్శించే తప్పు మరియు అతిగా స్కీయోమార్ఫిక్ మార్గంగా మిగిలిపోకుండా నిరోధించదు.

ఈ రోజు వరకు, నాకు తెలిసిన XML స్కీమాలు XHTML మరియు DocBook మాత్రమే.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి