जो एक का चयन करने के लिए: XML विशेषता या उप नोड?


15

हम XML के रूप में अपने डेटा बेस से कुछ डेटा निर्यात करना चाहते हैं। उदाहरण के लिए, एक Personकर सकते हैं age, nameऔर कुछ अन्य गुण।

XML फॉर्मेट को परिभाषित करने के लिए हमारे पास दो विकल्प हैं।

विकल्प # 1:

<Persons>
   <Person>
       <Age>16</Age>
       <Name>Richard</Name>
   </Person>
   <Person>
       <Age>34</Age>
       <Name>Eric</Name>
   </Person>
   ...
</Persons>

विकल्प # 2:

<Persons>
   <Person Age="16" Name="Richard"/>
   <Person Age="34" Name="Eric"/>
   ...
</Persons>

तो उप नोड या विशेषता की परिभाषा के बीच अंतर क्या है? और प्रत्येक पसंद का लाभ क्या है?



2
हालांकि यह 2008 में स्टैक ओवरफ्लो पर पूछा गया था , यह एक डिजाइन निर्णय प्रतीत होता है और यहां विषय पर है।
थॉमस ओवेन्स

जवाबों:


9

इसके लिए कोई स्पष्ट प्रलेखन / सर्वोत्तम अभ्यास नहीं है, लेकिन, विकल्प पर विचार करें, जैसा कि आपके पास है:

तत्व पाठ के रूप में:

  • डेटा को एक्सएचटीएमएल आदि के रूप में प्रदर्शित करना आसान हो सकता है, जहां मार्कअप या मेटा-डेटा के बजाय पाठ सामग्री को पाठ माना जाता है।
  • एक से अधिक हो सकते हैं। यदि आपको कई आयु या नाम पंक्तियों के साथ बाल सामग्री की आवश्यकता है, तो विशेषताएँ इसकी अनुमति नहीं देंगी
  • यदि आपको पंक्ति स्तर मेटा डेटा की आवश्यकता है, तो आपके पास इस उद्देश्य के लिए <name>या उसके गुणों का उपयोग करने का विकल्प है<age>

गुण के रूप में:

  • XML अधिक कॉम्पैक्ट है
  • XSLT और DocTypes निर्दिष्ट करने के लिए सरल हैं
  • आपको व्हाट्सएप (पेडिंग, इंडेंटिंग, लाइन ब्रेक), या अन्य वस्तुओं के बारे में चिंता करने की ज़रूरत नहीं है जो PCDATA क्षेत्रों (तत्व पाठ) में पेश किए जा सकते हैं (टिप्पणियाँ, PI के)
  • वहाँ केवल एक ही हो सकता है! आपको कई ageविशेषताओं वाली बाल सामग्री के बारे में चिंता करने की ज़रूरत नहीं है ।

मैंने XML के साथ काम करने में बहुत समय बिताया है, और, मेरी राय में, शुद्ध डेटा संचार के लिए, जब भी संभव हो, विशेषताओं का उपयोग किया जाना चाहिए। यदि एक्सएमएल को प्रस्तुति के लिए उपयोग किए जाने की संभावना है (एक्सएसएलटी, एक्सएचटीएमएल, आदि) तो यह पाठ सामग्री (लेकिन आवश्यक रूप से) के रूप में बेहतर हो सकता है।


2
कुछ भी नहीं: यदि आप XSLT का उपयोग करने जा रहे हैं, तो सचमुच कोई कारण नहीं है कि विशेषताओं का उपयोग न करें। हो सकता है कि अगर आप कुछ XML + CSS चीज़ करने जा रहे हों, या आप किसी और के XSLT का उपयोग करने जा रहे हों ...
DougM

मैंने आपके अच्छे उत्तर को थोड़ा और संतुलित करने के लिए कुछ बिंदु जोड़े हैं, आशा है कि आप सहमत होंगे कि यह इसे बेहतर बनाता है।
डॉक्टर ब्राउन

9

XML डिज़ाइन के सिद्धांत: जब IBM से Uche Ogbuji द्वारा तत्वों बनाम विशेषताओं का उपयोग किया जाता है, तो शायद यह इस मामले पर सबसे अच्छे संसाधनों में से एक है।

निर्णय के मूल में यह है कि गुण 'काम' किए जाते हैं। आप उन्हें बदल नहीं सकते हैं या उन्हें संशोधित नहीं कर सकते हैं या उन्हें घोंसला नहीं बना सकते हैं। वे तत्व के भीतर स्वतंत्र और विशिष्ट हैं (आप एक ही चीज़ के दो नहीं हो सकते हैं)।

यदि इन बाधाओं में से कोई भी ऐसी चीजें हैं जो बदल सकती हैं, तो डेटा को XML का एक बच्चा नोड बनाएं।

आपके उदाहरण में, आपके पास एक व्यक्ति है जिसका नाम और आयु है। मेरा पहला, मध्य और अंतिम नाम है ... और एक उपनाम। और कुछ लोगों के नाम, कई मध्य नाम, या सम्मान हैं - आप जॉन रोनाल्ड रीएल टोल्किन को ऐसी संरचना में कैसे डालेंगे ?

और इसलिए हमारे पास कोई ऐसा व्यक्ति है जिसके पास दो मध्य नाम हैं जिनके पास एक आदेश है। यह स्पष्ट रूप से दिखाना चाहिए कि नहीं, एक विशेषता इसके लिए सबसे अच्छा विकल्प नहीं है।

