Theory
બે ભૂલો જે કશું જ ન લાગે
XML ની file તોડવાની બે સૌથી સહેલી રીતો એને લગભગ સાચી દેખાડે છે. પહેલી, કોઈ એક જ આવરણ વગર ટોચે બે elements બેસાડવાં. બીજી, <name> ના tag ને </Name> થી બંધ કરવું.
બંને ઉપરછલ્લી નજરમાં પસાર થઈ જાય છે અને બંને document ને well-formed રહેવા દેતાં નથી, એટલે Android layout ની ના પાડે છે. એ બે નિયમો પર આવે છે: બરાબર એક જ મૂળ element, અને XML case-sensitive છે. નાના નિયમો, વારંવારના marks.
Theory
એક થડ, ચોક્કસ નામ
વંશવૃક્ષને ટોચે એક જ થડ હોય છે જેમાંથી બધું ફંટાય છે; એક જ વૃક્ષમાં બે અલગ થડ ન હોઈ શકે. XML એવું જ છે: એક મૂળ element બાકીના બધાને સમાવે છે. અને લેબલ passwords જેવાં છે: અક્ષરોનું સ્વરૂપ મહત્ત્વનું છે. Aditi અને aditi જુદાં logins છે; <Event> અને <event> જુદાં tags છે. Tag ને ખોટા સ્વરૂપે બંધ કરો અને XML કહે છે 'એ એ જ નામ નથી'.
Theory
બે નિયમો
- એક જ મૂળ element: XML ના document માં બરાબર એક જ સૌથી બહારનું element હોવું જોઈએ જે બાકીના બધાને વીંટે. ટોચે બે elements હોવાં એ અમાન્ય છે.
- Case sensitivity: tag અને attribute નાં નામ case-sensitive છે.
<Note>,<note>, અને<NOTE>એ ત્રણ જુદાં tags છે. શરૂ થતું tag બરાબર એ જ સ્વરૂપના બંધ થતા tag થી બંધ થવું જોઈએ:<name>...</name>, ક્યારેય</Name>નહીં.
Android માં આ attributes પર પણ કરડે છે: એ android:layout_width છે, android:Layout_Width નહીં.
Practical
સાચું અને ખોટું
<!-- WRONG: two elements at the top, no single root -->
<name>Aditi</name>
<year>2</year>
<!-- RIGHT: one root <registration> wraps both -->
<registration>
<name>Aditi</name>
<year>2</year>
</registration>
<!-- WRONG: case mismatch on open/close -->
<Event>Robotics</event> <!-- <Event> vs </event> -->
<!-- RIGHT: identical case -->
<event>Robotics</event>This example runs in Gri-Learn on the web, where you can edit it and see the output.
Think first
Android નું layout હંમેશા એક જ tag થી કેમ શરૂ થાય છે?
FestConnect નું કોઈ પણ layout ખોલો અને આખું એક જ <LinearLayout>...</LinearLayout> (કે એક ConstraintLayout) ની અંદર છે. એને મૂળ element ના નિયમ સાથે જોડો. શું layout માં TextView અને Button બંને છેક ટોચના સ્તરે હોઈ શકે?
Show the answer
ના. XML ને બરાબર એક જ મૂળ element જોઈતું હોવાથી, layout ની file માં એક જ સૌથી બહારનું પાત્ર હોવું જોઈએ, એટલે LinearLayout (કે ConstraintLayout) બધું વીંટે છે. TextView અને Button બંને ટોચના સ્તરે બેસી શકતાં નથી; એમણે એ એક મૂળ પાત્રની અંદર વસવું પડે. એટલા માટે જ Android નું દરેક layout એક જ layout ના tag થી ખૂલે અને બંધ થાય છે: એ XML નું મૂળ છે, જે એક-મૂળના નિયમને પાળે છે.
Quiz
XML નો કયો ટુકડો well-formed છે?
- <data><a>1</a><b>2</b></data>
- <a>1</a><b>2</b>
- <Name>Aditi</name>
- <data><a>1</a><b>2</data></b>
Show the answer
<data><a>1</a><b>2</b></data>
વિકલ્પ A માં એક જ મૂળ <data> એ <a> અને <b> ને વીંટે છે, બરાબર અંદરોઅંદર ગોઠવાયેલું અને બંધ થયેલું, એટલે એ well-formed છે. B માં ટોચના સ્તરે બે elements છે અને કોઈ મૂળ નથી (અમાન્ય). C માં અક્ષરોનું સ્વરૂપ મળતું નથી: <Name> ને </name> થી બંધ કરાયું છે (અમાન્ય). D ગોઠવણ ઓળંગે છે: </b> પહેલાં </data> (અમાન્ય). ફક્ત A એકસાથે એક-મૂળ, મળતું સ્વરૂપ, અને સ્વચ્છ ગોઠવણ પાળે છે.
Watch out
મૂળ અને સ્વરૂપના ફાંદા
1. બે મૂળ: એક જ આવરણનું element ભૂલી જવું. ભાઈબંધોને હંમેશા એક મૂળમાં (જેમ કે <registration> કે <LinearLayout>) સમાવો.
2. બંધ કરતી વખતે સ્વરૂપ ન મળવું: <name>...</Name> નિષ્ફળ જાય છે. બરાબર એ જ સ્વરૂપ મેળવો.
3. ખોટા સ્વરૂપનાં Android નાં attributes: android:Text ઓળખાશે નહીં; એ android:text છે. XML ની case sensitivity ફક્ત tags પર નહીં, attribute નાં નામ પર પણ લાગુ પડે છે.
Theory
આગળ: document ના બે વિભાગ
તમને હવે ખબર છે કે document ને એક મૂળ હોય છે. પણ મૂળની પહેલાં પણ સામગ્રી હોય છે: declaration અને મરજિયાત ટિપ્પણીઓ. હવે પછીનો પાઠ XML ના document ના બે ભાગનાં નામ આપે છે, એટલે કે prolog નો વિભાગ (declaration અને એના સાથીઓ) અને document element નો વિભાગ (મૂળ અને એની સામગ્રી), અને એ રીતે આખી XML ની file કેવી ગોઠવાય છે એ સુઘડ કરે છે.
Summary
Key takeaways
- XML ના document માં બરાબર એક જ મૂળ element હોવું જોઈએ જે બાકીના બધાને વીંટે; ટોચે બે elements અમાન્ય છે.
- XML case-sensitive છે: <Event> અને <event> જુદાં tags છે.
- શરૂ થતું tag બરાબર એ જ સ્વરૂપના બંધ થતા tag થી બંધ થવું જોઈએ (<name>...</name>, </Name> નહીં).
- એક-મૂળના નિયમને કારણે Android નાં layouts માં એક જ મૂળ પાત્ર (LinearLayout/ConstraintLayout) હોય છે.
- Case sensitivity attribute નાં નામ પર પણ લાગુ પડે છે: android:text, android:Text નહીં.
- Memory hook: એક થડ, ચોક્કસ નામ.