मैं इसे वर्तमान में नहीं पा सकता हूं, लेकिन उपरोक्त लिंक किए गए दस्तावेज़ में एक बयान है कि नाम एक ऐसी चीज है जिसके लिए "भविष्य के लेख में मार्कअप में लोगों के नामों के उपचार पर विस्तार की उम्मीद है"। यदि किसी के पास इस पर लीड है, तो कृपया एक टिप्पणी छोड़ें या इसे इस स्थान पर संपादित करें।

दूसरी ओर, उम्र कुछ ऐसा है जिसमें एक निश्चित संरचना होती है (मैं एक पूर्णांक के बजाय जन्मदिन का सुझाव देता हूं)। जैसे, इस जानकारी को एक अच्छी तरह से ज्ञात और समझा प्रारूप में प्रस्तुत करना एक विशेषता में समझ में आता है। एक व्यक्ति के पास एक और केवल एक जन्मदिन है और इसके लिए कोई 'आदेश' नहीं है जिसे आप संरक्षित करना चाहते हैं।

Uche Ogbuji एक xml प्रारूप को ठीक से डिजाइन करने में तीन मुख्य सिद्धांतों की पहचान करता है। उपरोक्त लिंक किए गए दस्तावेज़ से निम्नलिखित संक्षिप्त उद्धरण हैं।

  • संरचित जानकारी का सिद्धांत
    यदि जानकारी एक संरचित रूप में व्यक्त की जाती है, खासकर यदि संरचना एक्स्टेंसिबल हो सकती है, तो तत्वों का उपयोग करें। दूसरी ओर: यदि जानकारी को परमाणु टोकन के रूप में व्यक्त किया जाता है, तो विशेषताओं का उपयोग करें
  • पठनीयता का सिद्धांत
    यदि जानकारी को किसी व्यक्ति द्वारा पढ़ने और समझने का इरादा है, तो तत्वों का उपयोग करें। यदि जानकारी किसी मशीन द्वारा सबसे आसानी से समझी और पच जाती है, तो विशेषताओं का उपयोग करें।
  • तत्व / विशेषता बंधन
    का सिद्धांत एक तत्व का उपयोग करें यदि आपको किसी अन्य विशेषता द्वारा इसके मूल्य को संशोधित करने की आवश्यकता है

और इसलिए, नामों को तत्व होना चाहिए - वे संरचित डेटा हैं जो परमाणु टोकन नहीं हैं, उन्हें कंप्यूटर की तुलना में मानव द्वारा पढ़ने की अधिक संभावना है और उन्हें नाम पर ही एक अन्य विशेषता द्वारा संशोधित किया जा सकता है।

तिथियां विशेषताएँ होनी चाहिए - वे डेटा हैं जो एक परमाणु टोकन हैं, वे कंप्यूटर द्वारा मानव की तुलना में पढ़ने की अधिक संभावना रखते हैं (और यदि आवश्यक हो तो मानव के पसंदीदा प्रारूप में बदल जाते हैं), और अंतिम रूप से वे अन्य द्वारा संशोधित होने की संभावना नहीं है। उन पर विशेषताएँ।


2

एक और विचार beyong rolfl वाले खेतों की संख्या है।
छोटी संख्या से अधिक विशेषताएँ एक गड़बड़ हो जाती हैं, और पढ़ना मुश्किल होता है (यह मानकर कि आप चाहते हैं कि आपका xml मानव पठनीय हो, लेकिन एक प्रोग्रामर के रूप में आप कम से कम परीक्षण के लिए ऐसा करना चाहते हैं)।

इसके अलावा, यदि आप समय के साथ किसी एक फ़ील्ड की डेटा संरचना की अपेक्षा करते हैं, तो इसे एक विशेषता न बनाएं।
उदाहरण के लिए, आपका नाम फ़ील्ड। शायद भविष्य में यह बन जाएगा

<name>
  <firstName>George</firstName>
  <lastName>Orwell</lastName>
  <maidenName></maidenName>
  <nickName>Robert</nickName>
</name>

यदि आप ऐसा कुछ होने की उम्मीद करते हैं, तो इसे एक विशेषता बनाने का मतलब बाद में अधिक रीफैक्टरिंग कोड होगा।


इस अच्छे बिंदु के लिए धन्यवाद। और "इसे एक विशेषता बनाने का मतलब बाद में अधिक रीफैक्टरिंग कोड" क्यों है?
ज़िंगडिवु

2

व्यक्तियों के टैग के लिए, व्यक्ति के अधिक टैग होना सामान्य है, यह समझ में आता है, व्यक्तियों की एक सूची में कुछ संस्थाएँ हैं, विशेषताएँ नहीं हैं।

व्यक्ति और उसके घटकों के लिए कहानी अलग है। एक व्यक्ति में एक नाम नहीं होता है, नाम व्यक्ति की एक विशेषता है, इसलिए मैं नए टैग के बजाय विशेषताओं के साथ रहना चाहूंगा। जब आप पते जैसी दोहरावदार बातें करते हैं तो टैग उपयोगी होते हैं, आप इसे विशेषताओं के साथ नहीं कर सकते।

अगर हम HTML संदर्भ में सोचते हैं, तो आपके पास नाम के साथ एक टैग के साथ एक इनपुट नहीं है, क्या आप?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.